VTK  9.1.0
vtkCellQuality.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkCellQuality.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
32 #ifndef vtkCellQuality_h
33 #define vtkCellQuality_h
34 
35 #include "vtkDataSetAlgorithm.h"
36 #include "vtkFiltersVerdictModule.h" // For export macro
37 
38 class vtkCell;
39 class vtkDataArray;
40 class vtkIdList;
41 class vtkPoints;
42 
43 class VTKFILTERSVERDICT_EXPORT vtkCellQuality : public vtkDataSetAlgorithm
44 {
45 
46  enum
47  {
48  NONE = 0,
49  AREA,
50  ASPECT_BETA,
51  ASPECT_FROBENIUS,
52  ASPECT_GAMMA,
53  ASPECT_RATIO,
54  COLLAPSE_RATIO,
55  CONDITION,
56  DIAGONAL,
57  DIMENSION,
58  DISTORTION,
59  EDGE_RATIO,
60  JACOBIAN,
61  MAX_ANGLE,
62  MAX_ASPECT_FROBENIUS,
63  MAX_EDGE_RATIO,
64  MED_ASPECT_FROBENIUS,
65  MIN_ANGLE,
66  NORMAL,
67  ODDY,
68  RADIUS_RATIO,
69  RELATIVE_SIZE_SQUARED,
70  SCALED_JACOBIAN,
71  SHAPE,
72  SHAPE_AND_SIZE,
73  SHEAR,
74  SHEAR_AND_SIZE,
75  SKEW,
76  STRETCH,
77  TAPER,
78  VOLUME,
79  WARPAGE
80  };
81 
82 public:
83  void PrintSelf(ostream& os, vtkIndent indent) override;
85  static vtkCellQuality* New();
86 
88 
97  vtkSetMacro(QualityMeasure, int);
98  vtkGetMacro(QualityMeasure, int);
100 
101  void SetQualityMeasureToArea() { this->SetQualityMeasure(AREA); }
102  void SetQualityMeasureToAspectBeta() { this->SetQualityMeasure(ASPECT_BETA); }
103  void SetQualityMeasureToAspectFrobenius() { this->SetQualityMeasure(ASPECT_FROBENIUS); }
104  void SetQualityMeasureToAspectGamma() { this->SetQualityMeasure(ASPECT_GAMMA); }
105  void SetQualityMeasureToAspectRatio() { this->SetQualityMeasure(ASPECT_RATIO); }
106  void SetQualityMeasureToCollapseRatio() { this->SetQualityMeasure(COLLAPSE_RATIO); }
107  void SetQualityMeasureToCondition() { this->SetQualityMeasure(CONDITION); }
108  void SetQualityMeasureToDiagonal() { this->SetQualityMeasure(DIAGONAL); }
109  void SetQualityMeasureToDimension() { this->SetQualityMeasure(DIMENSION); }
110  void SetQualityMeasureToDistortion() { this->SetQualityMeasure(DISTORTION); }
111  void SetQualityMeasureToJacobian() { this->SetQualityMeasure(JACOBIAN); }
112  void SetQualityMeasureToMaxAngle() { this->SetQualityMeasure(MAX_ANGLE); }
113  void SetQualityMeasureToMaxAspectFrobenius() { this->SetQualityMeasure(MAX_ASPECT_FROBENIUS); }
114  void SetQualityMeasureToMaxEdgeRatio() { this->SetQualityMeasure(MAX_EDGE_RATIO); }
115  void SetQualityMeasureToMedAspectFrobenius() { this->SetQualityMeasure(MED_ASPECT_FROBENIUS); }
116  void SetQualityMeasureToMinAngle() { this->SetQualityMeasure(MIN_ANGLE); }
117  void SetQualityMeasureToOddy() { this->SetQualityMeasure(ODDY); }
118  void SetQualityMeasureToRadiusRatio() { this->SetQualityMeasure(RADIUS_RATIO); }
119  void SetQualityMeasureToRelativeSizeSquared() { this->SetQualityMeasure(RELATIVE_SIZE_SQUARED); }
120  void SetQualityMeasureToScaledJacobian() { this->SetQualityMeasure(SCALED_JACOBIAN); }
121  void SetQualityMeasureToShapeAndSize() { this->SetQualityMeasure(SHAPE_AND_SIZE); }
122  void SetQualityMeasureToShape() { this->SetQualityMeasure(SHAPE); }
123  void SetQualityMeasureToShearAndSize() { this->SetQualityMeasure(SHEAR_AND_SIZE); }
124  void SetQualityMeasureToShear() { this->SetQualityMeasure(SHEAR); }
125  void SetQualityMeasureToSkew() { this->SetQualityMeasure(SKEW); }
126  void SetQualityMeasureToStretch() { this->SetQualityMeasure(STRETCH); }
127  void SetQualityMeasureToTaper() { this->SetQualityMeasure(TAPER); }
128  void SetQualityMeasureToVolume() { this->SetQualityMeasure(VOLUME); }
129  void SetQualityMeasureToWarpage() { this->SetQualityMeasure(WARPAGE); }
130 
132 
138  vtkSetMacro(UnsupportedGeometry, double);
139  vtkGetMacro(UnsupportedGeometry, double);
141 
143 
150  vtkSetMacro(UndefinedQuality, double);
151  vtkGetMacro(UndefinedQuality, double);
153 
155  double PixelArea(vtkCell*);
157 
158 protected:
159  ~vtkCellQuality() override;
161 
179 
209 
230 
256 
264 
271 
273 
275 
282  static int GetCurrentTriangleNormal(double point[3], double normal[3]);
283  static double CurrentTriNormal[3];
285 
287 
288  // Default return value for unsupported geometry
290 
291  // Default return value for qualities that are not well-defined for certain
292  // types of supported geometries. e.g. volume of a triangle
294 
295 private:
296  vtkIdList* PointIds;
297  vtkPoints* Points;
298 
299  vtkCellQuality(const vtkCellQuality&) = delete;
300  void operator=(const vtkCellQuality&) = delete;
301 };
302 
303 #endif // vtkCellQuality_h
Calculate functions of quality of the elements of a mesh.
double UnsupportedGeometry
double ComputeQuadQuality(vtkCell *)
Set/Get the particular estimator used to measure the quality of quadrilaterals.
double PixelArea(vtkCell *)
void SetQualityMeasureToCondition()
static int GetCurrentTriangleNormal(double point[3], double normal[3])
A function called by some VERDICT triangle quality functions to test for inverted triangles.
void SetQualityMeasureToShearAndSize()
void SetQualityMeasureToScaledJacobian()
void SetQualityMeasureToAspectRatio()
void SetQualityMeasureToRelativeSizeSquared()
double UndefinedQuality
void SetQualityMeasureToAspectBeta()
double PolygonArea(vtkCell *)
void SetQualityMeasureToAspectFrobenius()
void SetQualityMeasureToDistortion()
~vtkCellQuality() override
void SetQualityMeasureToShape()
void SetQualityMeasureToOddy()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetQualityMeasureToRadiusRatio()
void SetQualityMeasureToMaxAngle()
void SetQualityMeasureToDimension()
double ComputeTriangleStripQuality(vtkCell *)
Set/Get the particular estimator used to measure the quality of triangle strip.
void SetQualityMeasureToMaxEdgeRatio()
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called within ProcessRequest when a request asks the algorithm to do its work.
void SetQualityMeasureToCollapseRatio()
void SetQualityMeasureToTaper()
void SetQualityMeasureToShapeAndSize()
void SetQualityMeasureToWarpage()
double ComputeTriangleQuality(vtkCell *)
Set/Get the particular estimator used to function the quality of triangles.
double TriangleStripArea(vtkCell *)
void SetQualityMeasureToVolume()
static vtkCellQuality * New()
void SetQualityMeasureToDiagonal()
void SetQualityMeasureToAspectGamma()
void SetQualityMeasureToArea()
void SetQualityMeasureToJacobian()
void SetQualityMeasureToSkew()
void SetQualityMeasureToMaxAspectFrobenius()
void SetQualityMeasureToStretch()
double ComputeTetQuality(vtkCell *)
Set/Get the particular estimator used to measure the quality of tetrahedra.
void SetQualityMeasureToMinAngle()
void SetQualityMeasureToMedAspectFrobenius()
double ComputePixelQuality(vtkCell *)
Set/Get the particular estimator used to measure the quality of pixel.
double ComputeHexQuality(vtkCell *)
Set/Get the particular estimator used to measure the quality of hexahedra.
void SetQualityMeasureToShear()
abstract class to specify cell behavior
Definition: vtkCell.h:58
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:50
Superclass for algorithms that produce output of the same type as input.
list of point or cell ids
Definition: vtkIdList.h:31
a simple class to control print indentation
Definition: vtkIndent.h:34
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
represent and manipulate 3D points
Definition: vtkPoints.h:34
@ point
Definition: vtkX3D.h:242