VTK
vtkStreamingTessellator.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkStreamingTessellator.h
5  Language: C++
6 
7  Copyright 2003 Sandia Corporation.
8  Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9  license for use of this work by or on behalf of the
10  U.S. Government. Redistribution and use in source and binary forms, with
11  or without modification, are permitted provided that this Notice and any
12  statement of authorship are reproduced on all copies.
13 
14 =========================================================================*/
80 #ifndef vtkStreamingTessellator_h
81 #define vtkStreamingTessellator_h
82 
83 #include "vtkFiltersCoreModule.h" // For export macro
84 #include "vtkObject.h"
85 
86 #undef PARAVIEW_DEBUG_TESSELLATOR
87 
89 
91 {
92  public:
95  virtual void PrintSelf( ostream& os, vtkIndent indent );
96 
97  //BTX
98  typedef void (*VertexProcessorFunction)( const double*, vtkEdgeSubdivisionCriterion*, void*, const void* );
99  typedef void (*EdgeProcessorFunction)( const double*, const double*, vtkEdgeSubdivisionCriterion*, void*, const void* );
100  typedef void (*TriangleProcessorFunction)( const double*, const double*, const double*, vtkEdgeSubdivisionCriterion*, void*, const void* );
101  typedef void (*TetrahedronProcessorFunction)( const double*, const double*, const double*, const double*, vtkEdgeSubdivisionCriterion*, void*, const void* );
102 
103  enum {MaxFieldSize = 18};
104 
106 
107  virtual void SetTetrahedronCallback( TetrahedronProcessorFunction );
108  virtual TetrahedronProcessorFunction GetTetrahedronCallback() const;
110 
112 
113  virtual void SetTriangleCallback( TriangleProcessorFunction );
114  virtual TriangleProcessorFunction GetTriangleCallback() const;
116 
118 
119  virtual void SetEdgeCallback( EdgeProcessorFunction );
120  virtual EdgeProcessorFunction GetEdgeCallback() const;
122 
124 
125  virtual void SetVertexCallback( VertexProcessorFunction );
126  virtual VertexProcessorFunction GetVertexCallback() const;
127  //ETX
129 
131 
133  virtual void SetPrivateData( void* Private );
134  virtual void* GetPrivateData() const;
136 
137  // can't wrap const private data because python wrapper will try to cast it to void*, not const void*
138  //BTX
140 
142  virtual void SetConstPrivateData( const void* ConstPrivate );
143  virtual const void* GetConstPrivateData() const;
144  //ETX
146 
148 
155  //BTX
157  //ETX
159 
161 
171  virtual void SetEmbeddingDimension( int k, int d );
172  int GetEmbeddingDimension( int k ) const;
174 
176 
202  virtual void SetFieldSize( int k, int s );
203  int GetFieldSize( int k ) const;
205 
207 
208  virtual void SetMaximumNumberOfSubdivisions( int num_subdiv_in );
209  int GetMaximumNumberOfSubdivisions();
211 
213 
225  void AdaptivelySample3Facet( double* v1, double* v2, double* v3, double* v4 ) const ;
226  void AdaptivelySample2Facet( double* v1, double* v2, double* v3 ) const ;
227  void AdaptivelySample1Facet( double* v1, double* v2 ) const ;
228  void AdaptivelySample0Facet( double* v1 ) const ;
230 
232 
241  void ResetCounts()
242  {
243 #ifdef PARAVIEW_DEBUG_TESSELLATOR
244  for ( int i=0; i<11; ++i )
245  {
246  this->CaseCounts[i] = 0;
247  for ( int j=0; j<51; ++j )
248  {
249  this->SubcaseCounts[i][j] = 0;
250  }
251  }
252 #endif // PARAVIEW_DEBUG_TESSELLATOR
253  }
255  {
256 #ifdef PARAVIEW_DEBUG_TESSELLATOR
257  return this->CaseCounts[c];
258 #else
259  (void)c;
260  return 0;
261 #endif // PARAVIEW_DEBUG_TESSELLATOR
262  }
263  vtkIdType GetSubcaseCount( int casenum, int sub )
264  {
265 #ifdef PARAVIEW_DEBUG_TESSELLATOR
266  return this->SubcaseCounts[casenum][sub];
267 #else
268  (void)casenum;
269  (void)sub;
270  return 0;
271 #endif // PARAVIEW_DEBUG_TESSELLATOR
272  }
274 
275  protected:
276  //BTX
277  static int EdgeCodesToCaseCodesPlusPermutation[64][2];
278  static vtkIdType PermutationsFromIndex[24][14];
279  static vtkIdType TetrahedralDecompositions[];
280  //ETX
281 
282  void* PrivateData;
283  const void* ConstPrivateData;
285  //BTX
286  VertexProcessorFunction Callback0;
287  EdgeProcessorFunction Callback1;
288  TriangleProcessorFunction Callback2;
289  TetrahedronProcessorFunction Callback3;
290 #ifdef PARAVIEW_DEBUG_TESSELLATOR
291  mutable vtkIdType CaseCounts[11];
292  mutable vtkIdType SubcaseCounts[11][51];
293 #endif // PARAVIEW_DEBUG_TESSELLATOR
294  //ETX
295 
302  int PointDimension[4];
303 
307  int EmbeddingDimension[4];
308 
311 
314 
315  void AdaptivelySample3Facet( double* v1, double* v2, double* v3, double* v4, int maxDepth ) const ;
316  void AdaptivelySample2Facet( double* v1, double* v2, double* v3, int maxDepth, int move=7 ) const ;
317  void AdaptivelySample1Facet( double* v1, double* v2, int maxDepth ) const ;
318 
319  int BestTets( int*, double**, int, int ) const;
320 
321  private:
322  vtkStreamingTessellator( const vtkStreamingTessellator& ); // Not implemented.
323  void operator = ( const vtkStreamingTessellator& ); // Not implemented.
324 };
325 
326 //BTX
327 
328 inline void vtkStreamingTessellator::AdaptivelySample3Facet( double* v1, double* v2, double* v3, double* v4 ) const
329 { this->AdaptivelySample3Facet( v1, v2, v3, v4, this->MaximumNumberOfSubdivisions ); }
330 inline void vtkStreamingTessellator::AdaptivelySample2Facet( double* v1, double* v2, double* v3 ) const
332 inline void vtkStreamingTessellator::AdaptivelySample1Facet( double* v1, double* v2 ) const
334 
336 { if ( k <= 0 || k >= 4 ) return -1; return this->EmbeddingDimension[k]; }
337 
338 inline int vtkStreamingTessellator::GetFieldSize( int k ) const
339 { if ( k <= 0 || k >= 4 ) return -1; return this->PointDimension[k] - this->EmbeddingDimension[k] - 3; }
340 
342 
343 //ETX
344 
345 #endif // vtkStreamingTessellator_h
vtkStreamingTessellator
An algorithm that refines an initial simplicial tessellation using edge subdivision.
Definition: vtkStreamingTessellator.h:91
vtkStreamingTessellator::GetCaseCount
vtkIdType GetCaseCount(int c)
Definition: vtkStreamingTessellator.h:254
vtkgl::v3
GLfloat GLfloat GLfloat GLfloat v3
Definition: vtkgl.h:12016
vtkgl::v2
GLfloat GLfloat GLfloat v2
Definition: vtkgl.h:12015
vtkStreamingTessellator::AdaptivelySample2Facet
void AdaptivelySample2Facet(double *v1, double *v2, double *v3) const
Definition: vtkStreamingTessellator.h:330
vtkStreamingTessellator::AdaptivelySample1Facet
void AdaptivelySample1Facet(double *v1, double *v2) const
Definition: vtkStreamingTessellator.h:332
vtkStreamingTessellator::BestTets
int BestTets(int *, double **, int, int) const
vtkStreamingTessellator::GetEmbeddingDimension
int GetEmbeddingDimension(int k) const
Definition: vtkStreamingTessellator.h:335
vtkIdType
int vtkIdType
Definition: vtkType.h:275
vtkStreamingTessellator::AdaptivelySample3Facet
void AdaptivelySample3Facet(double *v1, double *v2, double *v3, double *v4, int maxDepth) const
vtkStreamingTessellator::vtkStreamingTessellator
vtkStreamingTessellator()
vtkStreamingTessellator::GetTriangleCallback
virtual TriangleProcessorFunction GetTriangleCallback() const
vtkgl::s
GLdouble s
Definition: vtkgl.h:11594
vtkStreamingTessellator::SetTriangleCallback
virtual void SetTriangleCallback(TriangleProcessorFunction)
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkStreamingTessellator::Callback1
EdgeProcessorFunction Callback1
Definition: vtkStreamingTessellator.h:287
vtkStreamingTessellator::GetSubcaseCount
vtkIdType GetSubcaseCount(int casenum, int sub)
Definition: vtkStreamingTessellator.h:263
vtkStreamingTessellator::PointDimension
int PointDimension[4]
Definition: vtkStreamingTessellator.h:302
vtkStreamingTessellator::GetFieldSize
int GetFieldSize(int k) const
Definition: vtkStreamingTessellator.h:338
vtkStreamingTessellator::SetSubdivisionAlgorithm
virtual void SetSubdivisionAlgorithm(vtkEdgeSubdivisionCriterion *)
vtkgl::v1
GLfloat GLfloat v1
Definition: vtkgl.h:12014
vtkStreamingTessellator::SetEmbeddingDimension
virtual void SetEmbeddingDimension(int k, int d)
vtkStreamingTessellator::GetSubdivisionAlgorithm
virtual vtkEdgeSubdivisionCriterion * GetSubdivisionAlgorithm()
vtkStreamingTessellator::SetConstPrivateData
virtual void SetConstPrivateData(const void *ConstPrivate)
vtkFiltersCoreModule.h
vtkStreamingTessellator::GetVertexCallback
virtual VertexProcessorFunction GetVertexCallback() const
vtkStreamingTessellator::AdaptivelySample1Facet
void AdaptivelySample1Facet(double *v1, double *v2, int maxDepth) const
vtkStreamingTessellator::SetMaximumNumberOfSubdivisions
virtual void SetMaximumNumberOfSubdivisions(int num_subdiv_in)
vtkgl::c
const GLubyte * c
Definition: vtkgl.h:15720
vtkStreamingTessellator::EmbeddingDimension
int EmbeddingDimension[4]
Definition: vtkStreamingTessellator.h:307
vtkEdgeSubdivisionCriterion
how to decide whether a linear approximation to nonlinear geometry or field should be subdivided
Definition: vtkEdgeSubdivisionCriterion.h:48
VTKFILTERSCORE_EXPORT
#define VTKFILTERSCORE_EXPORT
Definition: vtkFiltersCoreModule.h:15
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkStreamingTessellator::PrivateData
void * PrivateData
Definition: vtkStreamingTessellator.h:282
vtkStreamingTessellator::AdaptivelySample0Facet
void AdaptivelySample0Facet(double *v1) const
vtkStreamingTessellator::SetEdgeCallback
virtual void SetEdgeCallback(EdgeProcessorFunction)
vtkStreamingTessellator::Callback3
TetrahedronProcessorFunction Callback3
Definition: vtkStreamingTessellator.h:289
vtkStreamingTessellator::SetFieldSize
virtual void SetFieldSize(int k, int s)
vtkStreamingTessellator::GetPrivateData
virtual void * GetPrivateData() const
vtkStreamingTessellator::New
static vtkStreamingTessellator * New()
vtkStreamingTessellator::PrintSelf
virtual void PrintSelf(ostream &os, vtkIndent indent)
vtkStreamingTessellator::Algorithm
vtkEdgeSubdivisionCriterion * Algorithm
Definition: vtkStreamingTessellator.h:284
vtkStreamingTessellator::ConstPrivateData
const void * ConstPrivateData
Definition: vtkStreamingTessellator.h:283
vtkObject.h
vtkStreamingTessellator::~vtkStreamingTessellator
~vtkStreamingTessellator()
vtkStreamingTessellator::Callback2
TriangleProcessorFunction Callback2
Definition: vtkStreamingTessellator.h:288
vtkStreamingTessellator::SetPrivateData
virtual void SetPrivateData(void *Private)
vtkStreamingTessellator::Callback0
VertexProcessorFunction Callback0
Definition: vtkStreamingTessellator.h:286
vtkStreamingTessellator::SetTetrahedronCallback
virtual void SetTetrahedronCallback(TetrahedronProcessorFunction)
vtkStreamingTessellator::ResetCounts
void ResetCounts()
Definition: vtkStreamingTessellator.h:241
vtkStreamingTessellator::GetEdgeCallback
virtual EdgeProcessorFunction GetEdgeCallback() const
vtkStreamingTessellator::GetMaximumNumberOfSubdivisions
int GetMaximumNumberOfSubdivisions()
Definition: vtkStreamingTessellator.h:341
vtkStreamingTessellator::AdaptivelySample3Facet
void AdaptivelySample3Facet(double *v1, double *v2, double *v3, double *v4) const
Definition: vtkStreamingTessellator.h:328
vtkStreamingTessellator::SetVertexCallback
virtual void SetVertexCallback(VertexProcessorFunction)
vtkgl::void
typedef void(APIENTRYP PFNGLBLENDCOLORPROC)(GLclampf red
vtkStreamingTessellator::GetConstPrivateData
virtual const void * GetConstPrivateData() const
vtkStreamingTessellator::GetSubdivisionAlgorithm
virtual const vtkEdgeSubdivisionCriterion * GetSubdivisionAlgorithm() const
vtkStreamingTessellator::GetTetrahedronCallback
virtual TetrahedronProcessorFunction GetTetrahedronCallback() const
vtkStreamingTessellator::MaximumNumberOfSubdivisions
int MaximumNumberOfSubdivisions
Definition: vtkStreamingTessellator.h:310
vtkStreamingTessellator::AdaptivelySample2Facet
void AdaptivelySample2Facet(double *v1, double *v2, double *v3, int maxDepth, int move=7) const