-// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 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
#include "SMESH_SMESH.hxx"
-#include "SMDS_MeshElement.hxx"
+#include "SMDS_ElementHolder.hxx"
#include "SMESHDS_SubMesh.hxx"
#include "SMESH_TypeDefs.hxx"
#include <boost/shared_ptr.hpp>
class SMDS_MeshNode;
+class SMDS_MeshElement;
class SMESHDS_Mesh;
class SMESH_Mesh;
virtual bool Contains(const SMDS_MeshElement * ME) const;
template< class ITERATOR >
- void ChangeElements( ITERATOR it, ITERATOR end )
+ void ChangeElements( ITERATOR it, ITERATOR end )
{
// change SubMesh contents without deleting tmp elements
// for which the caller is responsible
_elements.assign( it, end );
}
- SubMesh(int index=0):SMESHDS_SubMesh(0,index),_n2n(0) {}
+ SubMesh(const SMDS_Mesh* mesh, int index=0);
virtual ~SubMesh() { Clear(); }
protected:
TN2NMap* _n2n;
UVPtStructVec _uvPtStructVec; // for SubMesh of EDGE
friend class SMESH_ProxyMesh;
+
+ 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 compact() {}
+ virtual void clear() { Clear(); }
};
//--------------------------------------------------------------------------------
// Public interface
SMESH_ProxyMesh();
SMESH_ProxyMesh(std::vector<SMESH_ProxyMesh::Ptr>& components);
- SMESH_ProxyMesh(const SMESH_Mesh& mesh) { _mesh = &mesh; }
+ SMESH_ProxyMesh(const SMESH_Mesh& mesh);
virtual ~SMESH_ProxyMesh();
// Returns the submesh of a shape; it can be a proxy sub-mesh
// Interface for descendants
protected:
- void setMesh(const SMESH_Mesh& mesh) { _mesh = &mesh; }
+ void setMesh(const SMESH_Mesh& mesh);
int shapeIndex(const TopoDS_Shape& shape) const;
- virtual SubMesh* newSubmesh(int index=0) const { return new SubMesh(index); }
+ virtual SubMesh* newSubmesh(int index=0) const;
// returns a proxy sub-mesh; zero index is for the case of mesh w/o shape
SubMesh* findProxySubMesh(int shapeIndex=0) const;
std::set< const SMDS_MeshElement* > _elemsInMesh;
// Complex submesh used to iterate over elements in other sub-meshes
- mutable SubMesh _subContainer;
+ mutable SubMesh* _subContainer;
};
#endif