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 "vtkUnstructuredGridAlgorithm.h" 00062 00063 class vtkDataArray; 00064 class vtkDataSet; 00065 class vtkDataSetEdgeSubdivisionCriterion; 00066 class vtkPointLocator; 00067 class vtkPoints; 00068 class vtkStreamingTessellator; 00069 class vtkEdgeSubdivisionCriterion; 00070 class vtkUnstructuredGrid; 00071 00072 class VTK_GRAPHICS_EXPORT vtkTessellatorFilter : public vtkUnstructuredGridAlgorithm 00073 { 00074 public: 00075 vtkTypeMacro(vtkTessellatorFilter,vtkUnstructuredGridAlgorithm); 00076 void PrintSelf( ostream& os, vtkIndent indent ); 00077 00078 static vtkTessellatorFilter* New(); 00079 00080 virtual void SetTessellator( vtkStreamingTessellator* ); 00081 vtkGetObjectMacro(Tessellator, vtkStreamingTessellator); 00082 00083 virtual void SetSubdivider( vtkDataSetEdgeSubdivisionCriterion* ); 00084 vtkGetObjectMacro(Subdivider, vtkDataSetEdgeSubdivisionCriterion); 00085 00086 virtual unsigned long GetMTime(); 00087 00089 00094 vtkSetClampMacro(OutputDimension,int,1,3); 00095 vtkGetMacro(OutputDimension,int); 00096 //BTX 00097 int GetOutputDimension() const; 00098 //ETX 00100 00102 00105 virtual void SetMaximumNumberOfSubdivisions( int num_subdiv_in ); 00106 int GetMaximumNumberOfSubdivisions(); 00107 virtual void SetChordError( double ce ); 00108 double GetChordError(); 00110 00112 00113 virtual void ResetFieldCriteria(); 00114 virtual void SetFieldCriterion( int field, double chord ); 00116 00118 00122 vtkGetMacro(MergePoints,int); 00123 vtkSetMacro(MergePoints,int); 00124 vtkBooleanMacro(MergePoints,int); 00126 00127 protected: 00128 vtkTessellatorFilter(); 00129 ~vtkTessellatorFilter(); 00130 00131 virtual int FillInputPortInformation(int port, vtkInformation* info); 00132 00136 void SetupOutput( vtkDataSet* input, vtkUnstructuredGrid* output ); 00137 00139 void MergeOutputPoints( vtkUnstructuredGrid* input, vtkUnstructuredGrid* output ); 00140 00143 void Teardown(); 00144 00146 00147 virtual int RequestData(vtkInformation* request, 00148 vtkInformationVector** inputVector, 00149 vtkInformationVector* outputVector); 00151 00152 //BTX 00153 vtkStreamingTessellator* Tessellator; 00154 vtkDataSetEdgeSubdivisionCriterion* Subdivider; 00155 int OutputDimension; 00156 int MergePoints; 00157 vtkPointLocator* Locator; 00158 00160 00162 vtkUnstructuredGrid* OutputMesh; 00163 vtkPoints* OutputPoints; 00164 vtkDataArray** OutputAttributes; 00165 int* OutputAttributeIndices; 00167 00168 static void AddAPoint( const double*, 00169 vtkEdgeSubdivisionCriterion*, 00170 void*, 00171 const void* ); 00172 static void AddALine( const double*, 00173 const double*, 00174 vtkEdgeSubdivisionCriterion*, 00175 void*, 00176 const void* ); 00177 static void AddATriangle( const double*, 00178 const double*, 00179 const double*, 00180 vtkEdgeSubdivisionCriterion*, 00181 void*, 00182 const void* ); 00183 static void AddATetrahedron( const double*, 00184 const double*, 00185 const double*, 00186 const double*, 00187 vtkEdgeSubdivisionCriterion*, 00188 void*, 00189 const void* ); 00190 void OutputPoint( const double* ); 00191 void OutputLine( const double*, const double* ); 00192 void OutputTriangle( const double*, const double*, const double* ); 00193 void OutputTetrahedron( const double*, 00194 const double*, 00195 const double*, 00196 const double* ); 00197 //ETX 00198 00199 private: 00200 vtkTessellatorFilter( const vtkTessellatorFilter& ); // Not implemented. 00201 void operator = ( const vtkTessellatorFilter& ); // Not implemented. 00202 }; 00203 00204 //BTX 00205 inline int vtkTessellatorFilter::GetOutputDimension() const 00206 { 00207 return this->OutputDimension; 00208 } 00209 //ETX 00210 00211 #endif // __vtkTessellatorFilter_h