Salome HOME
Issue #2998: Add help description for automatic creation of constraints
[modules/shaper.git] / src / XGUI / XGUI_Selection.cpp
index 8dda155d587c91cf80a75d593c80703b36af0d63..60fe5e30f296d254f0d42ec2b75136524b02b07e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2019  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 //
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #include "XGUI_Selection.h"
 #include "XGUI_ViewerProxy.h"
 #include "XGUI_ObjectsBrowser.h"
 
+#ifndef HAVE_SALOME
+#include <AppElements_ViewCube.h>
+#endif
+
 #include "ModuleBase_BRepOwner.h"
 #include "ModuleBase_ResultPrs.h"
 #include "ModuleBase_ViewerPrs.h"
@@ -197,18 +200,33 @@ void XGUI_Selection::getSelectedInBrowser(QList<ModuleBase_ViewerPrsPtr>& thePre
 void XGUI_Selection::fillPresentation(ModuleBase_ViewerPrsPtr& thePrs,
                                       const Handle(SelectMgr_EntityOwner)& theOwner) const
 {
-  thePrs->setOwner(theOwner);
   Handle(AIS_InteractiveObject) anIO =
                            Handle(AIS_InteractiveObject)::DownCast(theOwner->Selectable());
+#ifndef HAVE_SALOME
+  Handle(AppElements_ViewCube) aCube = Handle(AppElements_ViewCube)::DownCast(anIO);
+  if (!aCube.IsNull())
+    return;
+#endif
+
+  thePrs->setOwner(theOwner);
   thePrs->setInteractive(anIO);
 
   // we should not check the appearance of this feature because there can be some selected shapes
   // for one feature
   Handle(StdSelect_BRepOwner) aBRO = Handle(StdSelect_BRepOwner)::DownCast(theOwner);
   if( !aBRO.IsNull() && aBRO->HasShape() ) {
+    TopoDS_Shape aShape = aBRO->Shape();
+    Handle(ModuleBase_ResultPrs) aPrsObj =
+      Handle(ModuleBase_ResultPrs)::DownCast(aBRO->Selectable());
+    if (!aPrsObj.IsNull()) {
+      if (aPrsObj->isSubstituted()) {
+        if (aPrsObj->Shape().IsSame(aShape))
+          aShape = aPrsObj->originalShape();
+      }
+    }
     // the located method is called in the context to obtain the shape by the SelectedShape()
     // method, so the shape is located by the same rules
-    TopoDS_Shape aShape = aBRO->Shape().Located (aBRO->Location() * aBRO->Shape().Location());
+    aShape = aShape.Located(aBRO->Location() * aShape.Location());
 #ifdef BEFORE_TRIHEDRON_PATCH
 #ifndef DEBUG_DELIVERY
     if (aShape.IsNull())