[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24334] trunk/blender/source/blender: Added RNA based transform properties for pose bones too.

Matt Ebb matt at mke3.net
Thu Nov 5 02:00:17 CET 2009


Revision: 24334
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24334
Author:   broken
Date:     2009-11-05 02:00:17 +0100 (Thu, 05 Nov 2009)

Log Message:
-----------
Added RNA based transform properties for pose bones too.

I've left the old code commented out for now hough - do we still want to 
be able to edit all rotation types as eulers in the transform properties buttons? 
Seems a bit odd to me, what do animators think? If so, maybe we need some 
ui-level conversion options in the RNA buttons code...

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c
    trunk/blender/source/blender/makesrna/intern/rna_object.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c	2009-11-04 23:14:20 UTC (rev 24333)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_buttons.c	2009-11-05 01:00:17 UTC (rev 24334)
@@ -498,6 +498,80 @@
 }
 #endif
 
+static void v3d_transform_butsR(uiLayout *layout, PointerRNA *ptr)
+{
+	uiLayout *split, *colsub;
+	
+	split = uiLayoutSplit(layout, 0.8);
+	
+	if (ptr->type == &RNA_PoseChannel) {
+		PointerRNA boneptr;
+		Bone *bone;
+		
+		boneptr = RNA_pointer_get(ptr, "bone");
+		bone = boneptr.data;
+		uiLayoutSetActive(split, !(bone->parent && bone->flag & BONE_CONNECTED));
+	}
+	colsub = uiLayoutColumn(split, 1);
+	uiItemR(colsub, "Location", 0, ptr, "location", 0);
+	colsub = uiLayoutColumn(split, 1);
+	uiItemL(colsub, "", 0);
+	uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_location", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
+	
+	split = uiLayoutSplit(layout, 0.8);
+	
+	switch(RNA_enum_get(ptr, "rotation_mode")) {
+		case ROT_MODE_XYZ:
+		case ROT_MODE_XZY:
+		case ROT_MODE_YXZ:
+		case ROT_MODE_YZX:
+		case ROT_MODE_ZXY:
+		case ROT_MODE_ZYX:
+			colsub = uiLayoutColumn(split, 1);
+			uiItemR(colsub, "Rotation", 0, ptr, "rotation_euler", 0);
+			colsub = uiLayoutColumn(split, 1);
+			uiItemL(colsub, "", 0);
+			uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
+			break;
+		case ROT_MODE_QUAT:
+			colsub = uiLayoutColumn(split, 1);
+			uiItemR(colsub, "Rotation", 0, ptr, "rotation_quaternion", 0);
+			colsub = uiLayoutColumn(split, 1);
+			uiItemR(colsub, "W", 0, ptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE);
+			if (RNA_boolean_get(ptr, "lock_rotations_4d"))
+				uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
+			else
+				uiItemL(colsub, "", 0);
+			uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
+			break;
+		case ROT_MODE_AXISANGLE:
+			colsub = uiLayoutColumn(split, 1);
+			uiItemR(colsub, "Rotation", 0, ptr, "rotation_axis_angle", 0);
+			colsub = uiLayoutColumn(split, 1);
+			uiItemR(colsub, "W", 0, ptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE);
+			if (RNA_boolean_get(ptr, "lock_rotations_4d"))
+				uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
+			else
+				uiItemL(colsub, "", 0);
+			uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
+			break;
+	}
+	uiItemR(layout, "", 0, ptr, "rotation_mode", 0);
+	
+	split = uiLayoutSplit(layout, 0.8);
+	colsub = uiLayoutColumn(split, 1);
+	uiItemR(colsub, "Scale", 0, ptr, "scale", 0);
+	colsub = uiLayoutColumn(split, 1);
+	uiItemL(colsub, "", 0);
+	uiItemR(colsub, "", ICON_LOCKED, ptr, "lock_scale", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
+	
+	if (ptr->type == &RNA_Object) {
+		Object *ob = ptr->data;
+		if (ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
+			uiItemR(layout, "Dimensions", 0, ptr, "dimensions", 0);
+	}
+}
+
 static void v3d_posearmature_buts(uiLayout *layout, View3D *v3d, Object *ob, float lim)
 {
 	uiBlock *block= uiLayoutGetBlock(layout);
@@ -506,7 +580,7 @@
 	Bone *bone= NULL;
 	TransformProperties *tfp= v3d->properties_storage;
 	PointerRNA pchanptr;
-	uiLayout *row;
+	uiLayout *row, *col;
 
 	arm = ob->data;
 	if (!arm || !ob->pose) return;
@@ -517,16 +591,25 @@
 			break;
 	}
 	if (!pchan)	{
-		uiDefBut(block, LABEL, 0, "No Bone Active",			0, 240, 100, 20, 0, 0, 0, 0, 0, "");
+		row= uiLayoutRow(layout, 0);
+		uiItemL(row, "No Active Bone", 0);
 		return; 
 	}
-	else {
-		row= uiLayoutRow(layout, 0);
-		RNA_pointer_create(&ob->id, &RNA_PoseChannel, pchan, &pchanptr);
-		uiItemL(row, "", ICON_BONE_DATA);
-		uiItemR(row, "", 0, &pchanptr, "name", 0);
-	}
+	row= uiLayoutRow(layout, 0);
 	
+	RNA_pointer_create(&ob->id, &RNA_PoseChannel, pchan, &pchanptr);
+	
+	uiItemL(row, "", ICON_BONE_DATA);
+	uiItemR(row, "", 0, &pchanptr, "name", 0);
+
+	col= uiLayoutColumn(layout, 0);
+	
+	/* XXX: RNA buts show data in native types (i.e. quats, 4-component axis/angle, etc.)
+	 * but oldskool UI shows in eulers always. Do we want to be able to still display in Eulers?
+	 * Maybe needs RNA/ui options to display rotations as different types... */
+	v3d_transform_butsR(col, &pchanptr);
+
+#if 0
 	uiLayoutAbsoluteBlock(layout);
 
 	if (pchan->rotmode == ROT_MODE_AXISANGLE) {
@@ -581,6 +664,7 @@
 	uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEY, B_REDR, ICON_UNLOCKED,	125, 40, 25, 19, &(pchan->protectflag), 0, 0, 0, 0, "Protects Y Scale value from being Transformed");
 	uiDefIconButBitS(block, ICONTOG, OB_LOCK_SCALEZ, B_REDR, ICON_UNLOCKED,	125, 20, 25, 19, &(pchan->protectflag), 0, 0, 0, 0, "Protects z Scale value from being Transformed");
 	uiBlockEndAlign(block);
+#endif
 }
 
 /* assumes armature editmode */
@@ -1012,7 +1096,7 @@
 	Object *ob= OBACT;
 	TransformProperties *tfp;
 	PointerRNA obptr;
-	uiLayout *col, *row, *split, *colsub;
+	uiLayout *col, *row;
 	float lim;
 	
 	if(ob==NULL) return;
@@ -1053,61 +1137,8 @@
 		v3d_posearmature_buts(col, v3d, ob, lim);
 	}
 	else {
-		split = uiLayoutSplit(col, 0.8);
-		colsub = uiLayoutColumn(split, 1);
-		uiItemR(colsub, "Location", 0, &obptr, "location", 0);
-		colsub = uiLayoutColumn(split, 1);
-		uiItemL(colsub, "", 0);
-		uiItemR(colsub, "", ICON_LOCKED, &obptr, "lock_location", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
-		
-		split = uiLayoutSplit(col, 0.8);
-		
-		switch(ob->rotmode) {
-			case ROT_MODE_XYZ:
-			case ROT_MODE_XZY:
-			case ROT_MODE_YXZ:
-			case ROT_MODE_YZX:
-			case ROT_MODE_ZXY:
-			case ROT_MODE_ZYX:
-				colsub = uiLayoutColumn(split, 1);
-				uiItemR(colsub, "Rotation", 0, &obptr, "rotation_euler", 0);
-				colsub = uiLayoutColumn(split, 1);
-				uiItemL(colsub, "", 0);
-				uiItemR(colsub, "", ICON_LOCKED, &obptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
-				break;
-			case ROT_MODE_QUAT:
-				colsub = uiLayoutColumn(split, 1);
-				uiItemR(colsub, "Rotation", 0, &obptr, "rotation_quaternion", 0);
-				colsub = uiLayoutColumn(split, 1);
-				uiItemR(colsub, "W", 0, &obptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE);
-				if (ob->protectflag & OB_LOCK_ROT4D)
-					uiItemR(colsub, "", ICON_LOCKED, &obptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
-				else
-					uiItemL(colsub, "", 0);
-				uiItemR(colsub, "", ICON_LOCKED, &obptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
-				break;
-			case ROT_MODE_AXISANGLE:
-				colsub = uiLayoutColumn(split, 1);
-				uiItemR(colsub, "Rotation", 0, &obptr, "rotation_axis_angle", 0);
-				colsub = uiLayoutColumn(split, 1);
-				uiItemR(colsub, "W", 0, &obptr, "lock_rotations_4d", UI_ITEM_R_TOGGLE);
-				if (ob->protectflag & OB_LOCK_ROT4D)
-					uiItemR(colsub, "", ICON_LOCKED, &obptr, "lock_rotation_w", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
-				else
-					uiItemL(colsub, "", 0);
-				uiItemR(colsub, "", ICON_LOCKED, &obptr, "lock_rotation", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
-				break;
-		}
-		uiItemR(col, "", 0, &obptr, "rotation_mode", 0);
-		
-		split = uiLayoutSplit(col, 0.8);
-		colsub = uiLayoutColumn(split, 1);
-		uiItemR(colsub, "Scale", 0, &obptr, "scale", 0);
-		colsub = uiLayoutColumn(split, 1);
-		uiItemL(colsub, "", 0);
-		uiItemR(colsub, "", ICON_LOCKED, &obptr, "lock_scale", UI_ITEM_R_TOGGLE+UI_ITEM_R_ICON_ONLY);
-		
-		uiItemR(col, "Dimensions", 0, &obptr, "dimensions", 0);
+
+		v3d_transform_butsR(col, &obptr);
 	}
 }
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_object.c	2009-11-04 23:14:20 UTC (rev 24333)
+++ trunk/blender/source/blender/makesrna/intern/rna_object.c	2009-11-05 01:00:17 UTC (rev 24334)
@@ -568,9 +568,9 @@
 		len[1] = bb->vec[2][1] - bb->vec[0][1];
 		len[2] = bb->vec[1][2] - bb->vec[0][2];
 		
-		ob->size[0] = value[0] / len[0];
-		ob->size[1] = value[1] / len[1];
-		ob->size[2] = value[2] / len[2];
+		if (len[0] > 0.f) ob->size[0] = value[0] / len[0];
+		if (len[1] > 0.f) ob->size[1] = value[1] / len[1];
+		if (len[2] > 0.f) ob->size[2] = value[2] / len[2];
 	}
 }
 





More information about the Bf-blender-cvs mailing list