VTK
/Users/kitware/Dashboards/MyTests/VTK_BLD_Release_docs/Utilities/Doxygen/dox/Filters/General/vtkTessellatorFilter.h
Go to the documentation of this file.
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