- //! Returns list of currently selected AIS objects
- //! \param theList returning list of selected AIS objects
- virtual void selectedAISObjects(AIS_ListOfInteractive& theList) const = 0;
-
- //! Returns list of currently selected QModelIndexes
- virtual ObjectPtr getSelectableObject(const Handle_SelectMgr_EntityOwner& theOwner) const = 0;
-
- //! Returns list of currently selected shapes and their owners (objects).
- //! Both lists are synchronized
- //! \param theList returning list of selected AIS objects
- //! \param theOwners list of objects
- virtual void selectedShapes(NCollection_List<TopoDS_Shape>& theList,
- std::list<ObjectPtr>& theOwners) const = 0;
-
+ /// 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
+ 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
+ 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 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 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 void filterSelectionOnEqualPoints
+ (QList<std::shared_ptr<ModuleBase_ViewerPrs>>& theSelected);
+protected:
+ /// Returns list of currently selected QModelIndexes
+ virtual ObjectPtr getSelectableObject(const Handle(SelectMgr_EntityOwner)& theOwner) const = 0;
+
+private:
+ /// Find vertex shape build by a Brep owner of the presentation if it exists
+ /// \param thePrs a viewer presentation
+ /// \return GeomAPI wrap of vertex
+ static std::shared_ptr<GeomAPI_Vertex> getPresentationVertex(
+ const std::shared_ptr<ModuleBase_ViewerPrs>& thePrs);