From 1818911c5fcd7f276dcd080672ce8fcc81b14933 Mon Sep 17 00:00:00 2001 From: nishi <91971064+nishendra3@users.noreply.github.com> Date: Sun, 1 Feb 2026 14:43:10 +0100 Subject: [PATCH] Measure: corrected angle measurements bug (#27254) --- src/Mod/Measure/App/MeasureAngle.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Mod/Measure/App/MeasureAngle.cpp b/src/Mod/Measure/App/MeasureAngle.cpp index 52c1299b7d..904955f7e7 100644 --- a/src/Mod/Measure/App/MeasureAngle.cpp +++ b/src/Mod/Measure/App/MeasureAngle.cpp @@ -233,7 +233,28 @@ App::DocumentObjectExecReturn* MeasureAngle::execute() Base::Vector3d vec2; getVec(*ob2, subs2.at(0), vec2); - Angle.setValue(Base::toDegrees(vec1.GetAngle(vec2))); + if (vec1.IsParallel(vec2, Base::Precision::Angular())) { + // handle case when both vectors are parallel + Angle.setValue(0); + } + else { + // get oriented vectors based on common origin + Base::Vector3d loc1 = getLoc(*ob1, subs1.at(0)); + Base::Vector3d loc2 = getLoc(*ob2, subs2.at(0)); + Base::Vector3d origin = (loc1 + loc2) * 0.5; + + // flip if needed, to make them point away from origin + if ((loc1 - origin).Dot(vec1) < 0) { + vec1 = -vec1; + } + if ((loc2 - origin).Dot(vec2) < 0) { + vec2 = -vec2; + } + + // get oriented angle wrt normal axis + Base::Vector3d normalAxis = (vec1.Cross(vec2)).Normalize(); + Angle.setValue(Base::toDegrees(vec1.GetAngleOriented(vec2, normalAxis))); + } return DocumentObject::StdReturn; }