2 // File: SMDS_MeshTetrahedron.cxx
3 // Created: Wed Jan 23 17:02:34 2002
4 // Author: Jean-Michel BOULCOURT
5 // <jmb@coulox.paris1.matra-dtv.fr>
8 #include "SMDS_MeshTetrahedron.ixx"
9 #include "Standard_ConstructionError.hxx"
11 //=======================================================================
12 //function : SMDS_MeshTetrahedron
13 //purpose : Tetrahedra
14 //=======================================================================
16 SMDS_MeshTetrahedron::SMDS_MeshTetrahedron(const Standard_Integer ID,
17 const Standard_Integer idnode1,
18 const Standard_Integer idnode2,
19 const Standard_Integer idnode3,
20 const Standard_Integer idnode4):SMDS_MeshVolume(ID,4)
22 SetConnections(idnode1,idnode2,idnode3,idnode4);
27 //=======================================================================
28 //function : SetConnections
29 //purpose : Tetrahedra
30 //=======================================================================
31 void SMDS_MeshTetrahedron::SetConnections(const Standard_Integer idnode1,
32 const Standard_Integer idnode2,
33 const Standard_Integer idnode3,
34 const Standard_Integer idnode4)
36 Standard_Integer idmin = (idnode1 < idnode2 ? idnode1 : idnode2);
37 idmin = (idmin < idnode3 ? idmin : idnode3);
38 idmin = (idmin < idnode4 ? idmin : idnode4);
41 if (idmin == idnode1) {
45 } else if (idmin == idnode2) {
49 } else if (idmin == idnode3) {
62 //=======================================================================
63 //function : NodesOfFace
64 //purpose : returns the rank node in mynodes. Useful to extract faces from volume
65 //=======================================================================
66 Standard_Integer SMDS_MeshTetrahedron::NodesOfFace(const Standard_Integer rankface,
67 const Standard_Integer ranknode)
69 static Standard_Integer facenode[4][3] = {
76 return facenode[rankface-1][ranknode-1];
80 //=======================================================================
81 //function : NodesOfEdge
82 //purpose : returns the rank node in mynodes. Useful to extract edges from volume
83 //=======================================================================
84 Standard_Integer SMDS_MeshTetrahedron::NodesOfEdge(const Standard_Integer rankedge,
85 const Standard_Integer ranknode) const
87 static Standard_Integer faceedge[6][2] = {
96 return faceedge[rankedge-1][ranknode-1];
100 //=======================================================================
101 //function : GetFaceDefinedByNodes
103 //=======================================================================
104 void SMDS_MeshTetrahedron::GetFaceDefinedByNodes(const Standard_Integer rank,
105 const Standard_Address idnode,
106 Standard_Integer& nb) const
108 Standard_Integer *ptr;
110 ptr = (Standard_Integer *)idnode;
111 ptr[0] = myNodes[NodesOfFace(rank,1)];
112 ptr[1] = myNodes[NodesOfFace(rank,2)];
113 ptr[2] = myNodes[NodesOfFace(rank,3)];
117 //=======================================================================
118 //function : GetEdgeDefinedByNodes
120 //=======================================================================
121 void SMDS_MeshTetrahedron::GetEdgeDefinedByNodes(const Standard_Integer rank,
122 Standard_Integer& idnode1,
123 Standard_Integer& idnode2) const
125 idnode1 = myNodes[NodesOfEdge(rank,1)];
126 idnode2 = myNodes[NodesOfEdge(rank,2)];