-// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Module : SMESH
//
#include "SMESH_Mesh.hxx"
+#include "SMESH_MesherHelper.hxx"
#include "SMESH_subMesh.hxx"
#include "SMESH_Gen.hxx"
#include "SMESH_Hypothesis.hxx"
_isAutoColor = false;
_isModified = false;
_shapeDiagonal = 0.0;
- _rmGroupCallUp = 0;
+ _callUp = 0;
_myMeshDS->ShapeToMesh( PseudoShape() );
}
_isAutoColor( false ),
_isModified( false ),
_shapeDiagonal( 0.0 ),
- _rmGroupCallUp( 0 )
+ _callUp( 0 )
{
}
// delete sub-meshes
map <int, SMESH_subMesh*>::iterator sm = _mapSubMesh.begin();
for ( ; sm != _mapSubMesh.end(); ++sm )
+ {
delete sm->second;
+ sm->second = 0;
+ }
_mapSubMesh.clear();
- if ( _rmGroupCallUp) delete _rmGroupCallUp;
- _rmGroupCallUp = 0;
+ if ( _callUp) delete _callUp;
+ _callUp = 0;
// remove self from studyContext
if ( _gen )
}
if ( _myDocument )
_myDocument->RemoveMesh( _id );
+ _myDocument = 0;
if ( _myMeshDS )
// delete _myMeshDS, in a thread in order not to block closing a study with large meshes
boost::thread aThread(boost::bind( & deleteMeshDS, _myMeshDS ));
}
+//================================================================================
+/*!
+ * \brief Return true if a mesh with given id exists
+ */
+//================================================================================
+
+bool SMESH_Mesh::MeshExists( int meshId ) const
+{
+ return _myDocument ? _myDocument->GetMesh( meshId ) : false;
+}
+
//=============================================================================
/*!
* \brief Set geometry to be meshed
return _shapeDiagonal;
}
+//================================================================================
+/*!
+ * \brief Load mesh from study file
+ */
+//================================================================================
+
+void SMESH_Mesh::Load()
+{
+ if (_callUp)
+ _callUp->Load();
+}
+
//=======================================================================
/*!
* \brief Remove all nodes and elements
{
aSubMesh = new SMESH_subMesh(index, this, _myMeshDS, aSubShape);
_mapSubMesh[index] = aSubMesh;
- ClearMeshOrder();
}
return aSubMesh;
}
for ( i_sm = _mapSubMesh.rbegin(); i_sm != _mapSubMesh.rend(); ++i_sm) {
SMESHDS_SubMesh * ds = i_sm->second->GetSubMeshDS();
if ( ds && ds->IsComplexSubmesh() ) {
- TopExp_Explorer exp( i_sm->second->GetSubShape(), aSubShape.ShapeType() );
- for ( ; exp.More(); exp.Next() ) {
- if ( aSubShape.IsSame( exp.Current() )) {
- found.push_back( i_sm->second );
- break;
- }
+ if ( SMESH_MesherHelper::IsSubShape( aSubShape, i_sm->second->GetSubShape() ))
+ {
+ found.push_back( i_sm->second );
+ //break;
}
} else {
- break;
+ break; // the rest sub-meshes are not those of groups
}
}
+
+ if ( found.empty() ) // maybe the main shape is a COMPOUND (issue 0021530)
+ {
+ if ( SMESH_subMesh * mainSM = GetSubMeshContaining(1))
+ if ( mainSM->GetSubShape().ShapeType() == TopAbs_COMPOUND )
+ {
+ TopoDS_Iterator it( mainSM->GetSubShape() );
+ if ( it.Value().ShapeType() == aSubShape.ShapeType() &&
+ SMESH_MesherHelper::IsSubShape( aSubShape, mainSM->GetSubShape() ))
+ found.push_back( mainSM );
+ }
+ }
return found;
}
//=======================================================================
if ( !GetMeshDS()->IsUsedHypothesis( hyp ))
return;
+ if (_callUp)
+ _callUp->HypothesisModified();
+
const SMESH_Algo *foundAlgo = 0;
SMESH_HypoFilter algoKind, compatibleHypoKind;
list <const SMESHDS_Hypothesis * > usedHyps;
//================================================================================
/*!
- * \brief Set a caller of RemoveGroup() at level of CORBA API implementation.
+ * \brief Set a caller of methods at level of CORBA API implementation.
* The set upCaller will be deleted by SMESH_Mesh
*/
//================================================================================
-void SMESH_Mesh::SetRemoveGroupCallUp( TRmGroupCallUp* upCaller )
+void SMESH_Mesh::SetCallUp( TCallUp* upCaller )
{
- if ( _rmGroupCallUp ) delete _rmGroupCallUp;
- _rmGroupCallUp = upCaller;
+ if ( _callUp ) delete _callUp;
+ _callUp = upCaller;
}
//=============================================================================
GetMeshDS()->RemoveGroup( _mapGroup[theGroupID]->GetGroupDS() );
delete _mapGroup[theGroupID];
_mapGroup.erase (theGroupID);
- if (_rmGroupCallUp)
- _rmGroupCallUp->RemoveGroup( theGroupID );
+ if (_callUp)
+ _callUp->RemoveGroup( theGroupID );
return true;
}