VTK  9.3.0
vtkHull.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
41 #ifndef vtkHull_h
42 #define vtkHull_h
43 
44 #include "vtkFiltersCoreModule.h" // For export macro
45 #include "vtkPointSetAlgorithm.h"
46 #include <vector> //for storing planes
47 
48 VTK_ABI_NAMESPACE_BEGIN
49 class vtkCellArray;
50 class vtkPlanes;
51 class vtkPoints;
52 class vtkPolyData;
53 
54 class VTKFILTERSCORE_EXPORT vtkHull : public vtkPointSetAlgorithm
55 {
56 public:
58 
62  static vtkHull* New();
63  vtkTypeMacro(vtkHull, vtkPointSetAlgorithm);
64  void PrintSelf(ostream& os, vtkIndent indent) override;
66 
71 
73 
84  int AddPlane(double A, double B, double C);
85  int AddPlane(double plane[3]);
87 
89 
97  void SetPlane(int i, double A, double B, double C);
98  void SetPlane(int i, double plane[3]);
100 
102 
106  int AddPlane(double A, double B, double C, double D);
107  int AddPlane(double plane[3], double D);
108  void SetPlane(int i, double A, double B, double C, double D);
109  void SetPlane(int i, double plane[3], double D);
111 
116  void SetPlanes(vtkPlanes* planes);
117 
122 
129 
137 
143 
154 
156 
167  void GenerateHull(vtkPolyData* pd, double* bounds);
169  vtkPolyData* pd, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);
171 
172 protected:
173  vtkHull() = default;
174  ~vtkHull() override = default;
175 
176  // The planes - 4 doubles per plane for A, B, C, D.
177  std::vector<double> Planes;
178 
179  // Internal method used to find the position of each plane
181 
182  // Internal method used to create the actual polygons from the set
183  // of planes
184  void ClipPolygonsFromPlanes(vtkPoints* points, vtkCellArray* polys, const double* bounds);
185 
186  // Internal method used to create the initial "big" polygon from the
187  // plane equation. This polygon is clipped by all other planes to form
188  // the final polygon (or it may be clipped entirely)
189  void CreateInitialPolygon(double*, int, const double*);
190 
191  // The method that does it all...
193 
194  // Specify that the output is of type vtkPolyData
196 
197 private:
198  vtkHull(const vtkHull&) = delete;
199  void operator=(const vtkHull&) = delete;
200 };
201 
202 VTK_ABI_NAMESPACE_END
203 #endif
object to represent cell connectivity
Definition: vtkCellArray.h:185
produce an n-sided convex hull
Definition: vtkHull.h:55
void AddCubeVertexPlanes()
Add the 8 planes that represent the vertices of a cube - the combination of the three face planes con...
int GetNumberOfPlanes()
Get the number of planes in the current set of planes.
void AddCubeEdgePlanes()
Add the 12 planes that represent the edges of a cube - halfway between the two connecting face planes...
void RemoveAllPlanes()
Remove all planes from the current set of planes.
void ClipPolygonsFromPlanes(vtkPoints *points, vtkCellArray *polys, const double *bounds)
void SetPlane(int i, double plane[3], double D)
Variations of AddPlane()/SetPlane() that allow D to be set.
int FillOutputPortInformation(int port, vtkInformation *info) override
Fill the output port information objects for this algorithm.
void SetPlane(int i, double plane[3])
Set the normal values for plane i.
int AddPlane(double plane[3], double D)
Variations of AddPlane()/SetPlane() that allow D to be set.
int AddPlane(double plane[3])
Add a plane to the current set of planes.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods to instantiate, obtain type information, and print information about the class.
~vtkHull() override=default
void AddRecursiveSpherePlanes(int level)
Add the planes that represent the normals of the vertices of a polygonal sphere formed by recursively...
void ComputePlaneDistances(vtkPointSet *input)
vtkHull()=default
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
void CreateInitialPolygon(double *, int, const double *)
void GenerateHull(vtkPolyData *pd, double *bounds)
A special method that is used to generate a polyhedron directly from a set of n planes.
void GenerateHull(vtkPolyData *pd, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
A special method that is used to generate a polyhedron directly from a set of n planes.
static vtkHull * New()
Standard methods to instantiate, obtain type information, and print information about the class.
int AddPlane(double A, double B, double C)
Add a plane to the current set of planes.
void SetPlane(int i, double A, double B, double C, double D)
Variations of AddPlane()/SetPlane() that allow D to be set.
int AddPlane(double A, double B, double C, double D)
Variations of AddPlane()/SetPlane() that allow D to be set.
void AddCubeFacePlanes()
Add the six planes that make up the faces of a cube - (1,0,0), (-1, 0, 0), (0,1,0),...
void SetPlanes(vtkPlanes *planes)
Set all the planes at once using a vtkPlanes implicit function.
std::vector< double > Planes
Definition: vtkHull.h:177
void SetPlane(int i, double A, double B, double C)
Set the normal values for plane i.
a simple class to control print indentation
Definition: vtkIndent.h:38
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
implicit function for convex set of planes
Definition: vtkPlanes.h:51
Superclass for algorithms that produce output of the same type as input.
concrete class for storing a set of points
Definition: vtkPointSet.h:68
represent and manipulate 3D points
Definition: vtkPoints.h:38
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:89
@ points
Definition: vtkX3D.h:446
@ info
Definition: vtkX3D.h:376
@ level
Definition: vtkX3D.h:395
@ port
Definition: vtkX3D.h:447