X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fmath%2FMathTools.java;h=aa8b0551fdc845ac8db698724f6ad38d7d612b76;hb=refs%2Fchanges%2F48%2F3648%2F1;hp=d761b0ec8350450e8f45829fc8446ffb823bff01;hpb=ba83a8b8c95b94a035d20e458880beec68b9c450;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/g3d/math/MathTools.java b/org.simantics.g3d/src/org/simantics/g3d/math/MathTools.java index d761b0ec..aa8b0551 100644 --- a/org.simantics.g3d/src/org/simantics/g3d/math/MathTools.java +++ b/org.simantics.g3d/src/org/simantics/g3d/math/MathTools.java @@ -839,10 +839,19 @@ public class MathTools { result.y = axis.y; result.z = axis.z; } else { + // Project vectors to Axis plane Vector3d p1 = projectToPlane(original, axis); Vector3d p2 = projectToPlane(rotated, axis); - double angle = p1.angle(p2); - result.set(axis,angle); + // Create vectors where z-axis is plane normal + Quat4d q = getQuat(createRotation(axis, Z_AXIS)); + Vector3d t1 = new Vector3d(); + Vector3d t2 = new Vector3d(); + rotate(q, p1, t1); + rotate(q, p2, t2); + // Calculate angles on z-axis plane. + double a1 = Math.atan2(t1.y, t1.x); + double a2 = Math.atan2(t2.y, t2.x); + result.set(axis,a2-a1); } return true;