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
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:33
vtkCellQuality::SetQualityMeasureToAspectGamma
void SetQualityMeasureToAspectGamma()
Definition: vtkCellQuality.h:104
vtkCellQuality::SetQualityMeasureToShapeAndSize
void SetQualityMeasureToShapeAndSize()
Definition: vtkCellQuality.h:121
vtkCellQuality::SetQualityMeasureToRelativeSizeSquared
void SetQualityMeasureToRelativeSizeSquared()
Definition: vtkCellQuality.h:119
vtkCellQuality::SetQualityMeasureToCondition
void SetQualityMeasureToCondition()
Definition: vtkCellQuality.h:107
vtkCellQuality::SetQualityMeasureToCollapseRatio
void SetQualityMeasureToCollapseRatio()
Definition: vtkCellQuality.h:106
vtkCellQuality::SetQualityMeasureToDistortion
void SetQualityMeasureToDistortion()
Definition: vtkCellQuality.h:110
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:35
vtkCellQuality::SetQualityMeasureToDimension
void SetQualityMeasureToDimension()
Definition: vtkCellQuality.h:109
vtkCellQuality::UnsupportedGeometry
double UnsupportedGeometry
Definition: vtkCellQuality.h:289
vtkDataSetAlgorithm::RequestData
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called within ProcessRequest when a request asks the algorithm to do its work.
Definition: vtkDataSetAlgorithm.h:176
vtkCellQuality::SetQualityMeasureToShear
void SetQualityMeasureToShear()
Definition: vtkCellQuality.h:124
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:49
vtkCellQuality::SetQualityMeasureToMaxEdgeRatio
void SetQualityMeasureToMaxEdgeRatio()
Definition: vtkCellQuality.h:114
vtkCellQuality::QualityMeasure
int QualityMeasure
Definition: vtkCellQuality.h:286
vtkCellQuality::SetQualityMeasureToOddy
void SetQualityMeasureToOddy()
Definition: vtkCellQuality.h:117
vtkCellQuality::SetQualityMeasureToShape
void SetQualityMeasureToShape()
Definition: vtkCellQuality.h:122
vtkCellQuality::SetQualityMeasureToTaper
void SetQualityMeasureToTaper()
Definition: vtkCellQuality.h:127
vtkDataSetAlgorithm
Superclass for algorithms that produce output of the same type as input.
Definition: vtkDataSetAlgorithm.h:48
vtkX3D::point
@ point
Definition: vtkX3D.h:242
vtkCellQuality::SetQualityMeasureToVolume
void SetQualityMeasureToVolume()
Definition: vtkCellQuality.h:128
vtkCellQuality::SetQualityMeasureToScaledJacobian
void SetQualityMeasureToScaledJacobian()
Definition: vtkCellQuality.h:120
vtkCellQuality::SetQualityMeasureToJacobian
void SetQualityMeasureToJacobian()
Definition: vtkCellQuality.h:111
vtkCellQuality::SetQualityMeasureToMedAspectFrobenius
void SetQualityMeasureToMedAspectFrobenius()
Definition: vtkCellQuality.h:115
vtkCellQuality::SetQualityMeasureToAspectBeta
void SetQualityMeasureToAspectBeta()
Definition: vtkCellQuality.h:102
vtkCellQuality::UndefinedQuality
double UndefinedQuality
Definition: vtkCellQuality.h:293
vtkCell
abstract class to specify cell behavior
Definition: vtkCell.h:56
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkCellQuality::SetQualityMeasureToRadiusRatio
void SetQualityMeasureToRadiusRatio()
Definition: vtkCellQuality.h:118
vtkDataSetAlgorithm::New
static vtkDataSetAlgorithm * New()
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:30
vtkCellQuality::SetQualityMeasureToAspectRatio
void SetQualityMeasureToAspectRatio()
Definition: vtkCellQuality.h:105
vtkCellQuality::SetQualityMeasureToArea
void SetQualityMeasureToArea()
Definition: vtkCellQuality.h:101
vtkCellQuality::SetQualityMeasureToSkew
void SetQualityMeasureToSkew()
Definition: vtkCellQuality.h:125
vtkCellQuality::SetQualityMeasureToWarpage
void SetQualityMeasureToWarpage()
Definition: vtkCellQuality.h:129
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:73
vtkDataSetAlgorithm.h
vtkCellQuality
Calculate functions of quality of the elements of a mesh.
Definition: vtkCellQuality.h:43
vtkCellQuality::SetQualityMeasureToMaxAspectFrobenius
void SetQualityMeasureToMaxAspectFrobenius()
Definition: vtkCellQuality.h:113
vtkCellQuality::SetQualityMeasureToMaxAngle
void SetQualityMeasureToMaxAngle()
Definition: vtkCellQuality.h:112
vtkDataSetAlgorithm::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkCellQuality::SetQualityMeasureToAspectFrobenius
void SetQualityMeasureToAspectFrobenius()
Definition: vtkCellQuality.h:103
vtkCellQuality::SetQualityMeasureToDiagonal
void SetQualityMeasureToDiagonal()
Definition: vtkCellQuality.h:108
vtkCellQuality::SetQualityMeasureToMinAngle
void SetQualityMeasureToMinAngle()
Definition: vtkCellQuality.h:116
vtkCellQuality::SetQualityMeasureToStretch
void SetQualityMeasureToStretch()
Definition: vtkCellQuality.h:126
vtkCellQuality::SetQualityMeasureToShearAndSize
void SetQualityMeasureToShearAndSize()
Definition: vtkCellQuality.h:123