Salome HOME
New DS implementation
[modules/smesh.git] / src / SMDS / SMDS_Mesh.hxx
index e4db75a00fdbe1fb30c4f9ec2847e21253ce0d48..946d9b0e478cc1d14fc5ed2fa29e19e396a536b7 100644 (file)
-// File generated by CPPExt (Transient)
+//  SMESH SMDS : implementaion of Salome mesh data structure
 //
-//                     Copyright (C) 1991,1995 by
-//  
-//                      MATRA DATAVISION, FRANCE
-//  
-// This software is furnished in accordance with the terms and conditions
-// of the contract and with the inclusion of the above copyright notice.
-// This software or any other copy thereof may not be provided or otherwise
-// be made available to any other person. No title to an ownership of the
-// software is hereby transferred.
-//  
-// At the termination of the contract, the software and all copies of this
-// software must be deleted.
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
+// 
+//  This library is free software; you can redistribute it and/or 
+//  modify it under the terms of the GNU Lesser General Public 
+//  License as published by the Free Software Foundation; either 
+//  version 2.1 of the License. 
+// 
+//  This library is distributed in the hope that it will be useful, 
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+//  Lesser General Public License for more details. 
+// 
+//  You should have received a copy of the GNU Lesser General Public 
+//  License along with this library; if not, write to the Free Software 
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+// 
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
 //
+//
+//
+//  File   : SMDS_Mesh.hxx
+//  Module : SMESH
+
 #ifndef _SMDS_Mesh_HeaderFile
 #define _SMDS_Mesh_HeaderFile
 
