[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