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