1 // SMESH SMDS : implementaion of Salome mesh data structure
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : SMDS_Mesh.hxx
27 #ifndef _SMDS_Mesh_HeaderFile
28 #define _SMDS_Mesh_HeaderFile
30 #include "SMDS_MeshNode.hxx"
31 #include "SMDS_MeshEdge.hxx"
32 #include "SMDS_MeshFace.hxx"
33 #include "SMDS_MeshVolume.hxx"
34 #include "SMDS_MeshElementIDFactory.hxx"
35 #include "SMDS_Iterator.hxx"
40 class SMDSControl_BoundaryEdges;
42 class SMDS_Mesh:public SMDS_MeshObject
49 SMDS_Iterator<const SMDS_MeshNode *> * nodesIterator() const;
50 SMDS_Iterator<const SMDS_MeshEdge *> * edgesIterator() const;
51 SMDS_Iterator<const SMDS_MeshFace *> * facesIterator() const;
52 SMDS_Iterator<const SMDS_MeshVolume *> * volumesIterator() const;
54 SMDS_Mesh *AddSubMesh();
55 virtual SMDS_MeshNode* AddNode(double x, double y, double z);
56 virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, int ID);
58 virtual SMDS_MeshEdge* AddEdge(int idnode1, int idnode2);
59 virtual SMDS_MeshEdge* AddEdgeWithID(int idnode1, int idnode2, int ID);
60 virtual SMDS_MeshFace* AddFace(int idnode1, int idnode2, int idnode3);
61 virtual SMDS_MeshFace* AddFaceWithID(int idnode1, int idnode2, int idnode3,
63 virtual SMDS_MeshFace* AddFace(int idnode1, int idnode2, int idnode3,
65 virtual SMDS_MeshFace* AddFaceWithID(int idnode1, int idnode2, int idnode3,
67 virtual SMDS_MeshVolume* AddVolume(int idnode1, int idnode2, int idnode3,
69 virtual SMDS_MeshVolume* AddVolumeWithID(int idnode1, int idnode2,
70 int idnode3, int idnode4, int ID);
71 virtual SMDS_MeshVolume* AddVolume(int idnode1, int idnode2, int idnode3,
72 int idnode4, int idnode5);
73 virtual SMDS_MeshVolume* AddVolumeWithID(int idnode1, int idnode2, int idnode3,
74 int idnode4, int idnode5, int ID);
75 virtual SMDS_MeshVolume* AddVolume(int idnode1, int idnode2, int idnode3,
76 int idnode4, int idnode5, int idnode6);
77 virtual SMDS_MeshVolume* AddVolumeWithID(int idnode1, int idnode2,
78 int idnode3, int idnode4, int idnode5, int idnode6, int ID);
79 virtual SMDS_MeshVolume* AddVolume(int idnode1, int idnode2, int idnode3,
80 int idnode4, int idnode5, int idnode6, int idnode7, int idnode8);
81 virtual SMDS_MeshVolume* AddVolumeWithID(int idnode1, int idnode2, int idnode3,
82 int idnode4, int idnode5, int idnode6, int idnode7, int idnode8,
84 virtual void RemoveNode(int IDnode);
85 virtual void RemoveEdge(int idnode1, int idnode2);
86 virtual void RemoveFace(int idnode1, int idnode2, int idnode3);
87 virtual void RemoveFace(int idnode1, int idnode2, int idnode3, int idnode4);
88 virtual void RemoveElement(int IDelem, const bool removenodes = false);
89 void RemoveElement(const SMDS_MeshElement * elem, const bool removenodes =
91 bool RemoveNode(const SMDS_MeshNode * node); //Remove a node and elements which need this node
92 void RemoveEdge(const SMDS_MeshEdge * edge);
93 void RemoveFace(const SMDS_MeshFace * face);
94 void RemoveVolume(const SMDS_MeshVolume * volume);
96 virtual bool RemoveFromParent();
97 virtual bool RemoveSubMesh(const SMDS_Mesh * aMesh);
99 const SMDS_MeshNode *FindNode(int idnode) const;
100 const SMDS_MeshEdge *FindEdge(int idnode1, int idnode2) const;
101 const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3) const;
102 const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3, int idnode4) const;
103 const SMDS_MeshElement *FindElement(int IDelem) const;
108 int NbVolumes() const;
109 int NbSubMesh() const;
110 void DumpNodes() const;
111 void DumpEdges() const;
112 void DumpFaces() const;
113 void DumpVolumes() const;
114 void DebugStats() const;
115 SMDS_Mesh *boundaryFaces();
116 SMDS_Mesh *boundaryEdges();
118 bool hasConstructionEdges();
119 bool hasConstructionFaces();
120 bool hasInverseElements();
121 void setConstructionEdges(bool);
122 void setConstructionFaces(bool);
123 void setInverseElements(bool);
126 SMDS_Mesh(SMDS_Mesh * parent);
127 SMDS_MeshFace * createTriangle(SMDS_MeshNode * node1,
128 SMDS_MeshNode * node2, SMDS_MeshNode * node3);
129 SMDS_MeshFace * createQuadrangle(SMDS_MeshNode * node1,
130 SMDS_MeshNode * node2, SMDS_MeshNode * node3, SMDS_MeshNode * node4);
131 void removeElementDependencies(SMDS_MeshElement * element);
132 const SMDS_MeshEdge* FindEdge(const SMDS_MeshNode * n1,
133 const SMDS_MeshNode * n2) const;
134 SMDS_MeshEdge* FindEdgeOrCreate(const SMDS_MeshNode * n1,
135 const SMDS_MeshNode * n2);
136 SMDS_MeshFace* FindFaceOrCreate(
137 const SMDS_MeshNode *n1,
138 const SMDS_MeshNode *n2,
139 const SMDS_MeshNode *n3);
140 const SMDS_MeshFace* FindFace(
141 const SMDS_MeshNode *n1,
142 const SMDS_MeshNode *n2,
143 const SMDS_MeshNode *n3,
144 const SMDS_MeshNode *n4) const;
145 SMDS_MeshFace* FindFaceOrCreate(
146 const SMDS_MeshNode *n1,
147 const SMDS_MeshNode *n2,
148 const SMDS_MeshNode *n3,
149 const SMDS_MeshNode *n4);
152 typedef set<SMDS_MeshNode *> SetOfNodes;
153 typedef set<SMDS_MeshEdge *> SetOfEdges;
154 typedef set<SMDS_MeshFace *> SetOfFaces;
155 typedef set<SMDS_MeshVolume *> SetOfVolumes;
160 SetOfVolumes myVolumes;
162 list<SMDS_Mesh *> myChildren;
163 SMDS_MeshElementIDFactory *myNodeIDFactory;
164 SMDS_MeshElementIDFactory *myElementIDFactory;
166 bool myHasConstructionEdges;
167 bool myHasConstructionFaces;
168 bool myHasInverseElements;