[Bf-blender-cvs] [7be3378d162] master: Fix normal transform orientation calculation

Campbell Barton noreply at git.blender.org
Fri Sep 7 03:17:10 CEST 2018


Commit: 7be3378d1620b1a8029b78425e3a64e2fcd6b210
Author: Campbell Barton
Date:   Fri Sep 7 11:24:37 2018 +1000
Branches: master
https://developer.blender.org/rB7be3378d1620b1a8029b78425e3a64e2fcd6b210

Fix normal transform orientation calculation

When using the 'normal' orientation, the normal would be ignored
if the plane couldn't be calculated.

Now use only the normal if the plane is zero length,
this was already done, just not in all cases.

===================================================================

M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_orientations.c

===================================================================

diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 5f738804579..d53f51f5076 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -796,6 +796,8 @@ bool applyTransformOrientation(const struct bContext *C, float mat[3][3], char r
 #define ORIENTATION_VERT	2
 #define ORIENTATION_EDGE	3
 #define ORIENTATION_FACE	4
+#define ORIENTATION_USE_PLANE(ty) \
+	ELEM(ty, ORIENTATION_NORMAL, ORIENTATION_EDGE, ORIENTATION_FACE)
 
 int getTransformOrientation_ex(const struct bContext *C, float normal[3], float plane[3], const short around);
 int getTransformOrientation(const struct bContext *C, float normal[3], float plane[3]);
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index c38fb15fc89..1c5a6eabd6f 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -796,12 +796,7 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3
 						}
 					}
 
-					if (is_zero_v3(plane)) {
-						result = ORIENTATION_VERT;
-					}
-					else {
-						result = ORIENTATION_EDGE;
-					}
+					result = ORIENTATION_EDGE;
 				}
 				else if (em->bm->totvertsel > 3) {
 					BMIter iter;
@@ -1104,6 +1099,11 @@ void ED_getTransformOrientationMatrix(const bContext *C, float orientation_mat[3
 
 	type = getTransformOrientation_ex(C, normal, plane, around);
 
+	/* Fallback, when the plane can't be calculated. */
+	if (ORIENTATION_USE_PLANE(type) && is_zero_v3(plane)) {
+		type = ORIENTATION_VERT;
+	}
+
 	switch (type) {
 		case ORIENTATION_NORMAL:
 			if (createSpaceNormalTangent(orientation_mat, normal, plane) == 0) {



More information about the Bf-blender-cvs mailing list