[Measure] Make VP MeasureDistance only depend on properties

This commit is contained in:
hlorus
2024-05-02 16:36:20 +02:00
parent 86e07e9181
commit 1b61edf240
2 changed files with 29 additions and 17 deletions

View File

@@ -43,6 +43,7 @@
#include <App/Document.h>
#include <App/MeasureDistance.h>
#include <Base/BaseClass.h>
#include <Base/Console.h>
#include <Base/Quantity.h>
#include "Mod/Measure/App/MeasureDistance.h"
@@ -63,9 +64,19 @@ PROPERTY_SOURCE(MeasureGui::ViewProviderMeasureDistance, MeasureGui::ViewProvide
SbMatrix ViewProviderMeasureDistance::getMatrix() {
auto object = dynamic_cast<Measure::MeasureDistance*>(getObject());
auto vec1 = object->Position1.getValue();
auto vec2 = object->Position2.getValue();
if (!pcObject) {
return {};
}
auto prop1 = Base::freecad_dynamic_cast<App::PropertyVector>(pcObject->getPropertyByName("Position1"));
auto prop2 = Base::freecad_dynamic_cast<App::PropertyVector>(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<Measure::MeasureDistance*>(pcObject);
if (!feature) {
throw Base::RuntimeError("Feature not found for ViewProviderMeasureDistance");
}
return feature;
}
//! repaint the annotation
void ViewProviderMeasureDistance::redrawAnnotation()
{
auto object = dynamic_cast<Measure::MeasureDistance*>(getObject());
auto vec1 = object->Position1.getValue();
auto vec2 = object->Position2.getValue();
if (!pcObject) {
return;
}
auto prop1 = Base::freecad_dynamic_cast<App::PropertyVector>(pcObject->getPropertyByName("Position1"));
auto prop2 = Base::freecad_dynamic_cast<App::PropertyVector>(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<App::PropertyDistance*>(pcObject->getPropertyByName("Distance"));
setLabelValue(propDistance->getQuantityValue().getUserString());
// Set matrix
SbMatrix matrix = getMatrix();

View File

@@ -47,7 +47,6 @@ public:
ViewProviderMeasureDistance();
~ViewProviderMeasureDistance() override;
Measure::MeasureDistance* getMeasureDistance();
void redrawAnnotation() override;
void positionAnno(const Measure::MeasureBase* measureObject) override;