SALOME Forum bug: sub-mesh removal leads to an Exception in a re-opened study.

Now UnRegister(), corresponding to the Register() called by AttributeIOR,
is invoked by an object publisher i.e. by SMESH_Gen_i::publish() but not by GUI
because GUI is unable to track publication of all objects created by the Engine:
for example groups can be created while mesh.Compute() is called.
This commit is contained in:
eap 2013-07-22 14:40:00 +00:00
parent 5b15666f93
commit 74d40c014d

View File

@ -260,7 +260,7 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy,
const bool theSelectable = true) const bool theSelectable = true)
{ {
SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR ); SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR );
SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
SALOMEDS::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder(); SALOMEDS::UseCaseBuilder_var useCaseBuilder = theStudy->GetUseCaseBuilder();
if ( SO->_is_nil() ) { if ( SO->_is_nil() ) {
if ( theTag == 0 ) if ( theTag == 0 )
@ -275,6 +275,10 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy,
CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theIOR ); CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theIOR );
SALOMEDS::AttributeIOR_wrap iorAttr = anAttr; SALOMEDS::AttributeIOR_wrap iorAttr = anAttr;
iorAttr->SetValue( objStr.in() ); iorAttr->SetValue( objStr.in() );
// UnRegister() !!!
SALOME::GenericObj_var genObj = SALOME::GenericObj::_narrow( theIOR );
if ( !genObj->_is_nil() )
genObj->UnRegister();
} }
if ( thePixMap ) { if ( thePixMap ) {
anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributePixMap" ); anAttr = aStudyBuilder->FindOrCreateAttribute( SO, "AttributePixMap" );
@ -1179,7 +1183,7 @@ char* SMESH_Gen_i::GetParameters(CORBA::Object_ptr theObject)
{ {
CORBA::String_var aResult(""); CORBA::String_var aResult("");
SALOMEDS::SObject_wrap aSObj = ObjectToSObject( myCurrentStudy,theObject); SALOMEDS::SObject_wrap aSObj = ObjectToSObject( myCurrentStudy, theObject );
if ( !aSObj->_is_nil() ) if ( !aSObj->_is_nil() )
{ {
SALOMEDS::GenericAttribute_wrap attr; SALOMEDS::GenericAttribute_wrap attr;
@ -1189,6 +1193,5 @@ char* SMESH_Gen_i::GetParameters(CORBA::Object_ptr theObject)
aResult = strAttr->Value(); aResult = strAttr->Value();
} }
} }
return aResult._retn();
return CORBA::string_dup( aResult.in() );
} }