[Bf-blender-cvs] [5b45434be4f] blender2.8: Transform: use root/tip for bone normal orientation

Campbell Barton noreply at git.blender.org
Wed Nov 21 01:32:45 CET 2018


Commit: 5b45434be4ff8c6e0d1107b11e67d7d50afe3ca8
Author: Campbell Barton
Date:   Wed Nov 21 11:31:37 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB5b45434be4ff8c6e0d1107b11e67d7d50afe3ca8

Transform: use root/tip for bone normal orientation

When there are no fully selected bones,
use the normal of bones which only have the root/tip selected as a
fallback.

Without this, the extrude gizmo isn't very useful
since extrude is often used with only the tip selected.

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

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

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

diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 447842e9bf0..b8b3929f9b0 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -976,6 +976,14 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3
 				ok = true;
 			}
 			else {
+				/* When we only have the root/tip are selected. */
+				bool fallback_ok = false;
+				float fallback_normal[3];
+				float fallback_plane[3];
+
+				zero_v3(fallback_normal);
+				zero_v3(fallback_plane);
+
 				for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
 					if (arm->layer & ebone->layer) {
 						if (ebone->flag & BONE_SELECTED) {
@@ -984,8 +992,19 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3
 							add_v3_v3(plane, tmat[1]);
 							ok = true;
 						}
+						else if ((ok == false) && (ebone->flag & (BONE_ROOTSEL | BONE_TIPSEL))) {
+							ED_armature_ebone_to_mat3(ebone, tmat);
+							add_v3_v3(fallback_normal, tmat[2]);
+							add_v3_v3(fallback_plane, tmat[1]);
+							fallback_ok = true;
+						}
 					}
 				}
+				if ((ok == false) && fallback_ok) {
+					ok = true;
+					copy_v3_v3(normal, fallback_normal);
+					copy_v3_v3(plane, fallback_plane);
+				}
 			}
 
 			if (ok) {



More information about the Bf-blender-cvs mailing list