00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef __vtkTempTessellatorFilter_h
00016 #define __vtkTempTessellatorFilter_h
00017
00056 #include "vtkDataSetToUnstructuredGridFilter.h"
00057
00058 class vtkDataArray;
00059 class vtkDataSet;
00060 class vtkDataSetSubdivisionAlgorithm;
00061 class vtkPoints;
00062 class vtkStreamingTessellator;
00063 class vtkSubdivisionAlgorithm;
00064 class vtkUnstructuredGrid;
00065
00066 class VTK_EXPORT vtkTempTessellatorFilter : public vtkDataSetToUnstructuredGridFilter
00067 {
00068 public:
00069 vtkTypeRevisionMacro(vtkTempTessellatorFilter,vtkDataSetToUnstructuredGridFilter);
00070 void PrintSelf( ostream& os, vtkIndent indent );
00071
00072 static vtkTempTessellatorFilter* New();
00073
00074 virtual void SetTessellator( vtkStreamingTessellator* );
00075 vtkGetObjectMacro(Tessellator, vtkStreamingTessellator);
00076
00077 virtual void SetSubdivider( vtkDataSetSubdivisionAlgorithm* );
00078 vtkGetObjectMacro(Subdivider, vtkDataSetSubdivisionAlgorithm);
00079
00080 virtual unsigned long GetMTime();
00081
00082 vtkSetClampMacro(OutputDimension,int,1,3);
00083 vtkGetMacro(OutputDimension,int);
00084 int GetOutputDimension() const;
00085
00087
00090 virtual void SetMaximumNumberOfSubdivisions( int num_subdiv_in );
00091 int GetMaximumNumberOfSubdivisions();
00092 virtual void SetChordError( double ce );
00093 double GetChordError();
00095
00097
00098 virtual void ResetFieldCriteria();
00099 virtual void SetFieldCriterion( int field, double chord );
00101
00103
00107 virtual void SetMergePoints( int OnOrOff );
00108 vtkBooleanMacro(MergePoints,int);
00109 vtkGetMacro(MergePoints,int);
00110 int GetMergePoints() const { return this->MergePoints; }
00112
00113 protected:
00114 vtkTempTessellatorFilter();
00115 ~vtkTempTessellatorFilter();
00116
00120 void SetupOutput();
00121
00123 virtual void Execute();
00124
00127 void Teardown();
00128
00129
00130 vtkStreamingTessellator* Tessellator;
00131 vtkDataSetSubdivisionAlgorithm* Subdivider;
00132 int OutputDimension;
00133 int MergePoints;
00134
00136
00138 vtkUnstructuredGrid* OutputMesh;
00139 vtkPoints* OutputPoints;
00140 vtkDataArray** OutputAttributes;
00141 int* OutputAttributeIndices;
00143
00144 static void AddALine( const double*, const double*, vtkSubdivisionAlgorithm*, void*, const void* );
00145 static void AddATriangle( const double*, const double*, const double*, vtkSubdivisionAlgorithm*, void*, const void* );
00146 static void AddATetrahedron( const double*, const double*, const double*, const double*, vtkSubdivisionAlgorithm*, void*, const void* );
00147 void OutputLine( const double*, const double* );
00148 void OutputTriangle( const double*, const double*, const double* );
00149 void OutputTetrahedron( const double*, const double*, const double*, const double* );
00150
00151
00152 private:
00153 vtkTempTessellatorFilter( const vtkTempTessellatorFilter& );
00154 void operator = ( const vtkTempTessellatorFilter& );
00155 };
00156
00157
00158 inline int vtkTempTessellatorFilter::GetOutputDimension() const { return this->OutputDimension; }
00159
00160
00161 #endif // __vtkTempTessellatorFilter_h