]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/src/org/simantics/g3d/math/MathTools.java
Converting variable angle turn turn to fixed angle could fail.
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / math / MathTools.java
index d761b0ec8350450e8f45829fc8446ffb823bff01..aa8b0551fdc845ac8db698724f6ad38d7d612b76 100644 (file)
@@ -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;