X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH%2FSMESH_ProxyMesh.hxx;h=8b18fbaac6f7f6bb258c91811bf0201745535580;hp=aa692414a8cd826a27cf7f732357f5817b4a6556;hb=d9f4b53e489dd5857db264ede6acded7b076c9f1;hpb=6d32f944a0a115b6419184c50b57bf7c4eef5786 diff --git a/src/SMESH/SMESH_ProxyMesh.hxx b/src/SMESH/SMESH_ProxyMesh.hxx index aa692414a..8b18fbaac 100644 --- a/src/SMESH/SMESH_ProxyMesh.hxx +++ b/src/SMESH/SMESH_ProxyMesh.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2022 CEA/DEN, EDF R&D, 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 @@ -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(); @@ -91,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(); } }; @@ -103,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 ); } @@ -143,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 @@ -184,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; };