VTK  9.2.6
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 =========================================================================*/
35 #ifndef vtkCellQuality_h
36 #define vtkCellQuality_h
37 
38 #include "vtkDataSetAlgorithm.h"
39 #include "vtkFiltersVerdictModule.h" // For export macro
40 #include "vtkMeshQuality.h" // For QualityMeasureType
41 
42 class vtkCell;
43 class vtkCellQualityFunctor;
44 class vtkDataArray;
45 class vtkIdList;
46 class vtkPoints;
47 
48 class VTKFILTERSVERDICT_EXPORT vtkCellQuality : public vtkDataSetAlgorithm
49 {
50 private:
51  friend class vtkCellQualityFunctor;
52 
53 public:
54  void PrintSelf(ostream& os, vtkIndent indent) override;
56  static vtkCellQuality* New();
57 
59 
71  vtkSetEnumMacro(QualityMeasure, QualityMeasureTypes);
72  virtual void SetQualityMeasure(int measure)
73  {
74  this->SetQualityMeasure(static_cast<QualityMeasureTypes>(measure));
75  }
76  vtkGetEnumMacro(QualityMeasure, QualityMeasureTypes);
77  void SetQualityMeasureToArea() { this->SetQualityMeasure(QualityMeasureTypes::AREA); }
79  {
80  this->SetQualityMeasure(QualityMeasureTypes::ASPECT_FROBENIUS);
81  }
83  {
84  this->SetQualityMeasure(QualityMeasureTypes::ASPECT_GAMMA);
85  }
87  {
88  this->SetQualityMeasure(QualityMeasureTypes::ASPECT_RATIO);
89  }
91  {
92  this->SetQualityMeasure(QualityMeasureTypes::COLLAPSE_RATIO);
93  }
94  void SetQualityMeasureToCondition() { this->SetQualityMeasure(QualityMeasureTypes::CONDITION); }
95  void SetQualityMeasureToDiagonal() { this->SetQualityMeasure(QualityMeasureTypes::DIAGONAL); }
96  void SetQualityMeasureToDimension() { this->SetQualityMeasure(QualityMeasureTypes::DIMENSION); }
97  void SetQualityMeasureToDistortion() { this->SetQualityMeasure(QualityMeasureTypes::DISTORTION); }
98  void SetQualityMeasureToJacobian() { this->SetQualityMeasure(QualityMeasureTypes::JACOBIAN); }
99  void SetQualityMeasureToMaxAngle() { this->SetQualityMeasure(QualityMeasureTypes::MAX_ANGLE); }
101  {
102  this->SetQualityMeasure(QualityMeasureTypes::MAX_ASPECT_FROBENIUS);
103  }
105  {
106  this->SetQualityMeasure(QualityMeasureTypes::MAX_EDGE_RATIO);
107  }
109  {
110  this->SetQualityMeasure(QualityMeasureTypes::MED_ASPECT_FROBENIUS);
111  }
112  void SetQualityMeasureToMinAngle() { this->SetQualityMeasure(QualityMeasureTypes::MIN_ANGLE); }
113  void SetQualityMeasureToOddy() { this->SetQualityMeasure(QualityMeasureTypes::ODDY); }
115  {
116  this->SetQualityMeasure(QualityMeasureTypes::RADIUS_RATIO);
117  }
119  {
120  this->SetQualityMeasure(QualityMeasureTypes::RELATIVE_SIZE_SQUARED);
121  }
123  {
124  this->SetQualityMeasure(QualityMeasureTypes::SCALED_JACOBIAN);
125  }
127  {
128  this->SetQualityMeasure(QualityMeasureTypes::SHAPE_AND_SIZE);
129  }
130  void SetQualityMeasureToShape() { this->SetQualityMeasure(QualityMeasureTypes::SHAPE); }
132  {
133  this->SetQualityMeasure(QualityMeasureTypes::SHEAR_AND_SIZE);
134  }
135  void SetQualityMeasureToShear() { this->SetQualityMeasure(QualityMeasureTypes::SHEAR); }
136  void SetQualityMeasureToSkew() { this->SetQualityMeasure(QualityMeasureTypes::SKEW); }
137  void SetQualityMeasureToStretch() { this->SetQualityMeasure(QualityMeasureTypes::STRETCH); }
138  void SetQualityMeasureToTaper() { this->SetQualityMeasure(QualityMeasureTypes::TAPER); }
139  void SetQualityMeasureToVolume() { this->SetQualityMeasure(QualityMeasureTypes::VOLUME); }
140  void SetQualityMeasureToWarpage() { this->SetQualityMeasure(QualityMeasureTypes::WARPAGE); }
142 
144 
150  vtkSetMacro(UnsupportedGeometry, double);
151  vtkGetMacro(UnsupportedGeometry, double);
153 
155 
162  vtkSetMacro(UndefinedQuality, double);
163  vtkGetMacro(UndefinedQuality, double);
165 
166  double TriangleStripArea(vtkCell*);
167  double PixelArea(vtkCell*);
168  double PolygonArea(vtkCell*);
169 
170 protected:
171  ~vtkCellQuality() override;
172  vtkCellQuality();
173 
192  double ComputeTriangleQuality(vtkCell*);
193 
223  double ComputeQuadQuality(vtkCell*);
224 
248  double ComputeTetQuality(vtkCell*);
249 
259  double ComputePyramidQuality(vtkCell*);
260 
276  double ComputeWedgeQuality(vtkCell*);
277 
304  double ComputeHexQuality(vtkCell*);
305 
312  double ComputeTriangleStripQuality(vtkCell*);
313 
319  double ComputePixelQuality(vtkCell*);
320 
322 
324 
325  // Default return value for unsupported geometry
327 
328  // Default return value for qualities that are not well-defined for certain
329  // types of supported geometries. e.g. volume of a triangle
331 
332 private:
333  vtkIdList* PointIds;
334  vtkPoints* Points;
335 
336  vtkCellQuality(const vtkCellQuality&) = delete;
337  void operator=(const vtkCellQuality&) = delete;
338 };
339 
340 #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:60
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:39
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:33
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:55
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:39
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.