00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00074 #ifndef __vtkPolyDataConnectivityFilter_h
00075 #define __vtkPolyDataConnectivityFilter_h
00076
00077 #include "vtkPolyDataToPolyDataFilter.h"
00078
00079 #define VTK_EXTRACT_POINT_SEEDED_REGIONS 1
00080 #define VTK_EXTRACT_CELL_SEEDED_REGIONS 2
00081 #define VTK_EXTRACT_SPECIFIED_REGIONS 3
00082 #define VTK_EXTRACT_LARGEST_REGION 4
00083 #define VTK_EXTRACT_ALL_REGIONS 5
00084 #define VTK_EXTRACT_CLOSEST_POINT_REGION 6
00085
00086 class vtkDataArray;
00087
00088 class VTK_GRAPHICS_EXPORT vtkPolyDataConnectivityFilter : public vtkPolyDataToPolyDataFilter
00089 {
00090 public:
00091 vtkTypeMacro(vtkPolyDataConnectivityFilter,vtkPolyDataToPolyDataFilter);
00092 void PrintSelf(ostream& os, vtkIndent indent);
00093
00095 static vtkPolyDataConnectivityFilter *New();
00096
00098
00101 vtkSetMacro(ScalarConnectivity,int);
00102 vtkGetMacro(ScalarConnectivity,int);
00103 vtkBooleanMacro(ScalarConnectivity,int);
00105
00107
00109 vtkSetVectorMacro(ScalarRange,float,2);
00110 vtkGetVectorMacro(ScalarRange,float,2);
00112
00114
00115 vtkSetClampMacro(ExtractionMode,int,
00116 VTK_EXTRACT_POINT_SEEDED_REGIONS,
00117 VTK_EXTRACT_CLOSEST_POINT_REGION);
00118 vtkGetMacro(ExtractionMode,int);
00119 void SetExtractionModeToPointSeededRegions()
00120 {this->SetExtractionMode(VTK_EXTRACT_POINT_SEEDED_REGIONS);};
00121 void SetExtractionModeToCellSeededRegions()
00122 {this->SetExtractionMode(VTK_EXTRACT_CELL_SEEDED_REGIONS);};
00123 void SetExtractionModeToLargestRegion()
00124 {this->SetExtractionMode(VTK_EXTRACT_LARGEST_REGION);};
00125 void SetExtractionModeToSpecifiedRegions()
00126 {this->SetExtractionMode(VTK_EXTRACT_SPECIFIED_REGIONS);};
00127 void SetExtractionModeToClosestPointRegion()
00128 {this->SetExtractionMode(VTK_EXTRACT_CLOSEST_POINT_REGION);};
00129 void SetExtractionModeToAllRegions()
00130 {this->SetExtractionMode(VTK_EXTRACT_ALL_REGIONS);};
00131 const char *GetExtractionModeAsString();
00133
00135 void InitializeSeedList();
00136
00138 void AddSeed(int id);
00139
00141 void DeleteSeed(int id);
00142
00144 void InitializeSpecifiedRegionList();
00145
00147 void AddSpecifiedRegion(int id);
00148
00150 void DeleteSpecifiedRegion(int id);
00151
00153
00155 vtkSetVector3Macro(ClosestPoint,float);
00156 vtkGetVectorMacro(ClosestPoint,float,3);
00158
00160 int GetNumberOfExtractedRegions();
00161
00163
00164 vtkSetMacro(ColorRegions,int);
00165 vtkGetMacro(ColorRegions,int);
00166 vtkBooleanMacro(ColorRegions,int);
00168
00169 protected:
00170 vtkPolyDataConnectivityFilter();
00171 ~vtkPolyDataConnectivityFilter();
00172
00173
00174 void Execute();
00175
00176 int ColorRegions;
00177 int ExtractionMode;
00178 vtkIdList *Seeds;
00179 vtkIdList *SpecifiedRegionIds;
00180 vtkIdTypeArray *RegionSizes;
00181
00182 float ClosestPoint[3];
00183
00184 int ScalarConnectivity;
00185 float ScalarRange[2];
00186
00187 void TraverseAndMark();
00188
00189 private:
00190
00191 vtkDataArray *CellScalars;
00192 vtkIdList *NeighborCellPointIds;
00193 int *Visited;
00194 vtkIdType *PointMap;
00195 vtkDataArray *NewScalars;
00196 int RegionNumber;
00197 vtkIdType PointNumber;
00198 vtkIdType NumCellsInRegion;
00199 vtkDataArray *InScalars;
00200 vtkPolyData *Mesh;
00201 vtkIdList *Wave;
00202 vtkIdList *Wave2;
00203 vtkIdList *PointIds;
00204 vtkIdList *CellIds;
00205 private:
00206 vtkPolyDataConnectivityFilter(const vtkPolyDataConnectivityFilter&);
00207 void operator=(const vtkPolyDataConnectivityFilter&);
00208 };
00209
00211 inline const char *vtkPolyDataConnectivityFilter::GetExtractionModeAsString(void)
00212 {
00213 if ( this->ExtractionMode == VTK_EXTRACT_POINT_SEEDED_REGIONS )
00214 {
00215 return "ExtractPointSeededRegions";
00216 }
00217 else if ( this->ExtractionMode == VTK_EXTRACT_CELL_SEEDED_REGIONS )
00218 {
00219 return "ExtractCellSeededRegions";
00220 }
00221 else if ( this->ExtractionMode == VTK_EXTRACT_SPECIFIED_REGIONS )
00222 {
00223 return "ExtractSpecifiedRegions";
00224 }
00225 else if ( this->ExtractionMode == VTK_EXTRACT_ALL_REGIONS )
00226 {
00227 return "ExtractAllRegions";
00228 }
00229 else if ( this->ExtractionMode == VTK_EXTRACT_CLOSEST_POINT_REGION )
00230 {
00231 return "ExtractClosestPointRegion";
00232 }
00233 else
00234 {
00235 return "ExtractLargestRegion";
00236 }
00237 }
00238
00239
00240 #endif