VTK
dox/Graphics/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 "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