Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-04-04 12:47:07 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-04-04 12:47:07 +0400
commit82636ab0fbbeeccd3ca76d6ceb7ab018445acbc1 (patch)
tree381c3ecbb4894bf2ba10e17c977618686bd9d82b /source/blender
parent66aed41d750a36b27f485829c10cfff74e9eb7ec (diff)
improved method of getting the tangent axis from a bmesh triangle,
rather then getting the longest edge, get the edge which which is most different from the 2 others ends up giving more useful results: for an isosceles triangle it returns the base weather its longer or shorter then the other sides.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenlib/BLI_math_vector.h2
-rw-r--r--source/blender/blenlib/intern/math_vector.c22
-rw-r--r--source/blender/bmesh/intern/bmesh_marking.c24
-rw-r--r--source/blender/editors/transform/transform_manipulator.c21
4 files changed, 46 insertions, 23 deletions
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index 9cf571aa98b..d4f16506551 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -244,6 +244,8 @@ void minmax_v2v2_v2(float min[2], float max[2], const float vec[2]);
void dist_ensure_v3_v3fl(float v1[3], const float v2[3], const float dist);
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]);
+
/***************************** Array Functions *******************************/
/* attempted to follow fixed length vertex functions. names could be improved*/
double dot_vn_vn(const float *array_src_a, const float *array_src_b, const int size);
diff --git a/source/blender/blenlib/intern/math_vector.c b/source/blender/blenlib/intern/math_vector.c
index 58d444f5794..572bc4526af 100644
--- a/source/blender/blenlib/intern/math_vector.c
+++ b/source/blender/blenlib/intern/math_vector.c
@@ -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)
diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c
index 4e29756104a..73aee5917ae 100644
--- a/source/blender/bmesh/intern/bmesh_marking.c
+++ b/source/blender/bmesh/intern/bmesh_marking.c
@@ -710,8 +710,28 @@ void BM_editselection_plane(BMEditSelection *ese, float r_plane[3])
cross_v3_v3v3(r_plane, efa->no, vec);
}
else {
- if (efa->len == 4) {
- BMVert *verts[4] = {NULL};
+ if (efa->len == 3) {
+ BMVert *verts[3];
+ float lens[3];
+ float difs[3];
+ int order[3] = {0, 1, 2};
+
+ BM_face_as_array_vert_tri(efa, verts);
+
+ lens[0] = len_v3v3(verts[0]->co, verts[1]->co);
+ lens[1] = len_v3v3(verts[1]->co, verts[2]->co);
+ lens[2] = len_v3v3(verts[2]->co, verts[0]->co);
+
+ /* find the shortest or the longest loop */
+ difs[0] = fabsf(lens[1] - lens[2]);
+ difs[1] = fabsf(lens[2] - lens[0]);
+ difs[2] = fabsf(lens[0] - lens[1]);
+
+ axis_sort_v3(difs, order);
+ sub_v3_v3v3(r_plane, verts[order[0]]->co, verts[(order[0] + 1) % 3]->co);
+ }
+ else if (efa->len == 4) {
+ BMVert *verts[4];
float vecA[3], vecB[3];
// BM_iter_as_array(NULL, BM_VERTS_OF_FACE, efa, (void **)verts, 4);
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 36a64303156..889e4f01fc7 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -841,27 +841,6 @@ static void manipulator_setcolor(View3D *v3d, char axis, int colcode, unsigned c
glColor4ubv(col);
}
-static 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
-}
static void manipulator_axis_order(RegionView3D *rv3d, int r_axis_order[3])
{
float axis_values[3];