diff --git a/src/Mod/Measure/Gui/ViewProviderMeasureDistance.cpp b/src/Mod/Measure/Gui/ViewProviderMeasureDistance.cpp index 96156ea5c6..e0357ed88c 100644 --- a/src/Mod/Measure/Gui/ViewProviderMeasureDistance.cpp +++ b/src/Mod/Measure/Gui/ViewProviderMeasureDistance.cpp @@ -43,6 +43,7 @@ #include #include +#include #include #include #include "Mod/Measure/App/MeasureDistance.h" @@ -63,9 +64,19 @@ PROPERTY_SOURCE(MeasureGui::ViewProviderMeasureDistance, MeasureGui::ViewProvide SbMatrix ViewProviderMeasureDistance::getMatrix() { - auto object = dynamic_cast(getObject()); - auto vec1 = object->Position1.getValue(); - auto vec2 = object->Position2.getValue(); + if (!pcObject) { + return {}; + } + + auto prop1 = Base::freecad_dynamic_cast(pcObject->getPropertyByName("Position1")); + auto prop2 = Base::freecad_dynamic_cast(pcObject->getPropertyByName("Position2")); + + if (!prop1 || !prop2) { + return {}; + } + + auto vec1 = prop1->getValue(); + auto vec2 = prop2->getValue(); const double tolerance(10.0e-6); SbVec3f origin = toSbVec3f((vec2 + vec1) / 2); @@ -186,26 +197,28 @@ ViewProviderMeasureDistance::~ViewProviderMeasureDistance() } -Measure::MeasureDistance* ViewProviderMeasureDistance::getMeasureDistance() -{ - Measure::MeasureDistance* feature = dynamic_cast(pcObject); - if (!feature) { - throw Base::RuntimeError("Feature not found for ViewProviderMeasureDistance"); - } - return feature; -} - //! repaint the annotation void ViewProviderMeasureDistance::redrawAnnotation() { - auto object = dynamic_cast(getObject()); - auto vec1 = object->Position1.getValue(); - auto vec2 = object->Position2.getValue(); + if (!pcObject) { + return; + } + + auto prop1 = Base::freecad_dynamic_cast(pcObject->getPropertyByName("Position1")); + auto prop2 = Base::freecad_dynamic_cast(pcObject->getPropertyByName("Position2")); + + if (!prop1 || !prop2) { + return; + } + + auto vec1 = prop1->getValue(); + auto vec2 = prop2->getValue(); // Set the distance fieldDistance = (vec2 - vec1).Length(); - setLabelValue(object->Distance.getQuantityValue().getUserString()); + auto propDistance = dynamic_cast(pcObject->getPropertyByName("Distance")); + setLabelValue(propDistance->getQuantityValue().getUserString()); // Set matrix SbMatrix matrix = getMatrix(); diff --git a/src/Mod/Measure/Gui/ViewProviderMeasureDistance.h b/src/Mod/Measure/Gui/ViewProviderMeasureDistance.h index 45551e1231..28a229329d 100644 --- a/src/Mod/Measure/Gui/ViewProviderMeasureDistance.h +++ b/src/Mod/Measure/Gui/ViewProviderMeasureDistance.h @@ -47,7 +47,6 @@ public: ViewProviderMeasureDistance(); ~ViewProviderMeasureDistance() override; - Measure::MeasureDistance* getMeasureDistance(); void redrawAnnotation() override; void positionAnno(const Measure::MeasureBase* measureObject) override;