VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkPolyDataConnectivityFilter.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00052 #ifndef __vtkPolyDataConnectivityFilter_h 00053 #define __vtkPolyDataConnectivityFilter_h 00054 00055 #include "vtkPolyDataAlgorithm.h" 00056 00057 #define VTK_EXTRACT_POINT_SEEDED_REGIONS 1 00058 #define VTK_EXTRACT_CELL_SEEDED_REGIONS 2 00059 #define VTK_EXTRACT_SPECIFIED_REGIONS 3 00060 #define VTK_EXTRACT_LARGEST_REGION 4 00061 #define VTK_EXTRACT_ALL_REGIONS 5 00062 #define VTK_EXTRACT_CLOSEST_POINT_REGION 6 00063 00064 class vtkDataArray; 00065 class vtkIdList; 00066 class vtkIdTypeArray; 00067 00068 class VTK_GRAPHICS_EXPORT vtkPolyDataConnectivityFilter : public vtkPolyDataAlgorithm 00069 { 00070 public: 00071 vtkTypeMacro(vtkPolyDataConnectivityFilter,vtkPolyDataAlgorithm); 00072 void PrintSelf(ostream& os, vtkIndent indent); 00073 00075 00076 vtkGetObjectMacro(RegionSizes,vtkIdTypeArray); 00078 00080 static vtkPolyDataConnectivityFilter *New(); 00081 00083 00086 vtkSetMacro(ScalarConnectivity,int); 00087 vtkGetMacro(ScalarConnectivity,int); 00088 vtkBooleanMacro(ScalarConnectivity,int); 00090 00092 00099 vtkSetMacro(FullScalarConnectivity,int); 00100 vtkGetMacro(FullScalarConnectivity,int); 00101 vtkBooleanMacro(FullScalarConnectivity,int); 00103 00105 00107 vtkSetVector2Macro(ScalarRange,double); 00108 vtkGetVector2Macro(ScalarRange,double); 00110 00112 00113 vtkSetClampMacro(ExtractionMode,int, 00114 VTK_EXTRACT_POINT_SEEDED_REGIONS, 00115 VTK_EXTRACT_CLOSEST_POINT_REGION); 00116 vtkGetMacro(ExtractionMode,int); 00117 void SetExtractionModeToPointSeededRegions() 00118 {this->SetExtractionMode(VTK_EXTRACT_POINT_SEEDED_REGIONS);}; 00119 void SetExtractionModeToCellSeededRegions() 00120 {this->SetExtractionMode(VTK_EXTRACT_CELL_SEEDED_REGIONS);}; 00121 void SetExtractionModeToLargestRegion() 00122 {this->SetExtractionMode(VTK_EXTRACT_LARGEST_REGION);}; 00123 void SetExtractionModeToSpecifiedRegions() 00124 {this->SetExtractionMode(VTK_EXTRACT_SPECIFIED_REGIONS);}; 00125 void SetExtractionModeToClosestPointRegion() 00126 {this->SetExtractionMode(VTK_EXTRACT_CLOSEST_POINT_REGION);}; 00127 void SetExtractionModeToAllRegions() 00128 {this->SetExtractionMode(VTK_EXTRACT_ALL_REGIONS);}; 00129 const char *GetExtractionModeAsString(); 00131 00133 void InitializeSeedList(); 00134 00136 void AddSeed(int id); 00137 00139 void DeleteSeed(int id); 00140 00142 void InitializeSpecifiedRegionList(); 00143 00145 void AddSpecifiedRegion(int id); 00146 00148 void DeleteSpecifiedRegion(int id); 00149 00151 00153 vtkSetVector3Macro(ClosestPoint,double); 00154 vtkGetVectorMacro(ClosestPoint,double,3); 00156 00158 int GetNumberOfExtractedRegions(); 00159 00161 00162 vtkSetMacro(ColorRegions,int); 00163 vtkGetMacro(ColorRegions,int); 00164 vtkBooleanMacro(ColorRegions,int); 00166 00168 00170 vtkSetMacro( MarkVisitedPointIds, int ); 00171 vtkGetMacro( MarkVisitedPointIds, int ); 00172 vtkBooleanMacro( MarkVisitedPointIds, int ); 00174 00176 00178 vtkGetObjectMacro( VisitedPointIds, vtkIdList ); 00180 00181 protected: 00182 vtkPolyDataConnectivityFilter(); 00183 ~vtkPolyDataConnectivityFilter(); 00184 00185 // Usual data generation method 00186 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); 00187 00188 int ColorRegions; //boolean turns on/off scalar gen for separate regions 00189 int ExtractionMode; //how to extract regions 00190 vtkIdList *Seeds; //id's of points or cells used to seed regions 00191 vtkIdList *SpecifiedRegionIds; //regions specified for extraction 00192 vtkIdTypeArray *RegionSizes; //size (in cells) of each region extracted 00193 00194 double ClosestPoint[3]; 00195 00196 int ScalarConnectivity; 00197 int FullScalarConnectivity; 00198 00199 // Does this cell qualify as being scalar connected ? 00200 int IsScalarConnected( vtkIdType cellId ); 00201 00202 double ScalarRange[2]; 00203 00204 void TraverseAndMark(); 00205 00206 // used to support algorithm execution 00207 vtkDataArray *CellScalars; 00208 vtkIdList *NeighborCellPointIds; 00209 vtkIdType *Visited; 00210 vtkIdType *PointMap; 00211 vtkDataArray *NewScalars; 00212 vtkIdType RegionNumber; 00213 vtkIdType PointNumber; 00214 vtkIdType NumCellsInRegion; 00215 vtkDataArray *InScalars; 00216 vtkPolyData *Mesh; 00217 vtkIdList *Wave; 00218 vtkIdList *Wave2; 00219 vtkIdList *PointIds; 00220 vtkIdList *CellIds; 00221 vtkIdList *VisitedPointIds; 00222 00223 int MarkVisitedPointIds; 00224 00225 private: 00226 vtkPolyDataConnectivityFilter(const vtkPolyDataConnectivityFilter&); // Not implemented. 00227 void operator=(const vtkPolyDataConnectivityFilter&); // Not implemented. 00228 }; 00229 00231 00232 inline const char *vtkPolyDataConnectivityFilter::GetExtractionModeAsString(void) 00233 { 00234 if ( this->ExtractionMode == VTK_EXTRACT_POINT_SEEDED_REGIONS ) 00235 { 00236 return "ExtractPointSeededRegions"; 00237 } 00238 else if ( this->ExtractionMode == VTK_EXTRACT_CELL_SEEDED_REGIONS ) 00239 { 00240 return "ExtractCellSeededRegions"; 00241 } 00242 else if ( this->ExtractionMode == VTK_EXTRACT_SPECIFIED_REGIONS ) 00243 { 00244 return "ExtractSpecifiedRegions"; 00245 } 00246 else if ( this->ExtractionMode == VTK_EXTRACT_ALL_REGIONS ) 00247 { 00248 return "ExtractAllRegions"; 00249 } 00250 else if ( this->ExtractionMode == VTK_EXTRACT_CLOSEST_POINT_REGION ) 00251 { 00252 return "ExtractClosestPointRegion"; 00253 } 00254 else 00255 { 00256 return "ExtractLargestRegion"; 00257 } 00258 } 00260 00261 00262 #endif