VTK  9.3.1
vtkCellQuality.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
23 #ifndef vtkCellQuality_h
24 #define vtkCellQuality_h
25 
26 #include "vtkDataSetAlgorithm.h"
27 #include "vtkFiltersVerdictModule.h" // For export macro
28 #include "vtkMeshQuality.h" // For QualityMeasureType
29 
30 VTK_ABI_NAMESPACE_BEGIN
31 class vtkCell;
32 class vtkCellQualityFunctor;
33 class vtkDataArray;
34 class vtkIdList;
35 class vtkPoints;
36 
37 class VTKFILTERSVERDICT_EXPORT vtkCellQuality : public vtkDataSetAlgorithm
38 {
39 private:
40  friend class vtkCellQualityFunctor;
41 
42 public:
43  void PrintSelf(ostream& os, vtkIndent indent) override;
45  static vtkCellQuality* New();
46 
48 
60  vtkSetEnumMacro(QualityMeasure, QualityMeasureTypes);
61  virtual void SetQualityMeasure(int measure)
62  {
63  this->SetQualityMeasure(static_cast<QualityMeasureTypes>(measure));
64  }
65  vtkGetEnumMacro(QualityMeasure, QualityMeasureTypes);
66  void SetQualityMeasureToArea() { this->SetQualityMeasure(QualityMeasureTypes::AREA); }
68  {
69  this->SetQualityMeasure(QualityMeasureTypes::ASPECT_FROBENIUS);
70  }
72  {
73  this->SetQualityMeasure(QualityMeasureTypes::ASPECT_GAMMA);
74  }
76  {
77  this->SetQualityMeasure(QualityMeasureTypes::ASPECT_RATIO);
78  }
80  {
81  this->SetQualityMeasure(QualityMeasureTypes::COLLAPSE_RATIO);
82  }
83  void SetQualityMeasureToCondition() { this->SetQualityMeasure(QualityMeasureTypes::CONDITION); }
84  void SetQualityMeasureToDiagonal() { this->SetQualityMeasure(QualityMeasureTypes::DIAGONAL); }
85  void SetQualityMeasureToDimension() { this->SetQualityMeasure(QualityMeasureTypes::DIMENSION); }
86  void SetQualityMeasureToDistortion() { this->SetQualityMeasure(QualityMeasureTypes::DISTORTION); }
87  void SetQualityMeasureToJacobian() { this->SetQualityMeasure(QualityMeasureTypes::JACOBIAN); }
88  void SetQualityMeasureToMaxAngle() { this->SetQualityMeasure(QualityMeasureTypes::MAX_ANGLE); }
90  {
91  this->SetQualityMeasure(QualityMeasureTypes::MAX_ASPECT_FROBENIUS);
92  }
94  {
95  this->SetQualityMeasure(QualityMeasureTypes::MAX_EDGE_RATIO);
96  }
98  {
99  this->SetQualityMeasure(QualityMeasureTypes::MED_ASPECT_FROBENIUS);
100  }
101  void SetQualityMeasureToMinAngle() { this->SetQualityMeasure(QualityMeasureTypes::MIN_ANGLE); }
102  void SetQualityMeasureToOddy() { this->SetQualityMeasure(QualityMeasureTypes::ODDY); }
104  {
105  this->SetQualityMeasure(QualityMeasureTypes::RADIUS_RATIO);
106  }
108  {
109  this->SetQualityMeasure(QualityMeasureTypes::RELATIVE_SIZE_SQUARED);
110  }
112  {
113  this->SetQualityMeasure(QualityMeasureTypes::SCALED_JACOBIAN);
114  }
116  {
117  this->SetQualityMeasure(QualityMeasureTypes::SHAPE_AND_SIZE);
118  }
119  void SetQualityMeasureToShape() { this->SetQualityMeasure(QualityMeasureTypes::SHAPE); }
121  {
122  this->SetQualityMeasure(QualityMeasureTypes::SHEAR_AND_SIZE);
123  }
124  void SetQualityMeasureToShear() { this->SetQualityMeasure(QualityMeasureTypes::SHEAR); }
125  void SetQualityMeasureToSkew() { this->SetQualityMeasure(QualityMeasureTypes::SKEW); }
126  void SetQualityMeasureToStretch() { this->SetQualityMeasure(QualityMeasureTypes::STRETCH); }
127  void SetQualityMeasureToTaper() { this->SetQualityMeasure(QualityMeasureTypes::TAPER); }
128  void SetQualityMeasureToVolume() { this->SetQualityMeasure(QualityMeasureTypes::VOLUME); }
129  void SetQualityMeasureToWarpage() { this->SetQualityMeasure(QualityMeasureTypes::WARPAGE); }
131 
133 
139  vtkSetMacro(UnsupportedGeometry, double);
140  vtkGetMacro(UnsupportedGeometry, double);
142 
144 
151  vtkSetMacro(UndefinedQuality, double);
152  vtkGetMacro(UndefinedQuality, double);
154 
155  double TriangleStripArea(vtkCell*);
156  double PixelArea(vtkCell*);
157  double PolygonArea(vtkCell*);
158 
159 protected:
160  ~vtkCellQuality() override;
161  vtkCellQuality();
162 
181  double ComputeTriangleQuality(vtkCell*);
182 
212  double ComputeQuadQuality(vtkCell*);
213 
237  double ComputeTetQuality(vtkCell*);
238 
248  double ComputePyramidQuality(vtkCell*);
249 
265  double ComputeWedgeQuality(vtkCell*);
266 
293  double ComputeHexQuality(vtkCell*);
294 
301  double ComputeTriangleStripQuality(vtkCell*);
302 
308  double ComputePixelQuality(vtkCell*);
309 
311 
313 
314  // Default return value for unsupported geometry
316 
317  // Default return value for qualities that are not well-defined for certain
318  // types of supported geometries. e.g. volume of a triangle
320 
321 private:
322  vtkIdList* PointIds;
323  vtkPoints* Points;
324 
325  vtkCellQuality(const vtkCellQuality&) = delete;
326  void operator=(const vtkCellQuality&) = delete;
327 };
328 
329 VTK_ABI_NAMESPACE_END
330 #endif // vtkCellQuality_h
QualityMeasureTypes
Enum which lists the Quality Measures Types.
void SetQualityMeasureToMinAngle()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToVolume()
Set/Get the particular estimator used to function the quality of all supported geometries.
Store vtkAlgorithm input/output information.
void SetQualityMeasureToShearAndSize()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToDimension()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToOddy()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToJacobian()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToCollapseRatio()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToShape()
Set/Get the particular estimator used to function the quality of all supported geometries.
Calculate functions of quality of the elements of a mesh.
void SetQualityMeasureToShapeAndSize()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToShear()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToTaper()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToMaxAspectFrobenius()
Set/Get the particular estimator used to function the quality of all supported geometries.
double UndefinedQuality
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
abstract class to specify cell behavior
Definition: vtkCell.h:49
void SetQualityMeasureToAspectFrobenius()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToDiagonal()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToScaledJacobian()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToCondition()
Set/Get the particular estimator used to function the quality of all supported geometries.
a simple class to control print indentation
Definition: vtkIndent.h:28
void SetQualityMeasureToMedAspectFrobenius()
Set/Get the particular estimator used to function the quality of all supported geometries.
list of point or cell ids
Definition: vtkIdList.h:22
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
void SetQualityMeasureToWarpage()
Set/Get the particular estimator used to function the quality of all supported geometries.
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called within ProcessRequest when a request asks the algorithm to do its work.
void SetQualityMeasureToMaxAngle()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToRadiusRatio()
Set/Get the particular estimator used to function the quality of all supported geometries.
virtual void SetQualityMeasure(int measure)
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToAspectRatio()
Set/Get the particular estimator used to function the quality of all supported geometries.
vtkMeshQuality::QualityMeasureTypes QualityMeasure
Store zero or more vtkInformation instances.
void SetQualityMeasureToRelativeSizeSquared()
Set/Get the particular estimator used to function the quality of all supported geometries.
Superclass for algorithms that produce output of the same type as input.
void SetQualityMeasureToSkew()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToAspectGamma()
Set/Get the particular estimator used to function the quality of all supported geometries.
static vtkDataSetAlgorithm * New()
void SetQualityMeasureToStretch()
Set/Get the particular estimator used to function the quality of all supported geometries.
represent and manipulate 3D points
Definition: vtkPoints.h:28
void SetQualityMeasureToMaxEdgeRatio()
Set/Get the particular estimator used to function the quality of all supported geometries.
double UnsupportedGeometry
void SetQualityMeasureToArea()
Set/Get the particular estimator used to function the quality of all supported geometries.
void SetQualityMeasureToDistortion()
Set/Get the particular estimator used to function the quality of all supported geometries.