comac_desk_app/ThirdpartyLibs/Libs/windows-x86_64/vtk/include/vtkPolyDataPlaneCutter.h

155 lines
5.3 KiB
C
Raw Permalink Normal View History

2024-11-21 11:50:43 +08:00
/*=========================================================================
Program: Visualization Toolkit
Module: vtkPolyDataPlaneCutter.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkPolyDataPlaneCutter
* @brief threaded (high-performance) cutting of a vtkPolyData with a plane
*
* vtkPolyDataPlaneCutter cuts an input vtkPolyData with a plane to produce
* an output vtkPolyData. (Here cutting means slicing through the polydata to
* generates lines of intersection.) The input vtkPolyData must consist of
* convex polygons - vertices, lines, and triangle strips are ignored. (Note:
* use vtkTriangleFilter to triangulate non-convex input polygons if
* necessary. If the input cells are non-convex, then the cutting operation
* will likely produce erroneous results.)
*
* The main difference between this filter and other cutting filters is that
* vtkPolyDataPlaneCutter is tuned for performance on vtkPolyData with convex
* polygonal cells.
*
* @warning
* The method CanFullyProcessDataObject() is available to see whether the
* input data can be successully processed by this filter. Use this method
* sparingly because it can be slow.
*
* @warning
* This class has been threaded with vtkSMPTools. Using TBB or other
* non-sequential type (set in the CMake variable
* VTK_SMP_IMPLEMENTATION_TYPE) may improve performance significantly.
*
* @sa
* vtkPlaneCutter vtkCutter vtkPolyDataPlaneClipper
*/
#ifndef vtkPolyDataPlaneCutter_h
#define vtkPolyDataPlaneCutter_h
#include "vtkFiltersCoreModule.h" // For export macro
#include "vtkPlane.h" // For cutting plane
#include "vtkPolyDataAlgorithm.h"
#include "vtkSmartPointer.h" // For SmartPointer
class VTKFILTERSCORE_EXPORT vtkPolyDataPlaneCutter : public vtkPolyDataAlgorithm
{
public:
///@{
/**
* Standard construction, type, and print methods.
*/
static vtkPolyDataPlaneCutter* New();
vtkTypeMacro(vtkPolyDataPlaneCutter, vtkPolyDataAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@}
///@{
/**
* Specify the plane (an implicit function) to perform the cutting. The
* definition of the plane used to perform the cutting (i.e., its origin
* and normal) is controlled via this instance of vtkPlane.
*/
void SetPlane(vtkPlane*);
vtkGetObjectMacro(Plane, vtkPlane);
///@}
///@{
/**
* Set/Get the computation of normals. The normal generated is simply the
* cut plane normal. The normals are associated with the output points. By
* default the computation of normals is disabled.
*/
vtkSetMacro(ComputeNormals, bool);
vtkGetMacro(ComputeNormals, bool);
vtkBooleanMacro(ComputeNormals, bool);
///@}
///@{
/**
* Indicate whether to interpolate attribute data. By default this is
* enabled. Note that both cell data and point data is interpolated and
* output.
*/
vtkSetMacro(InterpolateAttributes, bool);
vtkGetMacro(InterpolateAttributes, bool);
vtkBooleanMacro(InterpolateAttributes, bool);
///@}
///@{
/**
* Set/get the desired precision for the output points type. See the
* documentation for the vtkAlgorithm::DesiredOutputPrecision enum for an
* explanation of the available precision settings. OutputPointsPrecision
* is DEFAULT_PRECISION by default.
*/
vtkSetMacro(OutputPointsPrecision, int);
vtkGetMacro(OutputPointsPrecision, int);
///@}
/**
* The modified time depends on the delegated cutting plane.
*/
vtkMTimeType GetMTime() override;
///@{
/**
* Specify the number of input cells in a batch, where a batch defines
* a subset of the input cells operated on during threaded
* execution. Generally this is only used for debugging or performance
* studies (since batch size affects the thread workload). By default,
* the batch size is 10,000 cells.
*/
vtkSetClampMacro(BatchSize, unsigned int, 1, VTK_INT_MAX);
vtkGetMacro(BatchSize, unsigned int);
///@}
/**
* This helper method can be used to determine the if the input vtkPolyData
* contains convex polygonal cells, and therefore is suitable for
* processing by this filter. (The name of the method is consistent with
* other filters that perform similar operations.) This method returns true
* when the input contains only polygons (i.e., no verts, lines, or
* triangle strips); and each polygon is convex. It returns false
* otherwise.
*/
static bool CanFullyProcessDataObject(vtkDataObject* object);
protected:
vtkPolyDataPlaneCutter();
~vtkPolyDataPlaneCutter() override;
vtkSmartPointer<vtkPlane> Plane;
bool ComputeNormals;
bool InterpolateAttributes;
int OutputPointsPrecision;
unsigned int BatchSize;
// Pipeline-related methods
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
private:
vtkPolyDataPlaneCutter(const vtkPolyDataPlaneCutter&) = delete;
void operator=(const vtkPolyDataPlaneCutter&) = delete;
};
#endif