Page Menu
Home
Search
Configure Global Search
Log In
Files
F13647
bone-group-select.patch
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Torsten Rupp (rupp)
Nov 13 2013, 2:45 PM
Size
5 KB
Subscribers
None
bone-group-select.patch
View Options
Index: release/scripts/ui/properties_data_armature.py
===================================================================
--- release/scripts/ui/properties_data_armature.py (revision 30136)
+++ release/scripts/ui/properties_data_armature.py (working copy)
@@ -162,15 +162,18 @@
col = split.column()
col.template_triColorSet(group, "colors")
- row = layout.row(align=True)
+ row = layout.row()
row.active = (ob.proxy is None)
- row.operator("pose.group_assign", text="Assign")
- row.operator("pose.group_unassign", text="Remove") #row.operator("pose.bone_group_remove_from", text="Remove")
- #row.operator("object.bone_group_select", text="Select")
- #row.operator("object.bone_group_deselect", text="Deselect")
+ sub = row.row(align=True)
+ sub.operator("pose.group_assign", text="Assign")
+ sub.operator("pose.group_unassign", text="Remove") #row.operator("pose.bone_group_remove_from", text="Remove")
+ sub = row.row(align=True)
+ sub.operator("pose.group_select", text="Select")
+ sub.operator("pose.group_deselect", text="Deselect")
+
# TODO: this panel will soon be depreceated too
Index: source/blender/editors/armature/armature_ops.c
===================================================================
--- source/blender/editors/armature/armature_ops.c (revision 30136)
+++ source/blender/editors/armature/armature_ops.c (working copy)
@@ -126,6 +126,8 @@
WM_operatortype_append(POSE_OT_group_remove);
WM_operatortype_append(POSE_OT_group_assign);
WM_operatortype_append(POSE_OT_group_unassign);
+ WM_operatortype_append(POSE_OT_group_select);
+ WM_operatortype_append(POSE_OT_group_deselect);
WM_operatortype_append(POSE_OT_paths_calculate);
WM_operatortype_append(POSE_OT_paths_clear);
Index: source/blender/editors/armature/armature_intern.h
===================================================================
--- source/blender/editors/armature/armature_intern.h (revision 30136)
+++ source/blender/editors/armature/armature_intern.h (working copy)
@@ -107,6 +107,8 @@
void POSE_OT_group_remove(struct wmOperatorType *ot);
void POSE_OT_group_assign(struct wmOperatorType *ot);
void POSE_OT_group_unassign(struct wmOperatorType *ot);
+void POSE_OT_group_select(struct wmOperatorType *ot);
+void POSE_OT_group_deselect(struct wmOperatorType *ot);
void POSE_OT_paths_calculate(struct wmOperatorType *ot);
void POSE_OT_paths_clear(struct wmOperatorType *ot);
Index: source/blender/editors/armature/poseobject.c
===================================================================
--- source/blender/editors/armature/poseobject.c (revision 30136)
+++ source/blender/editors/armature/poseobject.c (working copy)
@@ -1346,6 +1346,101 @@
ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
}
+static void pose_group_select(Object *ob, int select)
+{
+ bArmature *arm= ob->data;
+ bPose *pose= ob->pose;
+ bPoseChannel *pchan;
+
+ for (pchan= pose->chanbase.first; pchan; pchan= pchan->next) {
+ /* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */
+ if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) {
+ if (select) {
+ if (pchan->agrp_index == pose->active_group) pchan->bone->flag |= BONE_SELECTED;
+ }
+ else {
+ if (pchan->agrp_index == pose->active_group) pchan->bone->flag &= ~BONE_SELECTED;
+ }
+ }
+ }
+}
+
+static int pose_group_select_exec (bContext *C, wmOperator *op)
+{
+ ScrArea *sa= CTX_wm_area(C);
+ Object *ob;
+
+ /* since this call may also be used from the buttons window, we need to check for where to get the object */
+ if (sa->spacetype == SPACE_BUTS)
+ ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+ else
+ ob= CTX_data_active_object(C);
+
+ /* only continue if there's an object, and a pose there too */
+ if (ELEM(NULL, ob, ob->pose))
+ return OPERATOR_CANCELLED;
+
+ pose_group_select(ob,1);
+
+ /* notifiers for updates */
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob);
+
+ return OPERATOR_FINISHED;
+}
+
+void POSE_OT_group_select (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Select bones of Bone Groups";
+ ot->idname= "POSE_OT_group_select";
+ ot->description= "Select bones of bone groups";
+
+ /* api callbacks */
+ ot->exec= pose_group_select_exec;
+ ot->poll= ED_operator_posemode;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+static int pose_group_deselect_exec (bContext *C, wmOperator *op)
+{
+ ScrArea *sa= CTX_wm_area(C);
+ Object *ob;
+
+ /* since this call may also be used from the buttons window, we need to check for where to get the object */
+ if (sa->spacetype == SPACE_BUTS)
+ ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+ else
+ ob= CTX_data_active_object(C);
+
+ /* only continue if there's an object, and a pose there too */
+ if (ELEM(NULL, ob, ob->pose))
+ return OPERATOR_CANCELLED;
+
+ pose_group_select(ob,0);
+
+ /* notifiers for updates */
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob);
+
+ return OPERATOR_FINISHED;
+}
+
+void POSE_OT_group_deselect (wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Deselected bones of Bone Groups";
+ ot->idname= "POSE_OT_group_deselect";
+ ot->description= "Deselect bones of bone groups";
+
+ /* api callbacks */
+ ot->exec= pose_group_deselect_exec;
+ ot->poll= ED_operator_posemode;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
/* ********************************************** */
static int pose_flip_names_exec (bContext *C, wmOperator *op)
File Metadata
Details
Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
62/ed/5625a108af140ec3299150152087
Event Timeline
Log In to Comment