VTK
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 "vtkFiltersVerdictModule.h" // For export macro
36 #include "vtkDataSetAlgorithm.h"
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 
102  {
103  this->SetQualityMeasure(AREA);
104  }
106  {
107  this->SetQualityMeasure(ASPECT_BETA);
108  }
110  {
111  this->SetQualityMeasure(ASPECT_FROBENIUS);
112  }
114  {
115  this->SetQualityMeasure(ASPECT_GAMMA);
116  }
118  {
119  this->SetQualityMeasure(ASPECT_RATIO);
120  }
122  {
123  this->SetQualityMeasure(COLLAPSE_RATIO);
124  }
126  {
127  this->SetQualityMeasure(CONDITION);
128  }
130  {
131  this->SetQualityMeasure(DIAGONAL);
132  }
134  {
135  this->SetQualityMeasure(DIMENSION);
136  }
138  {
139  this->SetQualityMeasure(DISTORTION);
140  }
142  {
143  this->SetQualityMeasure(JACOBIAN);
144  }
146  {
147  this->SetQualityMeasure(MAX_ANGLE);
148  }
150  {
151  this->SetQualityMeasure(MAX_ASPECT_FROBENIUS);
152  }
154  {
155  this->SetQualityMeasure(MAX_EDGE_RATIO);
156  }
158  {
159  this->SetQualityMeasure(MED_ASPECT_FROBENIUS);
160  }
162  {
163  this->SetQualityMeasure(MIN_ANGLE);
164  }
166  {
167  this->SetQualityMeasure(ODDY);
168  }
170  {
171  this->SetQualityMeasure(RADIUS_RATIO);
172  }
174  {
175  this->SetQualityMeasure(RELATIVE_SIZE_SQUARED);
176  }
178  {
179  this->SetQualityMeasure(SCALED_JACOBIAN);
180  }
182  {
183  this->SetQualityMeasure(SHAPE_AND_SIZE);
184  }
186  {
187  this->SetQualityMeasure(SHAPE);
188  }
190  {
191  this->SetQualityMeasure(SHEAR_AND_SIZE);
192  }
194  {
195  this->SetQualityMeasure(SHEAR);
196  }
198  {
199  this->SetQualityMeasure(SKEW);
200  }
202  {
203  this->SetQualityMeasure(STRETCH);
204  }
206  {
207  this->SetQualityMeasure(TAPER);
208  }
210  {
211  this->SetQualityMeasure(VOLUME);
212  }
214  {
215  this->SetQualityMeasure(WARPAGE);
216  }
217 
219 
225  vtkSetMacro(UnsupportedGeometry, double);
226  vtkGetMacro(UnsupportedGeometry, double);
228 
230 
237  vtkSetMacro(UndefinedQuality, double);
238  vtkGetMacro(UndefinedQuality, double);
240 
241  double TriangleStripArea (vtkCell*);
242  double PixelArea (vtkCell*);
243  double PolygonArea (vtkCell*);
244 
245 protected:
246  ~vtkCellQuality () override;
247  vtkCellQuality ();
248 
265  double ComputeTriangleQuality (vtkCell*);
266 
295  double ComputeQuadQuality (vtkCell*);
296 
316  double ComputeTetQuality (vtkCell*);
317 
342  double ComputeHexQuality (vtkCell*);
343 
350  double ComputeTriangleStripQuality (vtkCell*);
351 
357  double ComputePixelQuality (vtkCell*);
358 
359  int RequestData
361 
363 
370  static int GetCurrentTriangleNormal (double point [3], double normal [3]);
371  static double CurrentTriNormal [3];
373 
375 
376  // Default return value for unsupported geometry
378 
379  // Default return value for qualities that are not well-defined for certain
380  // types of supported geometries. e.g. volume of a triangle
382 
383 private:
384  vtkIdList* PointIds;
385  vtkPoints* Points;
386 
387  vtkCellQuality(const vtkCellQuality&) = delete;
388  void operator=(const vtkCellQuality&) = delete;
389 };
390 
391 #endif // vtkCellQuality_h
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:39
vtkCellQuality::SetQualityMeasureToAspectGamma
void SetQualityMeasureToAspectGamma()
Definition: vtkCellQuality.h:113
vtkCellQuality::SetQualityMeasureToShapeAndSize
void SetQualityMeasureToShapeAndSize()
Definition: vtkCellQuality.h:181
vtkCellQuality::SetQualityMeasureToRelativeSizeSquared
void SetQualityMeasureToRelativeSizeSquared()
Definition: vtkCellQuality.h:173
vtkCellQuality::SetQualityMeasureToCondition
void SetQualityMeasureToCondition()
Definition: vtkCellQuality.h:125
vtkCellQuality::SetQualityMeasureToCollapseRatio
void SetQualityMeasureToCollapseRatio()
Definition: vtkCellQuality.h:121
vtkCellQuality::SetQualityMeasureToDistortion
void SetQualityMeasureToDistortion()
Definition: vtkCellQuality.h:137
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:41
vtkCellQuality::SetQualityMeasureToDimension
void SetQualityMeasureToDimension()
Definition: vtkCellQuality.h:133
vtkCellQuality::UnsupportedGeometry
double UnsupportedGeometry
Definition: vtkCellQuality.h:377
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:180
vtkCellQuality::SetQualityMeasureToShear
void SetQualityMeasureToShear()
Definition: vtkCellQuality.h:193
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:54
vtkCellQuality::SetQualityMeasureToMaxEdgeRatio
void SetQualityMeasureToMaxEdgeRatio()
Definition: vtkCellQuality.h:153
vtkCellQuality::QualityMeasure
int QualityMeasure
Definition: vtkCellQuality.h:374
vtkCellQuality::SetQualityMeasureToOddy
void SetQualityMeasureToOddy()
Definition: vtkCellQuality.h:165
vtkCellQuality::SetQualityMeasureToShape
void SetQualityMeasureToShape()
Definition: vtkCellQuality.h:185
vtkCellQuality::SetQualityMeasureToTaper
void SetQualityMeasureToTaper()
Definition: vtkCellQuality.h:205
vtkDataSetAlgorithm
Superclass for algorithms that produce output of the same type as input.
Definition: vtkDataSetAlgorithm.h:48
vtkX3D::point
Definition: vtkX3D.h:236
vtkCellQuality::SetQualityMeasureToVolume
void SetQualityMeasureToVolume()
Definition: vtkCellQuality.h:209
vtkCellQuality::SetQualityMeasureToScaledJacobian
void SetQualityMeasureToScaledJacobian()
Definition: vtkCellQuality.h:177
vtkCellQuality::SetQualityMeasureToJacobian
void SetQualityMeasureToJacobian()
Definition: vtkCellQuality.h:141
vtkCellQuality::SetQualityMeasureToMedAspectFrobenius
void SetQualityMeasureToMedAspectFrobenius()
Definition: vtkCellQuality.h:157
vtkCellQuality::SetQualityMeasureToAspectBeta
void SetQualityMeasureToAspectBeta()
Definition: vtkCellQuality.h:105
vtkCellQuality::UndefinedQuality
double UndefinedQuality
Definition: vtkCellQuality.h:381
vtkCell
abstract class to specify cell behavior
Definition: vtkCell.h:59
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkCellQuality::SetQualityMeasureToRadiusRatio
void SetQualityMeasureToRadiusRatio()
Definition: vtkCellQuality.h:169
vtkDataSetAlgorithm::New
static vtkDataSetAlgorithm * New()
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:36
vtkCellQuality::SetQualityMeasureToAspectRatio
void SetQualityMeasureToAspectRatio()
Definition: vtkCellQuality.h:117
vtkCellQuality::SetQualityMeasureToArea
void SetQualityMeasureToArea()
Definition: vtkCellQuality.h:101
vtkCellQuality::SetQualityMeasureToSkew
void SetQualityMeasureToSkew()
Definition: vtkCellQuality.h:197
vtkCellQuality::SetQualityMeasureToWarpage
void SetQualityMeasureToWarpage()
Definition: vtkCellQuality.h:213
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:86
vtkDataSetAlgorithm.h
vtkCellQuality
Calculate functions of quality of the elements of a mesh.
Definition: vtkCellQuality.h:43
vtkCellQuality::SetQualityMeasureToMaxAspectFrobenius
void SetQualityMeasureToMaxAspectFrobenius()
Definition: vtkCellQuality.h:149
vtkCellQuality::SetQualityMeasureToMaxAngle
void SetQualityMeasureToMaxAngle()
Definition: vtkCellQuality.h:145
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:109
vtkCellQuality::SetQualityMeasureToDiagonal
void SetQualityMeasureToDiagonal()
Definition: vtkCellQuality.h:129
vtkCellQuality::SetQualityMeasureToMinAngle
void SetQualityMeasureToMinAngle()
Definition: vtkCellQuality.h:161
vtkCellQuality::SetQualityMeasureToStretch
void SetQualityMeasureToStretch()
Definition: vtkCellQuality.h:201
vtkCellQuality::SetQualityMeasureToShearAndSize
void SetQualityMeasureToShearAndSize()
Definition: vtkCellQuality.h:189