From d8bbb3c804e94a40f9cf3aeb911e1f218510f287 Mon Sep 17 00:00:00 2001
From: hlorus <64740362+hlorus@users.noreply.github.com>
Date: Sun, 23 Jun 2024 12:06:25 +0200
Subject: [PATCH] Measure: Resolve App::Link elements
---
src/App/MeasureManager.cpp | 6 ++++++
src/Mod/Measure/App/MeasureBase.h | 6 ++++++
src/Mod/Measure/Gui/TaskMeasure.cpp | 9 ++++++++-
3 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/App/MeasureManager.cpp b/src/App/MeasureManager.cpp
index a063a177cb..825cbc63a9 100644
--- a/src/App/MeasureManager.cpp
+++ b/src/App/MeasureManager.cpp
@@ -24,6 +24,7 @@
#include
#include
#include
+#include
#include "MeasureManager.h"
@@ -65,7 +66,12 @@ namespace App {
MeasureHandler MeasureManager::getMeasureHandler(const App::MeasureSelectionItem& selectionItem) {
auto objT = selectionItem.object;
+ // Resolve App::Link
App::DocumentObject* sub = objT.getSubObject();
+ if (sub->isDerivedFrom()) {
+ auto link = static_cast(sub);
+ sub = link->getLinkedObject(true);
+ }
const char* className = sub->getTypeId().getName();
std::string mod = Base::Type::getModuleName(className);
diff --git a/src/Mod/Measure/App/MeasureBase.h b/src/Mod/Measure/App/MeasureBase.h
index 74dba3cbc7..75fdc61ffc 100644
--- a/src/Mod/Measure/App/MeasureBase.h
+++ b/src/Mod/Measure/App/MeasureBase.h
@@ -34,6 +34,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -108,7 +109,12 @@ public:
static Part::MeasureInfoPtr getMeasureInfo(App::SubObjectT& subObjT) {
+ // Resolve App::Link
App::DocumentObject* sub = subObjT.getSubObject();
+ if (sub->isDerivedFrom()) {
+ auto link = static_cast(sub);
+ sub = link->getLinkedObject(true);
+ }
// Get the Geometry handler based on the module
const char* className = sub->getTypeId().getName();
diff --git a/src/Mod/Measure/Gui/TaskMeasure.cpp b/src/Mod/Measure/Gui/TaskMeasure.cpp
index 04aeb23694..e5968c33d5 100644
--- a/src/Mod/Measure/Gui/TaskMeasure.cpp
+++ b/src/Mod/Measure/Gui/TaskMeasure.cpp
@@ -32,6 +32,7 @@
#include
#include
+#include
#include
#include
#include
@@ -156,8 +157,14 @@ void TaskMeasure::update() {
for(auto sel : Gui::Selection().getSelection()) {
App::DocumentObject* ob = sel.pObject;
App::DocumentObject* sub = ob->getSubObject(sel.SubName);
- std::string mod = Base::Type::getModuleName(sub->getTypeId().getName());
+ // Resolve App::Link
+ if (sub->isDerivedFrom()) {
+ auto link = static_cast(sub);
+ sub = link->getLinkedObject(true);
+ }
+
+ std::string mod = Base::Type::getModuleName(sub->getTypeId().getName());
if (!App::MeasureManager::hasMeasureHandler(mod.c_str())) {
Base::Console().Message("No measure handler available for geometry of module: %s\n", mod);
clearSelection();