00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00063 #ifndef __vtkClipVolume_h
00064 #define __vtkClipVolume_h
00065
00066 #include "vtkStructuredPointsToUnstructuredGridFilter.h"
00067
00068 class vtkCellData;
00069 class vtkDataArray;
00070 class vtkIdList;
00071 class vtkImplicitFunction;
00072 class vtkMergePoints;
00073 class vtkOrderedTriangulator;
00074 class vtkPointData;
00075 class vtkPointLocator;
00076 class vtkPoints;
00077 class vtkUnstructuredGrid;
00078 class vtkCell;
00079 class vtkTetra;
00080 class vtkCellArray;
00081 class vtkIdTypeArray;
00082 class vtkUnsignedCharArray;
00083
00084 class VTK_GRAPHICS_EXPORT vtkClipVolume : public vtkStructuredPointsToUnstructuredGridFilter
00085 {
00086 public:
00087 vtkTypeRevisionMacro(vtkClipVolume,vtkStructuredPointsToUnstructuredGridFilter);
00088 void PrintSelf(ostream& os, vtkIndent indent);
00089
00092 static vtkClipVolume *New();
00093
00095
00098 vtkSetMacro(Value,double);
00099 vtkGetMacro(Value,double);
00101
00103
00108 vtkSetMacro(InsideOut,int);
00109 vtkGetMacro(InsideOut,int);
00110 vtkBooleanMacro(InsideOut,int);
00112
00114
00117 virtual void SetClipFunction(vtkImplicitFunction*);
00118 vtkGetObjectMacro(ClipFunction,vtkImplicitFunction);
00120
00122
00126 vtkSetMacro(GenerateClipScalars,int);
00127 vtkGetMacro(GenerateClipScalars,int);
00128 vtkBooleanMacro(GenerateClipScalars,int);
00130
00132
00134 vtkSetMacro(GenerateClippedOutput,int);
00135 vtkGetMacro(GenerateClippedOutput,int);
00136 vtkBooleanMacro(GenerateClippedOutput,int);
00138
00140 vtkUnstructuredGrid *GetClippedOutput();
00141
00143
00147 vtkSetMacro(Mixed3DCellGeneration,int);
00148 vtkGetMacro(Mixed3DCellGeneration,int);
00149 vtkBooleanMacro(Mixed3DCellGeneration,int);
00151
00153
00156 vtkSetClampMacro(MergeTolerance,double,0.0001,0.25);
00157 vtkGetMacro(MergeTolerance,double);
00159
00161
00163 void SetLocator(vtkPointLocator *locator);
00164 vtkGetObjectMacro(Locator,vtkPointLocator);
00166
00169 void CreateDefaultLocator();
00170
00172 unsigned long int GetMTime();
00173
00174 protected:
00175 vtkClipVolume(vtkImplicitFunction *cf=NULL);
00176 ~vtkClipVolume();
00177
00178 void Execute();
00179 void ClipTets(double value, vtkTetra *clipTetra, vtkDataArray *clipScalars,
00180 vtkDataArray *cellScalars, vtkIdList *tetraIds,
00181 vtkPoints *tetraPts, vtkPointData *inPD, vtkPointData *outPD,
00182 vtkCellData *inCD, vtkIdType cellId, vtkCellData *outCD,
00183 vtkCellData *clippedCD, int insideOut);
00184 void ClipVoxel(double value, vtkDataArray *cellScalars, int flip,
00185 double origin[3], double spacing[3], vtkIdList *cellIds,
00186 vtkPoints *cellPts, vtkPointData *inPD, vtkPointData *outPD,
00187 vtkCellData *inCD, vtkIdType cellId, vtkCellData *outCD,
00188 vtkCellData *clippedCD);
00189
00190 vtkImplicitFunction *ClipFunction;
00191 vtkPointLocator *Locator;
00192 int InsideOut;
00193 double Value;
00194 int GenerateClipScalars;
00195 double MergeTolerance;
00196 int Mixed3DCellGeneration;
00197 int GenerateClippedOutput;
00198 vtkUnstructuredGrid *ClippedOutput;
00199
00200 private:
00201 vtkUnstructuredGrid *Mesh;
00202 vtkOrderedTriangulator *Triangulator;
00203
00204
00205 vtkIdType NumberOfCells;
00206 vtkCellArray *Connectivity;
00207 vtkUnsignedCharArray *Types;
00208 vtkIdTypeArray *Locations;
00209 vtkIdType NumberOfClippedCells;
00210 vtkCellArray *ClippedConnectivity;
00211 vtkUnsignedCharArray *ClippedTypes;
00212 vtkIdTypeArray *ClippedLocations;
00213
00214 private:
00215 vtkClipVolume(const vtkClipVolume&);
00216 void operator=(const vtkClipVolume&);
00217 };
00218
00219 #endif