X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i_1.cxx;h=1874fe167407f2436510a49c0762067d4651ce5b;hb=57b43b4d010e2d0a1529d3c131bbb9d416e63258;hp=d3c645941bb8bbf65da35314c8e06cc352d73426;hpb=06c42e9c9528a8d54fed01e266c949676fa0d929;p=modules%2Fsmesh.git 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 ); } }