[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15796] trunk/blender/source/blender: Patch #17336: Lock bones in edit mode

Joshua Leung aligorith at gmail.com
Sun Jul 27 06:19:58 CEST 2008


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
+ at var LOCKED_EDIT: Prevents the bone from being transformed in editmode
+ at type 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. @@




More information about the Bf-blender-cvs mailing list