00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00050
#ifndef __vtkPolyDataConnectivityFilter_h
00051
#define __vtkPolyDataConnectivityFilter_h
00052
00053
#include "vtkPolyDataToPolyDataFilter.h"
00054
00055 #define VTK_EXTRACT_POINT_SEEDED_REGIONS 1
00056 #define VTK_EXTRACT_CELL_SEEDED_REGIONS 2
00057 #define VTK_EXTRACT_SPECIFIED_REGIONS 3
00058 #define VTK_EXTRACT_LARGEST_REGION 4
00059 #define VTK_EXTRACT_ALL_REGIONS 5
00060 #define VTK_EXTRACT_CLOSEST_POINT_REGION 6
00061
00062
class vtkDataArray;
00063
class vtkIdList;
00064
class vtkIdTypeArray;
00065
00066 class VTK_GRAPHICS_EXPORT vtkPolyDataConnectivityFilter :
public vtkPolyDataToPolyDataFilter
00067 {
00068
public:
00069 vtkTypeRevisionMacro(vtkPolyDataConnectivityFilter,
vtkPolyDataToPolyDataFilter);
00070
void PrintSelf(ostream& os,
vtkIndent indent);
00071
00073
static vtkPolyDataConnectivityFilter *
New();
00074
00076
00079 vtkSetMacro(ScalarConnectivity,
int);
00080 vtkGetMacro(ScalarConnectivity,
int);
00081 vtkBooleanMacro(ScalarConnectivity,
int);
00083
00085
00087 vtkSetVectorMacro(ScalarRange,
float,2);
00088 vtkGetVectorMacro(ScalarRange,
float,2);
00090
00092
00093 vtkSetClampMacro(ExtractionMode,
int,
00094 VTK_EXTRACT_POINT_SEEDED_REGIONS,
00095 VTK_EXTRACT_CLOSEST_POINT_REGION);
00096 vtkGetMacro(ExtractionMode,
int);
00097 void SetExtractionModeToPointSeededRegions()
00098 {this->SetExtractionMode(
VTK_EXTRACT_POINT_SEEDED_REGIONS);};
00099 void SetExtractionModeToCellSeededRegions()
00100 {this->SetExtractionMode(
VTK_EXTRACT_CELL_SEEDED_REGIONS);};
00101 void SetExtractionModeToLargestRegion()
00102 {this->SetExtractionMode(
VTK_EXTRACT_LARGEST_REGION);};
00103 void SetExtractionModeToSpecifiedRegions()
00104 {this->SetExtractionMode(
VTK_EXTRACT_SPECIFIED_REGIONS);};
00105 void SetExtractionModeToClosestPointRegion()
00106 {this->SetExtractionMode(
VTK_EXTRACT_CLOSEST_POINT_REGION);};
00107 void SetExtractionModeToAllRegions()
00108 {this->SetExtractionMode(
VTK_EXTRACT_ALL_REGIONS);};
00109
const char *GetExtractionModeAsString();
00111
00113
void InitializeSeedList();
00114
00116
void AddSeed(
int id);
00117
00119
void DeleteSeed(
int id);
00120
00122
void InitializeSpecifiedRegionList();
00123
00125
void AddSpecifiedRegion(
int id);
00126
00128
void DeleteSpecifiedRegion(
int id);
00129
00131
00133 vtkSetVector3Macro(ClosestPoint,
float);
00134 vtkGetVectorMacro(ClosestPoint,
float,3);
00136
00138
int GetNumberOfExtractedRegions();
00139
00141
00142 vtkSetMacro(ColorRegions,
int);
00143 vtkGetMacro(ColorRegions,
int);
00144 vtkBooleanMacro(ColorRegions,
int);
00146
00147
protected:
00148 vtkPolyDataConnectivityFilter();
00149 ~vtkPolyDataConnectivityFilter();
00150
00151
00152
void Execute();
00153
00154 int ColorRegions;
00155 int ExtractionMode;
00156 vtkIdList *Seeds;
00157 vtkIdList *SpecifiedRegionIds;
00158 vtkIdTypeArray *RegionSizes;
00159
00160 float ClosestPoint[3];
00161
00162 int ScalarConnectivity;
00163 float ScalarRange[2];
00164
00165
void TraverseAndMark();
00166
00167
private:
00168
00169
vtkDataArray *CellScalars;
00170
vtkIdList *NeighborCellPointIds;
00171
int *Visited;
00172
vtkIdType *PointMap;
00173
vtkDataArray *NewScalars;
00174
int RegionNumber;
00175
vtkIdType PointNumber;
00176
vtkIdType NumCellsInRegion;
00177
vtkDataArray *InScalars;
00178
vtkPolyData *Mesh;
00179
vtkIdList *Wave;
00180
vtkIdList *Wave2;
00181
vtkIdList *PointIds;
00182
vtkIdList *CellIds;
00183
private:
00184 vtkPolyDataConnectivityFilter(
const vtkPolyDataConnectivityFilter&);
00185
void operator=(
const vtkPolyDataConnectivityFilter&);
00186 };
00187
00189 inline const char *
vtkPolyDataConnectivityFilter::GetExtractionModeAsString(
void)
00190 {
00191
if ( this->
ExtractionMode ==
VTK_EXTRACT_POINT_SEEDED_REGIONS )
00192 {
00193
return "ExtractPointSeededRegions";
00194 }
00195
else if ( this->
ExtractionMode ==
VTK_EXTRACT_CELL_SEEDED_REGIONS )
00196 {
00197
return "ExtractCellSeededRegions";
00198 }
00199
else if ( this->
ExtractionMode ==
VTK_EXTRACT_SPECIFIED_REGIONS )
00200 {
00201
return "ExtractSpecifiedRegions";
00202 }
00203
else if ( this->
ExtractionMode ==
VTK_EXTRACT_ALL_REGIONS )
00204 {
00205
return "ExtractAllRegions";
00206 }
00207
else if ( this->
ExtractionMode ==
VTK_EXTRACT_CLOSEST_POINT_REGION )
00208 {
00209
return "ExtractClosestPointRegion";
00210 }
00211
else
00212 {
00213
return "ExtractLargestRegion";
00214 }
00215 }
00216
00217
00218
#endif