{
MESSAGE("SMESH_Mesh::~SMESH_Mesh");
- // Unassign algorithms in order to have all SMESH_subMeshEventListenerData deleted (22874)
+ // avoid usual removal of elements while processing RemoveHypothesis( algo ) event
SMESHDS_SubMeshIteratorPtr smIt = _myMeshDS->SubMeshes();
- while ( smIt->more() ) {
- // avoid usual removal of elements while processing RemoveHypothesis( algo ) event
+ while ( smIt->more() )
const_cast<SMESHDS_SubMesh*>( smIt->next() )->Clear();
- }
- const ShapeToHypothesis & hyps = _myMeshDS->GetHypotheses();
- for ( ShapeToHypothesis::Iterator s2hyps( hyps ); s2hyps.More(); s2hyps.Next() )
- {
- const TopoDS_Shape& s = s2hyps.Key();
- THypList hyps = s2hyps.ChangeValue(); // copy
- THypList::const_iterator h = hyps.begin();
- for ( ; h != hyps.end(); ++h )
- if ( (*h)->GetType() != SMESHDS_Hypothesis::PARAM_ALGO )
- RemoveHypothesis( s, (*h)->GetID() );
- }
// issue 0020340: EDF 1022 SMESH : Crash with FindNodeClosestTo in a second new study
// Notify event listeners at least that something happens
return _myDocument ? bool( _myDocument->GetMesh( meshId )) : false;
}
+//================================================================================
+/*!
+ * \brief Return a mesh by id
+ */
+//================================================================================
+
+SMESH_Mesh* SMESH_Mesh::FindMesh( int meshId ) const
+{
+ if ( _id == meshId )
+ return (SMESH_Mesh*) this;
+
+ if ( StudyContextStruct *aStudyContext = _gen->GetStudyContext( _studyId ))
+ {
+ std::map < int, SMESH_Mesh * >::iterator i_m = aStudyContext->mapMesh.find( meshId );
+ if ( i_m != aStudyContext->mapMesh.end() )
+ return i_m->second;
+ }
+ return NULL;
+}
+
//=============================================================================
/*!
* \brief Set geometry to be meshed
//================================================================================
void SMESH_Mesh::ExportCGNS(const char * file,
- const SMESHDS_Mesh* meshDS)
+ const SMESHDS_Mesh* meshDS,
+ const char * meshName)
{
int res = Driver_Mesh::DRS_FAIL;
#ifdef WITH_CGNS
myWriter.SetFile( file );
myWriter.SetMesh( const_cast<SMESHDS_Mesh*>( meshDS ));
myWriter.SetMeshName( SMESH_Comment("Mesh_") << meshDS->GetPersistentId());
+ if ( meshName && meshName[0] )
+ myWriter.SetMeshName( meshName );
res = myWriter.Perform();
#endif
if ( res != Driver_Mesh::DRS_OK )
return aGroup;
SMESH_Group* anOldGrp = (*itg).second;
- SMESHDS_GroupBase* anOldGrpDS = anOldGrp->GetGroupDS();
- if ( !anOldGrp || !anOldGrpDS )
+ if ( !anOldGrp || !anOldGrp->GetGroupDS() )
return aGroup;
+ SMESHDS_GroupBase* anOldGrpDS = anOldGrp->GetGroupDS();
// create new standalone group
aGroup = new SMESH_Group (theGroupID, this, anOldGrpDS->GetType(), anOldGrp->GetName() );
TopTools_ListIteratorOfListOfShape ancIt (ancList);
while ( ancIt.More() && ancIt.Value().ShapeType() >= memberType )
ancIt.Next();
- if ( ancIt.More() )
- ancList.InsertBefore( theShape, ancIt );
+ if ( ancIt.More() ) ancList.InsertBefore( theShape, ancIt );
+ else ancList.Append( theShape );
}
}
else // else added for 52457: Addition of hypotheses is 8 time longer than meshing