From 80f7249d09a76b7e045525fa8f78c7d660a8749d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 15 Apr 2018 21:45:19 +0200 Subject: Cleanup: skip redundant edit-bone select lookups --- source/blender/editors/armature/armature_edit.c | 2 +- .../blender/editors/space_view3d/view3d_select.c | 24 ++++++++++++---------- 2 files changed, 14 insertions(+), 12 deletions(-) (limited to 'source') diff --git a/source/blender/editors/armature/armature_edit.c b/source/blender/editors/armature/armature_edit.c index ccbb2e95fc1..4562329706f 100644 --- a/source/blender/editors/armature/armature_edit.c +++ b/source/blender/editors/armature/armature_edit.c @@ -1303,7 +1303,7 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op)) { bArmature *arm; EditBone *curBone, *ebone_next; - Object *obedit = CTX_data_edit_object(C); // XXX get from context + Object *obedit = CTX_data_edit_object(C); bool changed = false; arm = obedit->data; diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 22ca3beae0a..d184081b03a 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1914,7 +1914,6 @@ static int do_meta_box_select(ViewContext *vc, rcti *rect, bool select, bool ext static int do_armature_box_select(ViewContext *vc, rcti *rect, bool select, bool extend) { bArmature *arm = vc->obedit->data; - EditBone *ebone; int a; unsigned int buffer[MAXPICKBUF]; @@ -1923,7 +1922,7 @@ static int do_armature_box_select(ViewContext *vc, rcti *rect, bool select, bool hits = view3d_opengl_select(vc, buffer, MAXPICKBUF, rect, VIEW3D_SELECT_ALL); /* clear flag we use to detect point was affected */ - for (ebone = arm->edbo->first; ebone; ebone = ebone->next) + for (EditBone *ebone = arm->edbo->first; ebone; ebone = ebone->next) ebone->flag &= ~BONE_DONE; if (extend == false && select) @@ -1933,17 +1932,17 @@ static int do_armature_box_select(ViewContext *vc, rcti *rect, bool select, bool for (a = 0; a < hits; a++) { int index = buffer[(4 * a) + 3]; if (index != -1) { - ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY)); if ((index & 0xFFFF0000) == 0) { continue; } + EditBone *ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY)); if ((select == false) || ((ebone->flag & BONE_UNSELECTABLE) == 0)) { if (index & BONESEL_TIP) { ebone->flag |= BONE_DONE; if (select) ebone->flag |= BONE_TIPSEL; else ebone->flag &= ~BONE_TIPSEL; } - + if (index & BONESEL_ROOT) { ebone->flag |= BONE_DONE; if (select) ebone->flag |= BONE_ROOTSEL; @@ -1952,27 +1951,30 @@ static int do_armature_box_select(ViewContext *vc, rcti *rect, bool select, bool } } } - + /* now we have to flush tag from parents... */ - for (ebone = arm->edbo->first; ebone; ebone = ebone->next) { + for (EditBone *ebone = arm->edbo->first; ebone; ebone = ebone->next) { if (ebone->parent && (ebone->flag & BONE_CONNECTED)) { - if (ebone->parent->flag & BONE_DONE) + if (ebone->parent->flag & BONE_DONE) { ebone->flag |= BONE_DONE; + } } } - + /* only select/deselect entire bones when no points where in the rect */ for (a = 0; a < hits; a++) { int index = buffer[(4 * a) + 3]; if (index != -1) { - ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY)); if (index & BONESEL_BONE) { + EditBone *ebone = BLI_findlink(arm->edbo, index & ~(BONESEL_ANY)); if ((select == false) || ((ebone->flag & BONE_UNSELECTABLE) == 0)) { if (!(ebone->flag & BONE_DONE)) { - if (select) + if (select) { ebone->flag |= (BONE_ROOTSEL | BONE_TIPSEL | BONE_SELECTED); - else + } + else { ebone->flag &= ~(BONE_ROOTSEL | BONE_TIPSEL | BONE_SELECTED); + } } } } -- cgit v1.2.3