VTK  9.2.5
vtkConnectedPointsFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkConnectedPointsFilter.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 =========================================================================*/
54 #ifndef vtkConnectedPointsFilter_h
55 #define vtkConnectedPointsFilter_h
56 
57 #include "vtkFiltersPointsModule.h" // For export macro
58 #include "vtkPolyDataAlgorithm.h"
59 
60 // Make these consistent with the other connectivity filters
61 #define VTK_EXTRACT_POINT_SEEDED_REGIONS 1
62 #define VTK_EXTRACT_SPECIFIED_REGIONS 3
63 #define VTK_EXTRACT_LARGEST_REGION 4
64 #define VTK_EXTRACT_ALL_REGIONS 5
65 #define VTK_EXTRACT_CLOSEST_POINT_REGION 6
66 
68 class vtkDataArray;
69 class vtkFloatArray;
70 class vtkIdList;
71 class vtkIdTypeArray;
72 class vtkIntArray;
73 
74 class VTKFILTERSPOINTS_EXPORT vtkConnectedPointsFilter : public vtkPolyDataAlgorithm
75 {
76 public:
78  void PrintSelf(ostream& os, vtkIndent indent) override;
79 
84 
86 
90  vtkSetClampMacro(Radius, double, 0.0, VTK_DOUBLE_MAX);
91  vtkGetMacro(Radius, double);
93 
95 
98  vtkSetClampMacro(
100  vtkGetMacro(ExtractionMode, int);
102  {
103  this->SetExtractionMode(VTK_EXTRACT_POINT_SEEDED_REGIONS);
104  }
107  {
108  this->SetExtractionMode(VTK_EXTRACT_SPECIFIED_REGIONS);
109  }
111  {
112  this->SetExtractionMode(VTK_EXTRACT_CLOSEST_POINT_REGION);
113  }
114  void SetExtractionModeToAllRegions() { this->SetExtractionMode(VTK_EXTRACT_ALL_REGIONS); }
115  const char* GetExtractionModeAsString();
117 
119 
123  vtkSetVector3Macro(ClosestPoint, double);
124  vtkGetVectorMacro(ClosestPoint, double, 3);
126 
131 
135  void AddSeed(vtkIdType id);
136 
141 
146 
151 
156 
158 
164  vtkSetMacro(AlignedNormals, int);
165  vtkGetMacro(AlignedNormals, int);
166  vtkBooleanMacro(AlignedNormals, int);
168 
170 
175  vtkSetClampMacro(NormalAngle, double, 0.0001, 90.0);
176  vtkGetMacro(NormalAngle, double);
178 
180 
185  vtkSetMacro(ScalarConnectivity, int);
186  vtkGetMacro(ScalarConnectivity, int);
187  vtkBooleanMacro(ScalarConnectivity, int);
189 
191 
194  vtkSetVector2Macro(ScalarRange, double);
195  vtkGetVector2Macro(ScalarRange, double);
197 
203 
205 
211  vtkGetObjectMacro(Locator, vtkAbstractPointLocator);
213 
214 protected:
217 
218  // Usual data generation method
221 
222  // The radius defines the proximal neighborhood of points
223  double Radius;
224 
225  // indicate how to extract regions
227 
228  // id's of points used to seed regions
230 
231  // regions specified for extraction
233 
234  // Seed with a closest point
235  double ClosestPoint[3];
236 
237  // Segment based on nearly aligned normals
239  double NormalAngle;
241 
242  // Support segmentation based on scalar connectivity
244  double ScalarRange[2];
245 
246  // accelerate searching
248 
249  // Wave propagation used to segment points
251  vtkPoints* inPts, vtkDataArray* inScalars, float* normals, vtkIdType* labels);
252 
253 private:
254  // used to support algorithm execution
255  vtkIdType CurrentRegionNumber;
256  vtkIdTypeArray* RegionLabels;
257  vtkIdType NumPointsInRegion;
258  vtkIdTypeArray* RegionSizes;
259  vtkIdList* NeighborPointIds; // avoid repetitive new/delete
260  vtkIdList* Wave;
261  vtkIdList* Wave2;
262 
263 private:
265  void operator=(const vtkConnectedPointsFilter&) = delete;
266 };
267 
272 {
274  {
275  return "ExtractPointSeededRegions";
276  }
278  {
279  return "ExtractSpecifiedRegions";
280  }
281  else if (this->ExtractionMode == VTK_EXTRACT_ALL_REGIONS)
282  {
283  return "ExtractAllRegions";
284  }
286  {
287  return "ExtractClosestPointRegion";
288  }
289  else
290  {
291  return "ExtractLargestRegion";
292  }
293 }
294 
295 #endif
abstract class to quickly locate points in 3-space
extract / segment points based on geometric connectivity
void SetExtractionModeToClosestPointRegion()
Control the extraction of connected regions.
void TraverseAndMark(vtkPoints *inPts, vtkDataArray *inScalars, float *normals, vtkIdType *labels)
vtkAbstractPointLocator * Locator
void SetExtractionModeToPointSeededRegions()
Control the extraction of connected regions.
void SetLocator(vtkAbstractPointLocator *locator)
Specify a point locator.
void InitializeSpecifiedRegionList()
Initialize list of region ids to extract.
void DeleteSeed(vtkIdType id)
Delete a point seed id.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void DeleteSpecifiedRegion(vtkIdType id)
Delete a region id to extract.
int GetNumberOfExtractedRegions()
Obtain the number of connected regions.
void SetExtractionModeToSpecifiedRegions()
Control the extraction of connected regions.
~vtkConnectedPointsFilter() override
void AddSpecifiedRegion(vtkIdType id)
Add a non-negative region id to extract.
static vtkConnectedPointsFilter * New()
Construct with default extraction mode to extract the largest region.
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
void SetExtractionModeToAllRegions()
Control the extraction of connected regions.
void AddSeed(vtkIdType id)
Add a non-negative point seed id.
void SetExtractionModeToLargestRegion()
Control the extraction of connected regions.
const char * GetExtractionModeAsString()
Return the method of extraction as a string.
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
void InitializeSeedList()
Initialize list of point ids ids used to seed regions.
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:165
dynamic, self-adjusting array of float
list of point or cell ids
Definition: vtkIdList.h:143
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:119
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:155
represent and manipulate 3D points
Definition: vtkPoints.h:149
Superclass for algorithms that produce only polydata as output.
@ info
Definition: vtkX3D.h:382
@ port
Definition: vtkX3D.h:453
#define VTK_EXTRACT_CLOSEST_POINT_REGION
#define VTK_EXTRACT_POINT_SEEDED_REGIONS
#define VTK_EXTRACT_ALL_REGIONS
#define VTK_EXTRACT_SPECIFIED_REGIONS
#define VTK_EXTRACT_LARGEST_REGION
int vtkIdType
Definition: vtkType.h:332
#define VTK_DOUBLE_MAX
Definition: vtkType.h:165