Page MenuHome

lock_editbones-01.patch

lock_editbones-01.patch

diff -r 07aa9f9a76e5 source/blender/include/BIF_editarmature.h
--- source/blender/include/BIF_editarmature.h Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/include/BIF_editarmature.h Tue Jul 15 19:52:58 2008 +0200
@@ -134,6 +134,8 @@ void hide_selected_armature_bones(void);
void hide_selected_armature_bones(void);
void hide_unselected_armature_bones(void);
void show_all_armature_bones(void);
+void lock_selected_armature_bones(void);
+void unlock_selected_armature_bones(void);
#define BONESEL_ROOT 0x10000000
#define BONESEL_TIP 0x20000000
diff -r 07aa9f9a76e5 source/blender/makesdna/DNA_armature_types.h
--- source/blender/makesdna/DNA_armature_types.h Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/makesdna/DNA_armature_types.h Tue Jul 15 19:52:58 2008 +0200
@@ -154,7 +154,8 @@ typedef enum eBone_Flag {
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
diff -r 07aa9f9a76e5 source/blender/makesdna/DNA_object_types.h
--- source/blender/makesdna/DNA_object_types.h Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/makesdna/DNA_object_types.h Tue Jul 15 19:52:58 2008 +0200
@@ -466,9 +466,11 @@ extern Object workob;
#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 */
diff -r 07aa9f9a76e5 source/blender/python/api2_2x/Armature.c
--- source/blender/python/api2_2x/Armature.c Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/python/api2_2x/Armature.c Tue Jul 15 19:52:58 2008 +0200
@@ -1469,6 +1469,8 @@ PyObject *Armature_Init(void)
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));
diff -r 07aa9f9a76e5 source/blender/python/api2_2x/Bone.c
--- source/blender/python/api2_2x/Bone.c Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/python/api2_2x/Bone.c Tue Jul 15 19:52:58 2008 +0200
@@ -368,6 +368,10 @@ static PyObject *EditBone_getOptions(BPy
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,
@@ -400,6 +404,10 @@ static PyObject *EditBone_getOptions(BPy
if(self->flag & BONE_TIPSEL)
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;
}
@@ -422,7 +430,7 @@ static int EditBone_CheckValidConstant(P
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;
diff -r 07aa9f9a76e5 source/blender/python/api2_2x/doc/Armature.py
--- source/blender/python/api2_2x/doc/Armature.py Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/python/api2_2x/doc/Armature.py Tue Jul 15 19:52:58 2008 +0200
@@ -89,6 +89,8 @@ Example::
@type BONE_SELECTED: Constant
@var TIP_SELECTED: Tip of the Bone is selected
@type TIP_SELECTED: Constant
+@var LOCKED_EDIT: Prevents the bone from being transformed in editmode
+@type LOCKED_EDIT: Constant
@var OCTAHEDRON: Bones drawn as octahedrons
@type OCTAHEDRON: Constant
@var STICK: Bones drawn as a line
@@ -352,6 +354,7 @@ class Editbone:
- 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
diff -r 07aa9f9a76e5 source/blender/src/buttons_editing.c
--- source/blender/src/buttons_editing.c Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/src/buttons_editing.c Tue Jul 15 19:52:58 2008 +0200
@@ -4371,11 +4371,12 @@ static void editing_panel_armature_bones
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);
diff -r 07aa9f9a76e5 source/blender/src/drawview.c
--- source/blender/src/drawview.c Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/src/drawview.c Tue Jul 15 19:52:58 2008 +0200
@@ -1984,6 +1984,8 @@ static void v3d_editarmature_buts(uiBloc
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 )
diff -r 07aa9f9a76e5 source/blender/src/editarmature.c
--- source/blender/src/editarmature.c Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/src/editarmature.c Tue Jul 15 19:52:58 2008 +0200
@@ -3148,6 +3148,42 @@ void subdivide_armature(int numcuts)
else BIF_undo_push("Subdivide multi");
}
+void lock_selected_armature_bones(void)
+{
+ 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)) {
+ ebone->flag |= BONE_EDITMODE_LOCKED;
+ }
+ }
+ }
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Lock Bones");
+}
+
+void unlock_selected_armature_bones(void)
+{
+ 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)) {
+ ebone->flag &= ~BONE_EDITMODE_LOCKED;
+ }
+ }
+ }
+ countall();
+ allqueue(REDRAWVIEW3D, 0);
+ allqueue(REDRAWBUTSEDIT, 0);
+ BIF_undo_push("Unlock Bones");
+}
+
/* ***************** Pose tools ********************* */
void clear_armature(Object *ob, char mode)
diff -r 07aa9f9a76e5 source/blender/src/editobject.c
--- source/blender/src/editobject.c Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/src/editobject.c Tue Jul 15 19:52:58 2008 +0200
@@ -2760,7 +2760,7 @@ void special_editmenu(void)
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) {
@@ -2773,6 +2773,10 @@ void special_editmenu(void)
else if(ELEM3(nr, 4, 5, 6)) {
armature_autoside_names(nr-4);
}
+ else if(nr==7)
+ lock_selected_armature_bones();
+ else if(nr==8)
+ unlock_selected_armature_bones();
}
else if(G.obedit->type==OB_LATTICE) {
static float weight= 1.0f;
diff -r 07aa9f9a76e5 source/blender/src/transform_conversions.c
--- source/blender/src/transform_conversions.c Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/src/transform_conversions.c Tue Jul 15 19:52:58 2008 +0200
@@ -1087,6 +1087,8 @@ static void createTransArmatureVerts(Tra
VECCOPY (td->center, td->iloc);
td->loc= ebo->tail;
td->flag= TD_SELECTED;
+ if (ebo->flag & BONE_EDITMODE_LOCKED)
+ td->protectflag = OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE;
Mat3CpyMat3(td->smtx, smtx);
Mat3CpyMat3(td->mtx, mtx);
@@ -1102,6 +1104,8 @@ static void createTransArmatureVerts(Tra
VECCOPY (td->center, td->iloc);
td->loc= ebo->head;
td->flag= TD_SELECTED;
+ if (ebo->flag & BONE_EDITMODE_LOCKED)
+ td->protectflag = OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE;
Mat3CpyMat3(td->smtx, smtx);
Mat3CpyMat3(td->mtx, mtx);
diff -r 07aa9f9a76e5 source/blender/src/transform_manipulator.c
--- source/blender/src/transform_manipulator.c Tue Jul 15 14:59:09 2008 +0200
+++ source/blender/src/transform_manipulator.c Tue Jul 15 19:52:58 2008 +0200
@@ -170,6 +170,13 @@ static void stats_pose(View3D *v3d, bPos
}
}
+/* for edit mode */
+static void stats_editbone(View3D *v3d, EditBone *ebo)
+{
+ if (ebo->flag & BONE_EDITMODE_LOCKED)
+ protectflag_to_drawflags(OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE, &v3d->twdrawflag);
+}
+
/* only counts the parent selection, and tags transform flag */
/* bad call... should re-use method from transform_conversion once */
static void count_bone_select(TransInfo *t, bArmature *arm, ListBase *lb, int do_it)
@@ -257,6 +264,9 @@ int calc_manipulator_stats(ScrArea *sa)
if (ebo->flag & BONE_ROOTSEL) {
calc_tw_center(ebo->head);
totsel++;
+ }
+ if (ebo->flag & BONE_SELECTED) {
+ stats_editbone(v3d, ebo);
}
}
}

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
fb/4e/e27acefb981fbde68165341c9467

Event Timeline