forked from bartvdbraak/blender
patch [#37218] Split operator for armatures
from Henrik Aarnio (hjaarnio)
This commit is contained in:
parent
41587de016
commit
5f05de0c1e
@ -2389,6 +2389,7 @@ class VIEW3D_MT_edit_armature(Menu):
|
|||||||
layout.operator("armature.merge")
|
layout.operator("armature.merge")
|
||||||
layout.operator("armature.fill")
|
layout.operator("armature.fill")
|
||||||
layout.operator("armature.delete")
|
layout.operator("armature.delete")
|
||||||
|
layout.operator("armature.split")
|
||||||
layout.operator("armature.separate")
|
layout.operator("armature.separate")
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
|
@ -1066,6 +1066,44 @@ void ARMATURE_OT_align(wmOperatorType *ot)
|
|||||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ********************************* Split ******************************* */
|
||||||
|
|
||||||
|
static int armature_split_exec(bContext *C, wmOperator *UNUSED(op))
|
||||||
|
{
|
||||||
|
Object *ob = CTX_data_edit_object(C);
|
||||||
|
bArmature *arm = (bArmature *)ob->data;
|
||||||
|
EditBone *bone;
|
||||||
|
|
||||||
|
for (bone = arm->edbo->first; bone; bone = bone->next){
|
||||||
|
if (bone->parent && (bone->flag & BONE_SELECTED) != (bone->parent->flag & BONE_SELECTED)){
|
||||||
|
bone->parent = NULL;
|
||||||
|
bone->flag &= ~BONE_CONNECTED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (bone = arm->edbo->first; bone; bone = bone->next){
|
||||||
|
ED_armature_ebone_select_set(bone, (bone->flag & BONE_SELECTED) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
|
||||||
|
|
||||||
|
return OPERATOR_FINISHED;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ARMATURE_OT_split(wmOperatorType *ot)
|
||||||
|
{
|
||||||
|
/* identifiers */
|
||||||
|
ot->name = "Split";
|
||||||
|
ot->idname = "ARMATURE_OT_split";
|
||||||
|
ot->description = "Split off selected bones from connected unselected bones";
|
||||||
|
|
||||||
|
/* api callbacks */
|
||||||
|
ot->exec = armature_split_exec;
|
||||||
|
ot->poll = ED_operator_editarmature;
|
||||||
|
|
||||||
|
/* flags */
|
||||||
|
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||||
|
}
|
||||||
|
|
||||||
/* ********************************* Delete ******************************* */
|
/* ********************************* Delete ******************************* */
|
||||||
|
|
||||||
/* previously delete_armature */
|
/* previously delete_armature */
|
||||||
|
@ -78,6 +78,7 @@ void ARMATURE_OT_click_extrude(struct wmOperatorType *ot);
|
|||||||
void ARMATURE_OT_fill(struct wmOperatorType *ot);
|
void ARMATURE_OT_fill(struct wmOperatorType *ot);
|
||||||
void ARMATURE_OT_merge(struct wmOperatorType *ot);
|
void ARMATURE_OT_merge(struct wmOperatorType *ot);
|
||||||
void ARMATURE_OT_separate(struct wmOperatorType *ot);
|
void ARMATURE_OT_separate(struct wmOperatorType *ot);
|
||||||
|
void ARMATURE_OT_split(struct wmOperatorType *ot);
|
||||||
|
|
||||||
void ARMATURE_OT_autoside_names(struct wmOperatorType *ot);
|
void ARMATURE_OT_autoside_names(struct wmOperatorType *ot);
|
||||||
void ARMATURE_OT_flip_names(struct wmOperatorType *ot);
|
void ARMATURE_OT_flip_names(struct wmOperatorType *ot);
|
||||||
|
@ -74,6 +74,7 @@ void ED_operatortypes_armature(void)
|
|||||||
WM_operatortype_append(ARMATURE_OT_fill);
|
WM_operatortype_append(ARMATURE_OT_fill);
|
||||||
WM_operatortype_append(ARMATURE_OT_merge);
|
WM_operatortype_append(ARMATURE_OT_merge);
|
||||||
WM_operatortype_append(ARMATURE_OT_separate);
|
WM_operatortype_append(ARMATURE_OT_separate);
|
||||||
|
WM_operatortype_append(ARMATURE_OT_split);
|
||||||
|
|
||||||
WM_operatortype_append(ARMATURE_OT_autoside_names);
|
WM_operatortype_append(ARMATURE_OT_autoside_names);
|
||||||
WM_operatortype_append(ARMATURE_OT_flip_names);
|
WM_operatortype_append(ARMATURE_OT_flip_names);
|
||||||
@ -269,6 +270,7 @@ void ED_keymap_armature(wmKeyConfig *keyconf)
|
|||||||
WM_keymap_add_item(keymap, "ARMATURE_OT_click_extrude", ACTIONMOUSE, KM_CLICK, KM_CTRL, 0);
|
WM_keymap_add_item(keymap, "ARMATURE_OT_click_extrude", ACTIONMOUSE, KM_CLICK, KM_CTRL, 0);
|
||||||
WM_keymap_add_item(keymap, "ARMATURE_OT_fill", FKEY, KM_PRESS, 0, 0);
|
WM_keymap_add_item(keymap, "ARMATURE_OT_fill", FKEY, KM_PRESS, 0, 0);
|
||||||
WM_keymap_add_item(keymap, "ARMATURE_OT_merge", MKEY, KM_PRESS, KM_ALT, 0);
|
WM_keymap_add_item(keymap, "ARMATURE_OT_merge", MKEY, KM_PRESS, KM_ALT, 0);
|
||||||
|
WM_keymap_add_item(keymap, "ARMATURE_OT_split", YKEY, KM_PRESS, 0, 0);
|
||||||
|
|
||||||
WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, KM_CTRL | KM_ALT, 0);
|
WM_keymap_add_item(keymap, "ARMATURE_OT_separate", PKEY, KM_PRESS, KM_CTRL | KM_ALT, 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user