From 8cef8312186782d308d8b36402acdf62bce1a060 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 16 Jan 2009 07:53:28 +0000 Subject: [PATCH] 0014047: EDF PAL 334 : Problem to select merged face with Create group window hide a previously invisivle second shape in case of "Only sub-shapes of the Second shape" restriction --- src/GroupGUI/GroupGUI_GroupDlg.cxx | 17 ++++++++++++----- src/GroupGUI/GroupGUI_GroupDlg.h | 4 ++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/GroupGUI/GroupGUI_GroupDlg.cxx b/src/GroupGUI/GroupGUI_GroupDlg.cxx index 7d5d8a892..5667fbdcc 100644 --- a/src/GroupGUI/GroupGUI_GroupDlg.cxx +++ b/src/GroupGUI/GroupGUI_GroupDlg.cxx @@ -48,7 +48,7 @@ #include #include -enum { ALL_SUBSHAPES = 0, GET_IN_PLACE, SUBSHAPES_OF_SHAPE2 }; +enum { ALL_SUBSHAPES = 0, GET_IN_PLACE, SUBSHAPES_OF_SHAPE2, SUBSHAPES_OF_INVISIBLE_SHAPE2 }; GroupGUI_GroupDlg::GroupGUI_GroupDlg( Mode mode, GeometryGUI* theGeometryGUI, QWidget* parent ) : GEOMBase_Skeleton( theGeometryGUI, parent, false ), @@ -382,7 +382,10 @@ void GroupGUI_GroupDlg::onGetInPlace() setInPlaceObj( aGetInPlaceObj ); } else { - setInPlaceObj( anObj ); + bool isVisible = true; + if ( SALOME_View* view = GEOM_Displayer::GetActiveView() ) + isVisible = view->isVisible( aSelList.First() ); + setInPlaceObj( anObj, isVisible ); } myEditCurrentArgument = 0; //myBusy = true; // just activate but do not select in the list @@ -397,14 +400,16 @@ void GroupGUI_GroupDlg::onGetInPlace() //purpose : temporarily add an object to study and remove old InPlaceObj //======================================================================= -void GroupGUI_GroupDlg::setInPlaceObj( GEOM::GEOM_Object_var theObj ) +void GroupGUI_GroupDlg::setInPlaceObj( GEOM::GEOM_Object_var theObj, const bool isVisible ) { if ( ! myInPlaceObj->_is_equivalent( theObj ) ) { const char* tmpName = "__InPlaceObj__"; // remove old InPlaceObj if ( !myInPlaceObj->_is_nil() ) { - if ( myInPlaceObjSelectWay == GET_IN_PLACE ) { // hide temporary object + if ( myInPlaceObjSelectState == GET_IN_PLACE || + myInPlaceObjSelectState == SUBSHAPES_OF_INVISIBLE_SHAPE2 ) { + // hide temporary object or initially invisible shape 2 (issue 0014047) GEOM_Displayer aDisplayer(getStudy()); aDisplayer.Erase( myInPlaceObj, true ); } @@ -436,7 +441,9 @@ void GroupGUI_GroupDlg::setInPlaceObj( GEOM::GEOM_Object_var theObj ) myMain2InPlaceIndices.Bind( aMainIndex, aPlaceIndex ); } } - myInPlaceObjSelectWay = subSelectionWay(); + myInPlaceObjSelectState = subSelectionWay(); + if ( myInPlaceObjSelectState == SUBSHAPES_OF_SHAPE2 && !isVisible ) + myInPlaceObjSelectState = SUBSHAPES_OF_INVISIBLE_SHAPE2; } //================================================================================= diff --git a/src/GroupGUI/GroupGUI_GroupDlg.h b/src/GroupGUI/GroupGUI_GroupDlg.h index 9abd834bf..8a65fb7ec 100644 --- a/src/GroupGUI/GroupGUI_GroupDlg.h +++ b/src/GroupGUI/GroupGUI_GroupDlg.h @@ -86,7 +86,7 @@ private: void updateState(); void highlightSubShapes(); void onGetInPlace(); - void setInPlaceObj( GEOM::GEOM_Object_var ); + void setInPlaceObj( GEOM::GEOM_Object_var, const bool isVisible=1); private: Mode myMode; @@ -94,7 +94,7 @@ private: GEOM::GEOM_Object_var myMainObj; GEOM::GEOM_Object_var myGroup; GEOM::GEOM_Object_var myInPlaceObj; - int myInPlaceObjSelectWay; + int myInPlaceObjSelectState; TColStd_DataMapOfIntegerInteger myMain2InPlaceIndices; QPushButton* mySelBtn; -- 2.39.2