From 27eae2a6a09e926dd14693bee168b691d3529bc2 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 16 Jan 2009 09:20:26 +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 b873ac138..392dc8879 100644 --- a/src/GroupGUI/GroupGUI_GroupDlg.cxx +++ b/src/GroupGUI/GroupGUI_GroupDlg.cxx @@ -49,7 +49,7 @@ using namespace std; -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, "GroupGUI_GroupDlg", false, @@ -389,7 +389,10 @@ void GroupGUI_GroupDlg::onGetInPlace() setInPlaceObj( aGetInPlaceObj ); } else { - setInPlaceObj( anObj ); + bool isVisible = true; + if ( SALOME_View* view = GEOM_Displayer::GetActiveView() ) + isVisible = view->isVisible( firstIObject() ); + setInPlaceObj( anObj, isVisible ); } myEditCurrentArgument = 0; //myBusy = true; // just activate but do not select in the list @@ -404,14 +407,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 ); } @@ -443,7 +448,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 417a9b23a..478eaaff1 100644 --- a/src/GroupGUI/GroupGUI_GroupDlg.h +++ b/src/GroupGUI/GroupGUI_GroupDlg.h @@ -90,7 +90,7 @@ private: void updateState(); void highlightSubShapes(); void onGetInPlace(); - void setInPlaceObj( GEOM::GEOM_Object_var theObj ); + void setInPlaceObj( GEOM::GEOM_Object_var theObj, const bool isVisible=1 ); private: Mode myMode; @@ -98,7 +98,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;