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
58 #include "vtkPolyDataAlgorithm.h"
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 
66 class vtkDataArray;
67 class vtkFloatArray;
68 class vtkIdList;
69 class vtkIdTypeArray;
71 
72 
73 class VTKFILTERSPOINTS_EXPORT vtkEuclideanClusterExtraction : public vtkPolyDataAlgorithm
74 {
75 public:
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 
140  void AddSeed(vtkIdType id);
141 
146 
151 
155  void AddSpecifiedCluster(int id);
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 
195 protected:
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.
219  void InsertIntoWave(vtkIdList *wave, vtkIdType ptId);
221 
222 private:
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.
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.
static vtkEuclideanClusterExtraction * New()
Construct with default extraction mode to extract largest clusters.
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