Measure: Resolve App::Link elements

This commit is contained in:
hlorus
2024-06-23 12:06:25 +02:00
parent 60d69d706d
commit d8bbb3c804
3 changed files with 20 additions and 1 deletions

View File

@@ -24,6 +24,7 @@
#include <Base/Interpreter.h>
#include <Base/VectorPy.h>
#include <App/Document.h>
#include <App/Link.h>
#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<App::Link>()) {
auto link = static_cast<App::Link*>(sub);
sub = link->getLinkedObject(true);
}
const char* className = sub->getTypeId().getName();
std::string mod = Base::Type::getModuleName(className);

View File

@@ -34,6 +34,7 @@
#include <App/PropertyStandard.h>
#include <App/PropertyUnits.h>
#include <App/FeaturePython.h>
#include <App/Link.h>
#include <Base/Quantity.h>
#include <Base/Placement.h>
#include <Base/Interpreter.h>
@@ -108,7 +109,12 @@ public:
static Part::MeasureInfoPtr getMeasureInfo(App::SubObjectT& subObjT) {
// Resolve App::Link
App::DocumentObject* sub = subObjT.getSubObject();
if (sub->isDerivedFrom<App::Link>()) {
auto link = static_cast<App::Link*>(sub);
sub = link->getLinkedObject(true);
}
// Get the Geometry handler based on the module
const char* className = sub->getTypeId().getName();

View File

@@ -32,6 +32,7 @@
#include <App/Document.h>
#include <App/DocumentObjectGroup.h>
#include <App/Link.h>
#include <Gui/MainWindow.h>
#include <Gui/Application.h>
#include <Gui/BitmapFactory.h>
@@ -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<App::Link>()) {
auto link = static_cast<App::Link*>(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();