VTK
vtkMeshQuality.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkMeshQuality.h
5  Language: C++
6 
7  Copyright 2003-2006 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  Contact: dcthomp@sandia.gov,pppebay@sandia.gov
15 
16 =========================================================================*/
67 #ifndef __vtkMeshQuality_h
68 #define __vtkMeshQuality_h
69 
70 #include "vtkDataSetAlgorithm.h"
71 
72 class vtkCell;
73 class vtkDataArray;
74 
75 #define VTK_QUALITY_EDGE_RATIO 0
76 #define VTK_QUALITY_ASPECT_RATIO 1
77 #define VTK_QUALITY_RADIUS_RATIO 2
78 #define VTK_QUALITY_ASPECT_FROBENIUS 3
79 #define VTK_QUALITY_MED_ASPECT_FROBENIUS 4
80 #define VTK_QUALITY_MAX_ASPECT_FROBENIUS 5
81 #define VTK_QUALITY_MIN_ANGLE 6
82 #define VTK_QUALITY_COLLAPSE_RATIO 7
83 #define VTK_QUALITY_MAX_ANGLE 8
84 #define VTK_QUALITY_CONDITION 9
85 #define VTK_QUALITY_SCALED_JACOBIAN 10
86 #define VTK_QUALITY_SHEAR 11
87 #define VTK_QUALITY_RELATIVE_SIZE_SQUARED 12
88 #define VTK_QUALITY_SHAPE 13
89 #define VTK_QUALITY_SHAPE_AND_SIZE 14
90 #define VTK_QUALITY_DISTORTION 15
91 #define VTK_QUALITY_MAX_EDGE_RATIO 16
92 #define VTK_QUALITY_SKEW 17
93 #define VTK_QUALITY_TAPER 18
94 #define VTK_QUALITY_VOLUME 19
95 #define VTK_QUALITY_STRETCH 20
96 #define VTK_QUALITY_DIAGONAL 21
97 #define VTK_QUALITY_DIMENSION 22
98 #define VTK_QUALITY_ODDY 23
99 #define VTK_QUALITY_SHEAR_AND_SIZE 24
100 #define VTK_QUALITY_JACOBIAN 25
101 #define VTK_QUALITY_WARPAGE 26
102 #define VTK_QUALITY_ASPECT_GAMMA 27
103 #define VTK_QUALITY_AREA 28
104 #define VTK_QUALITY_ASPECT_BETA 29
105 
107 {
108 public:
109  void PrintSelf(ostream& os, vtkIndent indent);
111  static vtkMeshQuality* New();
112 
114 
117  vtkSetMacro(SaveCellQuality,int);
118  vtkGetMacro(SaveCellQuality,int);
119  vtkBooleanMacro(SaveCellQuality,int);
121 
123 
131  vtkSetMacro(TriangleQualityMeasure,int);
132  vtkGetMacro(TriangleQualityMeasure,int);
134  {
135  this->SetTriangleQualityMeasure( VTK_QUALITY_AREA );
136  }
138  {
139  this->SetTriangleQualityMeasure( VTK_QUALITY_EDGE_RATIO );
140  }
142  {
143  this->SetTriangleQualityMeasure( VTK_QUALITY_ASPECT_RATIO );
144  }
146  {
147  this->SetTriangleQualityMeasure( VTK_QUALITY_RADIUS_RATIO );
148  }
150  {
151  this->SetTriangleQualityMeasure( VTK_QUALITY_ASPECT_FROBENIUS );
152  }
154  {
155  this->SetTriangleQualityMeasure( VTK_QUALITY_MIN_ANGLE );
156  }
158  {
159  this->SetTriangleQualityMeasure( VTK_QUALITY_MAX_ANGLE );
160  }
162  {
163  this->SetTriangleQualityMeasure( VTK_QUALITY_CONDITION );
164  }
166  {
167  this->SetTriangleQualityMeasure( VTK_QUALITY_SCALED_JACOBIAN );
168  }
170  {
171  this->SetTriangleQualityMeasure( VTK_QUALITY_RELATIVE_SIZE_SQUARED );
172  }
174  {
175  this->SetTriangleQualityMeasure( VTK_QUALITY_SHAPE );
176  }
178  {
179  this->SetTriangleQualityMeasure( VTK_QUALITY_SHAPE_AND_SIZE );
180  }
182  {
183  this->SetTriangleQualityMeasure( VTK_QUALITY_DISTORTION );
184  }
186 
188 
202  vtkSetMacro(QuadQualityMeasure,int);
203  vtkGetMacro(QuadQualityMeasure,int);
205  {
206  this->SetQuadQualityMeasure( VTK_QUALITY_EDGE_RATIO );
207  }
209  {
210  this->SetQuadQualityMeasure( VTK_QUALITY_ASPECT_RATIO );
211  }
213  {
214  this->SetQuadQualityMeasure( VTK_QUALITY_RADIUS_RATIO );
215  }
217  {
218  this->SetQuadQualityMeasure( VTK_QUALITY_MED_ASPECT_FROBENIUS );
219  }
221  {
222  this->SetQuadQualityMeasure( VTK_QUALITY_MAX_ASPECT_FROBENIUS );
223  }
225  {
226  this->SetQuadQualityMeasure( VTK_QUALITY_MAX_EDGE_RATIO );
227  }
229  {
230  this->SetQuadQualityMeasure( VTK_QUALITY_SKEW );
231  }
233  {
234  this->SetQuadQualityMeasure( VTK_QUALITY_TAPER );
235  }
237  {
238  this->SetQuadQualityMeasure( VTK_QUALITY_WARPAGE );
239  }
241  {
242  this->SetQuadQualityMeasure( VTK_QUALITY_AREA );
243  }
245  {
246  this->SetQuadQualityMeasure( VTK_QUALITY_STRETCH );
247  }
249  {
250  this->SetQuadQualityMeasure( VTK_QUALITY_MIN_ANGLE );
251  }
253  {
254  this->SetQuadQualityMeasure( VTK_QUALITY_MAX_ANGLE );
255  }
257  {
258  this->SetQuadQualityMeasure( VTK_QUALITY_ODDY );
259  }
261  {
262  this->SetQuadQualityMeasure( VTK_QUALITY_CONDITION );
263  }
265  {
266  this->SetQuadQualityMeasure( VTK_QUALITY_JACOBIAN );
267  }
269  {
270  this->SetQuadQualityMeasure( VTK_QUALITY_SCALED_JACOBIAN );
271  }
273  {
274  this->SetQuadQualityMeasure( VTK_QUALITY_SHEAR );
275  }
277  {
278  this->SetQuadQualityMeasure( VTK_QUALITY_SHAPE );
279  }
281  {
282  this->SetQuadQualityMeasure( VTK_QUALITY_RELATIVE_SIZE_SQUARED );
283  }
285  {
286  this->SetQuadQualityMeasure( VTK_QUALITY_SHAPE_AND_SIZE );
287  }
289  {
290  this->SetQuadQualityMeasure( VTK_QUALITY_SHEAR_AND_SIZE );
291  }
293  {
294  this->SetQuadQualityMeasure( VTK_QUALITY_DISTORTION );
295  }
297 
299 
309  vtkSetMacro(TetQualityMeasure,int);
310  vtkGetMacro(TetQualityMeasure,int);
312  {
313  this->SetTetQualityMeasure( VTK_QUALITY_EDGE_RATIO );
314  }
316  {
317  this->SetTetQualityMeasure( VTK_QUALITY_ASPECT_RATIO );
318  }
320  {
321  this->SetTetQualityMeasure( VTK_QUALITY_RADIUS_RATIO );
322  }
324  {
325  this->SetTetQualityMeasure( VTK_QUALITY_ASPECT_FROBENIUS );
326  }
328  {
329  this->SetTetQualityMeasure( VTK_QUALITY_MIN_ANGLE );
330  }
332  {
333  this->SetTetQualityMeasure( VTK_QUALITY_COLLAPSE_RATIO );
334  }
336  {
337  this->SetTetQualityMeasure( VTK_QUALITY_ASPECT_BETA );
338  }
340  {
341  this->SetTetQualityMeasure( VTK_QUALITY_ASPECT_GAMMA );
342  }
344  {
345  this->SetTetQualityMeasure( VTK_QUALITY_VOLUME );
346  }
348  {
349  this->SetTetQualityMeasure( VTK_QUALITY_CONDITION );
350  }
352  {
353  this->SetTetQualityMeasure( VTK_QUALITY_JACOBIAN );
354  }
356  {
357  this->SetTetQualityMeasure( VTK_QUALITY_SCALED_JACOBIAN );
358  }
360  {
361  this->SetTetQualityMeasure( VTK_QUALITY_SHAPE );
362  }
364  {
365  this->SetTetQualityMeasure( VTK_QUALITY_RELATIVE_SIZE_SQUARED );
366  }
368  {
369  this->SetTetQualityMeasure( VTK_QUALITY_SHAPE_AND_SIZE );
370  }
372  {
373  this->SetTetQualityMeasure( VTK_QUALITY_DISTORTION );
374  }
376 
378 
388  vtkSetMacro(HexQualityMeasure,int);
389  vtkGetMacro(HexQualityMeasure,int);
391  {
392  this->SetHexQualityMeasure( VTK_QUALITY_EDGE_RATIO );
393  }
395  {
396  this->SetHexQualityMeasure( VTK_QUALITY_MED_ASPECT_FROBENIUS );
397  }
399  {
400  this->SetHexQualityMeasure( VTK_QUALITY_MAX_ASPECT_FROBENIUS );
401  }
403  {
404  this->SetHexQualityMeasure( VTK_QUALITY_MAX_EDGE_RATIO );
405  }
407  {
408  this->SetHexQualityMeasure( VTK_QUALITY_SKEW );
409  }
411  {
412  this->SetHexQualityMeasure( VTK_QUALITY_TAPER );
413  }
415  {
416  this->SetHexQualityMeasure( VTK_QUALITY_VOLUME );
417  }
419  {
420  this->SetHexQualityMeasure( VTK_QUALITY_STRETCH );
421  }
423  {
424  this->SetHexQualityMeasure( VTK_QUALITY_DIAGONAL );
425  }
427  {
428  this->SetHexQualityMeasure( VTK_QUALITY_DIMENSION );
429  }
431  {
432  this->SetHexQualityMeasure( VTK_QUALITY_ODDY );
433  }
435  {
436  this->SetHexQualityMeasure( VTK_QUALITY_CONDITION );
437  }
439  {
440  this->SetHexQualityMeasure( VTK_QUALITY_JACOBIAN );
441  }
443  {
444  this->SetHexQualityMeasure( VTK_QUALITY_SCALED_JACOBIAN );
445  }
447  {
448  this->SetHexQualityMeasure( VTK_QUALITY_SHEAR );
449  }
451  {
452  this->SetHexQualityMeasure( VTK_QUALITY_SHAPE );
453  }
455  {
456  this->SetHexQualityMeasure( VTK_QUALITY_RELATIVE_SIZE_SQUARED );
457  }
459  {
460  this->SetHexQualityMeasure( VTK_QUALITY_SHAPE_AND_SIZE );
461  }
463  {
464  this->SetHexQualityMeasure( VTK_QUALITY_SHEAR_AND_SIZE );
465  }
467  {
468  this->SetHexQualityMeasure( VTK_QUALITY_DISTORTION );
469  }
471 
476  static double TriangleArea( vtkCell* cell );
477 
485  static double TriangleEdgeRatio( vtkCell* cell );
486 
494  static double TriangleAspectRatio( vtkCell* cell );
495 
502  static double TriangleRadiusRatio( vtkCell* cell );
503 
513  static double TriangleAspectFrobenius( vtkCell* cell );
514 
520  static double TriangleMinAngle( vtkCell* cell );
521 
527  static double TriangleMaxAngle( vtkCell* cell );
528 
533  static double TriangleCondition( vtkCell* cell );
534 
539  static double TriangleScaledJacobian( vtkCell* cell );
540 
545  static double TriangleRelativeSizeSquared( vtkCell* cell );
546 
551  static double TriangleShape( vtkCell* cell );
552 
557  static double TriangleShapeAndSize( vtkCell* cell );
558 
563  static double TriangleDistortion( vtkCell* cell );
564 
572  static double QuadEdgeRatio( vtkCell* cell );
573 
583  static double QuadAspectRatio( vtkCell* cell );
584 
598  static double QuadRadiusRatio( vtkCell* cell );
599 
611  static double QuadMedAspectFrobenius( vtkCell* cell );
612 
624  static double QuadMaxAspectFrobenius( vtkCell* cell );
625 
631  static double QuadMinAngle( vtkCell* cell );
632 
633  static double QuadMaxEdgeRatios( vtkCell* cell );
634  static double QuadSkew( vtkCell* cell );
635  static double QuadTaper( vtkCell* cell );
636  static double QuadWarpage( vtkCell* cell );
637  static double QuadArea( vtkCell* cell );
638  static double QuadStretch( vtkCell* cell );
639  static double QuadMaxAngle( vtkCell* cell );
640  static double QuadOddy( vtkCell* cell );
641  static double QuadCondition( vtkCell* cell );
642  static double QuadJacobian( vtkCell* cell );
643  static double QuadScaledJacobian( vtkCell* cell );
644  static double QuadShear( vtkCell* cell );
645  static double QuadShape( vtkCell* cell );
646  static double QuadRelativeSizeSquared( vtkCell* cell );
647  static double QuadShapeAndSize( vtkCell* cell );
648  static double QuadShearAndSize( vtkCell* cell );
649  static double QuadDistortion( vtkCell* cell );
650 
658  static double TetEdgeRatio( vtkCell* cell );
659 
667  static double TetAspectRatio( vtkCell* cell );
668 
675  static double TetRadiusRatio( vtkCell* cell );
676 
687  static double TetAspectFrobenius( vtkCell* cell );
688 
694  static double TetMinAngle( vtkCell* cell );
695 
697 
704  static double TetCollapseRatio( vtkCell* cell );
705  static double TetAspectBeta( vtkCell* cell );
706  static double TetAspectGamma( vtkCell* cell );
707  static double TetVolume( vtkCell* cell );
708  static double TetCondition( vtkCell* cell );
709  static double TetJacobian( vtkCell* cell );
710  static double TetScaledJacobian( vtkCell* cell );
711  static double TetShape( vtkCell* cell );
712  static double TetRelativeSizeSquared( vtkCell* cell );
713  static double TetShapeandSize( vtkCell* cell );
714  static double TetDistortion( vtkCell* cell );
716 
724  static double HexEdgeRatio( vtkCell* cell );
725 
732  static double HexMedAspectFrobenius( vtkCell* cell );
733 
735 
741  static double HexMaxAspectFrobenius( vtkCell* cell );
742  static double HexMaxEdgeRatio( vtkCell* cell );
743  static double HexSkew( vtkCell* cell );
744  static double HexTaper( vtkCell* cell );
745  static double HexVolume( vtkCell* cell );
746  static double HexStretch( vtkCell* cell );
747  static double HexDiagonal( vtkCell* cell );
748  static double HexDimension( vtkCell* cell );
749  static double HexOddy( vtkCell* cell );
750  static double HexCondition( vtkCell* cell );
751  static double HexJacobian( vtkCell* cell );
752  static double HexScaledJacobian( vtkCell* cell );
753  static double HexShear( vtkCell* cell );
754  static double HexShape( vtkCell* cell );
755  static double HexRelativeSizeSquared( vtkCell* cell );
756  static double HexShapeAndSize( vtkCell* cell );
757  static double HexShearAndSize( vtkCell* cell );
758  static double HexDistortion( vtkCell* cell );
760 
762 
768  virtual void SetRatio( int r ) { this->SetSaveCellQuality( r ); }
769  int GetRatio() { return this->GetSaveCellQuality(); }
770  vtkBooleanMacro(Ratio,int);
772 
774 
786  virtual void SetVolume( int cv )
787  {
788  if ( ! ((cv != 0) ^ (this->Volume != 0)) )
789  {
790  return;
791  }
792  this->Modified();
793  this->Volume = cv;
794  if ( this->Volume )
795  {
796  this->CompatibilityModeOn();
797  }
798  }
799  int GetVolume()
800  {
801  return this->Volume;
802  }
803  vtkBooleanMacro(Volume,int);
805 
807 
825  virtual void SetCompatibilityMode( int cm )
826  {
827  if ( !((cm != 0) ^ (this->CompatibilityMode != 0)) )
828  {
829  return;
830  }
831  this->CompatibilityMode = cm;
832  this->Modified();
833  if ( this->CompatibilityMode )
834  {
835  this->Volume = 1;
836  this->TetQualityMeasure = VTK_QUALITY_RADIUS_RATIO;
837  }
838  }
839  vtkGetMacro(CompatibilityMode,int);
840  vtkBooleanMacro(CompatibilityMode,int);
842 
843 protected:
844  vtkMeshQuality();
845  ~vtkMeshQuality();
846 
848 
851  static int GetCurrentTriangleNormal( double point[3], double normal[3] );
852 
858 
860  int Volume;
861 
863  static double CurrentTriNormal[3];
864 
865 private:
866  vtkMeshQuality( const vtkMeshQuality& ); // Not implemented.
867  void operator = ( const vtkMeshQuality& ); // Not implemented.
868 };
869 
870 #endif // vtkMeshQuality_h
#define VTK_QUALITY_SHEAR
void SetQuadQualityMeasureToEdgeRatio()
void SetQuadQualityMeasureToWarpage()
void SetQuadQualityMeasureToRelativeSizeSquared()
#define VTK_QUALITY_DIMENSION
void SetHexQualityMeasureToMedAspectFrobenius()
void SetTetQualityMeasureToMinAngle()
void SetHexQualityMeasureToRelativeSizeSquared()
void SetQuadQualityMeasureToRadiusRatio()
void SetTriangleQualityMeasureToAspectFrobenius()
#define VTK_GRAPHICS_EXPORT
void SetTriangleQualityMeasureToArea()
void SetTriangleQualityMeasureToAspectRatio()
#define VTK_QUALITY_STRETCH
#define VTK_QUALITY_ASPECT_RATIO
void SetHexQualityMeasureToScaledJacobian()
void SetTetQualityMeasureToScaledJacobian()
void SetTetQualityMeasureToEdgeRatio()
void SetHexQualityMeasureToVolume()
void SetQuadQualityMeasureToOddy()
Store vtkAlgorithm input/output information.
void SetHexQualityMeasureToShapeAndSize()
#define VTK_QUALITY_ASPECT_BETA
void SetQuadQualityMeasureToMaxAngle()
void SetHexQualityMeasureToEdgeRatio()
#define VTK_QUALITY_JACOBIAN
virtual void SetRatio(int r)
void SetTetQualityMeasureToRelativeSizeSquared()
#define VTK_QUALITY_EDGE_RATIO
void SetTetQualityMeasureToCondition()
#define VTK_QUALITY_SHEAR_AND_SIZE
void SetTetQualityMeasureToShapeAndSize()
void SetTriangleQualityMeasureToDistortion()
void SetTriangleQualityMeasureToCondition()
void SetQuadQualityMeasureToMinAngle()
void SetQuadQualityMeasureToMedAspectFrobenius()
#define VTK_QUALITY_ODDY
void SetQuadQualityMeasureToShearAndSize()
#define VTK_QUALITY_RADIUS_RATIO
void SetQuadQualityMeasureToMaxEdgeRatios()
virtual void SetVolume(int cv)
void SetHexQualityMeasureToSkew()
void SetQuadQualityMeasureToMaxAspectFrobenius()
void SetTriangleQualityMeasureToShape()
void SetQuadQualityMeasureToAspectRatio()
void SetTriangleQualityMeasureToScaledJacobian()
virtual void SetCompatibilityMode(int cm)
#define VTK_QUALITY_VOLUME
#define VTK_QUALITY_RELATIVE_SIZE_SQUARED
#define VTK_QUALITY_MIN_ANGLE
void SetTetQualityMeasureToJacobian()
void SetTetQualityMeasureToDistortion()
#define VTK_QUALITY_DIAGONAL
void SetQuadQualityMeasureToScaledJacobian()
void SetQuadQualityMeasureToJacobian()
#define VTK_QUALITY_WARPAGE
#define VTK_QUALITY_SKEW
void SetHexQualityMeasureToDiagonal()
abstract class to specify cell behavior
Definition: vtkCell.h:57
void SetQuadQualityMeasureToStretch()
void SetTriangleQualityMeasureToRadiusRatio()
void SetTriangleQualityMeasureToEdgeRatio()
void SetTetQualityMeasureToCollapseRatio()
void SetTetQualityMeasureToAspectBeta()
void SetTetQualityMeasureToAspectFrobenius()
#define VTK_QUALITY_MAX_ASPECT_FROBENIUS
void SetHexQualityMeasureToDistortion()
a simple class to control print indentation
Definition: vtkIndent.h:37
void SetHexQualityMeasureToJacobian()
void SetTetQualityMeasureToVolume()
#define VTK_QUALITY_SHAPE_AND_SIZE
void SetHexQualityMeasureToMaxEdgeRatios()
void SetHexQualityMeasureToMaxAspectFrobenius()
#define VTK_QUALITY_AREA
void SetTriangleQualityMeasureToMinAngle()
#define VTK_QUALITY_TAPER
void SetTetQualityMeasureToRadiusRatio()
void SetQuadQualityMeasureToShapeAndSize()
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:53
void SetQuadQualityMeasureToShear()
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
void SetTriangleQualityMeasureToRelativeSizeSquared()
#define VTK_QUALITY_MAX_ANGLE
virtual void Modified()
#define VTK_QUALITY_COLLAPSE_RATIO
void SetQuadQualityMeasureToArea()
void SetHexQualityMeasureToStretch()
void SetTriangleQualityMeasureToShapeAndSize()
#define VTK_QUALITY_MED_ASPECT_FROBENIUS
void SetHexQualityMeasureToShearAndSize()
void SetHexQualityMeasureToTaper()
void SetHexQualityMeasureToShear()
void SetHexQualityMeasureToShape()
void SetQuadQualityMeasureToDistortion()
void SetHexQualityMeasureToOddy()
void SetQuadQualityMeasureToSkew()
void SetTetQualityMeasureToAspectRatio()
#define VTK_QUALITY_ASPECT_GAMMA
void SetQuadQualityMeasureToShape()
#define VTK_QUALITY_CONDITION
void SetTriangleQualityMeasureToMaxAngle()
#define VTK_QUALITY_DISTORTION
Store zero or more vtkInformation instances.
vtkDataArray * CellNormals
void SetTetQualityMeasureToAspectGamma()
Calculate functions of quality of the elements.
#define VTK_QUALITY_SHAPE
void PrintSelf(ostream &os, vtkIndent indent)
Superclass for algorithms that produce output of the same type as input.
void SetHexQualityMeasureToDimension()
#define VTK_QUALITY_MAX_EDGE_RATIO
void SetQuadQualityMeasureToTaper()
void SetTetQualityMeasureToShape()
static vtkDataSetAlgorithm * New()
#define VTK_QUALITY_ASPECT_FROBENIUS
#define VTK_QUALITY_SCALED_JACOBIAN
void SetQuadQualityMeasureToCondition()
void SetHexQualityMeasureToCondition()