VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkTessellatorFilter.h 00005 Language: C++ 00006 00007 Copyright 2003 Sandia Corporation. 00008 Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00009 license for use of this work by or on behalf of the 00010 U.S. Government. Redistribution and use in source and binary forms, with 00011 or without modification, are permitted provided that this Notice and any 00012 statement of authorship are reproduced on all copies. 00013 00014 =========================================================================*/ 00015 #ifndef vtkTessellatorFilter_h 00016 #define vtkTessellatorFilter_h 00017 00061 #include "vtkFiltersGeneralModule.h" // For export macro 00062 #include "vtkUnstructuredGridAlgorithm.h" 00063 00064 class vtkDataArray; 00065 class vtkDataSet; 00066 class vtkDataSetEdgeSubdivisionCriterion; 00067 class vtkPointLocator; 00068 class vtkPoints; 00069 class vtkStreamingTessellator; 00070 class vtkEdgeSubdivisionCriterion; 00071 class vtkUnstructuredGrid; 00072 00073 class VTKFILTERSGENERAL_EXPORT vtkTessellatorFilter : public vtkUnstructuredGridAlgorithm 00074 { 00075 public: 00076 vtkTypeMacro(vtkTessellatorFilter,vtkUnstructuredGridAlgorithm); 00077 void PrintSelf( ostream& os, vtkIndent indent ); 00078 00079 static vtkTessellatorFilter* New(); 00080 00081 virtual void SetTessellator( vtkStreamingTessellator* ); 00082 vtkGetObjectMacro(Tessellator, vtkStreamingTessellator); 00083 00084 virtual void SetSubdivider( vtkDataSetEdgeSubdivisionCriterion* ); 00085 vtkGetObjectMacro(Subdivider, vtkDataSetEdgeSubdivisionCriterion); 00086 00087 virtual unsigned long GetMTime(); 00088 00090 00095 vtkSetClampMacro(OutputDimension,int,1,3); 00096 vtkGetMacro(OutputDimension,int); 00097 //BTX 00098 int GetOutputDimension() const; 00099 //ETX 00101 00103 00106 virtual void SetMaximumNumberOfSubdivisions( int num_subdiv_in ); 00107 int GetMaximumNumberOfSubdivisions(); 00108 virtual void SetChordError( double ce ); 00109 double GetChordError(); 00111 00113 00114 virtual void ResetFieldCriteria(); 00115 virtual void SetFieldCriterion( int field, double chord ); 00117 00119 00123 vtkGetMacro(MergePoints,int); 00124 vtkSetMacro(MergePoints,int); 00125 vtkBooleanMacro(MergePoints,int); 00127 00128 protected: 00129 vtkTessellatorFilter(); 00130 ~vtkTessellatorFilter(); 00131 00132 virtual int FillInputPortInformation(int port, vtkInformation* info); 00133 00137 void SetupOutput( vtkDataSet* input, vtkUnstructuredGrid* output ); 00138 00140 void MergeOutputPoints( vtkUnstructuredGrid* input, vtkUnstructuredGrid* output ); 00141 00144 void Teardown(); 00145 00147 00148 virtual int RequestData(vtkInformation* request, 00149 vtkInformationVector** inputVector, 00150 vtkInformationVector* outputVector); 00152 00153 //BTX 00154 vtkStreamingTessellator* Tessellator; 00155 vtkDataSetEdgeSubdivisionCriterion* Subdivider; 00156 int OutputDimension; 00157 int MergePoints; 00158 vtkPointLocator* Locator; 00159 00161 00163 vtkUnstructuredGrid* OutputMesh; 00164 vtkPoints* OutputPoints; 00165 vtkDataArray** OutputAttributes; 00166 int* OutputAttributeIndices; 00168 00169 static void AddAPoint( const double*, 00170 vtkEdgeSubdivisionCriterion*, 00171 void*, 00172 const void* ); 00173 static void AddALine( const double*, 00174 const double*, 00175 vtkEdgeSubdivisionCriterion*, 00176 void*, 00177 const void* ); 00178 static void AddATriangle( const double*, 00179 const double*, 00180 const double*, 00181 vtkEdgeSubdivisionCriterion*, 00182 void*, 00183 const void* ); 00184 static void AddATetrahedron( const double*, 00185 const double*, 00186 const double*, 00187 const double*, 00188 vtkEdgeSubdivisionCriterion*, 00189 void*, 00190 const void* ); 00191 void OutputPoint( const double* ); 00192 void OutputLine( const double*, const double* ); 00193 void OutputTriangle( const double*, const double*, const double* ); 00194 void OutputTetrahedron( const double*, 00195 const double*, 00196 const double*, 00197 const double* ); 00198 //ETX 00199 00200 private: 00201 vtkTessellatorFilter( const vtkTessellatorFilter& ); // Not implemented. 00202 void operator = ( const vtkTessellatorFilter& ); // Not implemented. 00203 }; 00204 00205 //BTX 00206 inline int vtkTessellatorFilter::GetOutputDimension() const 00207 { 00208 return this->OutputDimension; 00209 } 00210 //ETX 00211 00212 #endif // vtkTessellatorFilter_h