VTK  9.0.1
vtkCellQuality.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkObject.cxx
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&, vtkIndent) 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 
154  double TriangleStripArea(vtkCell*);
155  double PixelArea(vtkCell*);
156  double PolygonArea(vtkCell*);
157 
158 protected:
159  ~vtkCellQuality() override;
160  vtkCellQuality();
161 
178  double ComputeTriangleQuality(vtkCell*);
179 
208  double ComputeQuadQuality(vtkCell*);
209 
229  double ComputeTetQuality(vtkCell*);
230 
255  double ComputeHexQuality(vtkCell*);
256 
263  double ComputeTriangleStripQuality(vtkCell*);
264 
270  double ComputePixelQuality(vtkCell*);
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
void SetQualityMeasureToMinAngle()
void SetQualityMeasureToVolume()
Store vtkAlgorithm input/output information.
void SetQualityMeasureToShearAndSize()
void SetQualityMeasureToDimension()
void SetQualityMeasureToOddy()
void SetQualityMeasureToJacobian()
void SetQualityMeasureToCollapseRatio()
void SetQualityMeasureToShape()
Calculate functions of quality of the elements of a mesh.
void SetQualityMeasureToShapeAndSize()
void SetQualityMeasureToShear()
void SetQualityMeasureToTaper()
void SetQualityMeasureToMaxAspectFrobenius()
void SetQualityMeasureToAspectBeta()
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:56
void SetQualityMeasureToAspectFrobenius()
void SetQualityMeasureToDiagonal()
void SetQualityMeasureToScaledJacobian()
void SetQualityMeasureToCondition()
a simple class to control print indentation
Definition: vtkIndent.h:33
void SetQualityMeasureToMedAspectFrobenius()
list of point or cell ids
Definition: vtkIdList.h:30
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:49
void SetQualityMeasureToWarpage()
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called within ProcessRequest when a request asks the algorithm to do its work.
void SetQualityMeasureToMaxAngle()
void SetQualityMeasureToRadiusRatio()
void SetQualityMeasureToAspectRatio()
Store zero or more vtkInformation instances.
void SetQualityMeasureToRelativeSizeSquared()
Superclass for algorithms that produce output of the same type as input.
void SetQualityMeasureToSkew()
void SetQualityMeasureToAspectGamma()
static vtkDataSetAlgorithm * New()
void SetQualityMeasureToStretch()
represent and manipulate 3D points
Definition: vtkPoints.h:33
void SetQualityMeasureToMaxEdgeRatio()
double UnsupportedGeometry
void SetQualityMeasureToArea()
void SetQualityMeasureToDistortion()