From: eap Date: Wed, 3 May 2006 14:53:45 +0000 (+0000) Subject: fix bug 11757. Use free labels when publishing a reference X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=b28dc98b3af2f7fc28d8ffba41898e8eb5cf1d80;p=modules%2Fsmesh.git fix bug 11757. Use free labels when publishing a reference --- diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index d3c645941..1874fe167 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -309,23 +309,30 @@ static void addReference (SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); SALOMEDS::SObject_var aReferenceSO; if ( !theTag ) { + // check if the reference to theToObject already exists + // and find a free label for the reference object bool isReferred = false; + int tag = 1; SALOMEDS::ChildIterator_var anIter = theStudy->NewChildIterator( theSObject ); - for ( ; !isReferred && anIter->More(); anIter->Next() ) { - if ( anIter->Value()->ReferencedObject( aReferenceSO ) && - strcmp( aReferenceSO->GetID(), aToObjSO->GetID() ) == 0 ) - isReferred = true; + for ( ; !isReferred && anIter->More(); anIter->Next(), ++tag ) { + if ( anIter->Value()->ReferencedObject( aReferenceSO )) { + if ( strcmp( aReferenceSO->GetID(), aToObjSO->GetID() ) == 0 ) + isReferred = true; + } + else if ( !theTag ) { + SALOMEDS::GenericAttribute_var anAttr; + if ( !anIter->Value()->FindAttribute( anAttr, "AttributeIOR" )) + theTag = tag; + } } - if ( !isReferred ) { - aReferenceSO = aStudyBuilder->NewObject( theSObject ); - aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); - } - } - else { - if ( !theSObject->FindSubObject( theTag, aReferenceSO )) - aReferenceSO = aStudyBuilder->NewObjectToTag( theSObject, theTag ); - aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); + if ( isReferred ) + return; + if ( !theTag ) + theTag = tag; } + if ( !theSObject->FindSubObject( theTag, aReferenceSO )) + aReferenceSO = aStudyBuilder->NewObjectToTag( theSObject, theTag ); + aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); } }