X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshOp.cxx;h=151328f9bc524b40fbc381f5287ba8a3076ae156;hb=131ded7390efc5172a382e6731b15d24b531963e;hp=1fc82405f9f21577c7432ba1b2b38486c70ee275;hpb=ac69e1629b1b13430b93339cea889fe1ed4f1090;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index 1fc82405f..151328f9b 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -363,15 +363,39 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const // skl for NPAL14695 - implementation of searching of mainObj GEOM::GEOM_Object_var mainObj = op->GetMainShape(aSubGeomVar); /* _var not _wrap as mainObj already exists! */ - while(1) { - if (mainObj->_is_nil()) - return false; + while( !mainObj->_is_nil()) { CORBA::String_var entry1 = mainObj->GetEntry(); CORBA::String_var entry2 = mainGeom->GetEntry(); if (std::string( entry1.in() ) == entry2.in() ) return true; mainObj = op->GetMainShape(mainObj); } + if ( aSubGeomVar->GetShapeType() == GEOM::COMPOUND ) + { + // is aSubGeomVar a compound of sub-shapes? + GEOM::GEOM_IShapesOperations_wrap sop = geomGen->GetIShapesOperations(aStudy->StudyId()); + if (sop->_is_nil()) return false; + GEOM::ListOfLong_var ids = sop->GetAllSubShapesIDs( aSubGeomVar, + GEOM::SHAPE,/*sorted=*/false); + if ( ids->length() > 0 ) + { + ids->length( 1 ); + GEOM::GEOM_Object_var compSub = geomGen->AddSubShape( aSubGeomVar, ids ); + if ( !compSub->_is_nil() ) + { + GEOM::ListOfGO_var shared = sop->GetSharedShapes( mainGeom, + compSub, + compSub->GetShapeType() ); + geomGen->RemoveObject( compSub ); + compSub->UnRegister(); + if ( shared->length() > 0 ) { + geomGen->RemoveObject( shared[0] ); + shared[0]->UnRegister(); + } + return ( shared->length() > 0 ); + } + } + } } } @@ -380,8 +404,8 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const //================================================================================ /*! - * \brief Return name of the algorithm that does not support submeshes and makes - * submesh creation useless + * \brief Return name of the algorithm that does not support sub-meshes and makes + * sub-mesh creation useless * \retval char* - string is to be deleted!!! */ //================================================================================ @@ -1555,7 +1579,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex, hypIndex = this->find( curHyp, myExistingHyps[ dim ][ type ]); else hypIndex = -1; - if ( !isSubmesh && hypIndex < 0 && anExisting.count() == 1 ) { + if ( !isSubmesh && myToCreate && hypIndex < 0 && anExisting.count() == 1 ) { // none is yet selected => select the sole existing if it is not optional CORBA::String_var hypTypeName = myExistingHyps[ dim ][ type ].first().first->GetName(); bool isOptional = true;