[Bf-blender-cvs] [365546a6624] custom-manipulators: Add null check to gimbal_axis (sync with 2.8)

Campbell Barton noreply at git.blender.org
Thu Apr 6 03:35:14 CEST 2017


Commit: 365546a66243b1e86e3fe25a3d270ff47160e896
Author: Campbell Barton
Date:   Thu Apr 6 11:35:04 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rB365546a66243b1e86e3fe25a3d270ff47160e896

Add null check to gimbal_axis (sync with 2.8)

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

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

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

diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 1563328a963..83681e1e233 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -530,64 +530,66 @@ static int test_rotmode_euler(short rotmode)
 
 bool gimbal_axis(Object *ob, float gmat[3][3])
 {
-	if (ob->mode & OB_MODE_POSE) {
-		bPoseChannel *pchan = BKE_pose_channel_active(ob);
+	if (ob) {
+		if (ob->mode & OB_MODE_POSE) {
+			bPoseChannel *pchan = BKE_pose_channel_active(ob);
+
+			if (pchan) {
+				float mat[3][3], tmat[3][3], obmat[3][3];
+				if (test_rotmode_euler(pchan->rotmode)) {
+					eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode);
+				}
+				else if (pchan->rotmode == ROT_MODE_AXISANGLE) {
+					axis_angle_to_gimbal_axis(mat, pchan->rotAxis, pchan->rotAngle);
+				}
+				else { /* quat */
+					return 0;
+				}
 
-		if (pchan) {
-			float mat[3][3], tmat[3][3], obmat[3][3];
-			if (test_rotmode_euler(pchan->rotmode)) {
-				eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode);
-			}
-			else if (pchan->rotmode == ROT_MODE_AXISANGLE) {
-				axis_angle_to_gimbal_axis(mat, pchan->rotAxis, pchan->rotAngle);
-			}
-			else { /* quat */
-				return 0;
-			}
 
+				/* apply bone transformation */
+				mul_m3_m3m3(tmat, pchan->bone->bone_mat, mat);
 
-			/* apply bone transformation */
-			mul_m3_m3m3(tmat, pchan->bone->bone_mat, mat);
+				if (pchan->parent) {
+					float parent_mat[3][3];
 
-			if (pchan->parent) {
-				float parent_mat[3][3];
+					copy_m3_m4(parent_mat, pchan->parent->pose_mat);
+					mul_m3_m3m3(mat, parent_mat, tmat);
 
-				copy_m3_m4(parent_mat, pchan->parent->pose_mat);
-				mul_m3_m3m3(mat, parent_mat, tmat);
+					/* needed if object transformation isn't identity */
+					copy_m3_m4(obmat, ob->obmat);
+					mul_m3_m3m3(gmat, obmat, mat);
+				}
+				else {
+					/* needed if object transformation isn't identity */
+					copy_m3_m4(obmat, ob->obmat);
+					mul_m3_m3m3(gmat, obmat, tmat);
+				}
 
-				/* needed if object transformation isn't identity */
-				copy_m3_m4(obmat, ob->obmat);
-				mul_m3_m3m3(gmat, obmat, mat);
+				normalize_m3(gmat);
+				return 1;
 			}
-			else {
-				/* needed if object transformation isn't identity */
-				copy_m3_m4(obmat, ob->obmat);
-				mul_m3_m3m3(gmat, obmat, tmat);
+		}
+		else {
+			if (test_rotmode_euler(ob->rotmode)) {
+				eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode);
+			}
+			else if (ob->rotmode == ROT_MODE_AXISANGLE) {
+				axis_angle_to_gimbal_axis(gmat, ob->rotAxis, ob->rotAngle);
+			}
+			else { /* quat */
+				return 0;
 			}
 
-			normalize_m3(gmat);
+			if (ob->parent) {
+				float parent_mat[3][3];
+				copy_m3_m4(parent_mat, ob->parent->obmat);
+				normalize_m3(parent_mat);
+				mul_m3_m3m3(gmat, parent_mat, gmat);
+			}
 			return 1;
 		}
 	}
-	else {
-		if (test_rotmode_euler(ob->rotmode)) {
-			eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode);
-		}
-		else if (ob->rotmode == ROT_MODE_AXISANGLE) {
-			axis_angle_to_gimbal_axis(gmat, ob->rotAxis, ob->rotAngle);
-		}
-		else { /* quat */
-			return 0;
-		}
-
-		if (ob->parent) {
-			float parent_mat[3][3];
-			copy_m3_m4(parent_mat, ob->parent->obmat);
-			normalize_m3(parent_mat);
-			mul_m3_m3m3(gmat, parent_mat, gmat);
-		}
-		return 1;
-	}
 
 	return 0;
 }




More information about the Bf-blender-cvs mailing list