00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00048 #ifndef __vtkHyperOctreeCutter_h
00049 #define __vtkHyperOctreeCutter_h
00050
00051 #include "vtkPolyDataAlgorithm.h"
00052
00053 #include "vtkContourValues.h"
00054
00055 #include "vtkCutter.h"
00056
00057
00058
00059
00060
00061
00062
00063 class vtkImplicitFunction;
00064 class vtkIncrementalPointLocator;
00065 class vtkHyperOctree;
00066 class vtkOrderedTriangulator;
00067 class vtkHyperOctreeCursor;
00068 class vtkTetra;
00069 class vtkDataSetAttributes;
00070 class vtkHyperOctreeClipCutPointsGrabber;
00071
00072 class VTK_GRAPHICS_EXPORT vtkHyperOctreeCutter : public vtkPolyDataAlgorithm
00073 {
00074 public:
00075 vtkTypeMacro(vtkHyperOctreeCutter,vtkPolyDataAlgorithm);
00076 void PrintSelf(ostream& os, vtkIndent indent);
00077
00080 static vtkHyperOctreeCutter *New();
00081
00083
00085 void SetValue(int i, double value)
00086 {this->ContourValues->SetValue(i,value);}
00088
00090
00091 double GetValue(int i)
00092 {return this->ContourValues->GetValue(i);}
00094
00096
00098 double *GetValues()
00099 {return this->ContourValues->GetValues();}
00101
00103
00106 void GetValues(double *contourValues)
00107 {this->ContourValues->GetValues(contourValues);}
00109
00111
00114 void SetNumberOfContours(int number)
00115 {this->ContourValues->SetNumberOfContours(number);}
00117
00119
00120 int GetNumberOfContours()
00121 {return this->ContourValues->GetNumberOfContours();}
00123
00125
00127 void GenerateValues(int numContours, double range[2])
00128 {this->ContourValues->GenerateValues(numContours, range);}
00130
00132
00134 void GenerateValues(int numContours, double rangeStart, double rangeEnd)
00135 {this->ContourValues->GenerateValues(numContours, rangeStart, rangeEnd);}
00137
00140 unsigned long GetMTime();
00141
00143
00144 virtual void SetCutFunction(vtkImplicitFunction*);
00145 vtkGetObjectMacro(CutFunction,vtkImplicitFunction);
00147
00149
00152 vtkSetMacro(GenerateCutScalars,int);
00153 vtkGetMacro(GenerateCutScalars,int);
00154 vtkBooleanMacro(GenerateCutScalars,int);
00156
00158
00160 void SetLocator(vtkIncrementalPointLocator *locator);
00161 vtkGetObjectMacro(Locator,vtkIncrementalPointLocator);
00163
00165
00175 vtkSetClampMacro(SortBy,int,VTK_SORT_BY_VALUE,VTK_SORT_BY_CELL);
00176 vtkGetMacro(SortBy,int);
00177 void SetSortByToSortByValue()
00178 {this->SetSortBy(VTK_SORT_BY_VALUE);}
00179 void SetSortByToSortByCell()
00180 {this->SetSortBy(VTK_SORT_BY_CELL);}
00182
00184
00185 const char *GetSortByAsString()
00186 {
00187 if ( this->SortBy == VTK_SORT_BY_VALUE )
00188 {
00189 return "SortByValue";
00190 }
00191 else
00192 {
00193 return "SortByCell";
00194 }
00195 }
00197
00200 void CreateDefaultLocator();
00201
00202 protected:
00203 vtkHyperOctreeCutter(vtkImplicitFunction *cf=NULL);
00204 ~vtkHyperOctreeCutter();
00205
00206 virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00207 virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00208 virtual int FillInputPortInformation(int port, vtkInformation *info);
00209
00211
00213 void CutNode(vtkHyperOctreeCursor *cursor,
00214 int level,
00215 double bounds[6]);
00217
00218 vtkImplicitFunction *CutFunction;
00219
00220
00221 vtkIncrementalPointLocator *Locator;
00222 int SortBy;
00223 vtkContourValues *ContourValues;
00224 int GenerateCutScalars;
00225
00226 vtkHyperOctree *Input;
00227 vtkPolyData *Output;
00228
00229
00230 vtkCellArray *NewVerts;
00231 vtkCellArray *NewLines;
00232 vtkCellArray *NewPolys;
00233
00234 vtkDataSetAttributes *InCD;
00235 vtkCellData *OutCD;
00236 vtkPointData *OutPD;
00237 vtkOrderedTriangulator *Triangulator;
00238 vtkHyperOctreeCursor *Sibling;
00239
00240 int Iter;
00241
00242
00243 vtkDoubleArray *CellScalars;
00244 vtkTetra *Tetra;
00245 vtkDoubleArray *TetScalars;
00246
00247 vtkPoints *Pts;
00248 vtkPolygon *Polygon;
00249
00250 vtkIdType CellTypeCounter[65536];
00251 vtkIdType TotalCounter;
00252 vtkIdType TemplateCounter;
00253
00254
00255
00256 int *AllLess;
00257 int *AllGreater;
00258 vtkHyperOctreeClipCutPointsGrabber *Grabber;
00259
00260 private:
00261 vtkHyperOctreeCutter(const vtkHyperOctreeCutter&);
00262 void operator=(const vtkHyperOctreeCutter&);
00263 };
00264
00265 #endif