diff --git a/src/Mod/Measure/App/MeasureDistance.cpp b/src/Mod/Measure/App/MeasureDistance.cpp index 20cba5b011..3885944932 100644 --- a/src/Mod/Measure/App/MeasureDistance.cpp +++ b/src/Mod/Measure/App/MeasureDistance.cpp @@ -51,6 +51,16 @@ MeasureDistance::MeasureDistance() "Distance between the two elements"); Distance.setUnit(Base::Unit::Length); + ADD_PROPERTY_TYPE(DistanceX,(0.0),"Measurement",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output), + "Distance in X direction"); + DistanceX.setUnit(Base::Unit::Length); + ADD_PROPERTY_TYPE(DistanceY,(0.0),"Measurement",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output), + "Distance in Y direction"); + DistanceY.setUnit(Base::Unit::Length); + ADD_PROPERTY_TYPE(DistanceZ,(0.0),"Measurement",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output), + "Distance in Z direction"); + DistanceZ.setUnit(Base::Unit::Length); + ADD_PROPERTY_TYPE(Position1,(Base::Vector3d(0.0,0.0,0.0)),"Measurement", App::Prop_Hidden, "Position1"); ADD_PROPERTY_TYPE(Position2,(Base::Vector3d(0.0,1.0,0.0)),"Measurement", App::Prop_Hidden, "Position2"); @@ -197,7 +207,11 @@ App::DocumentObjectExecReturn *MeasureDistance::execute() return new App::DocumentObjectExecReturn("Could not get extrema"); } + gp_Pnt delta = measure.PointOnShape2(1).XYZ() - measure.PointOnShape1(1).XYZ(); Distance.setValue(measure.Value()); + DistanceX.setValue(fabs(delta.X())); + DistanceY.setValue(fabs(delta.Y())); + DistanceZ.setValue(fabs(delta.Z())); gp_Pnt p1 = measure.PointOnShape1(1); Position1.setValue(p1.X(), p1.Y(), p1.Z()); @@ -239,6 +253,16 @@ MeasureDistanceDetached::MeasureDistanceDetached() "Distance between the two elements"); Distance.setUnit(Base::Unit::Length); + ADD_PROPERTY_TYPE(DistanceX,(0.0),"Measurement",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output), + "Distance in X direction"); + DistanceX.setUnit(Base::Unit::Length); + ADD_PROPERTY_TYPE(DistanceY,(0.0),"Measurement",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output), + "Distance in Y direction"); + DistanceY.setUnit(Base::Unit::Length); + ADD_PROPERTY_TYPE(DistanceZ,(0.0),"Measurement",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output), + "Distance in Z direction"); + DistanceZ.setUnit(Base::Unit::Length); + ADD_PROPERTY_TYPE(Position1,(Base::Vector3d(0.0,0.0,0.0)),"Measurement", App::Prop_None, "Position1"); ADD_PROPERTY_TYPE(Position2,(Base::Vector3d(0.0,1.0,0.0)),"Measurement", App::Prop_None, "Position2"); } @@ -269,6 +293,9 @@ void MeasureDistanceDetached::recalculateDistance() { auto delta = Position1.getValue() - Position2.getValue(); Distance.setValue(delta.Length()); + DistanceX.setValue(fabs(delta.x)); + DistanceY.setValue(fabs(delta.y)); + DistanceZ.setValue(fabs(delta.z)); } void MeasureDistanceDetached::onChanged(const App::Property* prop) diff --git a/src/Mod/Measure/App/MeasureDistance.h b/src/Mod/Measure/App/MeasureDistance.h index b05a642336..d36332e616 100644 --- a/src/Mod/Measure/App/MeasureDistance.h +++ b/src/Mod/Measure/App/MeasureDistance.h @@ -63,6 +63,9 @@ public: App::PropertyLinkSub Element1; App::PropertyLinkSub Element2; App::PropertyDistance Distance; + App::PropertyDistance DistanceX; + App::PropertyDistance DistanceY; + App::PropertyDistance DistanceZ; // Position properties for the viewprovider App::PropertyVector Position1; @@ -106,6 +109,9 @@ public: ~MeasureDistanceDetached() override; App::PropertyDistance Distance; + App::PropertyDistance DistanceX; + App::PropertyDistance DistanceY; + App::PropertyDistance DistanceZ; App::PropertyVector Position1; App::PropertyVector Position2;