Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# Graphics/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 =========================================================================*/
    00062 #ifndef __vtkPolyDataConnectivityFilter_h
    00063 #define __vtkPolyDataConnectivityFilter_h
    00064
    00065 #include "vtkPolyDataToPolyDataFilter.h"
    00066
    00067 #define VTK_EXTRACT_POINT_SEEDED_REGIONS 1
    00068 #define VTK_EXTRACT_CELL_SEEDED_REGIONS 2
    00069 #define VTK_EXTRACT_SPECIFIED_REGIONS 3
    00070 #define VTK_EXTRACT_LARGEST_REGION 4
    00071 #define VTK_EXTRACT_ALL_REGIONS 5
    00072 #define VTK_EXTRACT_CLOSEST_POINT_REGION 6
    00073
    00074 class vtkDataArray;
    00075 class vtkIdList;
    00076 class vtkIdTypeArray;
    00077
    00078 class VTK_GRAPHICS_EXPORT vtkPolyDataConnectivityFilter : public vtkPolyDataToPolyDataFilter
    00079 {
    00080 public:
    00081   vtkTypeRevisionMacro(vtkPolyDataConnectivityFilter,vtkPolyDataToPolyDataFilter);
    00082   void PrintSelf(ostream& os, vtkIndent indent);
    00083
    00085   static vtkPolyDataConnectivityFilter *New();
    00086
    00088
    00091   vtkSetMacro(ScalarConnectivity,int);
    00092   vtkGetMacro(ScalarConnectivity,int);
    00093   vtkBooleanMacro(ScalarConnectivity,int);
    00095
    00097
    00099   vtkSetVectorMacro(ScalarRange,float,2);
    00100   vtkGetVectorMacro(ScalarRange,float,2);
    00102
    00104
    00105   vtkSetClampMacro(ExtractionMode,int,
    00106                    VTK_EXTRACT_POINT_SEEDED_REGIONS,
    00107                    VTK_EXTRACT_CLOSEST_POINT_REGION);
    00108   vtkGetMacro(ExtractionMode,int);
    00109   void SetExtractionModeToPointSeededRegions()
    00110     {this->SetExtractionMode(VTK_EXTRACT_POINT_SEEDED_REGIONS);};
    00111   void SetExtractionModeToCellSeededRegions()
    00112     {this->SetExtractionMode(VTK_EXTRACT_CELL_SEEDED_REGIONS);};
    00113   void SetExtractionModeToLargestRegion()
    00114     {this->SetExtractionMode(VTK_EXTRACT_LARGEST_REGION);};
    00115   void SetExtractionModeToSpecifiedRegions()
    00116     {this->SetExtractionMode(VTK_EXTRACT_SPECIFIED_REGIONS);};
    00117   void SetExtractionModeToClosestPointRegion()
    00118     {this->SetExtractionMode(VTK_EXTRACT_CLOSEST_POINT_REGION);};
    00119   void SetExtractionModeToAllRegions()
    00120     {this->SetExtractionMode(VTK_EXTRACT_ALL_REGIONS);};
    00121   const char *GetExtractionModeAsString();
    00123
    00125   void InitializeSeedList();
    00126
    00128   void AddSeed(int id);
    00129
    00131   void DeleteSeed(int id);
    00132
    00134   void InitializeSpecifiedRegionList();
    00135
    00137   void AddSpecifiedRegion(int id);
    00138
    00140   void DeleteSpecifiedRegion(int id);
    00141
    00143
    00145   vtkSetVector3Macro(ClosestPoint,float);
    00146   vtkGetVectorMacro(ClosestPoint,float,3);
    00148
    00150   int GetNumberOfExtractedRegions();
    00151
    00153
    00154   vtkSetMacro(ColorRegions,int);
    00155   vtkGetMacro(ColorRegions,int);
    00156   vtkBooleanMacro(ColorRegions,int);
    00158
    00159 protected:
    00160   vtkPolyDataConnectivityFilter();
    00161   ~vtkPolyDataConnectivityFilter();
    00162
    00163   // Usual data generation method
    00164   void Execute();
    00165
    00166   int ColorRegions; //boolean turns on/off scalar gen for separate regions
    00167   int ExtractionMode; //how to extract regions
    00168   vtkIdList *Seeds; //id's of points or cells used to seed regions
    00169   vtkIdList *SpecifiedRegionIds; //regions specified for extraction
    00170   vtkIdTypeArray *RegionSizes; //size (in cells) of each region extracted
    00171
    00172   float ClosestPoint[3];
    00173
    00174   int ScalarConnectivity;
    00175   float ScalarRange[2];
    00176
    00177   void TraverseAndMark();
    00178
    00179 private:
    00180   // used to support algorithm execution
    00181   vtkDataArray *CellScalars;
    00182   vtkIdList *NeighborCellPointIds;
    00183   int *Visited;
    00184   vtkIdType *PointMap;
    00185   vtkDataArray *NewScalars;
    00186   int RegionNumber;
    00187   vtkIdType PointNumber;
    00188   vtkIdType NumCellsInRegion;
    00189   vtkDataArray *InScalars;
    00190   vtkPolyData *Mesh;
    00191   vtkIdList *Wave;
    00192   vtkIdList *Wave2;
    00193   vtkIdList *PointIds;
    00194   vtkIdList *CellIds;
    00195 private:
    00196   vtkPolyDataConnectivityFilter(const vtkPolyDataConnectivityFilter&);  // Not implemented.
    00197   void operator=(const vtkPolyDataConnectivityFilter&);  // Not implemented.
    00198 };
    00199
    00201 inline const char *vtkPolyDataConnectivityFilter::GetExtractionModeAsString(void)
    00202 {
    00203   if ( this->ExtractionMode == VTK_EXTRACT_POINT_SEEDED_REGIONS )
    00204     {
    00205     return "ExtractPointSeededRegions";
    00206     }
    00207   else if ( this->ExtractionMode == VTK_EXTRACT_CELL_SEEDED_REGIONS )
    00208     {
    00209     return "ExtractCellSeededRegions";
    00210     }
    00211   else if ( this->ExtractionMode == VTK_EXTRACT_SPECIFIED_REGIONS )
    00212     {
    00213     return "ExtractSpecifiedRegions";
    00214     }
    00215   else if ( this->ExtractionMode == VTK_EXTRACT_ALL_REGIONS )
    00216     {
    00217     return "ExtractAllRegions";
    00218     }
    00219   else if ( this->ExtractionMode == VTK_EXTRACT_CLOSEST_POINT_REGION )
    00220     {
    00221     return "ExtractClosestPointRegion";
    00222     }
    00223   else
    00224     {
    00225     return "ExtractLargestRegion";
    00226     }
    00227 }
    00228
    00229
    00230 #endif