-#ifndef _Standard_HeaderFile
-#include <Standard.hxx>
-#endif
-#ifndef _Handle_SMDS_Mesh_HeaderFile
-#include "Handle_SMDS_Mesh.hxx"
-#endif
-
-#ifndef _SMDS_MapOfMeshOrientedElement_HeaderFile
-#include "SMDS_MapOfMeshOrientedElement.hxx"
-#endif
-#ifndef _Handle_SMDS_Mesh_HeaderFile
-#include "Handle_SMDS_Mesh.hxx"
-#endif
-#ifndef _SMDS_ListOfMesh_HeaderFile
-#include "SMDS_ListOfMesh.hxx"
-#endif
-#ifndef _Handle_SMDS_MeshNodeIDFactory_HeaderFile
-#include "Handle_SMDS_MeshNodeIDFactory.hxx"
-#endif
-#ifndef _Handle_SMDS_MeshElementIDFactory_HeaderFile
-#include "Handle_SMDS_MeshElementIDFactory.hxx"
-#endif
-#ifndef _Standard_Boolean_HeaderFile
-#include "Standard_Boolean.hxx"
-#endif
-#ifndef _SMDS_MeshObject_HeaderFile
-#include "SMDS_MeshObject.hxx"
-#endif
-#ifndef _Standard_Integer_HeaderFile
-#include <Standard_Integer.hxx>
-#endif
-#ifndef _Standard_Real_HeaderFile
-#include <Standard_Real.hxx>
-#endif
-#ifndef _Handle_SMDS_MeshElement_HeaderFile
-#include "Handle_SMDS_MeshElement.hxx"
-#endif
-#ifndef _Handle_SMDS_MeshNode_HeaderFile
-#include "Handle_SMDS_MeshNode.hxx"
-#endif
-class SMDS_MeshNodeIDFactory;
-class SMDS_MeshElementIDFactory;
-class Standard_NoSuchObject;
-class SMDS_MeshVolumesIterator;
-class SMDS_MeshFacesIterator;
-class SMDS_MeshEdgesIterator;
-class SMDS_MeshNodesIterator;
-class SMDS_MeshElement;
-class SMDS_MeshNode;
-class SMDS_ListIteratorOfListOfMesh;
-class SMDS_MapOfMeshOrientedElement;
-
-
-class SMDS_Mesh : public SMDS_MeshObject {
-
-public:
-
-    inline void* operator new(size_t,void* anAddress) 
-      {
-        return anAddress;
-      }
-    inline void* operator new(size_t size) 
-      { 
-        return Standard::Allocate(size); 
-      }
-    inline void  operator delete(void *anAddress) 
-      { 
-        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
-      }
-//    inline void  operator delete(void *anAddress, size_t size) 
-//      { 
-//        if (anAddress) Standard::Free((Standard_Address&)anAddress,size); 
-//      }
- // Methods PUBLIC
- // 
-Standard_EXPORT SMDS_Mesh(const Standard_Integer nbnodes = 10,const Standard_Integer nbedges = 10,const Standard_Integer nbfaces = 10,const Standard_Integer nbvolumes = 10);
-Standard_EXPORT   Handle_SMDS_Mesh AddSubMesh() ;
-Standard_EXPORT virtual  Standard_Integer AddNode(const Standard_Real x,const Standard_Real y,const Standard_Real z) ;
-Standard_EXPORT virtual  Standard_Boolean AddNodeWithID(const Standard_Real x,const Standard_Real y,const Standard_Real z,const Standard_Integer ID) ;
-Standard_EXPORT virtual  Standard_Boolean AddNode(const Standard_Integer ID) ;
-Standard_EXPORT virtual  Standard_Integer AddEdge(const Standard_Integer idnode1,const Standard_Integer idnode2) ;
-Standard_EXPORT virtual  Standard_Boolean AddEdgeWithID(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer ID) ;
-Standard_EXPORT virtual  Standard_Integer AddFace(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3) ;
-Standard_EXPORT virtual  Standard_Boolean AddFaceWithID(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer ID) ;
-Standard_EXPORT virtual  Standard_Integer AddFace(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4) ;
-Standard_EXPORT virtual  Standard_Boolean AddFaceWithID(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer ID) ;
-Standard_EXPORT virtual  Standard_Integer AddVolume(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4) ;
-Standard_EXPORT virtual  Standard_Boolean AddVolumeWithID(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer ID) ;
-Standard_EXPORT virtual  Standard_Integer AddVolume(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5) ;
-Standard_EXPORT virtual  Standard_Boolean AddVolumeWithID(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5,const Standard_Integer ID) ;
-Standard_EXPORT virtual  Standard_Integer AddVolume(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5,const Standard_Integer idnode6) ;
-Standard_EXPORT virtual  Standard_Boolean AddVolumeWithID(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5,const Standard_Integer idnode6,const Standard_Integer ID) ;
-Standard_EXPORT virtual  Standard_Integer AddVolume(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5,const Standard_Integer idnode6,const Standard_Integer idnode7,const Standard_Integer idnode8) ;
-Standard_EXPORT virtual  Standard_Boolean AddVolumeWithID(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5,const Standard_Integer idnode6,const Standard_Integer idnode7,const Standard_Integer idnode8,const Standard_Integer ID) ;
-Standard_EXPORT   Handle_SMDS_MeshElement AddVolume(const Handle(SMDS_MeshElement)& node1,const Handle(SMDS_MeshElement)& node2,const Handle(SMDS_MeshElement)& node3,const Handle(SMDS_MeshElement)& node4) ;
-Standard_EXPORT   Handle_SMDS_MeshElement AddVolume(const Handle(SMDS_MeshElement)& node1,const Handle(SMDS_MeshElement)& node2,const Handle(SMDS_MeshElement)& node3,const Handle(SMDS_MeshElement)& node4,const Handle(SMDS_MeshElement)& node5) ;
-Standard_EXPORT   Handle_SMDS_MeshElement AddVolume(const Handle(SMDS_MeshElement)& node1,const Handle(SMDS_MeshElement)& node2,const Handle(SMDS_MeshElement)& node3,const Handle(SMDS_MeshElement)& node4,const Handle(SMDS_MeshElement)& node5,const Handle(SMDS_MeshElement)& node6) ;
-Standard_EXPORT   Handle_SMDS_MeshElement AddVolume(const Handle(SMDS_MeshElement)& node1,const Handle(SMDS_MeshElement)& node2,const Handle(SMDS_MeshElement)& node3,const Handle(SMDS_MeshElement)& node4,const Handle(SMDS_MeshElement)& node5,const Handle(SMDS_MeshElement)& node6,const Handle(SMDS_MeshElement)& node7,const Handle(SMDS_MeshElement)& node8) ;
-Standard_EXPORT virtual  void RemoveNode(const Standard_Integer IDnode) ;
-Standard_EXPORT virtual  void RemoveEdge(const Standard_Integer idnode1,const Standard_Integer idnode2) ;
-Standard_EXPORT virtual  void RemoveFace(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3) ;
-Standard_EXPORT virtual  void RemoveFace(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4) ;
-Standard_EXPORT virtual  void RemoveElement(const Standard_Integer IDelem,const Standard_Boolean removenodes = Standard_False) ;
-Standard_EXPORT   void RemoveElement(const Handle(SMDS_MeshElement)& elem,const Standard_Boolean removenodes = Standard_False) ;
-Standard_EXPORT virtual  Standard_Boolean RemoveFromParent() ;
-Standard_EXPORT virtual  Standard_Boolean RemoveSubMesh(const Handle(SMDS_Mesh)& aMesh) ;
-Standard_EXPORT   Handle_SMDS_MeshNode GetNode(const Standard_Integer rank,const Handle(SMDS_MeshElement)& ME) const;
-Standard_EXPORT   Handle_SMDS_MeshElement FindNode(const Standard_Integer idnode) const;
-Standard_EXPORT   Handle_SMDS_MeshElement FindEdge(const Standard_Integer idnode1,const Standard_Integer idnode2) const;
-Standard_EXPORT   Handle_SMDS_MeshElement FindFace(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3) const;
-Standard_EXPORT   Handle_SMDS_MeshElement FindFace(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4) const;
-Standard_EXPORT   Handle_SMDS_MeshElement FindElement(const Standard_Integer IDelem) const;
-Standard_EXPORT   Standard_Boolean Contains(const Handle(SMDS_MeshElement)& elem) const;
-Standard_EXPORT   void RebuildAllInverseConnections() ;
-Standard_EXPORT   void SubMeshIterator(SMDS_ListIteratorOfListOfMesh& itmsh) const;
-Standard_EXPORT inline   Standard_Integer NbNodes() const;
-Standard_EXPORT inline   Standard_Integer NbEdges() const;
-Standard_EXPORT inline   Standard_Integer NbFaces() const;
-Standard_EXPORT inline   Standard_Integer NbVolumes() const;
-Standard_EXPORT inline   Standard_Integer NbSubMesh() const;
-Standard_EXPORT   void DumpNodes() const;
-Standard_EXPORT   void DumpEdges() const;
-Standard_EXPORT   void DumpFaces() const;
-Standard_EXPORT   void DumpVolumes() const;
-Standard_EXPORT   void DebugStats() const;
-Standard_EXPORT   Handle_SMDS_MeshElement CreateEdge(const Standard_Integer ID,const Standard_Integer idnode1,const Standard_Integer idnode2) const;
-Standard_EXPORT   Handle_SMDS_MeshElement CreateFace(const Standard_Integer ID,const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3) const;
-Standard_EXPORT   Handle_SMDS_MeshElement CreateFace(const Standard_Integer ID,const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4) const;
-Standard_EXPORT   Handle_SMDS_MeshElement CreateVolume(const Standard_Integer ID,const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4) const;
-Standard_EXPORT   Handle_SMDS_MeshElement CreateVolume(const Standard_Integer ID,const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5) const;
-Standard_EXPORT   Handle_SMDS_MeshElement CreateVolume(const Standard_Integer ID,const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5,const Standard_Integer idnode6) const;
-Standard_EXPORT   Handle_SMDS_MeshElement CreateVolume(const Standard_Integer ID,const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4,const Standard_Integer idnode5,const Standard_Integer idnode6,const Standard_Integer idnode7,const Standard_Integer idnode8) const;
-Standard_EXPORT ~SMDS_Mesh();
-
-
-friend class SMDS_MeshVolumesIterator;
-friend class SMDS_MeshFacesIterator;
-friend class SMDS_MeshEdgesIterator;
-friend class SMDS_MeshNodesIterator;
-
-
- // Type management
- //
- Standard_EXPORT friend Handle_Standard_Type& SMDS_Mesh_Type_();
- Standard_EXPORT const Handle(Standard_Type)& DynamicType() const;
- Standard_EXPORT Standard_Boolean             IsKind(const Handle(Standard_Type)&) const;
-
-protected:
-
- // Methods PROTECTED
- // 
-Standard_EXPORT   Handle_SMDS_MeshElement FindNode(const Handle(SMDS_MeshElement)& node) const;
-Standard_EXPORT   Handle_SMDS_MeshElement FindEdge(const Handle(SMDS_MeshElement)& edge) const;
-Standard_EXPORT   Handle_SMDS_MeshElement FindFace(const Handle(SMDS_MeshElement)& face) const;
-Standard_EXPORT   Handle_SMDS_MeshElement FindVolume(const Handle(SMDS_MeshElement)& volume) const;
-Standard_EXPORT   void RemoveInverseElement(const Handle(SMDS_MeshElement)& node,const Handle(SMDS_MeshElement)& parent) const;
-Standard_EXPORT   Standard_Boolean RemoveNode(const Handle(SMDS_MeshElement)& node) ;
-Standard_EXPORT   void RemoveEdge(const Handle(SMDS_MeshElement)& edge) ;
-Standard_EXPORT   void RemoveFace(const Handle(SMDS_MeshElement)& face) ;
-Standard_EXPORT   void RemoveVolume(const Handle(SMDS_MeshElement)& volume) ;
-Standard_EXPORT   Handle_SMDS_MeshElement GetNode(const Standard_Integer ID) const;
-Standard_EXPORT   void RemoveAncestors(const Handle(SMDS_MeshElement)& ME,const SMDS_MapOfMeshOrientedElement& map) ;
-
-
- // Fields PROTECTED
- //
-
-
-private: 
-
- // Methods PRIVATE
- // 
-Standard_EXPORT SMDS_Mesh(const Handle(SMDS_Mesh)& parent,const Standard_Integer nbnodes = 10);
-Standard_EXPORT   Standard_Boolean AddNode(const Handle(SMDS_MeshElement)& node) ;
-Standard_EXPORT   void FreeNode(const Handle(SMDS_MeshElement)& node) ;
-Standard_EXPORT   void BuildMapNodeAncestors(const Handle(SMDS_MeshElement)& ME,SMDS_MapOfMeshOrientedElement& map) const;
-Standard_EXPORT   void BuildMapEdgeAncestors(const Handle(SMDS_MeshElement)& ME,SMDS_MapOfMeshOrientedElement& map) const;
-Standard_EXPORT   void BuildMapFaceAncestors(const Handle(SMDS_MeshElement)& ME,SMDS_MapOfMeshOrientedElement& map) const;
-Standard_EXPORT   void RebuildInverseConnections() ;
-
-
- // Fields PRIVATE
- //
-SMDS_MapOfMeshOrientedElement myNodes;
-SMDS_MapOfMeshOrientedElement myEdges;
-SMDS_MapOfMeshOrientedElement myFaces;
-SMDS_MapOfMeshOrientedElement myVolumes;
-Handle_SMDS_Mesh myParent;
-SMDS_ListOfMesh myChildren;
-Handle_SMDS_MeshNodeIDFactory myNodeIDFactory;
-Handle_SMDS_MeshElementIDFactory myElementIDFactory;
-Standard_Boolean myHasInverse;
-
-
+#include "SMDS_MeshNode.hxx"
+#include "SMDS_MeshEdge.hxx"
+#include "SMDS_MeshFace.hxx"
+#include "SMDS_MeshVolume.hxx"
+#include "SMDS_MeshElementIDFactory.hxx"
+#include "SMDS_Iterator.hxx"
+
+#include <set>
+#include <list>
+
+class SMDSControl_BoundaryEdges;
+
+class SMDS_Mesh:public SMDS_MeshObject
+{
+
+  public:
+
+       SMDS_Mesh();
+
+       SMDS_Iterator<const SMDS_MeshNode *> * nodesIterator() const;
+       SMDS_Iterator<const SMDS_MeshEdge *> * edgesIterator() const;
+       SMDS_Iterator<const SMDS_MeshFace *> * facesIterator() const;
+       SMDS_Iterator<const SMDS_MeshVolume *> * volumesIterator() const;
+
+       SMDS_Mesh *AddSubMesh();
+       virtual SMDS_MeshNode* AddNode(double x, double y, double z);
+       virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, int ID);
+
+       virtual SMDS_MeshEdge* AddEdge(int idnode1, int idnode2);
+       virtual SMDS_MeshEdge* AddEdgeWithID(int idnode1, int idnode2, int ID);
+       virtual SMDS_MeshFace* AddFace(int idnode1, int idnode2, int idnode3);
+       virtual SMDS_MeshFace* AddFaceWithID(int idnode1, int idnode2, int idnode3,
+               int ID);
+       virtual SMDS_MeshFace* AddFace(int idnode1, int idnode2, int idnode3,
+               int idnode4);
+       virtual SMDS_MeshFace* AddFaceWithID(int idnode1, int idnode2, int idnode3,
+               int idnode4, int ID);
+       virtual SMDS_MeshVolume* AddVolume(int idnode1, int idnode2, int idnode3,
+               int idnode4);
+       virtual SMDS_MeshVolume* AddVolumeWithID(int idnode1, int idnode2,
+               int idnode3, int idnode4, int ID);
+       virtual SMDS_MeshVolume* AddVolume(int idnode1, int idnode2, int idnode3,
+               int idnode4, int idnode5);
+       virtual SMDS_MeshVolume* AddVolumeWithID(int idnode1, int idnode2, int idnode3,
+               int idnode4, int idnode5, int ID);
+       virtual SMDS_MeshVolume* AddVolume(int idnode1, int idnode2, int idnode3,
+               int idnode4, int idnode5, int idnode6);
+       virtual SMDS_MeshVolume* AddVolumeWithID(int idnode1, int idnode2,
+               int idnode3, int idnode4, int idnode5, int idnode6, int ID);
+       virtual SMDS_MeshVolume* AddVolume(int idnode1, int idnode2, int idnode3,
+               int idnode4, int idnode5, int idnode6, int idnode7, int idnode8);
+       virtual SMDS_MeshVolume* AddVolumeWithID(int idnode1, int idnode2, int idnode3,
+               int idnode4, int idnode5, int idnode6, int idnode7, int idnode8,
+               int ID);
+       virtual void RemoveNode(int IDnode);
+       virtual void RemoveEdge(int idnode1, int idnode2);
+       virtual void RemoveFace(int idnode1, int idnode2, int idnode3);
+       virtual void RemoveFace(int idnode1, int idnode2, int idnode3, int idnode4);
+       virtual void RemoveElement(int IDelem, const bool removenodes = false);
+       void RemoveElement(const SMDS_MeshElement * elem, const bool removenodes =
+               false);
+    bool RemoveNode(const SMDS_MeshNode * node);       //Remove a node and elements which need this node
+       void RemoveEdge(const SMDS_MeshEdge * edge);
+       void RemoveFace(const SMDS_MeshFace * face);
+       void RemoveVolume(const SMDS_MeshVolume * volume);
+
+       virtual bool RemoveFromParent();
+       virtual bool RemoveSubMesh(const SMDS_Mesh * aMesh);
+       
+       const SMDS_MeshNode *FindNode(int idnode) const;
+       const SMDS_MeshEdge *FindEdge(int idnode1, int idnode2) const;
+       const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3) const;
+       const SMDS_MeshFace *FindFace(int idnode1, int idnode2, int idnode3, int idnode4) const;
+       const SMDS_MeshElement *FindElement(int IDelem) const;
+       
+       int NbNodes() const;
+       int NbEdges() const;
+       int NbFaces() const;
+       int NbVolumes() const;
+       int NbSubMesh() const;
+       void DumpNodes() const;
+       void DumpEdges() const;
+       void DumpFaces() const;
+       void DumpVolumes() const;
+       void DebugStats() const;
+       SMDS_Mesh *boundaryFaces();
+       SMDS_Mesh *boundaryEdges();
+        ~SMDS_Mesh();
+    bool hasConstructionEdges();
+    bool hasConstructionFaces();
+       bool hasInverseElements();
+    void setConstructionEdges(bool);
+    void setConstructionFaces(bool);
+       void setInverseElements(bool);
+
+  private:
+    SMDS_Mesh(SMDS_Mesh * parent);
+    SMDS_MeshFace * createTriangle(SMDS_MeshNode * node1,
+               SMDS_MeshNode * node2, SMDS_MeshNode * node3);
+       SMDS_MeshFace * createQuadrangle(SMDS_MeshNode * node1,
+               SMDS_MeshNode * node2, SMDS_MeshNode * node3, SMDS_MeshNode * node4);
+       void removeElementDependencies(SMDS_MeshElement * element);
+       const SMDS_MeshEdge* FindEdge(const SMDS_MeshNode * n1,
+               const SMDS_MeshNode * n2) const;
+       SMDS_MeshEdge* FindEdgeOrCreate(const SMDS_MeshNode * n1,
+               const SMDS_MeshNode * n2);
+       SMDS_MeshFace* FindFaceOrCreate(
+               const SMDS_MeshNode *n1,
+               const SMDS_MeshNode *n2,
+               const SMDS_MeshNode *n3);
+       const SMDS_MeshFace* FindFace(
+               const SMDS_MeshNode *n1,
+               const SMDS_MeshNode *n2,
+               const SMDS_MeshNode *n3,
+               const SMDS_MeshNode *n4) const;
+       SMDS_MeshFace* FindFaceOrCreate(
+               const SMDS_MeshNode *n1,
+               const SMDS_MeshNode *n2,
+               const SMDS_MeshNode *n3,
+               const SMDS_MeshNode *n4);
+
+       // Fields PRIVATE
+       typedef set<SMDS_MeshNode *> SetOfNodes;
+       typedef set<SMDS_MeshEdge *> SetOfEdges;
+       typedef set<SMDS_MeshFace *> SetOfFaces;
+       typedef set<SMDS_MeshVolume *> SetOfVolumes;
+
+       SetOfNodes myNodes;
+       SetOfEdges myEdges;
+       SetOfFaces myFaces;
+       SetOfVolumes myVolumes;
+       SMDS_Mesh *myParent;
+       list<SMDS_Mesh *> myChildren;
+       SMDS_MeshElementIDFactory *myNodeIDFactory;
+       SMDS_MeshElementIDFactory *myElementIDFactory;
+
+    bool myHasConstructionEdges;
+    bool myHasConstructionFaces;
+       bool myHasInverseElements;
 };
 
-
-#include "SMDS_Mesh.lxx"
-
-
-
-// other inline functions and methods (like "C++: function call" methods)
-//
-
-
 #endif