#include "SMESH_Group.hxx"
#include "SMESHDS_Group.hxx"
#include "SMESHDS_Script.hxx"
+#include "SMESHDS_GroupOnGeom.hxx"
#include "SMDS_MeshVolume.hxx"
#include "utilities.h"
*/
//=============================================================================
-void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape){
+void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
+{
if(MYDEBUG) MESSAGE("SMESH_Mesh::ShapeToMesh");
- if (_isShapeToMesh)
- throw
- SALOME_Exception(LOCALIZED
- ("a shape to mesh as already been defined"));
+
+ if ( !_myMeshDS->ShapeToMesh().IsNull() && aShape.IsNull() )
+ {
+ // removal of a shape to mesh, delete objects referring to sub-shapes:
+ // - sub-meshes
+ map <int, SMESH_subMesh *>::iterator i_sm = _mapSubMesh.begin();
+ for ( ; i_sm != _mapSubMesh.end(); ++i_sm )
+ delete i_sm->second;
+ _mapSubMesh.clear();
+ // - groups on geometry
+ map <int, SMESH_Group *>::iterator i_gr = _mapGroup.begin();
+ while ( i_gr != _mapGroup.end() ) {
+ if ( dynamic_cast<SMESHDS_GroupOnGeom*>( i_gr->second->GetGroupDS() )) {
+ _myMeshDS->RemoveGroup( i_gr->second->GetGroupDS() );
+ delete i_gr->second;
+ _mapGroup.erase( i_gr++ );
+ }
+ else
+ i_gr++;
+ }
+ _mapAncestors.Clear();
+ _mapPropagationChains.Clear();
+ }
+ else
+ {
+ if (_isShapeToMesh)
+ throw SALOME_Exception(LOCALIZED ("a shape to mesh has already been defined"));
+ }
_isShapeToMesh = true;
_myMeshDS->ShapeToMesh(aShape);
-
// NRI : 24/02/03
//EAP: 1/9/04 TopExp::MapShapes(aShape, _subShapes); USE the same map of _myMeshDS
}
{
if(MYDEBUG) MESSAGE("UNVToMesh - theFileName = "<<theFileName);
if(_isShapeToMesh)
- throw SALOME_Exception(LOCALIZED("a shape to mesh as already been defined"));
+ throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
_isShapeToMesh = true;
DriverUNV_R_SMDS_Mesh myReader;
myReader.SetMesh(_myMeshDS);
{
if(MYDEBUG) MESSAGE("MEDToMesh - theFileName = "<<theFileName<<", mesh name = "<<theMeshName);
if(_isShapeToMesh)
- throw SALOME_Exception(LOCALIZED("a shape to mesh as already been defined"));
+ throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
_isShapeToMesh = true;
DriverMED_R_SMESHDS_Mesh myReader;
myReader.SetMesh(_myMeshDS);
{
if(MYDEBUG) MESSAGE("UNVToMesh - theFileName = "<<theFileName);
if(_isShapeToMesh)
- throw SALOME_Exception(LOCALIZED("a shape to mesh as already been defined"));
+ throw SALOME_Exception(LOCALIZED("a shape to mesh has already been defined"));
_isShapeToMesh = true;
DriverSTL_R_SMDS_Mesh myReader;
myReader.SetMesh(_myMeshDS);
#include "SMDS_VertexPosition.hxx"
#include "SMDS_EdgePosition.hxx"
#include "SMDS_FacePosition.hxx"
+#include "SMESHDS_GroupOnGeom.hxx"
#include <TopExp_Explorer.hxx>
#include <TopExp.hxx>
#include <TopoDS_Iterator.hxx>
//=======================================================================
void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
{
- myShape = S;
- TopExp::MapShapes(myShape, myIndexToShape);
+ if ( !myShape.IsNull() && S.IsNull() )
+ {
+ // removal of a shape to mesh, delete ...
+ // - hypotheses
+ myShapeToHypothesis.clear();
+ // - shape indices in SMDS_Position of nodes
+ map<int,SMESHDS_SubMesh*>::iterator i_sub = myShapeIndexToSubMesh.begin();
+ for ( ; i_sub != myShapeIndexToSubMesh.end(); i_sub++ ) {
+ if ( !i_sub->second->IsComplexSubmesh() ) {
+ SMDS_NodeIteratorPtr nIt = i_sub->second->GetNodes();
+ while ( nIt->more() )
+ nIt->next()->GetPosition()->SetShapeId( 0 );
+ }
+ }
+ // - sub-meshes
+ myIndexToShape.Clear();
+ myShapeIndexToSubMesh.clear();
+ // - groups on geometry
+ set<SMESHDS_GroupBase*>::iterator gr = myGroups.begin();
+ while ( gr != myGroups.end() ) {
+ if ( dynamic_cast<SMESHDS_GroupOnGeom*>( *gr ))
+ myGroups.erase( gr++ );
+ else
+ gr++;
+ }
+ }
+ else {
+ myShape = S;
+ if ( !S.IsNull() )
+ TopExp::MapShapes(myShape, myIndexToShape);
+ }
}
//=======================================================================