VTK  9.2.5
vtkHull.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkHull.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
73 #ifndef vtkHull_h
74 #define vtkHull_h
75 
76 #include "vtkFiltersCoreModule.h" // For export macro
77 #include "vtkPointSetAlgorithm.h"
78 #include <vector> //for storing planes
79 
80 class vtkCellArray;
81 class vtkPlanes;
82 class vtkPoints;
83 class vtkPolyData;
84 
85 class VTKFILTERSCORE_EXPORT vtkHull : public vtkPointSetAlgorithm
86 {
87 public:
89 
93  static vtkHull* New();
94  vtkTypeMacro(vtkHull, vtkPointSetAlgorithm);
95  void PrintSelf(ostream& os, vtkIndent indent) override;
97 
101  void RemoveAllPlanes(void);
102 
104 
115  int AddPlane(double A, double B, double C);
116  int AddPlane(double plane[3]);
118 
120 
128  void SetPlane(int i, double A, double B, double C);
129  void SetPlane(int i, double plane[3]);
131 
133 
137  int AddPlane(double A, double B, double C, double D);
138  int AddPlane(double plane[3], double D);
139  void SetPlane(int i, double A, double B, double C, double D);
140  void SetPlane(int i, double plane[3], double D);
142 
147  void SetPlanes(vtkPlanes* planes);
148 
153 
160 
168 
174 
185 
187 
198  void GenerateHull(vtkPolyData* pd, double* bounds);
200  vtkPolyData* pd, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);
202 
203 protected:
204  vtkHull() = default;
205  ~vtkHull() override = default;
206 
207  // The planes - 4 doubles per plane for A, B, C, D.
208  std::vector<double> Planes;
209 
210  // Internal method used to find the position of each plane
212 
213  // Internal method used to create the actual polygons from the set
214  // of planes
215  void ClipPolygonsFromPlanes(vtkPoints* points, vtkCellArray* polys, const double* bounds);
216 
217  // Internal method used to create the initial "big" polygon from the
218  // plane equation. This polygon is clipped by all other planes to form
219  // the final polygon (or it may be clipped entirely)
220  void CreateInitialPolygon(double*, int, const double*);
221 
222  // The method that does it all...
224 
225  // Specify that the output is of type vtkPolyData
227 
228 private:
229  vtkHull(const vtkHull&) = delete;
230  void operator=(const vtkHull&) = delete;
231 };
232 
233 #endif
object to represent cell connectivity
Definition: vtkCellArray.h:296
produce an n-sided convex hull
Definition: vtkHull.h:86
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 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.
void RemoveAllPlanes(void)
Remove all planes from the current set of 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:208
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:119
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
implicit function for convex set of planes
Definition: vtkPlanes.h:162
Superclass for algorithms that produce output of the same type as input.
concrete class for storing a set of points
Definition: vtkPointSet.h:109
represent and manipulate 3D points
Definition: vtkPoints.h:149
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:200
@ points
Definition: vtkX3D.h:452
@ info
Definition: vtkX3D.h:382
@ level
Definition: vtkX3D.h:401
@ port
Definition: vtkX3D.h:453