Salome HOME
Issue #2556: Show content of object which is not displayed in viewer
authorvsv <vsv@opencascade.com>
Wed, 29 Aug 2018 13:16:17 +0000 (16:16 +0300)
committervsv <vsv@opencascade.com>
Wed, 29 Aug 2018 13:16:33 +0000 (16:16 +0300)
src/ModuleBase/ModuleBase_ISelection.h
src/XGUI/XGUI_InspectionPanel.cpp

index c185729fe9aa220e64ef7fd478321527788ab18e..83500c9a725c732935b2378792573b3ec78786b5 100644 (file)
@@ -41,7 +41,7 @@ class SelectMgr_EntityOwner;
 /// \ingroup GUI
 /// A class which provides access to selection.
 /// A selection can be obtained as from a viewer as from Object browser in various forms
-class ModuleBase_ISelection
+class MODULEBASE_EXPORT ModuleBase_ISelection
 {
  public:
    /// Types of the selection place, where the selection is obtained
@@ -82,29 +82,28 @@ class ModuleBase_ISelection
   /// If the shape is equal to the shape of selected object, it returns an empty shape
   /// \param thePrs a selected object
   /// \return a shape
-  MODULEBASE_EXPORT ResultPtr getResult(const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs);
+  ResultPtr getResult(const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs);
 
   /// Return the shape from the viewer presentation.
   /// If the shape is equal to the shape of selected object, it returns an empty shape
   /// \param thePrs a selected object
   /// \return a shape
-  MODULEBASE_EXPORT GeomShapePtr getShape(const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs);
+  GeomShapePtr getShape(const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs);
 
   /// Return the IO from the viewer presentation.
   /// \param thePrs a selected object
   /// \return an interactive object
-  virtual MODULEBASE_EXPORT
-    Handle(AIS_InteractiveObject) getIO(const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs) = 0;
+  virtual Handle(AIS_InteractiveObject) getIO(const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs) = 0;
 
   /// Wraps the object list into the viewer prs list
   /// \param theObjects a list of objects
   /// \return a list of prs, where only object is not empty
-  static MODULEBASE_EXPORT QList<std::shared_ptr<ModuleBase_ViewerPrs>> getViewerPrs(
+  static QList<std::shared_ptr<ModuleBase_ViewerPrs>> getViewerPrs(
                                                        const QObjectPtrList& theObjects);
 
   /// Removes selection items where owners have equal vertices. The first
   /// owner with the qual vertex stays in the list.
-  static MODULEBASE_EXPORT void filterSelectionOnEqualPoints
+  static void filterSelectionOnEqualPoints
                                       (QList<std::shared_ptr<ModuleBase_ViewerPrs>>& theSelected);
 protected:
   /// Returns list of currently selected QModelIndexes
index 2ef6cefebffca4a267c090762ef7ed27e753d0c5..545c2fc9f491c5360ce660424ed88b0af3dc5f17 100644 (file)
@@ -219,12 +219,31 @@ void XGUI_InspectionPanel::onSelectionChanged()
   XGUI_Selection* aSelection = mySelectionMgr->selection();
   QList<ModuleBase_ViewerPrsPtr> aSelectedList =
     aSelection->getSelected(ModuleBase_ISelection::Viewer);
+
+  QList<ModuleBase_ViewerPrsPtr> anOBSelected =
+    aSelection->getSelected(ModuleBase_ISelection::Browser);
+  if (!anOBSelected.isEmpty())
+    ModuleBase_ISelection::appendSelected(anOBSelected, aSelectedList);
+
   if (aSelectedList.count() > 0) {
     ModuleBase_ViewerPrsPtr aPrs = aSelectedList.first();
     TopoDS_Shape aShape = ModuleBase_Tools::getSelectedShape(aPrs);
+    if (aShape.IsNull()) {
+      ResultPtr aRes = std::dynamic_pointer_cast<ModelAPI_Result>(aPrs->object());
+      if (aRes.get()) {
+        GeomShapePtr aShpPtr = aRes->shape();
+        if (aShpPtr.get()) {
+          aShape = aShpPtr->impl<TopoDS_Shape>();
+        }
+      }
+    }
     if (aShape.IsNull())
       return;
-    setName(XGUI_Tools::generateName(aPrs));
+    GeomShapePtr aShapePtr(new GeomAPI_Shape());
+    aShapePtr->setImpl(new TopoDS_Shape(aShape));
+
+    ModuleBase_ViewerPrsPtr aPrsCopy(new ModuleBase_ViewerPrs(aPrs->object(), aShapePtr));
+    setName(XGUI_Tools::generateName(aPrsCopy));
     setShapeContent(aShape);
     setShapeParams(aShape);
   }
@@ -565,8 +584,12 @@ void XGUI_InspectionPanel::fillContainer(const GeomShapePtr& theShape)
     myTypeLbl->setText("Compound");
 
   // fill bounding box
+  TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
   Bnd_Box aBB;
-  BRepBndLib::Add(theShape->impl<TopoDS_Shape>(), aBB);
+  BRepBndLib::Add(aShape, aBB);
+
+  if (aBB.IsVoid())
+    return;
 
   gp_Pnt aMinPnt = aBB.CornerMin();
   GeomPointPtr aMinPoint(new GeomAPI_Pnt(aMinPnt.X(), aMinPnt.Y(), aMinPnt.Z()));