29 #ifndef SMDS_VolumeTool_HeaderFile
30 #define SMDS_VolumeTool_HeaderFile
55 enum VolumeType { UNKNOWN = -1, TETRA = 0, PYRAM, PENTA, HEXA,
56 HEX_PRISM,
QUAD_TETRA, QUAD_PYRAM, QUAD_PENTA, QUAD_HEXA,
62 const bool ignoreCentralNodes =
true);
65 const bool ignoreCentralNodes =
true,
66 const std::vector<const SMDS_MeshNode*>* nodes = 0);
79 bool IsPoly()
const {
return myPolyedre; }
85 VolumeType GetVolumeType()
const;
99 int NbNodes()
const {
return myVolumeNodes.size(); }
102 double GetSize()
const;
107 bool IsOut(
double X,
double Y,
double Z,
double tol)
const;
116 const bool theIgnoreMediumNodes=
false)
const;
120 bool IsLinked (
const int theNode1Index,
121 const int theNode2Index,
122 bool theIgnoreMediumNodes=
false)
const;
130 int GetAllExistingEdges(std::vector<const SMDS_MeshElement*> & edges)
const;
133 double MinLinearSize2()
const;
136 double MaxLinearSize2()
const;
146 void SetExternalNormal ();
153 int NbFaceNodes(
int faceIndex )
const;
156 const int* GetFaceNodesIndices(
int faceIndex )
const;
176 bool GetFaceNodes (
int faceIndex,
177 std::set<const SMDS_MeshNode*>& theFaceNodes )
const;
180 bool IsFaceExternal(
int faceIndex )
const;
184 bool IsFreeFace(
int faceIndex,
const SMDS_MeshElement** otherVol=0 )
const;
188 bool IsFreeFaceAdv(
int faceIndex,
const SMDS_MeshElement** otherVol=0 )
const;
192 bool GetFaceNormal (
int faceIndex,
double & X,
double & Y,
double &
Z)
const;
195 bool GetFaceBaryCenter (
int faceIndex,
double & X,
double & Y,
double &
Z)
const;
198 double GetFaceArea(
int faceIndex )
const;
201 int GetOppFaceIndex(
int faceIndex )
const;
204 int GetCenterNodeIndex(
int faceIndex )
const;
207 int GetFaceIndex(
const std::set<const SMDS_MeshNode*>& theFaceNodes,
208 const int theFaceIndexHint=-1)
const;
216 int GetAllExistingFaces(std::vector<const SMDS_MeshElement*> & faces)
const;
223 static VolumeType GetType(
int nbNodes);
226 static int NbFaces( VolumeType type );
229 static const int* GetFaceNodesIndices(VolumeType type,
238 static int NbFaceNodes(VolumeType type,
int faceIndex );
242 static int NbCornerNodes(VolumeType type);
245 static int GetOppFaceIndexOfHex(
int faceIndex );
250 bool setFace(
int faceIndex )
const;
252 bool projectNodesToNormal(
int faceIndex,
double& minProj,
double& maxProj )
const;
265 typedef std::pair<int,int>
Link;