2 // File: SMDS_MeshHexahedron.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_MeshHexahedron.ixx"
9 #include <Standard_ConstructionError.hxx>
12 //=======================================================================
13 //function : SMDS_MeshHexahedron
15 //=======================================================================
17 SMDS_MeshHexahedron::SMDS_MeshHexahedron(const Standard_Integer ID,
18 const Standard_Integer idnode1,
19 const Standard_Integer idnode2,
20 const Standard_Integer idnode3,
21 const Standard_Integer idnode4,
22 const Standard_Integer idnode5,
23 const Standard_Integer idnode6,
24 const Standard_Integer idnode7,
25 const Standard_Integer idnode8):SMDS_MeshVolume(ID,8)
27 SetConnections(idnode1,idnode2,idnode3,idnode4,idnode5,idnode6,idnode7,idnode8);
32 //=======================================================================
33 //function : SetConnections
34 //purpose : Heaxahedron
35 //=======================================================================
36 void SMDS_MeshHexahedron::SetConnections(const Standard_Integer idnode1,
37 const Standard_Integer idnode2,
38 const Standard_Integer idnode3,
39 const Standard_Integer idnode4,
40 const Standard_Integer idnode5,
41 const Standard_Integer idnode6,
42 const Standard_Integer idnode7,
43 const Standard_Integer idnode8)
45 Standard_Integer idmin = (idnode1 < idnode2 ? idnode1 : idnode2);
46 idmin = (idmin < idnode3 ? idmin : idnode3);
47 idmin = (idmin < idnode4 ? idmin : idnode4);
48 idmin = (idmin < idnode5 ? idmin : idnode5);
49 idmin = (idmin < idnode6 ? idmin : idnode6);
50 idmin = (idmin < idnode7 ? idmin : idnode7);
51 idmin = (idmin < idnode8 ? idmin : idnode8);
54 if (idmin == idnode1) { // 1 2 3 4 5 6 7 8
62 } else if (idmin == idnode2) { // 2 3 4 1 6 7 8 5
70 } else if (idmin == idnode3) { // 3 4 1 2 7 8 5 6
78 } else if (idmin == idnode4) { // 4 1 2 3 8 5 6 7
86 } else if (idmin == idnode5) { // 5 6 7 8 1 2 3 4
94 } else if (idmin == idnode6){ // 6 7 8 5 2 3 4 1
100 myNodes[6] = idnode4;
101 myNodes[7] = idnode1;
102 } else if (idmin == idnode7) { // 7 8 5 6 3 4 1 2
103 myNodes[1] = idnode8;
104 myNodes[2] = idnode5;
105 myNodes[3] = idnode6;
106 myNodes[4] = idnode3;
107 myNodes[5] = idnode4;
108 myNodes[6] = idnode1;
109 myNodes[7] = idnode2;
110 } else { // 8 5 6 7 4 1 2 3
111 myNodes[1] = idnode5;
112 myNodes[2] = idnode6;
113 myNodes[3] = idnode7;
114 myNodes[4] = idnode4;
115 myNodes[5] = idnode1;
116 myNodes[6] = idnode2;
117 myNodes[7] = idnode3;
122 //=======================================================================
123 //function : NodesOfFace
124 //purpose : returns the rank node in mynodes. Useful to extract faces from volume
125 //=======================================================================
126 Standard_Integer SMDS_MeshHexahedron::NodesOfFace(const Standard_Integer rankface,
127 const Standard_Integer ranknode)
129 static Standard_Integer facenode[6][4] = {
138 return facenode[rankface-1][ranknode-1];
141 //=======================================================================
142 //function : NodesOfEdge
143 //purpose : returns the rank node in mynodes. Useful to extract edges from volume
144 //=======================================================================
145 Standard_Integer SMDS_MeshHexahedron::NodesOfEdge(const Standard_Integer rankedge,
146 const Standard_Integer ranknode) const
148 static Standard_Integer faceedge[12][2] = {
164 return faceedge[rankedge-1][ranknode-1];
167 //=======================================================================
168 //function : GetFaceDefinedByNodes
170 //=======================================================================
171 void SMDS_MeshHexahedron::GetFaceDefinedByNodes(const Standard_Integer rank,
172 const Standard_Address idnode,
173 Standard_Integer& nb) const
175 Standard_Integer *ptr;
177 ptr = (Standard_Integer *)idnode;
178 ptr[0] = myNodes[NodesOfFace(rank,1)];
179 ptr[1] = myNodes[NodesOfFace(rank,2)];
180 ptr[2] = myNodes[NodesOfFace(rank,3)];
181 ptr[3] = myNodes[NodesOfFace(rank,4)];
185 //=======================================================================
186 //function : GetEdgeDefinedByNodes
188 //=======================================================================
189 void SMDS_MeshHexahedron::GetEdgeDefinedByNodes(const Standard_Integer rank,
190 Standard_Integer& idnode1,
191 Standard_Integer& idnode2) const
193 idnode1 = myNodes[NodesOfEdge(rank,1)];
194 idnode2 = myNodes[NodesOfEdge(rank,2)];