X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i_1.cxx;h=c03faa32c2b81e6ccf0a7ac498abcae7eb26a884;hp=322b13d5832903f29c26d3d256d874bb6d2928a2;hb=e64112ab22ad546fef622e0f1c02d9c049618995;hpb=920fe932b10ce5e9da132f0fce3be2bbef95fa3a diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 322b13d58..c03faa32c 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -26,6 +26,7 @@ #include "SMESH_Gen_i.hxx" +#include "SMESHDS_Mesh.hxx" #include "SMESH_Algo_i.hxx" #include "SMESH_Comment.hxx" #include "SMESH_Group_i.hxx" @@ -264,8 +265,7 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR ); SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder(); SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder(); - SALOMEDS::SObject_wrap objAfter; - bool isNewSO = false; + bool isNewSO = false, isInUseCaseTree = false; if ( SO->_is_nil() ) { if ( theTag == 0 ) { @@ -276,23 +276,12 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, { 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; - if ( theFatherObject->GetLastChildTag() > theTag ) - { - SALOMEDS::UseCaseIterator_wrap - anUseCaseIter = useCaseBuilder->GetUseCaseIterator(theFatherObject); - for ( ; anUseCaseIter->More(); anUseCaseIter->Next() ) { - curObj = anUseCaseIter->Value(); - if ( curObj->Tag() > theTag ) { - objAfter = curObj; - break; - } - } - } } } + else + { + isInUseCaseTree = useCaseBuilder->IsUseCaseNode( SO ); + } SALOMEDS::GenericAttribute_wrap anAttr; if ( !CORBA::is_nil( theIOR )) @@ -324,13 +313,30 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy, selAttr->SetSelectable( false ); } + if ( !isNewSO ) + aStudyBuilder->RemoveReference( SO );// remove garbage reference (23336) + // add object to the use case tree // (to support tree representation customization and drag-n-drop) - if ( isNewSO ) + if ( isNewSO || !isInUseCaseTree ) { - if ( !CORBA::is_nil( objAfter ) ) + // define the next tag after given one in the data tree to insert SObject + SALOMEDS::SObject_wrap curObj, objAfter; + if ( theFatherObject->GetLastChildTag() > theTag ) + { + SALOMEDS::UseCaseIterator_wrap + anUseCaseIter = useCaseBuilder->GetUseCaseIterator(theFatherObject); + for ( ; anUseCaseIter->More(); anUseCaseIter->Next() ) { + curObj = anUseCaseIter->Value(); + if ( curObj->Tag() > theTag ) { + objAfter = curObj; + break; + } + } + } + if ( !CORBA::is_nil( objAfter )) useCaseBuilder->InsertBefore( SO, objAfter ); // insert at given tag - else if ( !useCaseBuilder->IsUseCaseNode( SO ) ) + else if ( !isInUseCaseTree ) useCaseBuilder->AppendTo( theFatherObject, SO ); // append to the end of list } return SO._retn(); @@ -771,8 +777,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr theStudy SetName( aRootSO, aRootNames[aType] ); // Add new group to corresponding sub-tree - SMESH::array_of_ElementType_var elemTypes = theGroup->GetTypes(); - int isEmpty = ( elemTypes->length() == 0 ); + int isEmpty = false; std::string pm[2] = { "ICON_SMESH_TREE_GROUP", "ICON_SMESH_TREE_MESH_WARN" }; if ( SMESH::DownCast< SMESH_GroupOnFilter_i* > ( theGroup )) {