X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHDS%2FSMESHDS_Mesh.hxx;h=fdf90a30b400efc9238ac50e352d69dc58f7744b;hp=d7eccde86aa41e923c19bdc8e7ef484a48494e6d;hb=42c7eb97f9ec27537b638c98ef69dc55f19fa1cd;hpb=789d7f7415a1e465aee36232e7633eea548ff1fb diff --git a/src/SMESHDS/SMESHDS_Mesh.hxx b/src/SMESHDS/SMESHDS_Mesh.hxx index d7eccde86..fdf90a30b 100644 --- a/src/SMESHDS/SMESHDS_Mesh.hxx +++ b/src/SMESHDS/SMESHDS_Mesh.hxx @@ -27,171 +27,265 @@ #ifndef _SMESHDS_Mesh_HeaderFile #define _SMESHDS_Mesh_HeaderFile -#ifndef _Standard_HeaderFile -#include -#endif -#ifndef _Handle_SMESHDS_Mesh_HeaderFile -#include "Handle_SMESHDS_Mesh.hxx" -#endif +#include "SMDS_Mesh.hxx" +#include "SMDS_MeshNode.hxx" +#include "SMDS_MeshEdge.hxx" +#include "SMDS_MeshFace.hxx" +#include "SMDS_MeshVolume.hxx" +#include "SMESHDS_Hypothesis.hxx" +#include "SMESHDS_SubMesh.hxx" +#include "SMESHDS_Script.hxx" -#ifndef _Standard_Integer_HeaderFile -#include -#endif -#ifndef _TopoDS_Shape_HeaderFile +#include #include -#endif -#ifndef _TopoDS_Shell_HeaderFile #include +#include +#include +#include +#include +#ifdef WNT +#include #endif -#ifndef _TopTools_IndexedMapOfShape_HeaderFile -#include -#endif -#ifndef _SMESHDS_DataMapOfIntegerSubMesh_HeaderFile -#include "SMESHDS_DataMapOfIntegerSubMesh.hxx" -#endif -#ifndef _SMESHDS_DataMapOfShapeListOfPtrHypothesis_HeaderFile -#include "SMESHDS_DataMapOfShapeListOfPtrHypothesis.hxx" -#endif -#ifndef _Handle_SMESHDS_Script_HeaderFile -#include "Handle_SMESHDS_Script.hxx" -#endif -#ifndef _SMDS_Mesh_HeaderFile -#include "SMDS_Mesh.hxx" -#endif -#ifndef _Standard_Boolean_HeaderFile -#include -#endif -#ifndef _SMESHDS_PtrHypothesis_HeaderFile -#include "SMESHDS_PtrHypothesis.hxx" -#endif -#ifndef _Standard_Real_HeaderFile -#include -#endif -#ifndef _Handle_SMDS_MeshNode_HeaderFile -#include "Handle_SMDS_MeshNode.hxx" -#endif -#ifndef _Handle_SMDS_MeshElement_HeaderFile -#include "Handle_SMDS_MeshElement.hxx" -#endif -#ifndef _Handle_SMESHDS_SubMesh_HeaderFile -#include "Handle_SMESHDS_SubMesh.hxx" -#endif -class SMESHDS_Script; -class TopoDS_Shape; -class SMDS_MeshNode; -class TopoDS_Shell; -class TopoDS_Face; -class TopoDS_Edge; -class TopoDS_Vertex; -class SMDS_MeshElement; -class SMESHDS_SubMesh; -class SMESHDS_ListOfPtrHypothesis; +//Not portable see http://gcc.gnu.org/onlinedocs/libstdc++/faq/index.html#5_4 to know more. +#ifdef __GNUC__ + #if __GNUC__ < 3 + #include + namespace gstd { using ::hash_map; }; // inherit globals + #else + #include + #if __GNUC_MINOR__ == 0 + namespace gstd = std; // GCC 3.0 + #else + namespace gstd = ::__gnu_cxx; // GCC 3.1 and later + #endif + #endif +#else // ... there are other compilers, right? + namespace gstd = std; +#endif -class SMESHDS_Mesh : public SMDS_Mesh { +class SMESHDS_GroupBase; +class SMESHDS_Mesh:public SMDS_Mesh{ public: + SMESHDS_Mesh(int MeshID); + void ShapeToMesh(const TopoDS_Shape & S); + bool AddHypothesis(const TopoDS_Shape & SS, const SMESHDS_Hypothesis * H); + bool RemoveHypothesis(const TopoDS_Shape & S, const SMESHDS_Hypothesis * H); + + virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, int ID); + virtual SMDS_MeshNode * AddNode(double x, double y, double z); + + virtual SMDS_MeshEdge* AddEdgeWithID(int n1, int n2, int ID); + virtual SMDS_MeshEdge* AddEdgeWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + int ID); + virtual SMDS_MeshEdge* AddEdge(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2); + + virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int ID); + virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + int ID); + virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3); - 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 SMESHDS_Mesh(const Standard_Integer MeshID); -Standard_EXPORT void ShapeToMesh(const TopoDS_Shape& S) ; -Standard_EXPORT Standard_Boolean AddHypothesis(const TopoDS_Shape& SS,const SMESHDS_PtrHypothesis& H) ; -Standard_EXPORT Standard_Boolean RemoveHypothesis(const TopoDS_Shape& S,const SMESHDS_PtrHypothesis& H) ; -Standard_EXPORT virtual Standard_Integer AddNode(const Standard_Real x,const Standard_Real y,const Standard_Real z) ; -Standard_EXPORT virtual void RemoveNode(const Standard_Integer ID) ; -Standard_EXPORT void MoveNode(const Standard_Integer ID,const Standard_Real x,const Standard_Real y,const Standard_Real z) ; -Standard_EXPORT virtual Standard_Integer AddEdge(const Standard_Integer idnode1,const Standard_Integer idnode2) ; -Standard_EXPORT virtual Standard_Integer AddFace(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3) ; -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_Integer AddVolume(const Standard_Integer idnode1,const Standard_Integer idnode2,const Standard_Integer idnode3,const Standard_Integer idnode4) ; -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_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_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 void RemoveElement(const Standard_Integer IDelem) ; -Standard_EXPORT void SetNodeInVolume(const Handle(SMDS_MeshNode)& aNode,const TopoDS_Shell& S) ; -Standard_EXPORT void SetNodeOnFace(const Handle(SMDS_MeshNode)& aNode,const TopoDS_Face& S) ; -Standard_EXPORT void SetNodeOnEdge(const Handle(SMDS_MeshNode)& aNode,const TopoDS_Edge& S) ; -Standard_EXPORT void SetNodeOnVertex(const Handle(SMDS_MeshNode)& aNode,const TopoDS_Vertex& S) ; -Standard_EXPORT void UnSetNodeOnShape(const Handle(SMDS_MeshNode)& aNode) ; -Standard_EXPORT void SetMeshElementOnShape(const Handle(SMDS_MeshElement)& anElt,const TopoDS_Shape& S) ; -Standard_EXPORT void UnSetMeshElementOnShape(const Handle(SMDS_MeshElement)& anElt,const TopoDS_Shape& S) ; -Standard_EXPORT TopoDS_Shape ShapeToMesh() ; -Standard_EXPORT Standard_Boolean HasMeshElements(const TopoDS_Shape& S) ; -Standard_EXPORT Handle_SMESHDS_SubMesh MeshElements(const TopoDS_Shape& S) ; -Standard_EXPORT Standard_Boolean HasHypothesis(const TopoDS_Shape& S) ; -Standard_EXPORT const SMESHDS_ListOfPtrHypothesis& GetHypothesis(const TopoDS_Shape& S) ; -Standard_EXPORT const Handle_SMESHDS_Script& GetScript() ; -Standard_EXPORT void ClearScript() ; -Standard_EXPORT Standard_Integer ShapeToIndex(const TopoDS_Shape& aShape) ; -Standard_EXPORT TopoDS_Shape IndexToShape(const Standard_Integer ShapeIndex) ; -Standard_EXPORT void NewSubMesh(const Standard_Integer Index) ; -Standard_EXPORT void SetNodeInVolume(const Handle(SMDS_MeshNode)& aNode,const Standard_Integer Index) ; -Standard_EXPORT void SetNodeOnFace(const Handle(SMDS_MeshNode)& aNode,const Standard_Integer Index) ; -Standard_EXPORT void SetNodeOnEdge(const Handle(SMDS_MeshNode)& aNode,const Standard_Integer Index) ; -Standard_EXPORT void SetNodeOnVertex(const Handle(SMDS_MeshNode)& aNode,const Standard_Integer Index) ; -Standard_EXPORT void SetMeshElementOnShape(const Handle(SMDS_MeshElement)& anElt,const Standard_Integer Index) ; -Standard_EXPORT ~SMESHDS_Mesh(); - - - - - // Type management - // - Standard_EXPORT friend Handle_Standard_Type& SMESHDS_Mesh_Type_(); - Standard_EXPORT const Handle(Standard_Type)& DynamicType() const; - Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)&) const; - -protected: - - // Methods PROTECTED - // - - - // Fields PROTECTED - // - - -private: - - // Methods PRIVATE - // - - - // Fields PRIVATE - // -Standard_Integer myMeshID; -TopoDS_Shape myShape; -TopTools_IndexedMapOfShape myIndexToShape; -SMESHDS_DataMapOfIntegerSubMesh myShapeIndexToSubMesh; -SMESHDS_DataMapOfShapeListOfPtrHypothesis myShapeToHypothesis; -Handle_SMESHDS_Script myScript; + virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4, int ID); + virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + int ID); + virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4); + virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int ID); + virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + int ID); + virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4); -}; + virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int ID); + virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + int ID); + virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5); + virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int ID); + virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + const SMDS_MeshNode * n6, + int ID); + virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + const SMDS_MeshNode * n6); + virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int ID); + virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + const SMDS_MeshNode * n6, + const SMDS_MeshNode * n7, + const SMDS_MeshNode * n8, + int ID); + virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + const SMDS_MeshNode * n6, + const SMDS_MeshNode * n7, + const SMDS_MeshNode * n8); + + virtual SMDS_MeshFace* AddPolygonalFaceWithID (std::vector nodes_ids, + const int ID); + virtual SMDS_MeshFace* AddPolygonalFaceWithID (std::vector nodes, + const int ID); + virtual SMDS_MeshFace* AddPolygonalFace (std::vector nodes); -// other inline functions and methods (like "C++: function call" methods) -// + virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID + (std::vector nodes_ids, + std::vector quantities, + const int ID); + + virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID + (std::vector nodes, + std::vector quantities, + const int ID); + + virtual SMDS_MeshVolume* AddPolyhedralVolume + (std::vector nodes, + std::vector quantities); + + void MoveNode(const SMDS_MeshNode *, double x, double y, double z); + virtual void RemoveNode(const SMDS_MeshNode *); + void RemoveElement(const SMDS_MeshElement *); + bool ChangeElementNodes(const SMDS_MeshElement * elem, + const SMDS_MeshNode * nodes[], + const int nbnodes); + bool ChangePolygonNodes(const SMDS_MeshElement * elem, + std::vector nodes); + bool ChangePolyhedronNodes(const SMDS_MeshElement * elem, + std::vector nodes, + std::vector quantities); + void Renumber (const bool isNodes, const int startID=1, const int deltaID=1); + + void SetNodeInVolume(SMDS_MeshNode * aNode, const TopoDS_Shell & S); + void SetNodeOnFace(SMDS_MeshNode * aNode, const TopoDS_Face & S); + void SetNodeOnEdge(SMDS_MeshNode * aNode, const TopoDS_Edge & S); + void SetNodeOnVertex(SMDS_MeshNode * aNode, const TopoDS_Vertex & S); + void UnSetNodeOnShape(const SMDS_MeshNode * aNode); + void SetMeshElementOnShape(const SMDS_MeshElement * anElt, + const TopoDS_Shape & S); + void UnSetMeshElementOnShape(const SMDS_MeshElement * anElt, + const TopoDS_Shape & S); + TopoDS_Shape ShapeToMesh() const; + bool HasMeshElements(const TopoDS_Shape & S); + SMESHDS_SubMesh * MeshElements(const TopoDS_Shape & S) const; + SMESHDS_SubMesh * MeshElements(const int Index); + std::list SubMeshIndices(); + const std::map& SubMeshes() + { return myShapeIndexToSubMesh; } + + bool HasHypothesis(const TopoDS_Shape & S); + const std::list& GetHypothesis(const TopoDS_Shape & S) const; + SMESHDS_Script * GetScript(); + void ClearScript(); + int ShapeToIndex(const TopoDS_Shape & aShape) const; + TopoDS_Shape IndexToShape(int ShapeIndex); + + SMESHDS_SubMesh * NewSubMesh(int Index); + int AddCompoundSubmesh(const TopoDS_Shape& S, TopAbs_ShapeEnum type = TopAbs_SHAPE); + void SetNodeInVolume(const SMDS_MeshNode * aNode, int Index); + void SetNodeOnFace(SMDS_MeshNode * aNode, int Index); + void SetNodeOnEdge(SMDS_MeshNode * aNode, int Index); + void SetNodeOnVertex(SMDS_MeshNode * aNode, int Index); + void SetMeshElementOnShape(const SMDS_MeshElement * anElt, int Index); + + void AddGroup (SMESHDS_GroupBase* theGroup) { myGroups.insert(theGroup); } + void RemoveGroup (SMESHDS_GroupBase* theGroup) { myGroups.erase(theGroup); } + int GetNbGroups() const { return myGroups.size(); } + const std::set& GetGroups() const { return myGroups; } + + bool IsGroupOfSubShapes (const TopoDS_Shape& aSubShape) const; + + ~SMESHDS_Mesh(); + +private: +#ifndef WNT + struct HashTopoDS_Shape{ + size_t operator()(const TopoDS_Shape& S) const { + return S.HashCode(2147483647); + } + }; +#else + typedef gstd::hash_compare< TopoDS_Shape, less > HashTopoDS; + + class HashTopoDS_Shape : public HashTopoDS { + public: + + size_t operator()(const TopoDS_Shape& S) const { + return S.HashCode(2147483647); + } + + bool operator()(const TopoDS_Shape& S1,const TopoDS_Shape& S2) const { + return S1==S2; + } + }; + + + +#endif + + typedef std::list THypList; + +#ifndef WNT + typedef gstd::hash_map ShapeToHypothesis; +#else + typedef gstd::hash_map ShapeToHypothesis; +#endif + + ShapeToHypothesis myShapeToHypothesis; + + int myMeshID; + TopoDS_Shape myShape; + + typedef std::map TShapeIndexToSubMesh; + TShapeIndexToSubMesh myShapeIndexToSubMesh; + + TopTools_IndexedMapOfShape myIndexToShape; + + typedef std::set TGroups; + TGroups myGroups; + + SMESHDS_Script* myScript; +}; #endif