From 5b17a73d7163cf915738eb72d5726ccfbd4db327 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Sat, 25 May 2024 18:48:24 -0400 Subject: [PATCH] [TD]allow multiple primitives in complex selections --- src/Mod/TechDraw/Gui/DrawGuiUtil.cpp | 13 +++++++++++++ src/Mod/TechDraw/Gui/DrawGuiUtil.h | 9 +++++---- src/Mod/TechDraw/Gui/QGIPrimPath.cpp | 8 +++++--- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp b/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp index 8d89afe854..49b09b89f3 100644 --- a/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp +++ b/src/Mod/TechDraw/Gui/DrawGuiUtil.cpp @@ -612,3 +612,16 @@ Base::Vector3d DrawGuiUtil::toGuiPoint(DrawView* obj, const Base::Vector3d& toCo return result; } + +//! true if targetObj is in the selection list +bool DrawGuiUtil::findObjectInSelection(const std::vector& selection, + const App::DocumentObject& targetObject) +{ + for (auto& selObj : selection) { + if (&targetObject == selObj.getObject()) { + return true; + } + } + return false; +} + diff --git a/src/Mod/TechDraw/Gui/DrawGuiUtil.h b/src/Mod/TechDraw/Gui/DrawGuiUtil.h index ff8f332cfe..35e0a28f5a 100644 --- a/src/Mod/TechDraw/Gui/DrawGuiUtil.h +++ b/src/Mod/TechDraw/Gui/DrawGuiUtil.h @@ -27,7 +27,9 @@ #include #include +#include #include +#include #include @@ -35,10 +37,6 @@ class QComboBox; class QPointF; class QRectF; -namespace App { -class DocumentObject; -} - namespace Part { class Feature; } @@ -85,6 +83,9 @@ class TechDrawGuiExport DrawGuiUtil { static Base::Vector3d fromSceneCoords(const Base::Vector3d& sceneCoord, bool invert = true); static Base::Vector3d toSceneCoords(const Base::Vector3d& pageCoord, bool invert = true); static Base::Vector3d toGuiPoint(TechDraw::DrawView* obj, const Base::Vector3d& toConvert); + + static bool findObjectInSelection(const std::vector& selection, + const App::DocumentObject& targetObject); }; } //end namespace TechDrawGui diff --git a/src/Mod/TechDraw/Gui/QGIPrimPath.cpp b/src/Mod/TechDraw/Gui/QGIPrimPath.cpp index 3220ee5dd0..aa0ad022b8 100644 --- a/src/Mod/TechDraw/Gui/QGIPrimPath.cpp +++ b/src/Mod/TechDraw/Gui/QGIPrimPath.cpp @@ -39,10 +39,12 @@ #include "QGIPrimPath.h" #include "PreferencesGui.h" #include "QGIView.h" +#include "DrawGuiUtil.h" using namespace TechDrawGui; using namespace TechDraw; +using DGU = DrawGuiUtil; QGIPrimPath::QGIPrimPath(): m_width(0), @@ -251,9 +253,9 @@ void QGIPrimPath::mousePressEvent(QGraphicsSceneMouseEvent *event) auto parent = dynamic_cast(parentItem()); if (parent) { std::vector selection = Gui::Selection().getSelectionEx(); - if (selection.size() == 1 - && selection.front().getObject() == parent->getViewObject()) { - + if (DGU::findObjectInSelection(selection, *(parent->getViewObject()))) { + // if our parent is already in the selection, then allow addition + // primitives to be selected. multiselectActivated = true; event->setModifiers(originalModifiers | Qt::ControlModifier); }