2 // File: SMDS_MeshPyramid.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_MeshPyramid.ixx"
9 #include <Standard_ConstructionError.hxx>
12 //=======================================================================
13 //function : SMDS_MeshPyramid
15 //=======================================================================
17 SMDS_MeshPyramid::SMDS_MeshPyramid(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):SMDS_MeshVolume(ID,5)
24 SetConnections(idnode1,idnode2,idnode3,idnode4,idnode5);
30 //=======================================================================
31 //function : SetConnections
33 //=======================================================================
34 void SMDS_MeshPyramid::SetConnections(const Standard_Integer idnode1,
35 const Standard_Integer idnode2,
36 const Standard_Integer idnode3,
37 const Standard_Integer idnode4,
38 const Standard_Integer idnode5)
41 Standard_Integer idmin = (idnode1 < idnode2 ? idnode1 : idnode2);
42 idmin = (idmin < idnode3 ? idmin : idnode3);
43 idmin = (idmin < idnode4 ? idmin : idnode4);
44 idmin = (idmin < idnode5 ? idmin : idnode5);
47 if (idmin == idnode1) { // 1 2 3 4 5
52 } else if (idmin == idnode2) { // 2 3 4 5 1
57 } else if (idmin == idnode3) { // 3 4 5 1 2
62 } else if (idmin == idnode4) { // 4 5 1 2 3
76 //=======================================================================
77 //function : NodesOfFace
78 //purpose : returns the rank node in mynodes. Useful to extract faces from volume
79 //=======================================================================
80 Standard_Integer SMDS_MeshPyramid::NodesOfFace(const Standard_Integer rankface,
81 const Standard_Integer ranknode)
83 static Standard_Integer facenode[5][4] = {
91 return facenode[rankface-1][ranknode-1];
94 //=======================================================================
95 //function : NodesOfEdge
96 //purpose : returns the rank node in mynodes. Useful to extract edges from volume
97 //=======================================================================
98 Standard_Integer SMDS_MeshPyramid::NodesOfEdge(const Standard_Integer rankedge,
99 const Standard_Integer ranknode) const
101 static Standard_Integer faceedge[8][2] = {
113 return faceedge[rankedge-1][ranknode-1];
117 //=======================================================================
118 //function : GetFaceDefinedByNodes
120 //=======================================================================
121 void SMDS_MeshPyramid::GetFaceDefinedByNodes(const Standard_Integer rank,
122 const Standard_Address idnode,
123 Standard_Integer& nb) const
125 Standard_Integer *ptr;
126 ptr = (Standard_Integer *)idnode;
127 ptr[0] = myNodes[NodesOfFace(rank,1)];
128 ptr[1] = myNodes[NodesOfFace(rank,2)];
129 ptr[2] = myNodes[NodesOfFace(rank,3)];
130 nb = (NodesOfFace(rank,4) == -1 ? 3 : 4);
132 ptr[3] = myNodes[NodesOfFace(rank,4)];
136 //=======================================================================
137 //function : GetEdgeDefinedByNodes
139 //=======================================================================
140 void SMDS_MeshPyramid::GetEdgeDefinedByNodes(const Standard_Integer rank,
141 Standard_Integer& idnode1,
142 Standard_Integer& idnode2) const
144 idnode1 = myNodes[NodesOfEdge(rank,1)];
145 idnode2 = myNodes[NodesOfEdge(rank,2)];