VTK
vtkEuclideanClusterExtraction.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkEuclideanClusterExtraction.h
5
6 Copyright (c) Kitware, Inc.
7 All rights reserved.
8 See LICENSE file 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 vtkEuclideanClusterExtraction_h
55#define vtkEuclideanClusterExtraction_h
56
57#include "vtkFiltersPointsModule.h" // For export macro
59
60#define VTK_EXTRACT_POINT_SEEDED_CLUSTERS 1
61#define VTK_EXTRACT_SPECIFIED_CLUSTERS 2
62#define VTK_EXTRACT_LARGEST_CLUSTER 3
63#define VTK_EXTRACT_ALL_CLUSTERS 4
64#define VTK_EXTRACT_CLOSEST_POINT_CLUSTER 5
65
66class vtkDataArray;
67class vtkFloatArray;
68class vtkIdList;
69class vtkIdTypeArray;
71
72
73class VTKFILTERSPOINTS_EXPORT vtkEuclideanClusterExtraction : public vtkPolyDataAlgorithm
74{
75public:
77 void PrintSelf(ostream& os, vtkIndent indent);
78
83
85
88 vtkSetClampMacro(Radius,double,0.0,VTK_FLOAT_MAX);
89 vtkGetMacro(Radius,double);
91
93
99 vtkSetMacro(ScalarConnectivity,bool);
100 vtkGetMacro(ScalarConnectivity,bool);
101 vtkBooleanMacro(ScalarConnectivity,bool);
103
105
108 vtkSetVector2Macro(ScalarRange,double);
109 vtkGetVector2Macro(ScalarRange,double);
111
113
116 vtkSetClampMacro(ExtractionMode,int,
118 vtkGetMacro(ExtractionMode,int);
120 {this->SetExtractionMode(VTK_EXTRACT_POINT_SEEDED_CLUSTERS);};
122 {this->SetExtractionMode(VTK_EXTRACT_LARGEST_CLUSTER);};
124 {this->SetExtractionMode(VTK_EXTRACT_SPECIFIED_CLUSTERS);};
126 {this->SetExtractionMode(VTK_EXTRACT_CLOSEST_POINT_CLUSTER);};
128 {this->SetExtractionMode(VTK_EXTRACT_ALL_CLUSTERS);};
129 const char *GetExtractionModeAsString();
131
136
141
146
151
156
161
163
167 vtkSetVector3Macro(ClosestPoint,double);
168 vtkGetVectorMacro(ClosestPoint,double,3);
170
175
177
180 vtkSetMacro(ColorClusters,bool);
181 vtkGetMacro(ColorClusters,bool);
182 vtkBooleanMacro(ColorClusters,bool);
184
186
192 vtkGetObjectMacro(Locator,vtkAbstractPointLocator);
194
195protected:
198
199 double Radius; //connection radius
200 bool ColorClusters; //boolean turns on/off scalar gen for separate clusters
201 int ExtractionMode; //how to extract clusters
202 vtkIdList *Seeds; //id's of points or cells used to seed clusters
203 vtkIdList *SpecifiedClusterIds; //clusters specified for extraction
204 vtkIdTypeArray *ClusterSizes; //size (in cells) of each cluster extracted
205
206 double ClosestPoint[3];
207
209 double ScalarRange[2];
210
212
213 // Configure the pipeline
217
218 // Internal method for propagating connected waves.
221
222private:
224 void operator=(const vtkEuclideanClusterExtraction&) VTK_DELETE_FUNCTION;
225
226 // used to support algorithm execution
227 vtkFloatArray *NeighborScalars;
228 vtkIdList *NeighborPointIds;
229 char *Visited;
230 vtkIdType *PointMap;
231 vtkIdTypeArray *NewScalars;
232 vtkIdType ClusterNumber;
233 vtkIdType PointNumber;
234 vtkIdType NumPointsInCluster;
235 vtkDataArray *InScalars;
236 vtkIdList *Wave;
237 vtkIdList *Wave2;
238 vtkIdList *PointIds;
239
240};
241
243
247{
249 {
250 return "ExtractPointSeededClusters";
251 }
253 {
254 return "ExtractSpecifiedClusters";
255 }
256 else if ( this->ExtractionMode == VTK_EXTRACT_ALL_CLUSTERS )
257 {
258 return "ExtractAllClusters";
259 }
261 {
262 return "ExtractClosestPointCluster";
263 }
264 else
265 {
266 return "ExtractLargestCluster";
267 }
268}
270
271#endif
abstract class to quickly locate points in 3-space
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:55
perform segmentation based on geometric proximity and optional scalar threshold
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called by the superclass.
void AddSpecifiedCluster(int id)
Add a cluster id to extract.
static vtkEuclideanClusterExtraction * New()
Construct with default extraction mode to extract largest clusters.
void InsertIntoWave(vtkIdList *wave, vtkIdType ptId)
void DeleteSpecifiedCluster(int id)
Delete a cluster id to extract.
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
void TraverseAndMark(vtkPoints *pts)
virtual int FillInputPortInformation(int port, vtkInformation *info)
Fill the input port information objects for this algorithm.
void SetLocator(vtkAbstractPointLocator *locator)
Specify a point locator.
void InitializeSeedList()
Initialize the list of point ids used to seed clusters.
int GetNumberOfExtractedClusters()
Obtain the number of connected clusters.
void AddSeed(vtkIdType id)
Add a seed id (point id).
const char * GetExtractionModeAsString()
Return the method of extraction as a string.
void DeleteSeed(vtkIdType id)
Delete a seed id.a.
void InitializeSpecifiedClusterList()
Initialize the list of cluster ids to extract.
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:42
list of point or cell ids
Definition: vtkIdList.h:37
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:40
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
represent and manipulate 3D points
Definition: vtkPoints.h:40
Superclass for algorithms that produce only polydata as output.
@ info
Definition: vtkX3D.h:376
@ port
Definition: vtkX3D.h:447
#define VTK_EXTRACT_SPECIFIED_CLUSTERS
#define VTK_EXTRACT_LARGEST_CLUSTER
#define VTK_EXTRACT_POINT_SEEDED_CLUSTERS
#define VTK_EXTRACT_ALL_CLUSTERS
#define VTK_EXTRACT_CLOSEST_POINT_CLUSTER
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
int vtkIdType
Definition: vtkType.h:287
#define VTK_FLOAT_MAX
Definition: vtkType.h:161