Revision: 15796
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15796
Author: aligorith
Date: 2008-07-27 06:19:56 +0200 (Sun, 27 Jul 2008)
Log Message:
-----------
Patch #17336: Lock bones in edit mode
Submitted by: Lorenzo Pierfederici (lento)
This patch adds the ability to lock transformation on bones in edit mode, to
protect them from accidental editing.
Bones can be locked from the editing buttons, the transform property panel, the
specials popup menu or the python api.
Modified Paths:
--------------
trunk/blender/source/blender/include/BIF_editarmature.h
trunk/blender/source/blender/makesdna/DNA_armature_types.h
trunk/blender/source/blender/makesdna/DNA_object_types.h
trunk/blender/source/blender/python/api2_2x/Armature.c
trunk/blender/source/blender/python/api2_2x/Bone.c
trunk/blender/source/blender/python/api2_2x/doc/Armature.py
trunk/blender/source/blender/src/buttons_editing.c
trunk/blender/source/blender/src/drawview.c
trunk/blender/source/blender/src/editarmature.c
trunk/blender/source/blender/src/editobject.c
trunk/blender/source/blender/src/transform_conversions.c
trunk/blender/source/blender/src/transform_manipulator.c
Modified: trunk/blender/source/blender/include/BIF_editarmature.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editarmature.h 2008-07-27
03:40:37 UTC (rev 15795)
+++ trunk/blender/source/blender/include/BIF_editarmature.h 2008-07-27
04:19:56 UTC (rev 15796)
@@ -134,6 +134,7 @@
void hide_selected_armature_bones(void);
void hide_unselected_armature_bones(void);
void show_all_armature_bones(void);
+void set_locks_armature_bones(short lock);
#define BONESEL_ROOT 0x10000000
#define BONESEL_TIP 0x20000000
Modified: trunk/blender/source/blender/makesdna/DNA_armature_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_armature_types.h 2008-07-27
03:40:37 UTC (rev 15795)
+++ trunk/blender/source/blender/makesdna/DNA_armature_types.h 2008-07-27
04:19:56 UTC (rev 15796)
@@ -154,7 +154,8 @@
BONE_NO_SCALE = (1<<15), /* No parent
scale */
BONE_HIDDEN_PG = (1<<16), /* hidden bone
when drawing PoseChannels (for ghost drawing) */
BONE_DRAWWIRE = (1<<17), /* bone should
be drawn as OB_WIRE, regardless of draw-types of view+armature */
- BONE_NO_CYCLICOFFSET = (1<<18) /* when no parent, bone
will not get cyclic offset */
+ BONE_NO_CYCLICOFFSET = (1<<18), /* when no parent, bone
will not get cyclic offset */
+ BONE_EDITMODE_LOCKED = (1<<19), /* bone transforms are
locked in EditMode */
} eBone_Flag;
#endif
Modified: trunk/blender/source/blender/makesdna/DNA_object_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_object_types.h 2008-07-27
03:40:37 UTC (rev 15795)
+++ trunk/blender/source/blender/makesdna/DNA_object_types.h 2008-07-27
04:19:56 UTC (rev 15796)
@@ -466,9 +466,11 @@
#define OB_LOCK_ROTX 8
#define OB_LOCK_ROTY 16
#define OB_LOCK_ROTZ 32
+#define OB_LOCK_ROT 56
#define OB_LOCK_SCALEX 64
#define OB_LOCK_SCALEY 128
#define OB_LOCK_SCALEZ 256
+#define OB_LOCK_SCALE 448
/* ob->softflag in DNA_object_force.h */
Modified: trunk/blender/source/blender/python/api2_2x/Armature.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Armature.c 2008-07-27
03:40:37 UTC (rev 15795)
+++ trunk/blender/source/blender/python/api2_2x/Armature.c 2008-07-27
04:19:56 UTC (rev 15796)
@@ -1469,6 +1469,8 @@
PyConstant_NewInt("BONE_SELECTED", BONE_SELECTED));
PyModule_AddObject(module, "TIP_SELECTED",
PyConstant_NewInt("TIP_SELECTED", BONE_TIPSEL));
+ PyModule_AddObject(module, "LOCKED_EDIT",
+ PyConstant_NewInt("LOCKED_EDIT", BONE_EDITMODE_LOCKED));
PyModule_AddObject(module, "OCTAHEDRON",
PyConstant_NewInt("OCTAHEDRON", ARM_OCTA));
Modified: trunk/blender/source/blender/python/api2_2x/Bone.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Bone.c 2008-07-27 03:40:37 UTC
(rev 15795)
+++ trunk/blender/source/blender/python/api2_2x/Bone.c 2008-07-27 04:19:56 UTC
(rev 15796)
@@ -368,6 +368,10 @@
if (PyList_Append(list,
EXPP_GetModuleConstant("Blender.Armature",
"TIP_SELECTED")) == -1)
goto RuntimeError;
+ if(self->editbone->flag & BONE_EDITMODE_LOCKED)
+ if (PyList_Append(list,
+ EXPP_GetModuleConstant("Blender.Armature",
"LOCKED_EDIT")) == -1)
+ goto RuntimeError;
}else{
if(self->flag & BONE_CONNECTED)
if (PyList_Append(list,
@@ -401,6 +405,10 @@
if (PyList_Append(list,
EXPP_GetModuleConstant("Blender.Armature",
"TIP_SELECTED")) == -1)
goto RuntimeError;
+ if(self->flag & BONE_EDITMODE_LOCKED)
+ if (PyList_Append(list,
+ EXPP_GetModuleConstant("Blender.Armature",
"LOCKED_EDIT")) == -1)
+ goto RuntimeError;
}
return list;
@@ -422,7 +430,7 @@
return 0;
if (!STREQ3(PyString_AsString(name), "CONNECTED",
"HINGE", "NO_DEFORM") &&
!STREQ3(PyString_AsString(name),
"ROOT_SELECTED", "BONE_SELECTED", "TIP_SELECTED") &&
- !STREQ2(PyString_AsString(name), "MULTIPLY",
"HIDDEN_EDIT"))
+ !STREQ3(PyString_AsString(name), "MULTIPLY",
"HIDDEN_EDIT", "LOCKED_EDIT"))
return 0;
else
return 1;
Modified: trunk/blender/source/blender/python/api2_2x/doc/Armature.py
===================================================================
--- trunk/blender/source/blender/python/api2_2x/doc/Armature.py 2008-07-27
03:40:37 UTC (rev 15795)
+++ trunk/blender/source/blender/python/api2_2x/doc/Armature.py 2008-07-27
04:19:56 UTC (rev 15796)
@@ -89,6 +89,8 @@
@type BONE_SELECTED: Constant
@var TIP_SELECTED: Tip of the Bone is selected
@type TIP_SELECTED: Constant
[EMAIL PROTECTED] LOCKED_EDIT: Prevents the bone from being transformed in
editmode
[EMAIL PROTECTED] LOCKED_EDIT: Constant
@var OCTAHEDRON: Bones drawn as octahedrons
@type OCTAHEDRON: Constant
@var STICK: Bones drawn as a line
@@ -286,6 +288,7 @@
- Armature.ROOT_SELECTED: Selection of root ball of
bone
- Armature.BONE_SELECTED: Selection of bone
- Armature.TIP_SELECTED: Selection of tip ball of bone
+ - Armature.LOCKED_EDIT: Prevents the bone from being
transformed in editmode
@type options: List of Constants
@ivar subdivision: The number of bone subdivisions.
@type subdivision: Int
Modified: trunk/blender/source/blender/src/buttons_editing.c
===================================================================
--- trunk/blender/source/blender/src/buttons_editing.c 2008-07-27 03:40:37 UTC
(rev 15795)
+++ trunk/blender/source/blender/src/buttons_editing.c 2008-07-27 04:19:56 UTC
(rev 15796)
@@ -4371,11 +4371,12 @@
uiDefButF(block, NUM,B_ARM_RECALCDATA, "Weight:", 225,
by-19,105, 18, &curBone->weight, 0.0F, 1000.0F, 10.0F, 0.0F, "Bone deformation
weight");
/* bone types */
- uiDefButBitI(block, TOG, BONE_HINGE, B_ARM_RECALCDATA,
"Hinge", -10,by-38,80,18, &curBone->flag, 1.0, 32.0, 0.0, 0.0, "Don't
inherit rotation or scale from parent Bone");
- uiDefButBitI(block, TOG, BONE_NO_SCALE,
B_ARM_RECALCDATA, "S", 70,by-38,20,18, &curBone->flag, 1.0, 32.0, 0.0,
0.0, "Don't inherit scale from parent Bone");
- uiDefButBitI(block, TOGN, BONE_NO_DEFORM,
B_ARM_RECALCDATA, "Deform", 90, by-38, 80, 18, &curBone->flag, 0.0, 0.0, 0.0,
0.0, "Indicate if Bone deforms geometry");
- uiDefButBitI(block, TOG, BONE_MULT_VG_ENV,
B_ARM_RECALCDATA, "Mult", 170,by-38,80,18, &curBone->flag, 1.0, 32.0, 0.0, 0.0,
"Multiply Bone Envelope with VertexGroup");
- uiDefButBitI(block, TOG, BONE_HIDDEN_A, REDRAWVIEW3D,
"Hide", 250,by-38,80,18, &curBone->flag, 0, 0, 0, 0, "Toggles display of this
bone in Edit Mode");
+ uiDefButBitI(block, TOG, BONE_HINGE, B_ARM_RECALCDATA,
"Hinge", -10,by-38,60,18, &curBone->flag, 1.0, 32.0, 0.0, 0.0, "Don't
inherit rotation or scale from parent Bone");
+ uiDefButBitI(block, TOG, BONE_NO_SCALE,
B_ARM_RECALCDATA, "S", 50,by-38,20,18, &curBone->flag, 1.0, 32.0, 0.0,
0.0, "Don't inherit scale from parent Bone");
+ uiDefButBitI(block, TOGN, BONE_NO_DEFORM,
B_ARM_RECALCDATA, "Deform", 70, by-38, 80, 18, &curBone->flag, 0.0, 0.0, 0.0,
0.0, "Indicate if Bone deforms geometry");
+ uiDefButBitI(block, TOG, BONE_MULT_VG_ENV,
B_ARM_RECALCDATA, "Mult", 150,by-38,60,18, &curBone->flag, 1.0, 32.0, 0.0, 0.0,
"Multiply Bone Envelope with VertexGroup");
+ uiDefButBitI(block, TOG, BONE_HIDDEN_A, REDRAWVIEW3D,
"Hide", 210,by-38,60,18, &curBone->flag, 0, 0, 0, 0, "Toggles display of this
bone in Edit Mode");
+ uiDefButBitI(block, TOG, BONE_EDITMODE_LOCKED,
REDRAWVIEW3D, "Lock", 270,by-38,60,18, &curBone->flag, 0, 0, 0, 0, "Prevents
this bone from being transformed in Edit Mode");
/* layers */
uiBlockBeginAlign(block);
Modified: trunk/blender/source/blender/src/drawview.c
===================================================================
--- trunk/blender/source/blender/src/drawview.c 2008-07-27 03:40:37 UTC (rev
15795)
+++ trunk/blender/source/blender/src/drawview.c 2008-07-27 04:19:56 UTC (rev
15796)
@@ -1995,6 +1995,8 @@
tfp->ob_eul[0]= 180.0*ebone->roll/M_PI;
uiDefButF(block, NUM, B_ARMATUREPANEL1, "Roll:", 10, 100, 140,
19, tfp->ob_eul, -lim, lim, 1000, 3, "");
+ uiDefButBitI(block, TOG, BONE_EDITMODE_LOCKED, REDRAWVIEW3D, "Lock",
160, 100, 140, 19, &(ebone->flag), 0, 0, 0, 0, "Prevents bone from being
transformed in edit mode");
+
uiBlockBeginAlign(block);
uiDefButF(block, NUM, B_ARMATUREPANEL1, "TailRadius:", 10, 150, 140,
19, &ebone->rad_tail, 0, lim, 10, 3, "");
if (ebone->parent && ebone->flag & BONE_CONNECTED )
Modified: trunk/blender/source/blender/src/editarmature.c
===================================================================
--- trunk/blender/source/blender/src/editarmature.c 2008-07-27 03:40:37 UTC
(rev 15795)
+++ trunk/blender/source/blender/src/editarmature.c 2008-07-27 04:19:56 UTC
(rev 15796)
@@ -2709,6 +2709,32 @@
BIF_undo_push("Reveal Bones");
}
+/* Sets editmode transform locks for bones (adds if lock==1, clears otherwise)
*/
+void set_locks_armature_bones(short lock)
+{
+ bArmature *arm= G.obedit->data;
+ EditBone *ebone;
+
+ for (ebone = G.edbo.first; ebone; ebone=ebone->next) {
+ if (arm->layer & ebone->layer) {
+ if (ebone->flag &
(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL)) {
+ if (lock)
+ ebone->flag |= BONE_EDITMODE_LOCKED;
+ else
+ ebone->flag &= ~BONE_EDITMODE_LOCKED;
+ }
+ }
+ }
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWBUTSEDIT, 0);
+
+ if (lock)
+ BIF_undo_push("Lock Bones");
+ else
+ BIF_undo_push("Unlock Bones");
+}
+
/* check for null, before calling! */
static void bone_connect_to_existing_parent(EditBone *bone)
{
Modified: trunk/blender/source/blender/src/editobject.c
===================================================================
--- trunk/blender/source/blender/src/editobject.c 2008-07-27 03:40:37 UTC
(rev 15795)
+++ trunk/blender/source/blender/src/editobject.c 2008-07-27 04:19:56 UTC
(rev 15796)
@@ -2760,7 +2760,7 @@
DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
}
else if(G.obedit->type==OB_ARMATURE) {
- nr= pupmenu("Specials%t|Subdivide %x1|Subdivide Multi%x2|Flip
Left-Right Names%x3|%l|AutoName Left-Right%x4|AutoName Front-Back%x5|AutoName
Top-Bottom%x6");
+ nr= pupmenu("Specials%t|Subdivide %x1|Subdivide Multi%x2|Flip
Left-Right Names%x3|%l|AutoName Left-Right%x4|AutoName Front-Back%x5|AutoName
Top-Bottom%x6|%l|Lock%x7|Unlock%x8");
if(nr==1)
subdivide_armature(1);
if(nr==2) {
@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs