From 48ca5d0b919e63e4e52bdcd3582babf159dc4121 Mon Sep 17 00:00:00 2001 From: vsv Date: Wed, 29 Aug 2018 16:16:17 +0300 Subject: [PATCH] Issue #2556: Show content of object which is not displayed in viewer --- src/ModuleBase/ModuleBase_ISelection.h | 13 ++++++------- src/XGUI/XGUI_InspectionPanel.cpp | 27 ++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/ModuleBase/ModuleBase_ISelection.h b/src/ModuleBase/ModuleBase_ISelection.h index c185729fe..83500c9a7 100644 --- a/src/ModuleBase/ModuleBase_ISelection.h +++ b/src/ModuleBase/ModuleBase_ISelection.h @@ -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& thePrs); + ResultPtr getResult(const std::shared_ptr& 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& thePrs); + GeomShapePtr getShape(const std::shared_ptr& 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& thePrs) = 0; + virtual Handle(AIS_InteractiveObject) getIO(const std::shared_ptr& 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> getViewerPrs( + static QList> 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>& theSelected); protected: /// Returns list of currently selected QModelIndexes diff --git a/src/XGUI/XGUI_InspectionPanel.cpp b/src/XGUI/XGUI_InspectionPanel.cpp index 2ef6cefeb..545c2fc9f 100644 --- a/src/XGUI/XGUI_InspectionPanel.cpp +++ b/src/XGUI/XGUI_InspectionPanel.cpp @@ -219,12 +219,31 @@ void XGUI_InspectionPanel::onSelectionChanged() XGUI_Selection* aSelection = mySelectionMgr->selection(); QList aSelectedList = aSelection->getSelected(ModuleBase_ISelection::Viewer); + + QList 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(aPrs->object()); + if (aRes.get()) { + GeomShapePtr aShpPtr = aRes->shape(); + if (aShpPtr.get()) { + aShape = aShpPtr->impl(); + } + } + } 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(); Bnd_Box aBB; - BRepBndLib::Add(theShape->impl(), 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())); -- 2.39.2