From 8bf7ca9fe31c438c68e6765666ce890a192ad765 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 10 Dec 2019 06:12:08 +1100 Subject: Fix T72310: Separate bones creates empty armatures Armatures that didn't contain any selected bones were still creating armatures. --- .../blender/editors/armature/armature_relations.c | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'source/blender/editors/armature') diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c index b60c8ce4592..e98deeb970e 100644 --- a/source/blender/editors/armature/armature_relations.c +++ b/source/blender/editors/armature/armature_relations.c @@ -631,6 +631,31 @@ static int separate_armature_exec(bContext *C, wmOperator *op) Base *base_iter = bases[base_index]; Object *obedit = base_iter->object; + { + bArmature *arm_old = obedit->data; + bool has_selected_bone = false; + bool has_selected_any = false; + for (EditBone *ebone = arm_old->edbo->first; ebone; ebone = ebone->next) { + if (EBONE_VISIBLE(arm_old, ebone)) { + if (ebone->flag & BONE_SELECTED) { + has_selected_bone = true; + break; + } + else if (ebone->flag & (BONE_TIPSEL | BONE_ROOTSEL)) { + has_selected_any = true; + } + } + if (has_selected_bone == false) { + if (has_selected_any) { + /* Without this, we may leave head/tail selected + * which isn't expected after separating. */ + ED_armature_edit_deselect_all(obedit); + } + continue; + } + } + } + Object *oldob, *newob; Base *oldbase, *newbase; -- cgit v1.2.3