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();