VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkObject.cxx 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00031 #ifndef __vtkCellQuality_h 00032 #define __vtkCellQuality_h 00033 00034 #include "vtkDataSetAlgorithm.h" 00035 00036 class vtkCell; 00037 class vtkDataArray; 00038 class vtkIdList; 00039 class vtkPoints; 00040 00041 class VTK_GRAPHICS_EXPORT vtkCellQuality : public vtkDataSetAlgorithm 00042 { 00043 //BTX 00044 enum 00045 { 00046 NONE = 0, 00047 AREA, 00048 ASPECT_BETA, 00049 ASPECT_FROBENIUS, 00050 ASPECT_GAMMA, 00051 ASPECT_RATIO, 00052 COLLAPSE_RATIO, 00053 CONDITION, 00054 DIAGONAL, 00055 DIMENSION, 00056 DISTORTION, 00057 EDGE_RATIO, 00058 JACOBIAN, 00059 MAX_ANGLE, 00060 MAX_ASPECT_FROBENIUS, 00061 MAX_EDGE_RATIO, 00062 MED_ASPECT_FROBENIUS, 00063 MIN_ANGLE, 00064 NORMAL, 00065 ODDY, 00066 RADIUS_RATIO, 00067 RELATIVE_SIZE_SQUARED, 00068 SCALED_JACOBIAN, 00069 SHAPE, 00070 SHAPE_AND_SIZE, 00071 SHEAR, 00072 SHEAR_AND_SIZE, 00073 SKEW, 00074 STRETCH, 00075 TAPER, 00076 VOLUME, 00077 WARPAGE, 00078 }; 00079 //ETX 00080 00081 public: 00082 void PrintSelf (ostream&, vtkIndent); 00083 vtkTypeMacro(vtkCellQuality, vtkDataSetAlgorithm); 00084 static vtkCellQuality* New (); 00085 00087 00093 vtkSetMacro(QualityMeasure, int); 00094 vtkGetMacro(QualityMeasure, int); 00096 00097 void SetQualityMeasureToArea () 00098 { 00099 this->SetQualityMeasure(AREA); 00100 } 00101 void SetQualityMeasureToAspectBeta () 00102 { 00103 this->SetQualityMeasure(ASPECT_BETA); 00104 } 00105 void SetQualityMeasureToAspectFrobenius () 00106 { 00107 this->SetQualityMeasure(ASPECT_FROBENIUS); 00108 } 00109 void SetQualityMeasureToAspectGamma () 00110 { 00111 this->SetQualityMeasure(ASPECT_GAMMA); 00112 } 00113 void SetQualityMeasureToAspectRatio () 00114 { 00115 this->SetQualityMeasure(ASPECT_RATIO); 00116 } 00117 void SetQualityMeasureToCollapseRatio () 00118 { 00119 this->SetQualityMeasure(COLLAPSE_RATIO); 00120 } 00121 void SetQualityMeasureToCondition () 00122 { 00123 this->SetQualityMeasure(CONDITION); 00124 } 00125 void SetQualityMeasureToDiagonal () 00126 { 00127 this->SetQualityMeasure(DIAGONAL); 00128 } 00129 void SetQualityMeasureToDimension () 00130 { 00131 this->SetQualityMeasure(DIMENSION); 00132 } 00133 void SetQualityMeasureToDistortion () 00134 { 00135 this->SetQualityMeasure(DISTORTION); 00136 } 00137 void SetQualityMeasureToJacobian () 00138 { 00139 this->SetQualityMeasure(JACOBIAN); 00140 } 00141 void SetQualityMeasureToMaxAngle () 00142 { 00143 this->SetQualityMeasure(MAX_ANGLE); 00144 } 00145 void SetQualityMeasureToMaxAspectFrobenius () 00146 { 00147 this->SetQualityMeasure(MAX_ASPECT_FROBENIUS); 00148 } 00149 void SetQualityMeasureToMaxEdgeRatio () 00150 { 00151 this->SetQualityMeasure(MAX_EDGE_RATIO); 00152 } 00153 void SetQualityMeasureToMedAspectFrobenius () 00154 { 00155 this->SetQualityMeasure(MED_ASPECT_FROBENIUS); 00156 } 00157 void SetQualityMeasureToMinAngle () 00158 { 00159 this->SetQualityMeasure(MIN_ANGLE); 00160 } 00161 void SetQualityMeasureToOddy () 00162 { 00163 this->SetQualityMeasure(ODDY); 00164 } 00165 void SetQualityMeasureToRadiusRatio () 00166 { 00167 this->SetQualityMeasure(RADIUS_RATIO); 00168 } 00169 void SetQualityMeasureToRelativeSizeSquared () 00170 { 00171 this->SetQualityMeasure(RELATIVE_SIZE_SQUARED); 00172 } 00173 void SetQualityMeasureToScaledJacobian () 00174 { 00175 this->SetQualityMeasure(SCALED_JACOBIAN); 00176 } 00177 void SetQualityMeasureToShapeAndSize () 00178 { 00179 this->SetQualityMeasure(SHAPE_AND_SIZE); 00180 } 00181 void SetQualityMeasureToShape () 00182 { 00183 this->SetQualityMeasure(SHAPE); 00184 } 00185 void SetQualityMeasureToShearAndSize () 00186 { 00187 this->SetQualityMeasure(SHEAR_AND_SIZE); 00188 } 00189 void SetQualityMeasureToShear () 00190 { 00191 this->SetQualityMeasure(SHEAR); 00192 } 00193 void SetQualityMeasureToSkew () 00194 { 00195 this->SetQualityMeasure(SKEW); 00196 } 00197 void SetQualityMeasureToStretch () 00198 { 00199 this->SetQualityMeasure(STRETCH); 00200 } 00201 void SetQualityMeasureToTaper () 00202 { 00203 this->SetQualityMeasure(TAPER); 00204 } 00205 void SetQualityMeasureToVolume () 00206 { 00207 this->SetQualityMeasure(VOLUME); 00208 } 00209 void SetQualityMeasureToWarpage () 00210 { 00211 this->SetQualityMeasure(WARPAGE); 00212 } 00213 00215 00219 vtkSetMacro(UnsupportedGeometry, double); 00220 vtkGetMacro(UnsupportedGeometry, double); 00222 00224 00229 vtkSetMacro(UndefinedQuality, double); 00230 vtkGetMacro(UndefinedQuality, double); 00232 00233 double TriangleStripArea (vtkCell*); 00234 double PixelArea (vtkCell*); 00235 double PolygonArea (vtkCell*); 00236 00237 protected: 00238 ~vtkCellQuality (); 00239 vtkCellQuality (); 00240 00246 double ComputeTriangleQuality (vtkCell*); 00247 00257 double ComputeQuadQuality (vtkCell*); 00258 00265 double ComputeTetQuality (vtkCell*); 00266 00273 double ComputeHexQuality (vtkCell*); 00274 00278 double ComputeTriangleStripQuality (vtkCell*); 00279 00282 double ComputePixelQuality (vtkCell*); 00283 00284 virtual int RequestData 00285 (vtkInformation*, vtkInformationVector**, vtkInformationVector*); 00286 00288 00292 static int GetCurrentTriangleNormal (double point [3], double normal [3]); 00293 static double CurrentTriNormal [3]; 00295 00296 int QualityMeasure; 00297 00298 // Default return value for unsupported geometry 00299 double UnsupportedGeometry; 00300 00301 // Default return value for qualities that are not well-defined for certain 00302 // types of supported geometries. e.g. volume of a triangle 00303 double UndefinedQuality; 00304 00305 private: 00306 vtkIdList* PointIds; 00307 vtkPoints* Points; 00308 00309 vtkCellQuality(const vtkCellQuality&); // Not implemented 00310 void operator=(const vtkCellQuality&); // Not implemented 00311 }; 00312 00313 #endif // vtkCellQuality_h