VTK
dox/Graphics/vtkPolyDataConnectivityFilter.h
Go to the documentation of this file.
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