00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00055 #ifndef __vtkConnectivityFilter_h
00056 #define __vtkConnectivityFilter_h
00057
00058 #include "vtkUnstructuredGridAlgorithm.h"
00059
00060 #define VTK_EXTRACT_POINT_SEEDED_REGIONS 1
00061 #define VTK_EXTRACT_CELL_SEEDED_REGIONS 2
00062 #define VTK_EXTRACT_SPECIFIED_REGIONS 3
00063 #define VTK_EXTRACT_LARGEST_REGION 4
00064 #define VTK_EXTRACT_ALL_REGIONS 5
00065 #define VTK_EXTRACT_CLOSEST_POINT_REGION 6
00066
00067 class vtkDataArray;
00068 class vtkFloatArray;
00069 class vtkIdList;
00070 class vtkIdTypeArray;
00071 class vtkIntArray;
00072
00073 class VTK_GRAPHICS_EXPORT vtkConnectivityFilter : public vtkUnstructuredGridAlgorithm
00074 {
00075 public:
00076 vtkTypeRevisionMacro(vtkConnectivityFilter,vtkUnstructuredGridAlgorithm);
00077 void PrintSelf(ostream& os, vtkIndent indent);
00078
00080 static vtkConnectivityFilter *New();
00081
00083
00086 vtkSetMacro(ScalarConnectivity,int);
00087 vtkGetMacro(ScalarConnectivity,int);
00088 vtkBooleanMacro(ScalarConnectivity,int);
00090
00092
00094 vtkSetVector2Macro(ScalarRange,double);
00095 vtkGetVector2Macro(ScalarRange,double);
00097
00099
00100 vtkSetClampMacro(ExtractionMode,int,
00101 VTK_EXTRACT_POINT_SEEDED_REGIONS,VTK_EXTRACT_CLOSEST_POINT_REGION);
00102 vtkGetMacro(ExtractionMode,int);
00103 void SetExtractionModeToPointSeededRegions()
00104 {this->SetExtractionMode(VTK_EXTRACT_POINT_SEEDED_REGIONS);};
00105 void SetExtractionModeToCellSeededRegions()
00106 {this->SetExtractionMode(VTK_EXTRACT_CELL_SEEDED_REGIONS);};
00107 void SetExtractionModeToLargestRegion()
00108 {this->SetExtractionMode(VTK_EXTRACT_LARGEST_REGION);};
00109 void SetExtractionModeToSpecifiedRegions()
00110 {this->SetExtractionMode(VTK_EXTRACT_SPECIFIED_REGIONS);};
00111 void SetExtractionModeToClosestPointRegion()
00112 {this->SetExtractionMode(VTK_EXTRACT_CLOSEST_POINT_REGION);};
00113 void SetExtractionModeToAllRegions()
00114 {this->SetExtractionMode(VTK_EXTRACT_ALL_REGIONS);};
00115 const char *GetExtractionModeAsString();
00117
00119 void InitializeSeedList();
00120
00122 void AddSeed(vtkIdType id);
00123
00125 void DeleteSeed(vtkIdType id);
00126
00128 void InitializeSpecifiedRegionList();
00129
00131 void AddSpecifiedRegion(int id);
00132
00134 void DeleteSpecifiedRegion(int id);
00135
00137
00139 vtkSetVector3Macro(ClosestPoint,double);
00140 vtkGetVectorMacro(ClosestPoint,double,3);
00142
00144 int GetNumberOfExtractedRegions();
00145
00147
00148 vtkSetMacro(ColorRegions,int);
00149 vtkGetMacro(ColorRegions,int);
00150 vtkBooleanMacro(ColorRegions,int);
00152
00153 protected:
00154 vtkConnectivityFilter();
00155 ~vtkConnectivityFilter();
00156
00157
00158 virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00159 virtual int FillInputPortInformation(int port, vtkInformation *info);
00160
00161 int ColorRegions;
00162 int ExtractionMode;
00163 vtkIdList *Seeds;
00164 vtkIdList *SpecifiedRegionIds;
00165 vtkIdTypeArray *RegionSizes;
00166
00167 double ClosestPoint[3];
00168
00169 int ScalarConnectivity;
00170 double ScalarRange[2];
00171
00172 void TraverseAndMark(vtkDataSet *input);
00173
00174 private:
00175
00176 vtkFloatArray *CellScalars;
00177 vtkIdList *NeighborCellPointIds;
00178 vtkIdType *Visited;
00179 vtkIdType *PointMap;
00180 vtkIdTypeArray *NewScalars;
00181 vtkIdTypeArray *NewCellScalars;
00182 vtkIdType RegionNumber;
00183 vtkIdType PointNumber;
00184 vtkIdType NumCellsInRegion;
00185 vtkDataArray *InScalars;
00186 vtkIdList *Wave;
00187 vtkIdList *Wave2;
00188 vtkIdList *PointIds;
00189 vtkIdList *CellIds;
00190 private:
00191 vtkConnectivityFilter(const vtkConnectivityFilter&);
00192 void operator=(const vtkConnectivityFilter&);
00193 };
00194
00196 inline const char *vtkConnectivityFilter::GetExtractionModeAsString(void)
00197 {
00198 if ( this->ExtractionMode == VTK_EXTRACT_POINT_SEEDED_REGIONS )
00199 {
00200 return "ExtractPointSeededRegions";
00201 }
00202 else if ( this->ExtractionMode == VTK_EXTRACT_CELL_SEEDED_REGIONS )
00203 {
00204 return "ExtractCellSeededRegions";
00205 }
00206 else if ( this->ExtractionMode == VTK_EXTRACT_SPECIFIED_REGIONS )
00207 {
00208 return "ExtractSpecifiedRegions";
00209 }
00210 else if ( this->ExtractionMode == VTK_EXTRACT_ALL_REGIONS )
00211 {
00212 return "ExtractAllRegions";
00213 }
00214 else if ( this->ExtractionMode == VTK_EXTRACT_CLOSEST_POINT_REGION )
00215 {
00216 return "ExtractClosestPointRegion";
00217 }
00218 else
00219 {
00220 return "ExtractLargestRegion";
00221 }
00222 }
00223
00224 #endif
00225
00226