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=bb3703de1e845356f5cfd2a60390b33586a57167;hp=af12566d8698d440e465f1e71397d13257ec5353;hb=3a821b48ba986795abde72f524fa1a62a5802df2;hpb=c98d9fcd7f02c1f1f5c24dd3e709ed75228d66c4 diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index af12566d8..bb3703de1 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -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,16 @@ 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 ); } } + else + { + isInUseCaseTree = useCaseBuilder->IsUseCaseNode( SO ); + } SALOMEDS::GenericAttribute_wrap anAttr; if ( !CORBA::is_nil( theIOR )) @@ -324,13 +317,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 && theTag > 0 ) + { + 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(); @@ -757,7 +767,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr theStudy "Groups of Faces", "Groups of Volumes", "Groups of 0D Elements", "Groups of Balls" }; - // Currently, groups with heterogenous content are not supported + // Currently, groups with heterogeneous content are not supported if ( aType != SMESH::ALL ) { long aRootTag = GetNodeGroupsTag() + aType - 1; @@ -911,7 +921,7 @@ bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr theStudy, if ( aMeshSO->_is_nil() || aHypSO->_is_nil()) return false; - // Find a mesh or submesh refering to theShape + // Find a mesh or submesh referring to theShape SALOMEDS::SObject_wrap aMeshOrSubMesh = GetMeshOrSubmeshByShape( theStudy, theMesh, theShape ); if ( aMeshOrSubMesh->_is_nil() ) @@ -996,7 +1006,7 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy * \brief Stores names of variables that WILL be passes as parameters when calling * some method of a given object. * \param [in] theObject - the object whose a method WILL be called with \a theParameters. - * \param [in] theParameters - a string contating parameters separated by ':'. + * \param [in] theParameters - a string containing parameters separated by ':'. */ //================================================================================ @@ -1011,7 +1021,7 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP myLastObj.clear(); myLastParameters.clear(); myLastParamIndex.clear(); /* vector holding indices of virables within the string - of all varibles used for theObject */ + of all variables used for theObject */ int nbVars = 0; int pos = 0, prevPos = 0, len = strlen( theParameters ); if ( len == 0 ) return; @@ -1040,7 +1050,7 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP return; // store - // (1) variable names in the string of all varibles used for theObject and + // (1) variable names in the string of all variables used for theObject and // (2) indices of found variables in myLastParamIndex. // remember theObject @@ -1087,7 +1097,7 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP if ( pos < varStr.size() ) { varFound = ( varStr.compare( pos, myLastParameters[i].size(), myLastParameters[i] ) == 0 && - // same string begining but is length same? + // same string beginning but is length same? ( pos + myLastParameters[i].size() >= varStr.size() || separators.find( varStr[ pos+1 ]) != std::string::npos )); if ( varFound )