diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-12-17 09:55:18 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-12-17 09:55:18 +0300 |
commit | b322ce0847e308f15d0a551af0a77ecf3ee06091 (patch) | |
tree | 065be76f1a924aa209a5d44e01c7f4d0cc8ff821 /source/blender/editors/screen/screen_context.c | |
parent | 8ec7429a70cca85dd3bc7f29f1ac5030aec7054f (diff) |
Context: add objects_in_mode(_unique_data)
Needed for Python to easily support multi-object edit/pose modes.
Diffstat (limited to 'source/blender/editors/screen/screen_context.c')
-rw-r--r-- | source/blender/editors/screen/screen_context.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index a33bea4d1be..15d9b3c5ccb 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -77,6 +77,7 @@ const char *screen_context_dir[] = { "selected_objects", "selected_bases", "editable_objects", "editable_bases", "selected_editable_objects", "selected_editable_bases", + "objects_in_mode", "objects_in_mode_unique_data", "visible_bones", "editable_bones", "selected_bones", "selected_editable_bones", "visible_pose_bones", "selected_pose_bones", "selected_pose_bones_from_active_object", "active_bone", "active_pose_bone", @@ -245,6 +246,30 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION); return 1; } + else if (CTX_data_equals(member, "objects_in_mode")) { + if (obact && (obact->mode != OB_MODE_OBJECT)) { + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, obact->type, obact->mode, ob_iter) { + CTX_data_id_list_add(result, &ob_iter->id); + } FOREACH_OBJECT_IN_MODE_END; + } + CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION); + return 1; + } + else if (CTX_data_equals(member, "objects_in_mode_unique_data")) { + if (obact && (obact->mode != OB_MODE_OBJECT)) { + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, obact->type, obact->mode, ob_iter) { + ob_iter->id.tag |= LIB_TAG_DOIT; + } FOREACH_OBJECT_IN_MODE_END; + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, obact->type, obact->mode, ob_iter) { + if (ob_iter->id.tag & LIB_TAG_DOIT) { + ob_iter->id.tag &= ~LIB_TAG_DOIT; + CTX_data_id_list_add(result, &ob_iter->id); + } + } FOREACH_OBJECT_IN_MODE_END; + } + CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION); + return 1; + } else if (CTX_data_equals(member, "visible_bones") || CTX_data_equals(member, "editable_bones")) { bArmature *arm = (obedit && obedit->type == OB_ARMATURE) ? obedit->data : NULL; EditBone *ebone, *flipbone = NULL; |