/// \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
/// 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
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);
}
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()));