X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_ProxyMesh.hxx;h=fc2e9b201d16413a7809b5603a46627cb7c8deed;hp=35a4c3a97b8ff6d2804084a0a6d7d1cd89ed7a47;hb=HEAD;hpb=b7a7d49664daa32e1befb558280e13ed0bde37c9 diff --git a/src/SMESH/SMESH_ProxyMesh.hxx b/src/SMESH/SMESH_ProxyMesh.hxx index 35a4c3a97..a9ce71ef3 100644 --- a/src/SMESH/SMESH_ProxyMesh.hxx +++ b/src/SMESH/SMESH_ProxyMesh.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -31,6 +31,8 @@ #include "SMESH_TypeDefs.hxx" #include +#include +#include #include #include @@ -57,7 +59,7 @@ public: /*! * \brief Proxy sub-mesh */ - class SMESH_EXPORT SubMesh : public SMESHDS_SubMesh, SMDS_ElementHolder + class SMESH_EXPORT SubMesh : public SMESHDS_SubMesh { public: @@ -65,8 +67,8 @@ public: const SMDS_MeshNode* GetProxyNode( const SMDS_MeshNode* n ) const; const UVPtStructVec& GetUVPtStructVec() const { return _uvPtStructVec; } virtual void AddElement(const SMDS_MeshElement * e); - virtual int NbElements() const; - virtual int NbNodes() const; + virtual smIdType NbElements() const; + virtual smIdType NbNodes() const; virtual SMDS_ElemIteratorPtr GetElements() const; virtual SMDS_NodeIteratorPtr GetNodes() const; virtual void Clear(); @@ -79,8 +81,7 @@ public: // for which the caller is responsible _elements.assign( it, end ); } - SubMesh(const SMDS_Mesh* mesh, int index=0) - :SMESHDS_SubMesh(0,index), SMDS_ElementHolder(mesh), _n2n(0) {} + SubMesh(const SMDS_Mesh* mesh, int index=0); virtual ~SubMesh() { Clear(); } protected: @@ -92,7 +93,7 @@ public: protected: // methods of SMDS_ElementHolder; remove elements before mesh compacting or clearing virtual SMDS_ElemIteratorPtr getElements() { Clear(); return GetElements(); } virtual void tmpClear() {} - virtual void add( const SMDS_MeshElement* element ) {} + virtual void add( const SMDS_MeshElement* /*element*/ ) {} virtual void compact() {} virtual void clear() { Clear(); } }; @@ -104,31 +105,39 @@ public: SMESH_ProxyMesh(const SMESH_Mesh& mesh); virtual ~SMESH_ProxyMesh(); - // Returns the submesh of a shape; it can be a proxy sub-mesh + // Returns a sub-mesh of a shape; it can be a proxy sub-mesh const SMESHDS_SubMesh* GetSubMesh(const TopoDS_Shape& shape) const; - // Returns the proxy sub-mesh of a shape; it can be NULL + // Return a sub-mesh by a shape ID; it can be a proxy sub-mesh + const SMESHDS_SubMesh* GetSubMesh(const int shapeID) const; + + // Return a proxy sub-mesh of a shape; it can be NULL const SubMesh* GetProxySubMesh(const TopoDS_Shape& shape) const; - // Returns the proxy node of a node; the input node is returned if no proxy exists + // Return a proxy node of a node; the input node is returned if no proxy exists const SMDS_MeshNode* GetProxyNode( const SMDS_MeshNode* node ) const; - // Returns number of proxy sub-meshes + // Return number of proxy sub-meshes int NbProxySubMeshes() const; - // Returns iterator on all faces of the mesh taking into account substitutions. + // Return iterator on all faces of the mesh taking into account substitutions. // To be used in case of mesh without shape SMDS_ElemIteratorPtr GetFaces() const; - // Returns iterator on all faces on the face taking into account substitutions + // Return iterator on all faces on the face taking into account substitutions SMDS_ElemIteratorPtr GetFaces(const TopoDS_Shape& face) const; // Return total nb of faces taking into account substitutions - int NbFaces() const; + smIdType NbFaces() const; bool IsTemporary(const SMDS_MeshElement* elem ) const; + // Return iterator on inverse elements of a node that may be a proxy one + SMDS_ElemIteratorPtr GetInverseElementIterator(const SMDS_MeshNode* node, + SMDSAbs_ElementType type) const; + // Check if a FACE has prisms on its both sides + static bool HasPrismsOnTwoSides( SMESHDS_SubMesh* faceSM ); SMESH_Mesh* GetMesh() const { return const_cast( _mesh ); } @@ -144,13 +153,13 @@ public: virtual SubMesh* newSubmesh(int index=0) const; - // returns a proxy sub-mesh; zero index is for the case of mesh w/o shape + // Return a proxy sub-mesh; zero index is for the case of mesh w/o shape SubMesh* findProxySubMesh(int shapeIndex=0) const; - // returns a proxy sub-mesh; it is created if not yet exists + // Return a proxy sub-mesh; it is created if not yet exists SubMesh* getProxySubMesh(int shapeIndex); - // returns a proxy sub-mesh; it is created if not yet exists + // Return a proxy sub-mesh; it is created if not yet exists SubMesh* getProxySubMesh(const TopoDS_Shape& shape=TopoDS_Shape()); // move proxy sub-mesh from other proxy mesh to this, returns true if sub-mesh found @@ -185,6 +194,12 @@ public: // tmp elements residing the _mesh, to be deleted at destruction std::set< const SMDS_MeshElement* > _elemsInMesh; + // inverse elements of proxy nodes + typedef NCollection_DataMap< const SMDS_MeshNode*, + std::vector< const SMDS_MeshElement* >, + SMESH_Hasher > TNodeElemVecMap; + TNodeElemVecMap _inverseElements; + // Complex submesh used to iterate over elements in other sub-meshes mutable SubMesh* _subContainer; };