Salome HOME
Update of CheckDone
[modules/smesh.git] / src / SMESH / SMESH_ProxyMesh.hxx
index c7e92a8c4d95a1e745bde5d53c0e6cba084b5e63..a9ce71ef3b20562223572a2f54f9426faa8ea3fd 100644 (file)
@@ -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 <TopoDS_Shape.hxx>
+#include <NCollection_DataMap.hxx>
+#include <smIdType.hxx>
 
 #include <map>
 #include <vector>
@@ -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<SMESH_Mesh*>( _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;
 };