From 893a9d19b677e8ec3af412133288248fb3923912 Mon Sep 17 00:00:00 2001 From: PaddleStroke Date: Fri, 12 Dec 2025 12:59:03 +0100 Subject: [PATCH] Core: move getPlacementProperty to be more accessible (#26088) * Core: move getPlacementProperty to be more accessible * Update DocumentObject.h * Update DocumentObject.cpp * Update ViewProviderDragger.h * Update ViewProviderDragger.cpp * Update DocumentObject.h * Update DocumentObject.cpp * Update ViewProviderLink.cpp * Update DocumentObject.h * Update DocumentObject.cpp * Update DocumentObject.h --- src/App/DocumentObject.cpp | 23 +++++++++++++++++++++++ src/App/DocumentObject.h | 7 +++++++ src/Gui/ViewProviderDragger.cpp | 19 ++----------------- src/Gui/ViewProviderDragger.h | 3 --- src/Gui/ViewProviderLink.cpp | 2 +- 5 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/App/DocumentObject.cpp b/src/App/DocumentObject.cpp index a4f93cf8f9..73ac609c9b 100644 --- a/src/App/DocumentObject.cpp +++ b/src/App/DocumentObject.cpp @@ -1644,3 +1644,26 @@ Base::Placement DocumentObject::getPlacementOf(const std::string& sub, DocumentO return plc * subObj->getPlacementOf(newSub, targetObj); } +Base::Placement DocumentObject::getPlacement() const +{ + Base::Placement plc; + if (auto* prop = getPlacementProperty()) { + plc = prop->getValue(); + } + return plc; +} + +App::PropertyPlacement* DocumentObject::getPlacementProperty() const +{ + if (auto linkExtension = getExtensionByType(true)) { + if (auto linkPlacementProp = linkExtension->getLinkPlacementProperty()) { + return linkPlacementProp; + } + + return linkExtension->getPlacementProperty(); + } + + return getPropertyByName("Placement"); +} + + diff --git a/src/App/DocumentObject.h b/src/App/DocumentObject.h index ad3cd2e985..8002bcfa4a 100644 --- a/src/App/DocumentObject.h +++ b/src/App/DocumentObject.h @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -714,6 +715,12 @@ public: */ virtual Base::Placement getPlacementOf(const std::string& sub, DocumentObject* targetObj = nullptr); + /* Returns the Placement property value if any.*/ + virtual Base::Placement getPlacement() const; + + /* Returns the Placement property to use if any*/ + virtual App::PropertyPlacement* getPlacementProperty() const; + protected: /// recompute only this object virtual App::DocumentObjectExecReturn* recompute(); diff --git a/src/Gui/ViewProviderDragger.cpp b/src/Gui/ViewProviderDragger.cpp index 1d5b858435..0895d2d216 100644 --- a/src/Gui/ViewProviderDragger.cpp +++ b/src/Gui/ViewProviderDragger.cpp @@ -187,21 +187,6 @@ bool ViewProviderDragger::forwardToLink() return forwardedViewProvider != nullptr; } -App::PropertyPlacement* ViewProviderDragger::getPlacementProperty() const -{ - auto object = getObject(); - - if (auto linkExtension = object->getExtensionByType(true)) { - if (auto linkPlacementProp = linkExtension->getLinkPlacementProperty()) { - return linkPlacementProp; - } - - return linkExtension->getPlacementProperty(); - } - - return getObject()->getPropertyByName("Placement"); -} - bool ViewProviderDragger::setEdit(int ModNum) { Q_UNUSED(ModNum); @@ -298,7 +283,7 @@ void ViewProviderDragger::dragMotionCallback(void* data, [[maybe_unused]] SoDrag void ViewProviderDragger::updatePlacementFromDragger(DraggerComponents components) { - const auto placement = getPlacementProperty(); + const auto placement = getObject()->getPlacementProperty(); if (!placement) { return; @@ -429,7 +414,7 @@ void ViewProviderDragger::updateTransformFromDragger() Base::Placement ViewProviderDragger::getObjectPlacement() const { - if (auto placement = getPlacementProperty()) { + if (auto placement = getObject()->getPlacementProperty()) { return placement->getValue(); } diff --git a/src/Gui/ViewProviderDragger.h b/src/Gui/ViewProviderDragger.h index 5f1e6e6dcb..416492c240 100644 --- a/src/Gui/ViewProviderDragger.h +++ b/src/Gui/ViewProviderDragger.h @@ -128,9 +128,6 @@ protected: bool forwardToLink(); - /// Gets placement property of the object - App::PropertyPlacement* getPlacementProperty() const; - /** * Returns a newly create dialog for the part to be placed in the task view * Must be reimplemented in subclasses. diff --git a/src/Gui/ViewProviderLink.cpp b/src/Gui/ViewProviderLink.cpp index 6f7ac9e846..e4bd027484 100644 --- a/src/Gui/ViewProviderLink.cpp +++ b/src/Gui/ViewProviderLink.cpp @@ -3271,7 +3271,7 @@ bool ViewProviderLink::initDraggingPlacement() dragCtx = std::make_unique(); dragCtx->preTransform = doc->getEditingTransform(); - const auto& pla = getPlacementProperty()->getValue(); + const auto& pla = getObject()->getPlacementProperty()->getValue(); // Cancel out our own transformation from the editing transform, because // the dragger is meant to change our transformation.