X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i_1.cxx;h=76c2f35d64af727c971b07e3eb76a08226fced5d;hb=8301b1e71a0a9833c5bcf7951b426949f647ae9f;hp=65ee1e31d21d00f6a6a50600a17e51d6809166fc;hpb=fd1943809d016d0223da20a2a492b157cb17146a;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 65ee1e31d..76c2f35d6 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -265,14 +265,17 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder(); SALOMEDS::SObject_wrap objAfter; + bool isNewSO = false; if ( SO->_is_nil() ) { if ( theTag == 0 ) { SO = aStudyBuilder->NewObject( theFatherObject ); + isNewSO = true; } else if ( !theFatherObject->FindSubObject( theTag, SO.inout() )) { SO = aStudyBuilder->NewObjectToTag( theFatherObject, theTag ); + isNewSO = true; // define the next tag after given one in the data tree to insert SObject SALOMEDS::SObject_wrap curObj; @@ -314,18 +317,19 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, // add object to the use case tree // (to support tree representation customization and drag-n-drop) - if ( !CORBA::is_nil( objAfter ) ) { - useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag - } else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) { - useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list + if ( isNewSO ) + { + if ( !CORBA::is_nil( objAfter ) ) + useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag + else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) + useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list } - return SO._retn(); } //======================================================================= //function : setName -//purpose : +//purpose : //======================================================================= void SMESH_Gen_i::SetName(SALOMEDS::SObject_ptr theSObject, @@ -415,14 +419,21 @@ static void addReference (SALOMEDS::Study_ptr theStudy, theTag = tag; } if ( !theSObject->FindSubObject( theTag, aReferenceSO.inout() )) - { aReferenceSO = aStudyBuilder->NewObjectToTag( theSObject, theTag ); - // add reference to the use case tree - // (to support tree representation customization and drag-n-drop) - SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder(); - useCaseBuilder->AppendTo( aReferenceSO->GetFather(), aReferenceSO ); - } + aStudyBuilder->Addreference( aReferenceSO, aToObjSO ); + + // add reference to the use case tree + // (to support tree representation customization and drag-n-drop) + SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder(); + SALOMEDS::UseCaseIterator_wrap useCaseIter = useCaseBuilder->GetUseCaseIterator(theSObject); + for ( ; useCaseIter->More(); useCaseIter->Next() ) + { + SALOMEDS::SObject_wrap curSO = useCaseIter->Value(); + if ( curSO->Tag() == theTag ) + return; + } + useCaseBuilder->AppendTo( theSObject, aReferenceSO ); } } @@ -760,9 +771,14 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr theStudy } else if ( SMESH::DownCast< SMESH_Group_i* > ( theGroup )) { - SMESH::array_of_ElementType_var allElemTypes = theMesh->GetTypes(); - for ( size_t i =0; i < allElemTypes->length() && isEmpty; ++i ) - isEmpty = ( allElemTypes[i] != theGroup->GetType() ); + if ( theGroup->GetType() == SMESH::NODE ) + isEmpty = ( theMesh->NbNodes() == 0 ); + else + { + SMESH::array_of_ElementType_var allElemTypes = theMesh->GetTypes(); + for ( size_t i =0; i < allElemTypes->length() && isEmpty; ++i ) + isEmpty = ( allElemTypes[i] != theGroup->GetType() ); + } } aGroupSO = publish (theStudy, theGroup, aRootSO, 0, pm[isEmpty].c_str() ); } @@ -940,7 +956,7 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy CORBA::String_var hypEntry = aHypSO->GetID(); - // Find a mesh or submesh refering to theShape + // Find a mesh or sub-mesh referring to theShape SALOMEDS::SObject_wrap aMeshOrSubMesh = GetMeshOrSubmeshByShape( theStudy, theMesh, theShape ); if ( aMeshOrSubMesh->_is_nil() )