X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_GroupOnShapeDlg.cxx;h=f7dccaff45c6304e29d3f6a81d9533a6d885f68c;hp=9a939559b2a691b524037d2e544e826df25949d9;hb=HEAD;hpb=5dcb2f2b467e63a0e5d37e234b2ba8f8e624f987 diff --git a/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx index 9a939559b..746adb994 100644 --- a/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -220,12 +220,12 @@ SMESH::ElementType SMESHGUI_GroupOnShapeOp::ElementType(GEOM::GEOM_Object_var ge case GEOM::COMPOUND: break; default: return SMESH::ALL; } - GEOM::GEOM_IShapesOperations_wrap aShapeOp = - SMESH::GetGEOMGen()->GetIShapesOperations(); + GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen( geom ); + GEOM::GEOM_IShapesOperations_wrap aShapeOp = geomGen->GetIShapesOperations(); - if ( geom->GetType() == 37 ) { // geom group - GEOM::GEOM_IGroupOperations_wrap aGroupOp = - SMESH::GetGEOMGen()->GetIGroupOperations(); + if ( geom->GetType() == 37 ) // geom group + { + GEOM::GEOM_IGroupOperations_wrap aGroupOp = geomGen->GetIGroupOperations(); if ( !aGroupOp->_is_nil() ) { // mainShape is an existing servant => GEOM_Object_var not GEOM_Object_wrap GEOM::GEOM_Object_var mainShape = aGroupOp->GetMainShape( geom ); @@ -236,7 +236,8 @@ SMESH::ElementType SMESHGUI_GroupOnShapeOp::ElementType(GEOM::GEOM_Object_var ge } } } - else if ( !aShapeOp->_is_nil() ) { // just a compoud shape + else if ( !aShapeOp->_is_nil() ) // just a compoud shape + { GEOM::ListOfLong_var ids = aShapeOp->SubShapeAllIDs( geom, GEOM::SHAPE, false ); if ( ids->length() ) { GEOM::GEOM_Object_wrap member = aShapeOp->GetSubShape( geom, ids[0] ); @@ -462,29 +463,23 @@ void SMESHGUI_GroupOnShapeOp::selectionDone() // study if (_PTR(Study) aStudy = SMESH::getStudy()) { // mesh - if (_PTR(SObject) meshSO = aStudy->FindObjectID( myMeshID.toUtf8().data() )) { + if (_PTR(SObject) meshSO = aStudy->FindObjectID( myMeshID.toUtf8().data() )) + { // shape to mesh - _PTR(SObject) anObj, shapeToMesh; - if (meshSO->FindSubObject(1, anObj) && anObj->ReferencedObject(shapeToMesh)) { - // loop on selected - QStringList::iterator name = names.begin(), id = ids.begin(), idEnd = ids.end(); - for (; id != idEnd; ++id, ++name ) { - // shape SO - if (_PTR(SObject) shapeSO = aStudy->FindObjectID( id->toUtf8().data() )) { - // check if shape SO is a child of shape to mesh - while ( shapeSO && shapeSO->GetID() != shapeToMesh->GetID() ) - if ( shapeSO->Depth() < 2 ) - shapeSO.reset(); - else - shapeSO = shapeSO->GetFather(); - if ( shapeSO ) { - //printf( "selectionDone() %s %s\n", (*id).latin1(), (*name).latin1() ); - if ( !goodIds.contains( *id )) { - goodIds.append( *id ); - goodNames.append( *name ); - } - } - } + GEOM::GEOM_Object_var mainGeom = SMESH::GetGeom( meshSO ); + // loop on selected + QStringList::iterator name = names.begin(), id = ids.begin(), idEnd = ids.end(); + for (; id != idEnd; ++id, ++name ) + { + if ( goodIds.contains( *id )) + continue; + // shape SO + _PTR(SObject) shapeSO = aStudy->FindObjectID( id->toUtf8().data() ); + GEOM::GEOM_Object_var subGeom = SMESH::GetGeom( shapeSO ); + if ( SMESH::ContainsSubShape( mainGeom, subGeom )) + { + goodIds.append( *id ); + goodNames.append( *name ); } } }