improved method of getting the tangent axis from a bmesh triangle,
[blender-staging.git] / source / blender / blenlib / intern / math_vector.c
index 58d444f57947615fe924ac0cd13ed44ffc53dfc7..572bc4526afc58c094cefcf84d074be15cabc3bf 100644 (file)
@@ -527,6 +527,28 @@ void dist_ensure_v2_v2fl(float v1[2], const float v2[2], const float dist)
        }
 }
 
+void axis_sort_v3(const float axis_values[3], int r_axis_order[3])
+{
+       float v[3];
+       copy_v3_v3(v, axis_values);
+
+#define SWAP_AXIS(a, b) { \
+       SWAP(float, v[a],            v[b]); \
+       SWAP(int,   r_axis_order[a], r_axis_order[b]); \
+} (void)0
+
+       if (v[0] < v[1]) {
+               if (v[2] < v[0]) {  SWAP_AXIS(0, 2); }
+       }
+       else {
+               if (v[1] < v[2]) { SWAP_AXIS(0, 1); }
+               else             { SWAP_AXIS(0, 2); }
+       }
+       if (v[2] < v[1])     { SWAP_AXIS(1, 2); }
+
+#undef SWAP_AXIS
+}
+
 /***************************** Array Functions *******************************/
 
 double dot_vn_vn(const float *array_src_a, const float *array_src_b, const int size)