]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0014047: EDF PAL 334 : Problem to select merged face with Create group window
authoreap <eap@opencascade.com>
Fri, 16 Jan 2009 09:20:26 +0000 (09:20 +0000)
committereap <eap@opencascade.com>
Fri, 16 Jan 2009 09:20:26 +0000 (09:20 +0000)
   hide a previously invisivle second shape in case of "Only
   sub-shapes of the Second shape" restriction

src/GroupGUI/GroupGUI_GroupDlg.cxx
src/GroupGUI/GroupGUI_GroupDlg.h

index b873ac1389db1e76ba225f03c52fbca727fe7db7..392dc887933cb0622a0252c0d9ac70b9f445afac 100644 (file)
@@ -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;
 }
 
 //=================================================================================
index 417a9b23aefc133e870b64b1c1b676ad4c4804fc..478eaaff1cd4090fabd74c9cb8a9287a575b7e1a 100644 (file)
@@ -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;