Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

vtkPolyDataConnectivityFilter.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkPolyDataConnectivityFilter.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
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   // Usual data generation method
00152   void Execute();
00153 
00154   int ColorRegions; //boolean turns on/off scalar gen for separate regions
00155   int ExtractionMode; //how to extract regions
00156   vtkIdList *Seeds; //id's of points or cells used to seed regions
00157   vtkIdList *SpecifiedRegionIds; //regions specified for extraction
00158   vtkIdTypeArray *RegionSizes; //size (in cells) of each region extracted
00159 
00160   float ClosestPoint[3];
00161 
00162   int ScalarConnectivity;
00163   float ScalarRange[2];
00164 
00165   void TraverseAndMark();
00166 
00167 private:
00168   // used to support algorithm execution
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&);  // Not implemented.
00185   void operator=(const vtkPolyDataConnectivityFilter&);  // Not implemented.
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