]> SALOME platform Git repositories - modules/smesh.git/blobdiff - src/SMESH/SMESH_ProxyMesh.cxx
Salome HOME
Revert "23418: [OCC] Mesh: Minimization of memory usage of SMESH"
[modules/smesh.git] / src / SMESH / SMESH_ProxyMesh.cxx
index 9e2e34792d130057528f85c1d3107b734bddcdc4..a28033fda4fe6c43d0bf337a5b1ec1ea1f66f75c 100644 (file)
  */
 //================================================================================
 
-SMESH_ProxyMesh::SMESH_ProxyMesh():_mesh(0), _subContainer(0)
+SMESH_ProxyMesh::SMESH_ProxyMesh():_mesh(0)
 {
 }
-//================================================================================
-/*!
- * \brief Constructor
- */
-//================================================================================
-
-SMESH_ProxyMesh::SMESH_ProxyMesh(const SMESH_Mesh& mesh)
-  : _mesh( &mesh ),
-    _subContainer( new SubMesh( GetMeshDS() ) )
-{
-}
-
 //================================================================================
 /*!
  * \brief Make a proxy mesh from components. Components become empty
@@ -71,7 +59,7 @@ SMESH_ProxyMesh::SMESH_ProxyMesh(std::vector<SMESH_ProxyMesh::Ptr>& components):
 
     takeTmpElemsInMesh( m );
 
-    if ( !_mesh && m->_mesh ) setMesh( *( m->_mesh ));
+    if ( !_mesh ) _mesh = m->_mesh;
     if ( _allowedTypes.empty() ) _allowedTypes = m->_allowedTypes;
 
     if ( _subMeshes.size() < m->_subMeshes.size() )
@@ -113,8 +101,6 @@ SMESH_ProxyMesh::SMESH_ProxyMesh(std::vector<SMESH_ProxyMesh::Ptr>& components):
 
 SMESH_ProxyMesh::~SMESH_ProxyMesh()
 {
-  delete _subContainer;
-
   for ( size_t i = 0; i < _subMeshes.size(); ++i )
     delete _subMeshes[i];
   _subMeshes.clear();
@@ -125,19 +111,6 @@ SMESH_ProxyMesh::~SMESH_ProxyMesh()
   _elemsInMesh.clear();
 }
 
-//================================================================================
-/*!
- * \brief Set mesh
- */
-//================================================================================
-
-void SMESH_ProxyMesh::setMesh(const SMESH_Mesh& mesh)
-{
-  _mesh = &mesh;
-  if ( _mesh )
-    _subContainer = new SubMesh( GetMeshDS() );
-}
-
 //================================================================================
 /*!
  * \brief Returns index of a shape
@@ -149,19 +122,6 @@ int SMESH_ProxyMesh::shapeIndex(const TopoDS_Shape& shape) const
   return ( shape.IsNull() || !_mesh->HasShapeToMesh() ? 0 : GetMeshDS()->ShapeToIndex(shape));
 }
 
-//================================================================================
-/*!
- * \brief Create a SubMesh
- *  \param [ino] index - shape index
- *  \return SubMesh* - new SubMesh
- */
-//================================================================================
-
-SMESH_ProxyMesh::SubMesh* SMESH_ProxyMesh::newSubmesh(int index) const
-{
-  return new SubMesh( GetMeshDS(),index );
-}
-
 //================================================================================
 /*!
  * \brief Returns the submesh of a shape; it can be a proxy sub-mesh
@@ -285,15 +245,15 @@ SMDS_ElemIteratorPtr SMESH_ProxyMesh::GetFaces(const TopoDS_Shape& shape) const
   if ( !_mesh->HasShapeToMesh() )
     return SMDS_ElemIteratorPtr();
 
-  _subContainer->RemoveAllSubmeshes();
+  _subContainer.RemoveAllSubmeshes();
 
   TopTools_IndexedMapOfShape FF;
   TopExp::MapShapes( shape, TopAbs_FACE, FF );
   for ( int i = 1; i <= FF.Extent(); ++i )
     if ( const SMESHDS_SubMesh* sm = GetSubMesh( FF(i)))
-      _subContainer->AddSubMesh( sm );
+      _subContainer.AddSubMesh( sm );
 
-  return _subContainer->SMESHDS_SubMesh::GetElements();
+  return _subContainer.SMESHDS_SubMesh::GetElements();
 }
 
 //================================================================================
@@ -308,16 +268,16 @@ SMDS_ElemIteratorPtr SMESH_ProxyMesh::GetFaces() const
   if ( _mesh->HasShapeToMesh() )
     return SMDS_ElemIteratorPtr();
 
-  _subContainer->RemoveAllSubmeshes();
+  _subContainer.RemoveAllSubmeshes();
   for ( unsigned i = 0; i < _subMeshes.size(); ++i )
     if ( _subMeshes[i] )
-      _subContainer->AddSubMesh( _subMeshes[i] );
+      _subContainer.AddSubMesh( _subMeshes[i] );
 
-  if ( _subContainer->NbSubMeshes() == 0 ) // no elements substituted
+  if ( _subContainer.NbSubMeshes() == 0 ) // no elements substituted
     return GetMeshDS()->elementsIterator(SMDSAbs_Face);
 
   // if _allowedTypes is empty, only elements from _subMeshes are returned,...
-  SMDS_ElemIteratorPtr proxyIter = _subContainer->SMESHDS_SubMesh::GetElements();
+  SMDS_ElemIteratorPtr proxyIter = _subContainer.SMESHDS_SubMesh::GetElements();
   if ( _allowedTypes.empty() || NbFaces() == _mesh->NbFaces() )
     return proxyIter;
 
@@ -573,7 +533,7 @@ int SMESH_ProxyMesh::SubMesh::NbElements() const
  */
 //================================================================================
 
-SMDS_ElemIteratorPtr SMESH_ProxyMesh::SubMesh::GetElements() const
+SMDS_ElemIteratorPtr SMESH_ProxyMesh::SubMesh::GetElements(bool reverse) const
 {
   return SMDS_ElemIteratorPtr
     ( new SMDS_ElementVectorIterator( _elements.begin(), _elements.end() ));
@@ -598,7 +558,7 @@ int SMESH_ProxyMesh::SubMesh::NbNodes() const
  */
 //================================================================================
 
-SMDS_NodeIteratorPtr SMESH_ProxyMesh::SubMesh::GetNodes() const
+SMDS_NodeIteratorPtr SMESH_ProxyMesh::SubMesh::GetNodes(bool reverse) const
 {
   if ( !_uvPtStructVec.empty() )
     return SMDS_NodeIteratorPtr ( new SMDS_SetIterator