From 4c3ed98ca27667c3403361199096e31eaa93cce2 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Sun, 25 Nov 2018 09:50:34 -0200 Subject: Local View Bring back per-viewport localview. This is based on Blender 2.79. We have a limit of 16 different local view viewports. We are using both the numpad /, as well as the regular /. Missing features: * Hack to make sure lights are always visible. * Make rendered mode with external engines to support this as well (probably just need to support this in the RNA iterators). * Support over 16 viewports by taking existing viewports out of local view. The code can use a cleanup pass in the future to unify the test to see if an object is visible (or we can use TESTBASE in more places). --- .../keyconfig/keymap_data/blender_default.py | 3 + release/scripts/startup/bl_ui/space_view3d.py | 1 + source/blender/blenkernel/BKE_layer.h | 103 ++++--- source/blender/blenkernel/BKE_object.h | 12 +- source/blender/blenkernel/intern/layer.c | 89 ++++-- source/blender/blenkernel/intern/layer_utils.c | 10 +- source/blender/blenkernel/intern/object.c | 24 +- source/blender/blenkernel/intern/object_update.c | 1 + source/blender/blenloader/intern/readfile.c | 25 +- .../depsgraph/intern/depsgraph_query_iter.cc | 1 + source/blender/draw/intern/draw_manager.c | 24 +- source/blender/editors/armature/armature_add.c | 6 +- source/blender/editors/armature/armature_edit.c | 20 +- source/blender/editors/armature/armature_naming.c | 4 +- .../blender/editors/armature/armature_relations.c | 4 +- source/blender/editors/armature/armature_select.c | 24 +- .../blender/editors/armature/editarmature_undo.c | 2 +- source/blender/editors/armature/pose_edit.c | 10 +- source/blender/editors/armature/pose_select.c | 12 +- source/blender/editors/armature/pose_slide.c | 4 +- source/blender/editors/armature/pose_transform.c | 9 +- source/blender/editors/armature/pose_utils.c | 5 +- source/blender/editors/curve/editcurve.c | 38 +-- source/blender/editors/curve/editcurve_paint.c | 2 +- source/blender/editors/curve/editcurve_select.c | 22 +- source/blender/editors/curve/editcurve_undo.c | 2 +- source/blender/editors/include/ED_armature.h | 3 +- source/blender/editors/include/ED_object.h | 5 +- source/blender/editors/include/ED_uvedit.h | 1 + .../blender/editors/lattice/editlattice_select.c | 14 +- source/blender/editors/lattice/editlattice_tools.c | 7 +- source/blender/editors/lattice/editlattice_undo.c | 2 +- source/blender/editors/mesh/editmesh_bevel.c | 2 +- source/blender/editors/mesh/editmesh_bisect.c | 4 +- source/blender/editors/mesh/editmesh_extrude.c | 14 +- .../blender/editors/mesh/editmesh_extrude_screw.c | 2 +- .../blender/editors/mesh/editmesh_extrude_spin.c | 2 +- source/blender/editors/mesh/editmesh_inset.c | 2 +- source/blender/editors/mesh/editmesh_intersect.c | 6 +- source/blender/editors/mesh/editmesh_loopcut.c | 2 +- source/blender/editors/mesh/editmesh_path.c | 4 +- source/blender/editors/mesh/editmesh_polybuild.c | 16 +- source/blender/editors/mesh/editmesh_rip.c | 2 +- source/blender/editors/mesh/editmesh_rip_edge.c | 2 +- source/blender/editors/mesh/editmesh_select.c | 44 +-- .../blender/editors/mesh/editmesh_select_similar.c | 6 +- source/blender/editors/mesh/editmesh_tools.c | 120 ++++---- source/blender/editors/mesh/editmesh_undo.c | 2 +- source/blender/editors/metaball/editmball_undo.c | 2 +- source/blender/editors/metaball/mball_edit.c | 14 +- source/blender/editors/object/object_edit.c | 6 +- source/blender/editors/object/object_random.c | 2 +- source/blender/editors/object/object_select.c | 31 ++- source/blender/editors/object/object_vgroup.c | 2 +- source/blender/editors/screen/screen_context.c | 55 +++- source/blender/editors/space_info/info_stats.c | 2 +- source/blender/editors/space_view3d/view3d_edit.c | 4 +- .../space_view3d/view3d_gizmo_preselect_type.c | 6 +- .../blender/editors/space_view3d/view3d_intern.h | 2 + source/blender/editors/space_view3d/view3d_ops.c | 1 + .../blender/editors/space_view3d/view3d_select.c | 12 +- source/blender/editors/space_view3d/view3d_snap.c | 10 +- source/blender/editors/space_view3d/view3d_utils.c | 9 +- source/blender/editors/space_view3d/view3d_view.c | 308 +++++++++++++++++++++ .../blender/editors/transform/transform_generics.c | 2 +- .../blender/editors/transform/transform_gizmo_2d.c | 3 +- .../blender/editors/transform/transform_gizmo_3d.c | 2 +- source/blender/editors/transform/transform_snap.c | 2 +- source/blender/editors/uvedit/uvedit_draw.c | 2 +- source/blender/editors/uvedit/uvedit_ops.c | 34 +-- .../blender/editors/uvedit/uvedit_smart_stitch.c | 3 +- source/blender/editors/uvedit/uvedit_unwrap_ops.c | 21 +- source/blender/makesdna/DNA_layer_types.h | 2 +- source/blender/makesdna/DNA_object_types.h | 2 +- source/blender/makesdna/DNA_scene_types.h | 6 + source/blender/makesdna/DNA_view3d_types.h | 3 +- source/blender/makesrna/intern/rna_object_api.c | 7 +- 77 files changed, 877 insertions(+), 397 deletions(-) diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 2b83b03f322..00fd59820e0 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -845,6 +845,9 @@ def km_view3d(params): ]) items.extend([ + # Visibility. + ("view3d.localview", {"type": 'NUMPAD_SLASH', "value": 'PRESS'}, None), + ("view3d.localview", {"type": 'SLASH', "value": 'PRESS'}, None), # Navigation. ("view3d.rotate", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None), ("view3d.move", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None), diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 8b4028386ff..1cf9a3a4b31 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -609,6 +609,7 @@ class VIEW3D_MT_view(Menu): layout.operator("view3d.view_all", text="Frame All").center = False layout.operator("view3d.view_persportho", text="Perspective/Orthographic") + layout.operator("view3d.localview") layout.separator() diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h index 2d736b41d1a..e98fa189379 100644 --- a/source/blender/blenkernel/BKE_layer.h +++ b/source/blender/blenkernel/BKE_layer.h @@ -53,6 +53,7 @@ struct Main; struct Object; struct RenderEngine; struct Scene; +struct View3D; struct ViewLayer; struct WorkSpace; @@ -140,6 +141,11 @@ void BKE_layer_eval_view_layer_indexed( /* iterators */ +typedef struct ObjectsVisibleIteratorData { + struct ViewLayer *view_layer; + struct View3D *v3d; +} ObjectsVisibleIteratorData; + void BKE_view_layer_selected_objects_iterator_begin(BLI_Iterator *iter, void *data_in); void BKE_view_layer_selected_objects_iterator_next(BLI_Iterator *iter); void BKE_view_layer_selected_objects_iterator_end(BLI_Iterator *iter); @@ -155,6 +161,7 @@ void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *iter); struct ObjectsInModeIteratorData { int object_mode; struct ViewLayer *view_layer; + struct View3D *v3d; struct Base *base_active; }; @@ -174,39 +181,57 @@ void BKE_view_layer_visible_bases_iterator_begin(BLI_Iterator *iter, void *data_ void BKE_view_layer_visible_bases_iterator_next(BLI_Iterator *iter); void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter); -#define FOREACH_SELECTED_OBJECT_BEGIN(view_layer, _instance) \ +#define FOREACH_SELECTED_OBJECT_BEGIN(_view_layer, _v3d, _instance) \ +{ \ + struct ObjectsVisibleIteratorData data_ = { \ + .view_layer = _view_layer, \ + .v3d = _v3d, \ + }; \ ITER_BEGIN(BKE_view_layer_selected_objects_iterator_begin, \ BKE_view_layer_selected_objects_iterator_next, \ BKE_view_layer_selected_objects_iterator_end, \ - view_layer, Object *, _instance) + &data_, Object *, _instance) #define FOREACH_SELECTED_OBJECT_END \ - ITER_END + ITER_END; \ +} ((void)0) -#define FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(view_layer, _instance) \ +#define FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(_view_layer, _v3d, _instance) \ +{ \ + struct ObjectsVisibleIteratorData data_ = { \ + .view_layer = _view_layer, \ + .v3d = _v3d, \ + }; \ ITER_BEGIN(BKE_view_layer_selected_editable_objects_iterator_begin, \ BKE_view_layer_selected_editable_objects_iterator_next, \ BKE_view_layer_selected_editable_objects_iterator_end, \ - view_layer, Object *, _instance) + &data_, Object *, _instance) #define FOREACH_SELECTED_EDITABLE_OBJECT_END \ - ITER_END + ITER_END; \ +} ((void)0) -#define FOREACH_VISIBLE_OBJECT_BEGIN(view_layer, _instance) \ +#define FOREACH_VISIBLE_OBJECT_BEGIN(_view_layer, _v3d, _instance) \ +{ \ + struct ObjectsVisibleIteratorData data_ = { \ + .view_layer = _view_layer, \ + .v3d = _v3d, \ + }; \ ITER_BEGIN(BKE_view_layer_visible_objects_iterator_begin, \ BKE_view_layer_visible_objects_iterator_next, \ BKE_view_layer_visible_objects_iterator_end, \ - view_layer, Object *, _instance) + &data_, Object *, _instance) #define FOREACH_VISIBLE_OBJECT_END \ - ITER_END - + ITER_END; \ +} ((void)0) -#define FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _object_mode, _instance) \ +#define FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _instance) \ { \ struct ObjectsInModeIteratorData data_ = { \ .object_mode = _object_mode, \ .view_layer = _view_layer, \ + .v3d = _v3d, \ .base_active = _view_layer->basact, \ }; \ ITER_BEGIN(BKE_view_layer_bases_in_mode_iterator_begin, \ @@ -218,14 +243,14 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter); ITER_END; \ } ((void)0) -#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_view_layer, _instance) \ - FOREACH_BASE_IN_MODE_BEGIN(_view_layer, OB_MODE_EDIT, _instance) +#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_view_layer, _v3d, _instance) \ + FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, OB_MODE_EDIT, _instance) #define FOREACH_BASE_IN_EDIT_MODE_END \ FOREACH_BASE_IN_MODE_END -#define FOREACH_OBJECT_IN_MODE_BEGIN(_view_layer, _object_mode, _instance) \ - FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _object_mode, _base) { \ +#define FOREACH_OBJECT_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _instance) \ + FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _base) { \ Object *_instance = _base->object; #define FOREACH_OBJECT_IN_MODE_END \ @@ -247,14 +272,20 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter); #define FOREACH_SELECTED_BASE_END \ ITER_END -#define FOREACH_VISIBLE_BASE_BEGIN(view_layer, _instance) \ +#define FOREACH_VISIBLE_BASE_BEGIN(_view_layer, _v3d, _instance) \ +{ \ + struct ObjectsVisibleIteratorData data_ = { \ + .view_layer = _view_layer, \ + .v3d = _v3d, \ + }; \ ITER_BEGIN(BKE_view_layer_visible_bases_iterator_begin, \ BKE_view_layer_visible_bases_iterator_next, \ BKE_view_layer_visible_bases_iterator_end, \ - view_layer, Base *, _instance) + &data_, Base *, _instance) #define FOREACH_VISIBLE_BASE_END \ - ITER_END + ITER_END; \ +} ((void)0) #define FOREACH_OBJECT_BEGIN(view_layer, _instance) \ @@ -332,21 +363,21 @@ struct ObjectsInModeParams { }; Base **BKE_view_layer_array_from_bases_in_mode_params( - struct ViewLayer *view_layer, uint *r_len, + struct ViewLayer *view_layer, struct View3D *v3d, uint *r_len, const struct ObjectsInModeParams *params); struct Object **BKE_view_layer_array_from_objects_in_mode_params( - struct ViewLayer *view_layer, uint *len, + struct ViewLayer *view_layer, struct View3D *v3d, uint *len, const struct ObjectsInModeParams *params); -#define BKE_view_layer_array_from_objects_in_mode(view_layer, r_len, ...) \ +#define BKE_view_layer_array_from_objects_in_mode(view_layer, v3d, r_len, ...) \ BKE_view_layer_array_from_objects_in_mode_params( \ - view_layer, r_len, \ + view_layer, v3d, r_len, \ &(const struct ObjectsInModeParams)__VA_ARGS__) -#define BKE_view_layer_array_from_bases_in_mode(view_layer, r_len, ...) \ +#define BKE_view_layer_array_from_bases_in_mode(view_layer, v3d, r_len, ...) \ BKE_view_layer_array_from_bases_in_mode_params( \ - view_layer, r_len, \ + view_layer, v3d, r_len, \ &(const struct ObjectsInModeParams)__VA_ARGS__) bool BKE_view_layer_filter_edit_mesh_has_uvs(struct Object *ob, void *user_data); @@ -354,38 +385,38 @@ bool BKE_view_layer_filter_edit_mesh_has_edges(struct Object *ob, void *user_dat /* Utility macros that wrap common args (add more as needed). */ -#define BKE_view_layer_array_from_objects_in_edit_mode(view_layer, r_len) \ +#define BKE_view_layer_array_from_objects_in_edit_mode(view_layer, v3d, r_len) \ BKE_view_layer_array_from_objects_in_mode( \ - view_layer, r_len, { \ + view_layer, v3d, r_len, { \ .object_mode = OB_MODE_EDIT}); -#define BKE_view_layer_array_from_bases_in_edit_mode(view_layer, r_len) \ +#define BKE_view_layer_array_from_bases_in_edit_mode(view_layer, v3d, r_len) \ BKE_view_layer_array_from_bases_in_mode( \ - view_layer, r_len, { \ + view_layer, v3d, r_len, { \ .object_mode = OB_MODE_EDIT}); -#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, r_len) \ +#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, r_len) \ BKE_view_layer_array_from_objects_in_mode( \ - view_layer, r_len, { \ + view_layer, v3d, r_len, { \ .object_mode = OB_MODE_EDIT, \ .no_dup_data = true}); -#define BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, r_len) \ +#define BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, v3d, r_len) \ BKE_view_layer_array_from_bases_in_mode( \ - view_layer, r_len, { \ + view_layer, v3d, r_len, { \ .object_mode = OB_MODE_EDIT, \ .no_dup_data = true}); -#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, r_len) \ +#define BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, v3d, r_len) \ BKE_view_layer_array_from_objects_in_mode( \ - view_layer, r_len, { \ + view_layer, v3d, r_len, { \ .object_mode = OB_MODE_EDIT, \ .no_dup_data = true, \ .filter_fn = BKE_view_layer_filter_edit_mesh_has_uvs}); -#define BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, r_len, mode) \ +#define BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, v3d, r_len, mode) \ BKE_view_layer_array_from_objects_in_mode( \ - view_layer, r_len, { \ + view_layer, v3d, r_len, { \ .object_mode = mode, \ .no_dup_data = true}); diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index e763c58efd3..35de1501494 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -148,13 +148,13 @@ bool BKE_object_pose_context_check(const struct Object *ob); struct Object *BKE_object_pose_armature_get(struct Object *ob); struct Object *BKE_object_pose_armature_get_visible(struct Object *ob, struct ViewLayer *view_layer, struct View3D *v3d); -struct Object **BKE_object_pose_array_get_ex(struct ViewLayer *view_layer, unsigned int *r_objects_len, bool unique); -struct Object **BKE_object_pose_array_get_unique(struct ViewLayer *view_layer, unsigned int *r_objects_len); -struct Object **BKE_object_pose_array_get(struct ViewLayer *view_layer, unsigned int *r_objects_len); +struct Object **BKE_object_pose_array_get_ex(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_objects_len, bool unique); +struct Object **BKE_object_pose_array_get_unique(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_objects_len); +struct Object **BKE_object_pose_array_get(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_objects_len); -struct Base **BKE_object_pose_base_array_get_ex(struct ViewLayer *view_layer, unsigned int *r_bases_len, bool unique); -struct Base **BKE_object_pose_base_array_get_unique(struct ViewLayer *view_layer, unsigned int *r_bases_len); -struct Base **BKE_object_pose_base_array_get(struct ViewLayer *view_layer, unsigned int *r_bases_len); +struct Base **BKE_object_pose_base_array_get_ex(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_bases_len, bool unique); +struct Base **BKE_object_pose_base_array_get_unique(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_bases_len); +struct Base **BKE_object_pose_base_array_get(struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_bases_len); void BKE_object_get_parent_matrix( struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index 2f9c818934f..4405255b874 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -1096,9 +1096,40 @@ void BKE_override_layer_collection_boolean_add( /** \name Private Iterator Helpers * \{ */ -static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in, const int flag) +typedef struct LayerObjectBaseIteratorData { + View3D *v3d; + Base *base; +} LayerObjectBaseIteratorData; + +static bool object_bases_iterator_is_valid_ex(View3D *v3d, Base *base, const int flag) +{ + if (v3d != NULL) { + if ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0) { + return false; + } + + if (v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) { + return false; + } + } + + if ((base->flag & flag) == 0) { + return false; + } + + return true; +} + +static bool object_bases_iterator_is_valid(View3D *v3d, Base *base) +{ + return object_bases_iterator_is_valid_ex(v3d, base, ~(0)); +} + +static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in_v, const int flag) { - ViewLayer *view_layer = data_in; + ObjectsVisibleIteratorData *data_in = data_in_v; + ViewLayer *view_layer = data_in->view_layer; + View3D *v3d = data_in->v3d; Base *base = view_layer->object_bases.first; /* when there are no objects */ @@ -1107,9 +1138,13 @@ static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in, const return; } - iter->data = base; + LayerObjectBaseIteratorData *data = MEM_callocN(sizeof(LayerObjectBaseIteratorData), __func__); + iter->data = data; - if ((base->flag & flag) == 0) { + data->v3d = v3d; + data->base = base; + + if (object_bases_iterator_is_valid_ex(v3d, base, flag) == false) { object_bases_iterator_next(iter, flag); } else { @@ -1119,12 +1154,13 @@ static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in, const static void object_bases_iterator_next(BLI_Iterator *iter, const int flag) { - Base *base = ((Base *)iter->data)->next; + LayerObjectBaseIteratorData *data = iter->data; + Base *base = data->base->next; while (base) { - if ((base->flag & flag) != 0) { + if (object_bases_iterator_is_valid_ex(data->v3d, base, flag)) { iter->current = base; - iter->data = base; + data->base = base; return; } base = base->next; @@ -1133,6 +1169,11 @@ static void object_bases_iterator_next(BLI_Iterator *iter, const int flag) iter->valid = false; } +static void object_bases_iterator_end(BLI_Iterator *iter) +{ + MEM_SAFE_FREE(iter->data); +} + static void objects_iterator_begin(BLI_Iterator *iter, void *data_in, const int flag) { object_bases_iterator_begin(iter, data_in, flag); @@ -1151,6 +1192,11 @@ static void objects_iterator_next(BLI_Iterator *iter, const int flag) } } +static void objects_iterator_end(BLI_Iterator *iter) +{ + object_bases_iterator_end(iter); +} + /* -------------------------------------------------------------------- */ /** \name BKE_view_layer_selected_objects_iterator * See: #FOREACH_SELECTED_OBJECT_BEGIN @@ -1166,9 +1212,9 @@ void BKE_view_layer_selected_objects_iterator_next(BLI_Iterator *iter) objects_iterator_next(iter, BASE_SELECTED); } -void BKE_view_layer_selected_objects_iterator_end(BLI_Iterator *UNUSED(iter)) +void BKE_view_layer_selected_objects_iterator_end(BLI_Iterator *iter) { - /* do nothing */ + objects_iterator_end(iter); } /** \} */ @@ -1187,9 +1233,9 @@ void BKE_view_layer_visible_objects_iterator_next(BLI_Iterator *iter) objects_iterator_next(iter, BASE_VISIBLE); } -void BKE_view_layer_visible_objects_iterator_end(BLI_Iterator *UNUSED(iter)) +void BKE_view_layer_visible_objects_iterator_end(BLI_Iterator *iter) { - /* do nothing */ + objects_iterator_end(iter); } /** \} */ @@ -1221,9 +1267,9 @@ void BKE_view_layer_selected_editable_objects_iterator_next(BLI_Iterator *iter) } while (iter->valid && BKE_object_is_libdata((Object *)iter->current) != false); } -void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *UNUSED(iter)) +void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *iter) { - /* do nothing */ + objects_iterator_end(iter); } /** \} */ @@ -1234,7 +1280,7 @@ void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *UNUSED( void BKE_view_layer_selected_bases_iterator_begin(BLI_Iterator *iter, void *data_in) { - object_bases_iterator_begin(iter, data_in, BASE_SELECTED); + objects_iterator_begin(iter, data_in, BASE_SELECTED); } void BKE_view_layer_selected_bases_iterator_next(BLI_Iterator *iter) @@ -1242,9 +1288,9 @@ void BKE_view_layer_selected_bases_iterator_next(BLI_Iterator *iter) object_bases_iterator_next(iter, BASE_SELECTED); } -void BKE_view_layer_selected_bases_iterator_end(BLI_Iterator *UNUSED(iter)) +void BKE_view_layer_selected_bases_iterator_end(BLI_Iterator *iter) { - /* do nothing */ + object_bases_iterator_end(iter); } /** \} */ @@ -1263,9 +1309,9 @@ void BKE_view_layer_visible_bases_iterator_next(BLI_Iterator *iter) object_bases_iterator_next(iter, BASE_VISIBLE); } -void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *UNUSED(iter)) +void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter) { - /* do nothing */ + object_bases_iterator_end(iter); } /** \} */ @@ -1377,6 +1423,10 @@ void BKE_view_layer_bases_in_mode_iterator_begin(BLI_Iterator *iter, void *data_ } iter->data = data_in; iter->current = base; + + if (object_bases_iterator_is_valid(data->v3d, base) == false) { + BKE_view_layer_bases_in_mode_iterator_next(iter); + } } void BKE_view_layer_bases_in_mode_iterator_next(BLI_Iterator *iter) @@ -1398,7 +1448,8 @@ void BKE_view_layer_bases_in_mode_iterator_next(BLI_Iterator *iter) while (base) { if ((base->object->type == data->base_active->object->type) && (base != data->base_active) && - (base->object->mode & data->object_mode)) + (base->object->mode & data->object_mode) && + object_bases_iterator_is_valid(data->v3d, base)) { iter->current = base; return; diff --git a/source/blender/blenkernel/intern/layer_utils.c b/source/blender/blenkernel/intern/layer_utils.c index 94bac8a33d6..556ccdd3f92 100644 --- a/source/blender/blenkernel/intern/layer_utils.c +++ b/source/blender/blenkernel/intern/layer_utils.c @@ -40,11 +40,11 @@ #include "MEM_guardedalloc.h" Base **BKE_view_layer_array_from_bases_in_mode_params( - ViewLayer *view_layer, uint *r_len, + ViewLayer *view_layer, View3D *v3d, uint *r_len, const struct ObjectsInModeParams *params) { if (params->no_dup_data) { - FOREACH_BASE_IN_MODE_BEGIN(view_layer, params->object_mode, base_iter) { + FOREACH_BASE_IN_MODE_BEGIN(view_layer, v3d, params->object_mode, base_iter) { ID *id = base_iter->object->data; if (id) { id->tag |= LIB_TAG_DOIT; @@ -55,7 +55,7 @@ Base **BKE_view_layer_array_from_bases_in_mode_params( Base **base_array = NULL; BLI_array_declare(base_array); - FOREACH_BASE_IN_MODE_BEGIN(view_layer, params->object_mode, base_iter) { + FOREACH_BASE_IN_MODE_BEGIN(view_layer, v3d, params->object_mode, base_iter) { if (params->filter_fn) { if (!params->filter_fn(base_iter->object, params->filter_userdata)) { continue; @@ -83,11 +83,11 @@ Base **BKE_view_layer_array_from_bases_in_mode_params( } Object **BKE_view_layer_array_from_objects_in_mode_params( - ViewLayer *view_layer, uint *r_len, + ViewLayer *view_layer, View3D *v3d, uint *r_len, const struct ObjectsInModeParams *params) { Base **base_array = BKE_view_layer_array_from_bases_in_mode_params( - view_layer, r_len, params); + view_layer, v3d, r_len, params); if (base_array != NULL) { for (uint i = 0; i < *r_len; i++) { ((Object **)base_array)[i] = base_array[i]->object; diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 70a912929e6..87aa99f5d40 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1224,14 +1224,14 @@ Object *BKE_object_pose_armature_get_visible(Object *ob, ViewLayer *view_layer, /** * Access pose array with special check to get pose object when in weight paint mode. */ -Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, uint *r_objects_len, bool unique) +Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, View3D *v3d, uint *r_objects_len, bool unique) { Object *ob_active = OBACT(view_layer); Object *ob_pose = BKE_object_pose_armature_get(ob_active); Object **objects = NULL; if (ob_pose == ob_active) { objects = BKE_view_layer_array_from_objects_in_mode( - view_layer, r_objects_len, { + view_layer, v3d, r_objects_len, { .object_mode = OB_MODE_POSE, .no_dup_data = unique}); } @@ -1246,16 +1246,16 @@ Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, uint *r_objects_len } return objects; } -Object **BKE_object_pose_array_get_unique(ViewLayer *view_layer, uint *r_objects_len) +Object **BKE_object_pose_array_get_unique(ViewLayer *view_layer, View3D *v3d, uint *r_objects_len) { - return BKE_object_pose_array_get_ex(view_layer, r_objects_len, true); + return BKE_object_pose_array_get_ex(view_layer, v3d, r_objects_len, true); } -Object **BKE_object_pose_array_get(ViewLayer *view_layer, uint *r_objects_len) +Object **BKE_object_pose_array_get(ViewLayer *view_layer, View3D *v3d, uint *r_objects_len) { - return BKE_object_pose_array_get_ex(view_layer, r_objects_len, false); + return BKE_object_pose_array_get_ex(view_layer, v3d, r_objects_len, false); } -Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, uint *r_bases_len, bool unique) +Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, View3D *v3d, uint *r_bases_len, bool unique) { Base *base_active = BASACT(view_layer); Object *ob_pose = base_active ? BKE_object_pose_armature_get(base_active->object) : NULL; @@ -1273,7 +1273,7 @@ Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, uint *r_bases_le if (base_active && (base_pose == base_active)) { bases = BKE_view_layer_array_from_bases_in_mode( - view_layer, r_bases_len, { + view_layer, v3d, r_bases_len, { .object_mode = OB_MODE_POSE, .no_dup_data = unique}); } @@ -1288,13 +1288,13 @@ Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, uint *r_bases_le } return bases; } -Base **BKE_object_pose_base_array_get_unique(ViewLayer *view_layer, uint *r_bases_len) +Base **BKE_object_pose_base_array_get_unique(ViewLayer *view_layer, View3D *v3d, uint *r_bases_len) { - return BKE_object_pose_base_array_get_ex(view_layer, r_bases_len, true); + return BKE_object_pose_base_array_get_ex(view_layer, v3d, r_bases_len, true); } -Base **BKE_object_pose_base_array_get(ViewLayer *view_layer, uint *r_bases_len) +Base **BKE_object_pose_base_array_get(ViewLayer *view_layer, View3D *v3d, uint *r_bases_len) { - return BKE_object_pose_base_array_get_ex(view_layer, r_bases_len, false); + return BKE_object_pose_base_array_get_ex(view_layer, v3d, r_bases_len, false); } void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src) diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c index dc144f48b05..f88747908b0 100644 --- a/source/blender/blenkernel/intern/object_update.c +++ b/source/blender/blenkernel/intern/object_update.c @@ -428,6 +428,7 @@ void BKE_object_eval_flush_base_flags(Depsgraph *depsgraph, object->base_flag |= BASE_FROM_SET; object->base_flag &= ~(BASE_SELECTED | BASE_SELECTABLE); } + object->base_local_view_bits = base->local_view_bits; /* Copy to original object datablock if needed. */ if (DEG_is_active(depsgraph)) { diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index d44eda49151..b5e2f0146dd 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -7406,25 +7406,21 @@ static void lib_link_window_scene_data_restore(wmWindow *win, Scene *scene) } if (v3d->localvd) { - /*Base *base;*/ + Base *base; v3d->localvd->camera = scene->camera; - /* localview can become invalid during undo/redo steps, so we exit it when no could be found */ -#if 0 /* XXX regionlocalview ? */ - for (base= sc->scene->base.first; base; base= base->next) { - if (base->lay & v3d->lay) break; + /* Localview can become invalid during undo/redo steps, so we exit it when no could be found. */ + for (base = screen->scene->base.first; base; base = base->next) { + if (base->local_view_bits & v3d->local_view_uuid) { + break; + } } - if (base==NULL) { - v3d->lay= v3d->localvd->lay; - v3d->layact= v3d->localvd->layact; + if (base == NULL) { MEM_freeN(v3d->localvd); - v3d->localvd= NULL; + v3d->localvd = NULL; + v3d->local_view_uuid = 0; } -#endif - } - else if (v3d->scenelock) { - v3d->lay = scene->lay; } } } @@ -7446,9 +7442,6 @@ static void lib_link_workspace_layout_restore(struct IDNameLib_Map *id_map, Main v3d->camera = restore_pointer_by_name(id_map, (ID *)v3d->camera, USER_REAL); v3d->ob_centre = restore_pointer_by_name(id_map, (ID *)v3d->ob_centre, USER_REAL); - /* not very nice, but could help */ - if ((v3d->layact & v3d->lay) == 0) v3d->layact = v3d->lay; - /* free render engines for now */ for (ar = sa->regionbase.first; ar; ar = ar->next) { if (ar->regiontype == RGN_TYPE_WINDOW) { diff --git a/source/blender/depsgraph/intern/depsgraph_query_iter.cc b/source/blender/depsgraph/intern/depsgraph_query_iter.cc index 8bba92c262c..52c4ab33dc6 100644 --- a/source/blender/depsgraph/intern/depsgraph_query_iter.cc +++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc @@ -137,6 +137,7 @@ bool deg_objects_dupli_iterator_next(BLI_Iterator *iter) *temp_dupli_object = *dob->ob; temp_dupli_object->select_color = dupli_parent->select_color; temp_dupli_object->base_flag = dupli_parent->base_flag | BASE_FROMDUPLI; + temp_dupli_object->base_local_view_bits = dupli_parent->base_local_view_bits; /* Duplicated elements shouldn't care whether their original collection is visible or not. */ temp_dupli_object->base_flag |= BASE_VISIBLE; diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index 8846b6f1dc3..bc3e8c9f716 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -1426,9 +1426,13 @@ void DRW_draw_render_loop_ex( const int object_type_exclude_viewport = v3d->object_type_exclude_viewport; DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN(depsgraph, ob) { - if ((object_type_exclude_viewport & (1 << ob->type)) == 0) { - drw_engines_cache_populate(ob); + if ((object_type_exclude_viewport & (1 << ob->type)) != 0) { + continue; } + if (v3d->localvd && ((v3d->local_view_uuid & ob->base_local_view_bits) == 0)) { + continue; + } + drw_engines_cache_populate(ob); } DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; @@ -2043,7 +2047,7 @@ void DRW_draw_select_loop( #if 0 drw_engines_cache_populate(obact); #else - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, obact->mode, ob_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, obact->mode, ob_iter) { drw_engines_cache_populate(ob_iter); } FOREACH_OBJECT_IN_MODE_END; @@ -2060,6 +2064,10 @@ void DRW_draw_select_loop( DEG_ITER_OBJECT_FLAG_VISIBLE | DEG_ITER_OBJECT_FLAG_DUPLI) { + if (v3d->localvd && ((v3d->local_view_uuid & ob->base_local_view_bits) == 0)) { + continue; + } + if ((ob->base_flag & BASE_SELECTABLE) && (object_type_exclude_select & (1 << ob->type)) == 0) { @@ -2237,9 +2245,15 @@ void DRW_draw_depth_loop( const int object_type_exclude_viewport = v3d->object_type_exclude_viewport; DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN(depsgraph, ob) { - if ((object_type_exclude_viewport & (1 << ob->type)) == 0) { - drw_engines_cache_populate(ob); + if ((object_type_exclude_viewport & (1 << ob->type)) != 0) { + continue; } + + if (v3d->localvd && ((v3d->local_view_uuid & ob->base_local_view_bits) == 0)) { + continue; + } + + drw_engines_cache_populate(ob); } DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END; diff --git a/source/blender/editors/armature/armature_add.c b/source/blender/editors/armature/armature_add.c index 4ddbb9fb9c5..3a76409eda0 100644 --- a/source/blender/editors/armature/armature_add.c +++ b/source/blender/editors/armature/armature_add.c @@ -490,7 +490,7 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { EditBone *ebone_iter; EditBone *ebone_first_dupe = NULL; /* The beginning of the duplicated bones in the edbo list */ @@ -645,7 +645,7 @@ static int armature_symmetrize_exec(bContext *C, wmOperator *op) } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; bArmature *arm = obedit->data; @@ -872,7 +872,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op) bool changed_multi = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; diff --git a/source/blender/editors/armature/armature_edit.c b/source/blender/editors/armature/armature_edit.c index 6d624f6746e..ba7a6822f73 100644 --- a/source/blender/editors/armature/armature_edit.c +++ b/source/blender/editors/armature/armature_edit.c @@ -306,7 +306,7 @@ static int armature_calc_roll_exec(bContext *C, wmOperator *op) (type >= CALC_ROLL_TAN_NEG_X) ? true : false); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -490,7 +490,7 @@ static int armature_roll_clear_exec(bContext *C, wmOperator *op) const float roll = RNA_float_get(op->ptr, "roll"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -710,7 +710,7 @@ static int armature_fill_bones_exec(bContext *C, wmOperator *op) Object *obedit = NULL; { ViewLayer *view_layer = CTX_data_view_layer(C); - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, OB_MODE_EDIT, ob_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_MODE_EDIT, ob_iter) { if (ob_iter->data == arm) { obedit = ob_iter; } @@ -948,7 +948,7 @@ static int armature_merge_exec(bContext *C, wmOperator *op) const short type = RNA_enum_get(op->ptr, "type"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -1072,7 +1072,7 @@ static int armature_switch_direction_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; @@ -1326,7 +1326,7 @@ static int armature_split_exec(bContext *C, wmOperator *UNUSED(op)) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -1387,7 +1387,7 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op)) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; bArmature *arm = obedit->data; @@ -1458,7 +1458,7 @@ static int armature_dissolve_selected_exec(bContext *C, wmOperator *UNUSED(op)) bool changed_multi = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; bArmature *arm = obedit->data; @@ -1626,7 +1626,7 @@ static int armature_hide_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; bArmature *arm = obedit->data; @@ -1677,7 +1677,7 @@ static int armature_reveal_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); const bool select = RNA_boolean_get(op->ptr, "select"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; bArmature *arm = obedit->data; diff --git a/source/blender/editors/armature/armature_naming.c b/source/blender/editors/armature/armature_naming.c index 3d5ed47655c..629daf10255 100644 --- a/source/blender/editors/armature/armature_naming.c +++ b/source/blender/editors/armature/armature_naming.c @@ -411,7 +411,7 @@ static int armature_flip_names_exec(bContext *C, wmOperator *op) const bool do_strip_numbers = RNA_boolean_get(op->ptr, "do_strip_numbers"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -490,7 +490,7 @@ static int armature_autoside_names_exec(bContext *C, wmOperator *op) bool changed_multi = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c index 28bab00e665..ee65d76cae7 100644 --- a/source/blender/editors/armature/armature_relations.c +++ b/source/blender/editors/armature/armature_relations.c @@ -587,7 +587,7 @@ static int separate_armature_exec(bContext *C, wmOperator *op) WM_cursor_wait(1); uint bases_len = 0; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &bases_len); CTX_DATA_BEGIN(C, Base *, base, visible_bases) { @@ -897,7 +897,7 @@ static int armature_parent_clear_exec(bContext *C, wmOperator *op) CTX_DATA_END; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c index 216d068558d..1c5219e94c8 100644 --- a/source/blender/editors/armature/armature_select.c +++ b/source/blender/editors/armature/armature_select.c @@ -268,11 +268,11 @@ void *get_nearest_bone( if (vc.obedit != NULL) { bases = BKE_view_layer_array_from_bases_in_mode( - vc.view_layer, &bases_len, { + vc.view_layer, vc.v3d, &bases_len, { .object_mode = OB_MODE_EDIT}); } else { - bases = BKE_object_pose_base_array_get(vc.view_layer, &bases_len); + bases = BKE_object_pose_base_array_get(vc.view_layer, vc.v3d, &bases_len); } void *bone = get_bone_from_selectbuffer( @@ -470,7 +470,7 @@ cache_end: view3d_opengl_select_cache_end(); uint bases_len; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(vc->view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(vc->view_layer, vc->v3d, &bases_len); /* See if there are any selected bones in this group */ if (hits > 0) { @@ -630,7 +630,7 @@ bool ED_armature_edit_select_pick(bContext *C, const int mval[2], bool extend, b if (!extend && !deselect && !toggle) { uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, vc.v3d, &objects_len); ED_armature_edit_deselect_all_multi(objects, objects_len); MEM_freeN(objects); } @@ -886,7 +886,7 @@ static int armature_de_select_more_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; armature_select_more_less(ob, true); @@ -915,7 +915,7 @@ static int armature_de_select_less_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; armature_select_more_less(ob, false); @@ -987,7 +987,7 @@ static void select_similar_length(bContext *C, const float thresh) const float len_max = len * (1.0f + (thresh + FLT_EPSILON)); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -1035,7 +1035,7 @@ static void select_similar_direction(bContext *C, const float thresh) bone_direction_worldspace_get(ob_act, ebone_act, dir_act); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -1066,7 +1066,7 @@ static void select_similar_layer(bContext *C) EditBone *ebone_act = CTX_data_active_bone(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -1103,7 +1103,7 @@ static void select_similar_prefix(bContext *C) } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -1142,7 +1142,7 @@ static void select_similar_suffix(bContext *C) return; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; @@ -1452,7 +1452,7 @@ static int armature_select_mirror_exec(bContext *C, wmOperator *op) const bool extend = RNA_boolean_get(op->ptr, "extend"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; diff --git a/source/blender/editors/armature/editarmature_undo.c b/source/blender/editors/armature/editarmature_undo.c index f6f97af32b9..4346c7534dc 100644 --- a/source/blender/editors/armature/editarmature_undo.c +++ b/source/blender/editors/armature/editarmature_undo.c @@ -156,7 +156,7 @@ static bool armature_undosys_step_encode(struct bContext *C, UndoStep *us_p) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__); us->elems_len = objects_len; diff --git a/source/blender/editors/armature/pose_edit.c b/source/blender/editors/armature/pose_edit.c index b10afa3a6de..715203135d9 100644 --- a/source/blender/editors/armature/pose_edit.c +++ b/source/blender/editors/armature/pose_edit.c @@ -741,9 +741,10 @@ static int pose_flip_names_exec(bContext *C, wmOperator *op) { Main *bmain = CTX_data_main(C); ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); const bool do_strip_numbers = RNA_boolean_get(op->ptr, "do_strip_numbers"); - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, OB_MODE_POSE, ob) + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_MODE_POSE, ob) { bArmature *arm = ob->data; ListBase bones_names = {NULL}; @@ -1210,7 +1211,7 @@ static int pose_hide_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len; - Object **objects = BKE_object_pose_array_get_unique(view_layer, &objects_len); + Object **objects = BKE_object_pose_array_get_unique(view_layer, CTX_wm_view3d(C), &objects_len); bool changed_multi = false; const int hide_select = !RNA_boolean_get(op->ptr, "unselected"); @@ -1278,7 +1279,7 @@ static int pose_reveal_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len; - Object **objects = BKE_object_pose_array_get_unique(view_layer, &objects_len); + Object **objects = BKE_object_pose_array_get_unique(view_layer, CTX_wm_view3d(C), &objects_len); bool changed_multi = false; const bool select = RNA_boolean_get(op->ptr, "select"); void *select_p = POINTER_FROM_INT(select); @@ -1327,7 +1328,8 @@ static int pose_flip_quats_exec(bContext *C, wmOperator *UNUSED(op)) bool changed_multi = false; ViewLayer *view_layer = CTX_data_view_layer(C); - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, OB_MODE_POSE, ob_iter) { + View3D *v3d = CTX_wm_view3d(C); + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_MODE_POSE, ob_iter) { bool changed = false; /* loop through all selected pchans, flipping and keying (as needed) */ FOREACH_PCHAN_SELECTED_IN_OBJECT_BEGIN (ob_iter, pchan) { diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c index 3947fc7388e..111a7b2c693 100644 --- a/source/blender/editors/armature/pose_select.c +++ b/source/blender/editors/armature/pose_select.c @@ -144,7 +144,7 @@ void ED_pose_bone_select(Object *ob, bPoseChannel *pchan, bool select) /* called from editview.c, for mode-less pose selection */ /* assumes scene obact and basact is still on old situation */ bool ED_armature_pose_select_pick_with_buffer( - ViewLayer *view_layer, Base *base, const unsigned int *buffer, short hits, + ViewLayer *view_layer, View3D *v3d, Base *base, const unsigned int *buffer, short hits, bool extend, bool deselect, bool toggle, bool do_nearest) { Object *ob = base->object; @@ -180,7 +180,7 @@ bool ED_armature_pose_select_pick_with_buffer( if (!extend && !deselect && !toggle) { { uint objects_len = 0; - Object **objects = BKE_object_pose_array_get_unique(view_layer, &objects_len); + Object **objects = BKE_object_pose_array_get_unique(view_layer, v3d, &objects_len); ED_pose_deselect_all_multi(objects, objects_len, SEL_DESELECT, true); MEM_freeN(objects); } @@ -683,7 +683,7 @@ static bool pose_select_same_group(bContext *C, bool extend) uint ob_index; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, &objects_len, OB_MODE_POSE); + Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len, OB_MODE_POSE); for (ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = BKE_object_pose_armature_get(objects[ob_index]); bArmature *arm = (ob) ? ob->data : NULL; @@ -784,7 +784,7 @@ static bool pose_select_same_layer(bContext *C, bool extend) bool changed = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, &objects_len, OB_MODE_POSE); + Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len, OB_MODE_POSE); for (ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; ob->id.tag &= ~LIB_TAG_DOIT; @@ -896,7 +896,7 @@ static bool pose_select_same_keyingset(bContext *C, ReportList *reports, bool ex } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, &objects_len, OB_MODE_POSE); + Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len, OB_MODE_POSE); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = BKE_object_pose_armature_get(objects[ob_index]); bArmature *arm = (ob) ? ob->data : NULL; @@ -1024,7 +1024,7 @@ static int pose_select_mirror_exec(bContext *C, wmOperator *op) const bool extend = RNA_boolean_get(op->ptr, "extend"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, &objects_len, OB_MODE_POSE); + Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len, OB_MODE_POSE); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; bArmature *arm = ob->data; diff --git a/source/blender/editors/armature/pose_slide.c b/source/blender/editors/armature/pose_slide.c index 75090a656ae..2e7c90cee21 100644 --- a/source/blender/editors/armature/pose_slide.c +++ b/source/blender/editors/armature/pose_slide.c @@ -203,6 +203,7 @@ static int pose_slide_init(bContext *C, wmOperator *op, ePoseSlide_Modes mode) poseAnim_mapping_get(C, &pso->pfLinks); Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(CTX_data_view_layer(C), + CTX_wm_view3d(C), &pso->objects_len, OB_MODE_POSE); pso->ob_data_array = MEM_callocN(pso->objects_len * sizeof(tPoseSlideObject), "pose slide objects data"); @@ -1567,6 +1568,7 @@ static int pose_propagate_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); ListBase pflinks = {NULL, NULL}; tPChanFCurveLink *pfl; @@ -1619,7 +1621,7 @@ static int pose_propagate_exec(bContext *C, wmOperator *op) BLI_freelistN(&modeData.sel_markers); /* updates + notifiers */ - FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, OB_MODE_POSE, ob) { + FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, v3d, OB_MODE_POSE, ob) { poseAnim_mapping_refresh(C, scene, ob); } FOREACH_OBJECT_IN_MODE_END; diff --git a/source/blender/editors/armature/pose_transform.c b/source/blender/editors/armature/pose_transform.c index 5960c2d3c81..7945c85e6d7 100644 --- a/source/blender/editors/armature/pose_transform.c +++ b/source/blender/editors/armature/pose_transform.c @@ -232,9 +232,10 @@ void POSE_OT_armature_apply(wmOperatorType *ot) static int pose_visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); Depsgraph *depsgraph = CTX_data_depsgraph(C); - FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, OB_MODE_POSE, ob) + FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, v3d, OB_MODE_POSE, ob) { /* loop over all selected pchans * @@ -779,7 +780,8 @@ static int pose_clear_transform_generic_exec(bContext *C, wmOperator *op, /* only clear relevant transforms for selected bones */ ViewLayer *view_layer = CTX_data_view_layer(C); - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, OB_MODE_POSE, ob_iter) + View3D *v3d = CTX_wm_view3d(C); + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_MODE_POSE, ob_iter) { Object *ob_eval = DEG_get_evaluated_object(CTX_data_depsgraph(C), ob_iter); // XXX: UGLY HACK (for autokey + clear transforms) ListBase dsources = {NULL, NULL}; @@ -935,11 +937,12 @@ void POSE_OT_transforms_clear(wmOperatorType *ot) static int pose_clear_user_transforms_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); Scene *scene = CTX_data_scene(C); float cframe = (float)CFRA; const bool only_select = RNA_boolean_get(op->ptr, "only_selected"); - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, OB_MODE_POSE, ob) + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_MODE_POSE, ob) { if ((ob->adt) && (ob->adt->action)) { /* XXX: this is just like this to avoid contaminating anything else; diff --git a/source/blender/editors/armature/pose_utils.c b/source/blender/editors/armature/pose_utils.c index b891a181cfc..dc4b969371d 100644 --- a/source/blender/editors/armature/pose_utils.c +++ b/source/blender/editors/armature/pose_utils.c @@ -287,9 +287,10 @@ void poseAnim_mapping_reset(ListBase *pfLinks) void poseAnim_mapping_autoKeyframe(bContext *C, Scene *scene, ListBase *pfLinks, float cframe) { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); bool skip = true; - FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, OB_MODE_POSE, ob) { + FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, v3d, OB_MODE_POSE, ob) { ob->id.tag &= ~LIB_TAG_DOIT; ob = poseAnim_object_get(ob); @@ -341,7 +342,7 @@ void poseAnim_mapping_autoKeyframe(bContext *C, Scene *scene, ListBase *pfLinks, * - only do this if keyframes should have been added * - do not calculate unless there are paths already to update... */ - FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, OB_MODE_POSE, ob) { + FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, v3d, OB_MODE_POSE, ob) { if (ob->id.tag & LIB_TAG_DOIT) { if (ob->pose->avs.path_bakeflag & MOTIONPATH_BAKE_HAS_PATHS) { //ED_pose_clear_paths(C, ob); // XXX for now, don't need to clear diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 73cebd257f4..b3650a67972 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -1305,7 +1305,7 @@ static int separate_exec(bContext *C, wmOperator *op) WM_cursor_wait(1); uint bases_len = 0; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &bases_len); for (uint b_index = 0; b_index < bases_len; b_index++) { Base *oldbase = bases[b_index]; Base *newbase; @@ -1431,7 +1431,7 @@ static int curve_split_exec(bContext *C, wmOperator *op) int ok = -1; uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -2394,7 +2394,7 @@ static int switch_direction_exec(bContext *C, wmOperator *UNUSED(op)) View3D *v3d = CTX_wm_view3d(C); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -2952,7 +2952,7 @@ static int hide_exec(bContext *C, wmOperator *op) const bool invert = RNA_boolean_get(op->ptr, "unselected"); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -3041,7 +3041,7 @@ static int reveal_exec(bContext *C, wmOperator *op) bool changed_multi = false; uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; ListBase *editnurb = object_editcurve_get(obedit); @@ -3501,7 +3501,7 @@ static int subdivide_exec(bContext *C, wmOperator *op) View3D *v3d = CTX_wm_view3d(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -3600,7 +3600,7 @@ bool ED_curve_pick_vert( data.mval_fl[1] = vc->mval[1]; uint bases_len; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(vc->view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(vc->view_layer, vc->v3d, &bases_len); for (uint base_index = 0; base_index < bases_len; base_index++) { Base *base = bases[base_index]; data.is_changed = false; @@ -3782,7 +3782,7 @@ static int set_handle_type_exec(bContext *C, wmOperator *op) const int handle_type = RNA_enum_get(op->ptr, "type"); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -3840,7 +3840,7 @@ static int curve_normals_make_consistent_exec(bContext *C, wmOperator *op) const bool calc_length = RNA_boolean_get(op->ptr, "calc_length"); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -4263,7 +4263,7 @@ static int make_segment_exec(bContext *C, wmOperator *op) } status = {0}; uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -4573,7 +4573,7 @@ bool ED_curve_editnurb_select_pick(bContext *C, const int mval[2], bool extend, if (!extend && !deselect && !toggle) { uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, vc.v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob_iter = objects[ob_index]; @@ -4783,7 +4783,7 @@ static int spin_exec(bContext *C, wmOperator *op) unit_m4(viewmat); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = (Curve *)obedit->data; @@ -5393,7 +5393,7 @@ static int curve_extrude_exec(bContext *C, wmOperator *UNUSED(op)) View3D *v3d = CTX_wm_view3d(C); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -5542,7 +5542,7 @@ static int toggle_cyclic_exec(bContext *C, wmOperator *op) bool changed_multi = false; uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -5622,7 +5622,7 @@ static int duplicate_exec(bContext *C, wmOperator *op) int ok = -1; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -6084,7 +6084,7 @@ static int curve_delete_exec(bContext *C, wmOperator *op) eCurveElem_Types type = RNA_enum_get(op->ptr, "type"); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); bool changed_multi = false; for (uint ob_index = 0; ob_index < objects_len; ob_index++) { @@ -6188,7 +6188,7 @@ static int curve_dissolve_exec(bContext *C, wmOperator *UNUSED(op)) View3D *v3d = CTX_wm_view3d(C); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = (Curve *)obedit->data; @@ -6314,7 +6314,7 @@ static int curve_decimate_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = (Curve *)obedit->data; @@ -6552,7 +6552,7 @@ static int clear_tilt_exec(bContext *C, wmOperator *UNUSED(op)) View3D *v3d = CTX_wm_view3d(C); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; diff --git a/source/blender/editors/curve/editcurve_paint.c b/source/blender/editors/curve/editcurve_paint.c index 7f8091d66a7..f9d9c5a776f 100644 --- a/source/blender/editors/curve/editcurve_paint.c +++ b/source/blender/editors/curve/editcurve_paint.c @@ -796,7 +796,7 @@ static int curve_draw_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); ED_curve_deselect_all_multi(objects, objects_len); MEM_freeN(objects); } diff --git a/source/blender/editors/curve/editcurve_select.c b/source/blender/editors/curve/editcurve_select.c index 8bd19d42193..992c88a1492 100644 --- a/source/blender/editors/curve/editcurve_select.c +++ b/source/blender/editors/curve/editcurve_select.c @@ -429,7 +429,7 @@ static int de_select_first_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -461,7 +461,7 @@ static int de_select_last_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -497,7 +497,7 @@ static int de_select_all_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); View3D *v3d = CTX_wm_view3d(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); if (action == SEL_TOGGLE) { action = SEL_SELECT; @@ -565,7 +565,7 @@ static int select_linked_exec(bContext *C, wmOperator *UNUSED(op)) View3D *v3d = CTX_wm_view3d(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -745,7 +745,7 @@ static int select_next_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -779,7 +779,7 @@ static int select_previous_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -879,7 +879,7 @@ static int curve_select_more_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; curve_select_more(obedit); @@ -1076,7 +1076,7 @@ static int curve_select_less_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; curve_select_less(obedit); @@ -1152,7 +1152,7 @@ static int curve_select_random_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -1271,7 +1271,7 @@ static int select_nth_exec(bContext *C, wmOperator *op) WM_operator_properties_checker_interval_from_op(op, &op_params); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Curve *cu = obedit->data; @@ -1555,7 +1555,7 @@ static int curve_select_similar_exec(bContext *C, wmOperator *op) View3D *v3d = CTX_wm_view3d(C); int tot_nurbs_selected_all = 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; diff --git a/source/blender/editors/curve/editcurve_undo.c b/source/blender/editors/curve/editcurve_undo.c index ebf24446afc..ecc4ed8b602 100644 --- a/source/blender/editors/curve/editcurve_undo.c +++ b/source/blender/editors/curve/editcurve_undo.c @@ -220,7 +220,7 @@ static bool curve_undosys_step_encode(struct bContext *C, UndoStep *us_p) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__); us->elems_len = objects_len; diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h index 48bf390ee71..d5698ecadf7 100644 --- a/source/blender/editors/include/ED_armature.h +++ b/source/blender/editors/include/ED_armature.h @@ -48,6 +48,7 @@ struct Mesh; struct Object; struct ReportList; struct Scene; +struct View3D; struct ViewLayer; struct ViewContext; struct wmKeyConfig; @@ -154,7 +155,7 @@ void ED_armature_edit_deselect_all_multi(struct Object **objects, uint objects_l void ED_armature_edit_deselect_all_visible_multi(struct Object **objects, uint objects_len); bool ED_armature_pose_select_pick_with_buffer( - struct ViewLayer *view_layer, struct Base *base, const unsigned int *buffer, short hits, + struct ViewLayer *view_layer, struct View3D *v3d, struct Base *base, const unsigned int *buffer, short hits, bool extend, bool deselect, bool toggle, bool do_nearest); bool ED_armature_edit_select_pick( struct bContext *C, const int mval[2], bool extend, bool deselect, bool toggle); diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h index 1101c966118..a6be1c833eb 100644 --- a/source/blender/editors/include/ED_object.h +++ b/source/blender/editors/include/ED_object.h @@ -46,6 +46,7 @@ struct ShaderFxData; struct Object; struct ReportList; struct Scene; +struct View3D; struct ViewLayer; struct bConstraint; struct bContext; @@ -111,8 +112,8 @@ void ED_object_parent_clear(struct Object *ob, const int type); void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode); void ED_object_base_activate(struct bContext *C, struct Base *base); void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob); -bool ED_object_base_deselect_all_ex(struct ViewLayer *view_layer, int action, bool *r_any_visible); -bool ED_object_base_deselect_all(struct ViewLayer *view_layer, int action); +bool ED_object_base_deselect_all_ex(struct ViewLayer *view_layer, struct View3D *v3d, int action, bool *r_any_visible); +bool ED_object_base_deselect_all(struct ViewLayer *view_layer, struct View3D *v3d, int action); /* single object duplicate, if (dupflag == 0), fully linked, else it uses the flags given */ struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Base *base, int dupflag); diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h index 433c7c7fa48..f7d647bd89c 100644 --- a/source/blender/editors/include/ED_uvedit.h +++ b/source/blender/editors/include/ED_uvedit.h @@ -41,6 +41,7 @@ struct ImageUser; struct Main; struct Object; struct Scene; +struct View3D; struct ViewLayer; struct SpaceImage; struct bNode; diff --git a/source/blender/editors/lattice/editlattice_select.c b/source/blender/editors/lattice/editlattice_select.c index f342cefa362..bf5844cdafb 100644 --- a/source/blender/editors/lattice/editlattice_select.c +++ b/source/blender/editors/lattice/editlattice_select.c @@ -95,7 +95,7 @@ static int lattice_select_random_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Lattice *lt = ((Lattice *)obedit->data)->editlatt->latt; @@ -201,7 +201,7 @@ static int lattice_select_mirror_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -271,7 +271,7 @@ static int lattice_select_more_less(bContext *C, const bool select) uint objects_len; bool changed = false; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Lattice *lt = ((Lattice *)obedit->data)->editlatt->latt; @@ -387,7 +387,7 @@ static int lattice_select_all_exec(bContext *C, wmOperator *op) int action = RNA_enum_get(op->ptr, "action"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); if (action == SEL_TOGGLE) { action = SEL_SELECT; @@ -467,7 +467,7 @@ static int lattice_select_ungrouped_exec(bContext *C, wmOperator *op) const bool is_extend = RNA_boolean_get(op->ptr, "extend"); bool changed = false; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Lattice *lt = ((Lattice *)obedit->data)->editlatt->latt; @@ -566,7 +566,7 @@ static BPoint *findnearestLattvert(ViewContext *vc, int sel, Base **r_base) data.mval_fl[1] = vc->mval[1]; uint bases_len; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(vc->view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(vc->view_layer, vc->v3d, &bases_len); for (uint base_index = 0; base_index < bases_len; base_index++) { Base *base = bases[base_index]; data.is_changed = false; @@ -600,7 +600,7 @@ bool ED_lattice_select_pick(bContext *C, const int mval[2], bool extend, bool de if (!extend && !deselect && !toggle) { uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, vc.v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; ED_lattice_flags_set(ob, 0); diff --git a/source/blender/editors/lattice/editlattice_tools.c b/source/blender/editors/lattice/editlattice_tools.c index 01211a436a4..8cb3666c2af 100644 --- a/source/blender/editors/lattice/editlattice_tools.c +++ b/source/blender/editors/lattice/editlattice_tools.c @@ -73,11 +73,12 @@ static bool make_regular_poll(bContext *C) static int make_regular_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); const bool is_editmode = CTX_data_edit_object(C) != NULL; if (is_editmode) { uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; Lattice *lt = ob->data; @@ -94,7 +95,7 @@ static int make_regular_exec(bContext *C, wmOperator *UNUSED(op)) MEM_freeN(objects); } else { - FOREACH_SELECTED_OBJECT_BEGIN(view_layer, ob) { + FOREACH_SELECTED_OBJECT_BEGIN(view_layer, v3d, ob) { if (ob->type != OB_LATTICE) { continue; } @@ -218,7 +219,7 @@ static int lattice_flip_exec(bContext *C, wmOperator *op) bool changed = false; const eLattice_FlipAxes axis = RNA_enum_get(op->ptr, "axis"); - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Lattice *lt; diff --git a/source/blender/editors/lattice/editlattice_undo.c b/source/blender/editors/lattice/editlattice_undo.c index cbd89016b44..c1a10843460 100644 --- a/source/blender/editors/lattice/editlattice_undo.c +++ b/source/blender/editors/lattice/editlattice_undo.c @@ -157,7 +157,7 @@ static bool lattice_undosys_step_encode(struct bContext *C, UndoStep *us_p) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__); us->elems_len = objects_len; diff --git a/source/blender/editors/mesh/editmesh_bevel.c b/source/blender/editors/mesh/editmesh_bevel.c index 39bebc9a980..0202d52a263 100644 --- a/source/blender/editors/mesh/editmesh_bevel.c +++ b/source/blender/editors/mesh/editmesh_bevel.c @@ -245,7 +245,7 @@ static bool edbm_bevel_init(bContext *C, wmOperator *op, const bool is_modal) { uint ob_store_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &ob_store_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &ob_store_len); opdata->ob_store = MEM_malloc_arrayN(ob_store_len, sizeof(*opdata->ob_store), __func__); for (uint ob_index = 0; ob_index < ob_store_len; ob_index++) { Object *obedit = objects[ob_index]; diff --git a/source/blender/editors/mesh/editmesh_bisect.c b/source/blender/editors/mesh/editmesh_bisect.c index aaa46847495..0f6654119fe 100644 --- a/source/blender/editors/mesh/editmesh_bisect.c +++ b/source/blender/editors/mesh/editmesh_bisect.c @@ -130,7 +130,7 @@ static int mesh_bisect_invoke(bContext *C, wmOperator *op, const wmEvent *event) } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -299,7 +299,7 @@ static int mesh_bisect_exec(bContext *C, wmOperator *op) /* -------------------------------------------------------------------- */ uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(CTX_data_view_layer(C), &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(CTX_data_view_layer(C), CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; diff --git a/source/blender/editors/mesh/editmesh_extrude.c b/source/blender/editors/mesh/editmesh_extrude.c index a25b296830a..6389996b514 100644 --- a/source/blender/editors/mesh/editmesh_extrude.c +++ b/source/blender/editors/mesh/editmesh_extrude.c @@ -296,7 +296,7 @@ static int edbm_extrude_repeat_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { @@ -407,7 +407,7 @@ static int edbm_extrude_region_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -462,7 +462,7 @@ static int edbm_extrude_context_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -512,7 +512,7 @@ static int edbm_extrude_verts_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -559,7 +559,7 @@ static int edbm_extrude_edges_exec(bContext *C, wmOperator *op) const bool use_normal_flip = RNA_boolean_get(op->ptr, "use_normal_flip"); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -606,7 +606,7 @@ static int edbm_extrude_faces_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -669,7 +669,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, const w verts_len = 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, vc.v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; ED_view3d_viewcontext_init_object(&vc, obedit); diff --git a/source/blender/editors/mesh/editmesh_extrude_screw.c b/source/blender/editors/mesh/editmesh_extrude_screw.c index 3214f28412a..8787c88bc5b 100644 --- a/source/blender/editors/mesh/editmesh_extrude_screw.c +++ b/source/blender/editors/mesh/editmesh_extrude_screw.c @@ -76,7 +76,7 @@ static int edbm_screw_exec(bContext *C, wmOperator *op) uint objects_len = 0; ViewLayer *view_layer = CTX_data_view_layer(C); - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; diff --git a/source/blender/editors/mesh/editmesh_extrude_spin.c b/source/blender/editors/mesh/editmesh_extrude_spin.c index 848fe63cf8e..45f6229dc3f 100644 --- a/source/blender/editors/mesh/editmesh_extrude_spin.c +++ b/source/blender/editors/mesh/editmesh_extrude_spin.c @@ -85,7 +85,7 @@ static int edbm_spin_exec(bContext *C, wmOperator *op) } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; diff --git a/source/blender/editors/mesh/editmesh_inset.c b/source/blender/editors/mesh/editmesh_inset.c index 486203462a0..78c0c45576d 100644 --- a/source/blender/editors/mesh/editmesh_inset.c +++ b/source/blender/editors/mesh/editmesh_inset.c @@ -134,7 +134,7 @@ static bool edbm_inset_init(bContext *C, wmOperator *op, const bool is_modal) { uint ob_store_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &ob_store_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &ob_store_len); opdata->ob_store = MEM_malloc_arrayN(ob_store_len, sizeof(*opdata->ob_store), __func__); for (uint ob_index = 0; ob_index < ob_store_len; ob_index++) { Object *obedit = objects[ob_index]; diff --git a/source/blender/editors/mesh/editmesh_intersect.c b/source/blender/editors/mesh/editmesh_intersect.c index 044e1b8c9d0..a625d8949a6 100644 --- a/source/blender/editors/mesh/editmesh_intersect.c +++ b/source/blender/editors/mesh/editmesh_intersect.c @@ -187,7 +187,7 @@ static int edbm_intersect_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; uint isect_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -290,7 +290,7 @@ static int edbm_intersect_boolean_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; uint isect_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -686,7 +686,7 @@ static int edbm_face_split_by_edges_exec(bContext *C, wmOperator *UNUSED(op)) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c index b69609a9fa8..8efec7f4b68 100644 --- a/source/blender/editors/mesh/editmesh_loopcut.c +++ b/source/blender/editors/mesh/editmesh_loopcut.c @@ -359,7 +359,7 @@ static int loopcut_init(bContext *C, wmOperator *op, const wmEvent *event) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, CTX_wm_view3d(C), &objects_len); if (is_interactive) { for (uint ob_index = 0; ob_index < objects_len; ob_index++) { diff --git a/source/blender/editors/mesh/editmesh_path.c b/source/blender/editors/mesh/editmesh_path.c index c7f82a36eed..7f47d1b3dcc 100644 --- a/source/blender/editors/mesh/editmesh_path.c +++ b/source/blender/editors/mesh/editmesh_path.c @@ -614,7 +614,7 @@ static int edbm_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE { int base_index = -1; uint bases_len = 0; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, vc.v3d, &bases_len); if (EDBM_unified_findnearest(&vc, bases, bases_len, &base_index, &eve, &eed, &efa)) { basact = bases[base_index]; ED_view3d_viewcontext_init_object(&vc, basact->object); @@ -744,7 +744,7 @@ static int edbm_shortest_path_select_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); diff --git a/source/blender/editors/mesh/editmesh_polybuild.c b/source/blender/editors/mesh/editmesh_polybuild.c index c175102511a..6021f15e58f 100644 --- a/source/blender/editors/mesh/editmesh_polybuild.c +++ b/source/blender/editors/mesh/editmesh_polybuild.c @@ -71,10 +71,10 @@ static void edbm_selectmode_ensure(Scene *scene, BMEditMesh *em, short selectmod } /* Could make public, for now just keep here. */ -static void edbm_flag_disable_all_multi(ViewLayer *view_layer, const char hflag) +static void edbm_flag_disable_all_multi(ViewLayer *view_layer, View3D *v3d, const char hflag) { uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob_iter = objects[ob_index]; BMEditMesh *em_iter = BKE_editmesh_from_object(ob_iter); @@ -106,7 +106,7 @@ static bool edbm_preselect_or_active( Object *obedit = NULL; { uint bases_len; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(view_layer, CTX_wm_view3d(C), &bases_len); if (object_index < bases_len) { base = bases[object_index]; obedit = base->object; @@ -191,7 +191,7 @@ static int edbm_polybuild_face_at_cursor_invoke( mul_m4_v3(vc.obedit->imat, center); BMVert *v_new = BM_vert_create(bm, center, NULL, BM_CREATE_NOP); - edbm_flag_disable_all_multi(vc.view_layer, BM_ELEM_SELECT); + edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT); BM_vert_select_set(bm, v_new, true); BM_select_history_store(bm, v_new); changed = true; @@ -215,7 +215,7 @@ static int edbm_polybuild_face_at_cursor_invoke( // BMFace *f_new = BM_face_create_verts(bm, v_tri, 3, f_reference, BM_CREATE_NOP, true); - edbm_flag_disable_all_multi(vc.view_layer, BM_ELEM_SELECT); + edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT); BM_vert_select_set(bm, v_tri[2], true); BM_select_history_store(bm, v_tri[2]); changed = true; @@ -267,7 +267,7 @@ static int edbm_polybuild_face_at_cursor_invoke( // BMFace *f_new = BM_face_create_verts(bm, v_quad, 4, f_reference, BM_CREATE_NOP, true); - edbm_flag_disable_all_multi(vc.view_layer, BM_ELEM_SELECT); + edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT); BM_vert_select_set(bm, v_quad[2], true); BM_select_history_store(bm, v_quad[2]); changed = true; @@ -362,7 +362,7 @@ static int edbm_polybuild_split_at_cursor_invoke( BMVert *v_new = BM_edge_split(bm, e_act, e_act->v1, NULL, CLAMPIS(fac, 0.0f, 1.0f)); copy_v3_v3(v_new->co, center); - edbm_flag_disable_all_multi(vc.view_layer, BM_ELEM_SELECT); + edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT); BM_vert_select_set(bm, v_new, true); BM_select_history_store(bm, v_new); changed = true; @@ -464,7 +464,7 @@ static int edbm_polybuild_dissolve_at_cursor_invoke( } if (changed) { - edbm_flag_disable_all_multi(vc.view_layer, BM_ELEM_SELECT); + edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT); EDBM_mesh_normals_update(em); EDBM_update_generic(em, true, true); diff --git a/source/blender/editors/mesh/editmesh_rip.c b/source/blender/editors/mesh/editmesh_rip.c index 9d6c0267cc2..fb380dfaaa9 100644 --- a/source/blender/editors/mesh/editmesh_rip.c +++ b/source/blender/editors/mesh/editmesh_rip.c @@ -1011,7 +1011,7 @@ static int edbm_rip_invoke(bContext *C, wmOperator *op, const wmEvent *event) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); const bool do_fill = RNA_boolean_get(op->ptr, "use_fill"); bool no_vertex_selected = true; diff --git a/source/blender/editors/mesh/editmesh_rip_edge.c b/source/blender/editors/mesh/editmesh_rip_edge.c index c4a1ee9134d..ef07aac0ab2 100644 --- a/source/blender/editors/mesh/editmesh_rip_edge.c +++ b/source/blender/editors/mesh/editmesh_rip_edge.c @@ -55,7 +55,7 @@ static int edbm_rip_edge_invoke(bContext *C, wmOperator *UNUSED(op), const wmEve RegionView3D *rv3d = CTX_wm_region_view3d(C); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 1a32a36bdb4..d0e92587968 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -1555,7 +1555,7 @@ static int edbm_loop_multiselect_exec(bContext *C, wmOperator *op) const bool is_ring = RNA_boolean_get(op->ptr, "ring"); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -1711,7 +1711,7 @@ static bool mouse_mesh_loop(bContext *C, const int mval[2], bool extend, bool de em_original->selectmode = SCE_SELECT_EDGE; uint bases_len; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, vc.v3d, &bases_len); { int base_index = -1; @@ -1930,7 +1930,7 @@ static int edbm_select_all_exec(bContext *C, wmOperator *op) int action = RNA_enum_get(op->ptr, "action"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); if (action == SEL_TOGGLE) { action = SEL_SELECT; @@ -1995,7 +1995,7 @@ static int edbm_faces_select_interior_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -2052,7 +2052,7 @@ bool EDBM_select_pick(bContext *C, const int mval[2], bool extend, bool deselect vc.mval[1] = mval[1]; uint bases_len = 0; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, vc.v3d, &bases_len); bool ok = false; @@ -2463,7 +2463,7 @@ bool EDBM_selectmode_toggle( } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob_iter = objects[ob_index]; @@ -2806,7 +2806,7 @@ static int edbm_select_linked_exec(bContext *C, wmOperator *op) #endif uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3138,7 +3138,7 @@ static int edbm_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmE em_setup_viewcontext(C, &vc); uint bases_len; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(vc.view_layer, vc.v3d, &bases_len); { bool has_edges = false; @@ -3270,7 +3270,7 @@ static int edbm_select_face_by_sides_exec(bContext *C, wmOperator *op) const bool extend = RNA_boolean_get(op->ptr, "extend"); const int numverts = RNA_int_get(op->ptr, "number"); const int type = RNA_enum_get(op->ptr, "type"); - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3359,7 +3359,7 @@ static int edbm_select_loose_exec(bContext *C, wmOperator *op) const bool extend = RNA_boolean_get(op->ptr, "extend"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3453,7 +3453,7 @@ static int edbm_select_mirror_exec(bContext *C, wmOperator *op) int tot_mirr = 0, tot_fail = 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3521,7 +3521,7 @@ static int edbm_select_more_exec(bContext *C, wmOperator *op) const bool use_face_step = RNA_boolean_get(op->ptr, "use_face_step"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -3572,7 +3572,7 @@ static int edbm_select_less_exec(bContext *C, wmOperator *op) const bool use_face_step = RNA_boolean_get(op->ptr, "use_face_step"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -3809,7 +3809,7 @@ static int edbm_select_nth_exec(bContext *C, wmOperator *op) bool found_active_elt = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3883,7 +3883,7 @@ static int edbm_select_sharp_edges_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3952,7 +3952,7 @@ static int edbm_select_linked_flat_faces_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); const float angle_limit_cos = cosf(RNA_float_get(op->ptr, "sharpness")); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { @@ -4058,7 +4058,7 @@ static int edbm_select_non_manifold_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -4163,7 +4163,7 @@ static int edbm_select_random_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -4270,7 +4270,7 @@ static int edbm_select_ungrouped_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -4387,7 +4387,7 @@ static int edbm_select_axis_exec(bContext *C, wmOperator *op) } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit_iter = objects[ob_index]; BMEditMesh *em_iter = BKE_editmesh_from_object(obedit_iter); @@ -4476,7 +4476,7 @@ static int edbm_region_to_loop_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -4701,7 +4701,7 @@ static int edbm_loop_to_region_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); diff --git a/source/blender/editors/mesh/editmesh_select_similar.c b/source/blender/editors/mesh/editmesh_select_similar.c index 1124b58e116..89e821c52d8 100644 --- a/source/blender/editors/mesh/editmesh_select_similar.c +++ b/source/blender/editors/mesh/editmesh_select_similar.c @@ -197,7 +197,7 @@ static int similar_face_select_exec(bContext *C, wmOperator *op) int tot_faces_selected_all = 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; @@ -683,7 +683,7 @@ static int similar_edge_select_exec(bContext *C, wmOperator *op) int tot_edges_selected_all = 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; @@ -1038,7 +1038,7 @@ static int similar_vert_select_exec(bContext *C, wmOperator *op) int tot_verts_selected_all = 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 72cde69b0bc..98dffe2bf85 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -117,7 +117,7 @@ static int edbm_subdivide_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -254,7 +254,7 @@ static int edbm_subdivide_edge_ring_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); struct EdgeRingOpSubdProps op_props; mesh_operator_edgering_props_get(op, &op_props); @@ -312,7 +312,7 @@ static int edbm_unsubdivide_exec(bContext *C, wmOperator *op) const int iterations = RNA_int_get(op->ptr, "iterations"); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -428,7 +428,7 @@ static int edbm_delete_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); bool changed_multi = false; for (uint ob_index = 0; ob_index < objects_len; ob_index++) { @@ -549,7 +549,7 @@ static int edbm_delete_loose_exec(bContext *C, wmOperator *op) int totelem_old[3]; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); EDBM_mesh_stats_multi(objects, objects_len, totelem_old, totelem_old_sel); @@ -649,7 +649,7 @@ static int edbm_collapse_edge_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -871,7 +871,7 @@ static int edbm_add_edge_face_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -978,7 +978,7 @@ static int edbm_mark_seam_exec(bContext *C, wmOperator *op) const bool clear = RNA_boolean_get(op->ptr, "clear"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -1051,7 +1051,7 @@ static int edbm_mark_sharp_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -1188,7 +1188,7 @@ static int edbm_vert_connect_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; uint failed_objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -1442,7 +1442,7 @@ static int edbm_vert_connect_path_exec(bContext *C, wmOperator *op) uint objects_len = 0; uint failed_selection_order_len = 0; uint failed_connect_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -1519,7 +1519,7 @@ static int edbm_vert_connect_concave_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -1569,7 +1569,7 @@ static int edbm_vert_connect_nonplaner_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); const float angle_limit = RNA_float_get(op->ptr, "angle_limit"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -1627,7 +1627,7 @@ static int edbm_face_make_planar_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); const int repeat = RNA_int_get(op->ptr, "repeat"); const float fac = RNA_float_get(op->ptr, "factor"); @@ -1682,7 +1682,7 @@ static int edbm_edge_split_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -1735,7 +1735,7 @@ static int edbm_duplicate_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -1809,7 +1809,7 @@ static int edbm_flip_normals_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -1868,7 +1868,7 @@ static int edbm_edge_rotate_selected_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -1986,7 +1986,7 @@ static int edbm_hide_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2037,7 +2037,7 @@ static int edbm_reveal_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2078,7 +2078,7 @@ static int edbm_normals_make_consistent_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2139,7 +2139,7 @@ static int edbm_do_smooth_vertex_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Mesh *me = obedit->data; @@ -2254,7 +2254,7 @@ static int edbm_do_smooth_laplacian_vertex_exec(bContext *C, wmOperator *op) } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2377,7 +2377,7 @@ static int edbm_faces_shade_smooth_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2419,7 +2419,7 @@ static int edbm_faces_shade_flat_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2464,7 +2464,7 @@ static int edbm_rotate_uvs_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2496,7 +2496,7 @@ static int edbm_reverse_uvs_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2531,7 +2531,7 @@ static int edbm_rotate_colors_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; @@ -2567,7 +2567,7 @@ static int edbm_reverse_colors_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; @@ -2776,7 +2776,7 @@ static int edbm_merge_exec(bContext *C, wmOperator *op) View3D *v3d = CTX_wm_view3d(C); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); const int type = RNA_enum_get(op->ptr, "type"); const bool uvs = RNA_boolean_get(op->ptr, "uvs"); @@ -2924,7 +2924,7 @@ static int edbm_remove_doubles_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3052,7 +3052,7 @@ static int edbm_shape_propagate_to_all_exec(bContext *C, wmOperator *op) int tot_selected_verts_objects = 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Mesh *me = obedit->data; @@ -3147,7 +3147,7 @@ static int edbm_blend_from_shape_exec(bContext *C, wmOperator *op) int tot_selected_verts_objects = 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Mesh *me = obedit->data; @@ -3292,7 +3292,7 @@ static int edbm_solidify_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -3978,7 +3978,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op) if (ED_operator_editmesh(C)) { uint bases_len = 0; uint empty_selection_len = 0; - Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, &bases_len); + Base **bases = BKE_view_layer_array_from_bases_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &bases_len); for (uint bs_index = 0; bs_index < bases_len; bs_index++) { Base *base = bases[bs_index]; BMEditMesh *em = BKE_editmesh_from_object(base->object); @@ -4122,7 +4122,7 @@ static int edbm_fill_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -4352,7 +4352,7 @@ static int edbm_fill_grid_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -4474,7 +4474,7 @@ static int edbm_fill_holes_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -4529,7 +4529,7 @@ static int edbm_beautify_fill_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); const float angle_max = M_PI; const float angle_limit = RNA_float_get(op->ptr, "angle_limit"); @@ -4612,7 +4612,7 @@ static int edbm_poke_face_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -4685,7 +4685,7 @@ static int edbm_quads_convert_to_tris_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -4758,7 +4758,7 @@ static int edbm_tris_convert_to_quads_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); bool is_face_pair; @@ -4888,7 +4888,7 @@ static int edbm_decimate_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -5091,7 +5091,7 @@ static int edbm_dissolve_verts_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -5146,7 +5146,7 @@ static int edbm_dissolve_edges_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -5200,7 +5200,7 @@ static int edbm_dissolve_faces_exec(bContext *C, wmOperator *op) const bool use_verts = RNA_boolean_get(op->ptr, "use_verts"); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -5307,7 +5307,7 @@ static int edbm_dissolve_limited_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -5401,7 +5401,7 @@ static int edbm_dissolve_degenerate_exec(bContext *C, wmOperator *op) int totelem_new[3] = {0, 0, 0}; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -5474,7 +5474,7 @@ static int edbm_delete_edgeloop_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -5547,7 +5547,7 @@ static int edbm_split_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -6099,7 +6099,7 @@ static int edbm_sort_elements_exec(bContext *C, wmOperator *op) } uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; @@ -6362,7 +6362,7 @@ static int edbm_bridge_edge_loops_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -6433,7 +6433,7 @@ static int edbm_wireframe_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -6521,7 +6521,7 @@ static int edbm_offset_edgeloop_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -6602,7 +6602,7 @@ static int edbm_convex_hull_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -6723,7 +6723,7 @@ static int mesh_symmetrize_exec(bContext *C, wmOperator *op) const float thresh = RNA_float_get(op->ptr, "threshold"); ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -6805,7 +6805,7 @@ static int mesh_symmetry_snap_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -6942,7 +6942,7 @@ static int edbm_mark_freestyle_edge_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -7021,7 +7021,7 @@ static int edbm_mark_freestyle_face_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -8142,7 +8142,7 @@ static int edbm_set_normals_from_faces_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; diff --git a/source/blender/editors/mesh/editmesh_undo.c b/source/blender/editors/mesh/editmesh_undo.c index 26f3c17a97c..b4f3ebfe637 100644 --- a/source/blender/editors/mesh/editmesh_undo.c +++ b/source/blender/editors/mesh/editmesh_undo.c @@ -706,7 +706,7 @@ static bool mesh_undosys_step_encode(struct bContext *C, UndoStep *us_p) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__); us->elems_len = objects_len; diff --git a/source/blender/editors/metaball/editmball_undo.c b/source/blender/editors/metaball/editmball_undo.c index 7045025e227..c85f046ce71 100644 --- a/source/blender/editors/metaball/editmball_undo.c +++ b/source/blender/editors/metaball/editmball_undo.c @@ -163,7 +163,7 @@ static bool mball_undosys_step_encode(struct bContext *C, UndoStep *us_p) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); us->elems = MEM_callocN(sizeof(*us->elems) * objects_len, __func__); us->elems_len = objects_len; diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c index 6d1ba2d3fe0..07a41bd385e 100644 --- a/source/blender/editors/metaball/mball_edit.c +++ b/source/blender/editors/metaball/mball_edit.c @@ -132,7 +132,7 @@ static int mball_select_all_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); if (action == SEL_TOGGLE) { action = BKE_mball_is_any_selected_multi(objects, objects_len) ? @@ -312,7 +312,7 @@ static int mball_select_similar_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); tot_mball_selected_all = BKE_mball_select_count_multi(objects, objects_len); @@ -429,7 +429,7 @@ static int select_random_metaelems_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; MetaBall *mb = (MetaBall *)obedit->data; @@ -490,7 +490,7 @@ static int duplicate_metaelems_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; MetaBall *mb = (MetaBall *)obedit->data; @@ -541,7 +541,7 @@ static int delete_metaelems_exec(bContext *C, wmOperator *UNUSED(op)) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; MetaBall *mb = (MetaBall *)obedit->data; @@ -690,7 +690,7 @@ bool ED_mball_select_pick(bContext *C, const int mval[2], bool extend, bool dese &vc, buffer, MAXPICKBUF, &rect, VIEW3D_SELECT_PICK_NEAREST, VIEW3D_SELECT_FILTER_NOP); - FOREACH_BASE_IN_EDIT_MODE_BEGIN (vc.view_layer, base) { + FOREACH_BASE_IN_EDIT_MODE_BEGIN (vc.view_layer, vc.v3d, base) { ED_view3d_viewcontext_init_object(&vc, base->object); MetaBall *mb = (MetaBall *)base->object->data; MetaElem *ml, *ml_act = NULL; @@ -752,7 +752,7 @@ bool ED_mball_select_pick(bContext *C, const int mval[2], bool extend, bool dese if (ml_act) { if (!extend && !deselect && !toggle) { uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc.view_layer, vc.v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob_iter = objects[ob_index]; diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index c376b0cf78f..5852fcff7e9 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -682,6 +682,7 @@ static int editmode_toggle_exec(bContext *C, wmOperator *op) Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); Object *obact = OBACT(view_layer); if (!is_mode_set) { @@ -693,7 +694,7 @@ static int editmode_toggle_exec(bContext *C, wmOperator *op) if (!is_mode_set) { ED_object_editmode_enter(C, EM_WAITCURSOR); if (obact->mode & mode_flag) { - FOREACH_SELECTED_OBJECT_BEGIN(view_layer, ob) + FOREACH_SELECTED_OBJECT_BEGIN(view_layer, v3d, ob) { if ((ob != obact) && (ob->type == obact->type)) { ED_object_editmode_enter_ex(bmain, scene, ob, EM_WAITCURSOR | EM_NO_CONTEXT); @@ -805,7 +806,8 @@ static int posemode_exec(bContext *C, wmOperator *op) if (ok) { struct Main *bmain = CTX_data_main(C); ViewLayer *view_layer = CTX_data_view_layer(C); - FOREACH_SELECTED_OBJECT_BEGIN(view_layer, ob) + View3D *v3d = CTX_wm_view3d(C); + FOREACH_SELECTED_OBJECT_BEGIN(view_layer, v3d, ob) { if ((ob != obact) && (ob->type == OB_ARMATURE) && diff --git a/source/blender/editors/object/object_random.c b/source/blender/editors/object/object_random.c index 918c1c8d8e7..8291b68f15f 100644 --- a/source/blender/editors/object/object_random.c +++ b/source/blender/editors/object/object_random.c @@ -109,7 +109,7 @@ static int object_rand_verts_exec(bContext *C, wmOperator *op) bool changed_multi = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, &objects_len, ob_mode); + Object **objects = BKE_view_layer_array_from_objects_in_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len, ob_mode); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob_iter = objects[ob_index]; diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c index 10e9b58b38b..c4538a8951f 100644 --- a/source/blender/editors/object/object_select.c +++ b/source/blender/editors/object/object_select.c @@ -138,11 +138,14 @@ void ED_object_base_activate(bContext *C, Base *base) DEG_id_tag_update(&CTX_data_scene(C)->id, DEG_TAG_SELECT_UPDATE); } -bool ED_object_base_deselect_all_ex(ViewLayer *view_layer, int action, bool *r_any_visible) +bool ED_object_base_deselect_all_ex(ViewLayer *view_layer, View3D *v3d, int action, bool *r_any_visible) { if (action == SEL_TOGGLE) { action = SEL_SELECT; - FOREACH_VISIBLE_BASE_BEGIN(view_layer, base) { + FOREACH_VISIBLE_BASE_BEGIN(view_layer, v3d, base) { + if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) { + continue; + } if ((base->flag & BASE_SELECTED) != 0) { action = SEL_DESELECT; break; @@ -153,7 +156,10 @@ bool ED_object_base_deselect_all_ex(ViewLayer *view_layer, int action, bool *r_a bool any_visible = false; bool changed = false; - FOREACH_VISIBLE_BASE_BEGIN(view_layer, base) { + FOREACH_VISIBLE_BASE_BEGIN(view_layer, v3d, base) { + if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) { + continue; + } switch (action) { case SEL_SELECT: if ((base->flag & BASE_SELECTED) == 0) { @@ -188,9 +194,9 @@ bool ED_object_base_deselect_all_ex(ViewLayer *view_layer, int action, bool *r_a } -bool ED_object_base_deselect_all(ViewLayer *view_layer, int action) +bool ED_object_base_deselect_all(ViewLayer *view_layer, View3D *v3d, int action) { - return ED_object_base_deselect_all_ex(view_layer, action, NULL); + return ED_object_base_deselect_all_ex(view_layer, v3d, action, NULL); } /********************** Jump To Object Utilities **********************/ @@ -258,6 +264,7 @@ bool ED_object_jump_to_object( bContext *C, Object *ob, const bool UNUSED(reveal_hidden)) { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); Base *base = BKE_view_layer_base_find(view_layer, ob); if (base == NULL) { @@ -269,7 +276,7 @@ bool ED_object_jump_to_object( if (view_layer->basact != base || !(base->flag & BASE_SELECTED)) { /* Select if not selected. */ if (!(base->flag & BASE_SELECTED)) { - ED_object_base_deselect_all(view_layer, SEL_DESELECT); + ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT); if (base->flag & BASE_VISIBLE) { ED_object_base_select(base, BA_SELECT); @@ -388,13 +395,14 @@ static bool objects_selectable_poll(bContext *C) static int object_select_by_type_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); short obtype, extend; obtype = RNA_enum_get(op->ptr, "type"); extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - ED_object_base_deselect_all(view_layer, SEL_DESELECT); + ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT); } CTX_DATA_BEGIN (C, Base *, base, visible_bases) @@ -610,6 +618,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); Object *ob; int nr = RNA_enum_get(op->ptr, "type"); bool changed = false, extend; @@ -617,7 +626,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - ED_object_base_deselect_all(view_layer, SEL_DESELECT); + ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT); } ob = OBACT(view_layer); @@ -981,6 +990,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); Object *ob; const int type = RNA_enum_get(op->ptr, "type"); bool changed = false, extend; @@ -988,7 +998,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op) extend = RNA_boolean_get(op->ptr, "extend"); if (extend == 0) { - changed = ED_object_base_deselect_all(view_layer, SEL_DESELECT); + changed = ED_object_base_deselect_all(view_layer, v3d, SEL_DESELECT); } ob = OBACT(view_layer); @@ -1073,10 +1083,11 @@ void OBJECT_OT_select_grouped(wmOperatorType *ot) static int object_select_all_exec(bContext *C, wmOperator *op) { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); int action = RNA_enum_get(op->ptr, "action"); bool any_visible = false; - bool changed = ED_object_base_deselect_all_ex(view_layer, action, &any_visible); + bool changed = ED_object_base_deselect_all_ex(view_layer, v3d, action, &any_visible); if (changed) { Scene *scene = CTX_data_scene(C); diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c index 1c7375c08b1..1a0c129e23a 100644 --- a/source/blender/editors/object/object_vgroup.c +++ b/source/blender/editors/object/object_vgroup.c @@ -3126,7 +3126,7 @@ static int vertex_group_smooth_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c index 1cfe34c86a1..cb7d4f1fee9 100644 --- a/source/blender/editors/screen/screen_context.c +++ b/source/blender/editors/screen/screen_context.c @@ -93,6 +93,7 @@ const char *screen_context_dir[] = { int ed_screen_context(const bContext *C, const char *member, bContextDataResult *result) { wmWindow *win = CTX_wm_window(C); + View3D *v3d = CTX_wm_view3d(C); /* This may be NULL in a lot of cases. */ bScreen *sc = CTX_wm_screen(C); ScrArea *sa = CTX_wm_area(C); Scene *scene = WM_window_get_active_scene(win); @@ -109,7 +110,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } else if (CTX_data_equals(member, "visible_objects")) { - FOREACH_VISIBLE_OBJECT_BEGIN(view_layer, ob) + FOREACH_VISIBLE_OBJECT_BEGIN(view_layer, v3d, ob) { CTX_data_id_list_add(result, &ob->id); } @@ -119,6 +120,15 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } else if (CTX_data_equals(member, "selectable_objects")) { for (Base *base = view_layer->object_bases.first; base; base = base->next) { + if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) { + continue; + } + if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) { + continue; + } + if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) { + continue; + } if (((base->flag & BASE_VISIBLE) != 0) && ((base->flag & BASE_SELECTABLE) != 0)) { CTX_data_id_list_add(result, &base->object->id); } @@ -127,7 +137,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } else if (CTX_data_equals(member, "selected_objects")) { - FOREACH_SELECTED_OBJECT_BEGIN(view_layer, ob) + FOREACH_SELECTED_OBJECT_BEGIN(view_layer, v3d, ob) { CTX_data_id_list_add(result, &ob->id); } @@ -136,7 +146,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } else if (CTX_data_equals(member, "selected_editable_objects")) { - FOREACH_SELECTED_OBJECT_BEGIN(view_layer, ob) + FOREACH_SELECTED_OBJECT_BEGIN(view_layer, v3d, ob) { if (0 == BKE_object_is_libdata(ob)) { CTX_data_id_list_add(result, &ob->id); @@ -148,7 +158,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } else if (CTX_data_equals(member, "editable_objects")) { /* Visible + Editable, but not necessarily selected */ - FOREACH_VISIBLE_OBJECT_BEGIN(view_layer, ob) + FOREACH_VISIBLE_OBJECT_BEGIN(view_layer, v3d, ob) { if (0 == BKE_object_is_libdata(ob)) { CTX_data_id_list_add(result, &ob->id); @@ -159,7 +169,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult return 1; } else if ( CTX_data_equals(member, "visible_bases")) { - FOREACH_VISIBLE_BASE_BEGIN(view_layer, base) + FOREACH_VISIBLE_BASE_BEGIN(view_layer, v3d, base) { CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } @@ -169,6 +179,15 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } else if (CTX_data_equals(member, "selectable_bases")) { for (Base *base = view_layer->object_bases.first; base; base = base->next) { + if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) { + continue; + } + if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) { + continue; + } + if (v3d && ((v3d->object_type_exclude_select & (1 << base->object->type)) != 0)) { + continue; + } if ((base->flag & BASE_VISIBLE) && (base->flag & BASE_SELECTABLE) != 0) { CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } @@ -178,6 +197,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } else if (CTX_data_equals(member, "selected_bases")) { for (Base *base = view_layer->object_bases.first; base; base = base->next) { + if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) { + continue; + } + if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) { + continue; + } if ((base->flag & BASE_SELECTED) != 0) { CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); } @@ -187,6 +212,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } else if (CTX_data_equals(member, "selected_editable_bases")) { for (Base *base = view_layer->object_bases.first; base; base = base->next) { + if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) { + continue; + } + if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) { + continue; + } if ((base->flag & BASE_SELECTED) != 0) { if (0 == BKE_object_is_libdata(base->object)) { CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); @@ -199,6 +230,12 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult else if (CTX_data_equals(member, "editable_bases")) { /* Visible + Editable, but not necessarily selected */ for (Base *base = view_layer->object_bases.first; base; base = base->next) { + if (v3d && v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) { + continue; + } + if (v3d && ((v3d->object_type_exclude_viewport & (1 << base->object->type)) != 0)) { + continue; + } if ((base->flag & BASE_VISIBLE) != 0) { if (0 == BKE_object_is_libdata(base->object)) { CTX_data_list_add(result, &scene->id, &RNA_ObjectBase, base); @@ -215,7 +252,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if (arm && arm->edbo) { uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint i = 0; i < objects_len; i++) { Object *ob = objects[i]; arm = ob->data; @@ -266,7 +303,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult if (arm && arm->edbo) { uint objects_len; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint i = 0; i < objects_len; i++) { Object *ob = objects[i]; arm = ob->data; @@ -319,7 +356,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } FOREACH_PCHAN_SELECTED_IN_OBJECT_END; } else if (obact->mode & OB_MODE_POSE) { - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, OB_MODE_POSE, ob_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_MODE_POSE, ob_iter) { FOREACH_PCHAN_VISIBLE_IN_OBJECT_BEGIN (ob_iter, pchan) { CTX_data_list_add(result, &ob_iter->id, &RNA_PoseBone, pchan); } FOREACH_PCHAN_VISIBLE_IN_OBJECT_END; @@ -338,7 +375,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult } FOREACH_PCHAN_SELECTED_IN_OBJECT_END; } else if (obact->mode & OB_MODE_POSE) { - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, OB_MODE_POSE, ob_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer, v3d, OB_MODE_POSE, ob_iter) { FOREACH_PCHAN_SELECTED_IN_OBJECT_BEGIN (ob_iter, pchan) { CTX_data_list_add(result, &ob_iter->id, &RNA_PoseBone, pchan); } FOREACH_PCHAN_SELECTED_IN_OBJECT_END; diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index c842ac07eef..2169040578a 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -398,7 +398,7 @@ static void stats_update(Depsgraph *depsgraph, ViewLayer *view_layer) if (obedit) { /* Edit Mode */ - FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, ob->mode, ob_iter) + FOREACH_OBJECT_IN_MODE_BEGIN(view_layer, ((View3D *)NULL), ob->mode, ob_iter) { stats_object_edit(ob_iter, &stats); } diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c index abb6fed965e..c3a02ecb1a2 100644 --- a/source/blender/editors/space_view3d/view3d_edit.c +++ b/source/blender/editors/space_view3d/view3d_edit.c @@ -2853,13 +2853,13 @@ static int viewselected_exec(bContext *C, wmOperator *op) } else if (obedit) { /* only selected */ - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer_eval, obedit->mode, ob_eval_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer_eval, v3d, obedit->mode, ob_eval_iter) { ok |= ED_view3d_minmax_verts(ob_eval_iter, min, max); } FOREACH_OBJECT_IN_MODE_END; } else if (ob_eval && (ob_eval->mode & OB_MODE_POSE)) { - FOREACH_OBJECT_IN_MODE_BEGIN (view_layer_eval, ob_eval->mode, ob_eval_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (view_layer_eval, v3d, ob_eval->mode, ob_eval_iter) { ok |= BKE_pose_minmax(ob_eval_iter, min, max, true, true); } FOREACH_OBJECT_IN_MODE_END; diff --git a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c index 6cd94830fe9..be07928d5fc 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c @@ -107,12 +107,13 @@ static int gizmo_preselect_elem_test_select( { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); if (((gz_ele->bases)) == NULL || (gz_ele->bases[0] != view_layer->basact)) { MEM_SAFE_FREE(gz_ele->bases); gz_ele->bases = BKE_view_layer_array_from_bases_in_edit_mode( - view_layer, &gz_ele->bases_len); + view_layer, v3d, &gz_ele->bases_len); } } @@ -298,12 +299,13 @@ static int gizmo_preselect_edgering_test_select( { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); if (((gz_ring->bases)) == NULL || (gz_ring->bases[0] != view_layer->basact)) { MEM_SAFE_FREE(gz_ring->bases); gz_ring->bases = BKE_view_layer_array_from_bases_in_edit_mode( - view_layer, &gz_ring->bases_len); + view_layer, v3d, &gz_ring->bases_len); } } diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index 05f2d8f67e1..9f77f671a7d 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -171,10 +171,12 @@ void VIEW3D_OT_select_box(struct wmOperatorType *ot); void VIEW3D_OT_select_lasso(struct wmOperatorType *ot); void VIEW3D_OT_select_menu(struct wmOperatorType *ot); +/* view3d_view.c */ void VIEW3D_OT_smoothview(struct wmOperatorType *ot); void VIEW3D_OT_camera_to_view(struct wmOperatorType *ot); void VIEW3D_OT_camera_to_view_selected(struct wmOperatorType *ot); void VIEW3D_OT_object_as_camera(struct wmOperatorType *ot); +void VIEW3D_OT_localview(struct wmOperatorType *ot); bool ED_view3d_boundbox_clip_ex(const RegionView3D *rv3d, const struct BoundBox *bb, float obmat[4][4]); bool ED_view3d_boundbox_clip(RegionView3D *rv3d, const struct BoundBox *bb); diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 2dbe0a0b843..8092dc9f0f7 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -204,6 +204,7 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_camera_to_view); WM_operatortype_append(VIEW3D_OT_camera_to_view_selected); WM_operatortype_append(VIEW3D_OT_object_as_camera); + WM_operatortype_append(VIEW3D_OT_localview); WM_operatortype_append(VIEW3D_OT_fly); WM_operatortype_append(VIEW3D_OT_walk); WM_operatortype_append(VIEW3D_OT_navigate); diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index f973f84cf6f..aafe931ff07 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -456,7 +456,7 @@ static Base **do_pose_tag_select_op_prepare(ViewContext *vc, uint *r_bases_len) { Base **bases = NULL; BLI_array_declare(bases); - FOREACH_BASE_IN_MODE_BEGIN (vc->view_layer, OB_MODE_POSE, base_iter) { + FOREACH_BASE_IN_MODE_BEGIN (vc->view_layer, vc->v3d, OB_MODE_POSE, base_iter) { Object *ob_iter = base_iter->object; bArmature *arm = ob_iter->data; for (bPoseChannel *pchan = ob_iter->pose->chanbase.first; pchan; pchan = pchan->next) { @@ -1001,7 +1001,7 @@ static void view3d_lasso_select( } else { /* Edit Mode */ - FOREACH_OBJECT_IN_MODE_BEGIN (vc->view_layer, ob->mode, ob_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (vc->view_layer, vc->v3d, ob->mode, ob_iter) { ED_view3d_viewcontext_init_object(vc, ob_iter); switch (vc->obedit->type) { @@ -1729,7 +1729,7 @@ static bool ed_object_select_pick( } } else if (ED_armature_pose_select_pick_with_buffer( - view_layer, basact, buffer, hits, extend, deselect, toggle, do_nearest)) + view_layer, v3d, basact, buffer, hits, extend, deselect, toggle, do_nearest)) { /* then bone is found */ @@ -2252,7 +2252,7 @@ static int do_armature_box_select( VIEW3D_SELECT_ALL, VIEW3D_SELECT_FILTER_NOP); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc->view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(vc->view_layer, vc->v3d, &objects_len); /* clear flag we use to detect point was affected */ for (uint ob_index = 0; ob_index < objects_len; ob_index++) { @@ -2531,7 +2531,7 @@ static int view3d_box_select_exec(bContext *C, wmOperator *op) if (vc.obedit) { - FOREACH_OBJECT_IN_MODE_BEGIN (vc.view_layer, vc.obedit->mode, ob_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (vc.view_layer, vc.v3d, vc.obedit->mode, ob_iter) { ED_view3d_viewcontext_init_object(&vc, ob_iter); switch (vc.obedit->type) { @@ -3264,7 +3264,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op) { view3d_operator_needs_opengl(C); - FOREACH_OBJECT_IN_MODE_BEGIN (vc.view_layer, obact->mode, ob_iter) { + FOREACH_OBJECT_IN_MODE_BEGIN (vc.view_layer, vc.v3d, obact->mode, ob_iter) { ED_view3d_viewcontext_init_object(&vc, ob_iter); obact = vc.obact; diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index 9089a34ecaf..760208ffe28 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -90,7 +90,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op)) if (obedit) { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { obedit = objects[ob_index]; @@ -132,7 +132,7 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator *UNUSED(op)) else { struct KeyingSet *ks = ANIM_get_keyingset_for_autokeying(scene, ANIM_KS_LOCATION_ID); - FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(view_layer_eval, ob_eval) + FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(view_layer_eval, v3d, ob_eval) { Object *ob = DEG_get_original_object(ob_eval); if (ob->mode & OB_MODE_POSE) { @@ -268,7 +268,7 @@ static int snap_selected_to_location(bContext *C, const float snap_target_global float snap_target_local[3]; ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { obedit = objects[ob_index]; @@ -624,7 +624,7 @@ static bool snap_curs_to_sel_ex(bContext *C, float cursor[3]) int global_transverts_tot = 0; ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { obedit = objects[ob_index]; @@ -687,7 +687,7 @@ static bool snap_curs_to_sel_ex(bContext *C, float cursor[3]) } } else { - FOREACH_SELECTED_OBJECT_BEGIN(view_layer_eval, ob_eval) + FOREACH_SELECTED_OBJECT_BEGIN(view_layer_eval, v3d, ob_eval) { copy_v3_v3(vec, ob_eval->obmat[3]); diff --git a/source/blender/editors/space_view3d/view3d_utils.c b/source/blender/editors/space_view3d/view3d_utils.c index 022fccd7ce7..8b0124a7a2b 100644 --- a/source/blender/editors/space_view3d/view3d_utils.c +++ b/source/blender/editors/space_view3d/view3d_utils.c @@ -91,14 +91,9 @@ void ED_view3d_background_color_get(const Scene *scene, const View3D *v3d, float } } -View3DCursor *ED_view3d_cursor3d_get(Scene *scene, View3D *v3d) +View3DCursor *ED_view3d_cursor3d_get(Scene *scene, View3D *UNUSED(v3d)) { - if (v3d && v3d->localvd) { - return &v3d->cursor; - } - else { - return &scene->cursor; - } + return &scene->cursor; } void ED_view3d_cursor3d_calc_mat3(const Scene *scene, const View3D *v3d, float mat[3][3]) diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c index f8f2e9635e4..a7098ae255d 100644 --- a/source/blender/editors/space_view3d/view3d_view.c +++ b/source/blender/editors/space_view3d/view3d_view.c @@ -43,6 +43,7 @@ #include "BKE_context.h" #include "BKE_object.h" #include "BKE_global.h" +#include "BKE_layer.h" #include "BKE_main.h" #include "BKE_report.h" #include "BKE_scene.h" @@ -60,6 +61,7 @@ #include "WM_api.h" #include "WM_types.h" +#include "ED_object.h" #include "ED_screen.h" #include "DRW_engine.h" @@ -1105,6 +1107,312 @@ finally: /** \} */ +/* -------------------------------------------------------------------- */ +/** \name Local View Operators + * \{ */ + +static unsigned int free_localbit(Main *bmain) +{ + ScrArea *sa; + bScreen *sc; + + unsigned short local_view_bits = 0; + + /* sometimes we loose a localview: when an area is closed */ + /* check all areas: which localviews are in use? */ + for (sc = bmain->screen.first; sc; sc = sc->id.next) { + for (sa = sc->areabase.first; sa; sa = sa->next) { + SpaceLink *sl = sa->spacedata.first; + for (; sl; sl = sl->next) { + if (sl->spacetype == SPACE_VIEW3D) { + View3D *v3d = (View3D *) sl; + if (v3d->localvd) { + local_view_bits |= v3d->local_view_uuid; + } + } + } + } + } + + for (int i = 0; i < 16; i++) { + if ((local_view_bits & (1 << i)) == 0) { + return (1 << i); + } + } + + return 0; +} + +static bool view3d_localview_init( + const Depsgraph *depsgraph, + wmWindowManager *wm, + wmWindow *win, + Main *bmain, + ViewLayer *view_layer, + ScrArea *sa, + const int smooth_viewtx, + ReportList *reports) +{ + View3D *v3d = sa->spacedata.first; + Base *base; + float min[3], max[3], box[3], mid[3]; + float size = 0.0f; + unsigned int local_view_bit; + bool ok = false; + + if (v3d->localvd) { + return ok; + } + + INIT_MINMAX(min, max); + + local_view_bit = free_localbit(bmain); + + if (local_view_bit == 0) { + /* TODO(dfelinto): We can kick one of the other 3D views out of local view + specially if it is not being used. */ + BKE_report(reports, RPT_ERROR, "No more than 16 local views"); + ok = false; + } + else { + Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer); + if (obedit) { + FOREACH_BASE_IN_EDIT_MODE_BEGIN(view_layer, v3d, base_iter) { + BKE_object_minmax(base_iter->object, min, max, false); + base_iter->local_view_bits |= local_view_bit; + ok = true; + } FOREACH_BASE_IN_EDIT_MODE_END; + } + else { + for (base = FIRSTBASE(view_layer); base; base = base->next) { + if (TESTBASE(v3d, base)) { + BKE_object_minmax(base->object, min, max, false); + base->local_view_bits |= local_view_bit; + /* Technically we should leave for Depsgraph to handle this. + But it is harmless to do it here, and it seems to be necessary. */ + base->object->base_local_view_bits = base->local_view_bits; + ok = true; + } + } + } + + sub_v3_v3v3(box, max, min); + size = max_fff(box[0], box[1], box[2]); + } + + if (ok == true) { + ARegion *ar; + + v3d->localvd = MEM_mallocN(sizeof(View3D), "localview"); + + memcpy(v3d->localvd, v3d, sizeof(View3D)); + + mid_v3_v3v3(mid, min, max); + + for (ar = sa->regionbase.first; ar; ar = ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + RegionView3D *rv3d = ar->regiondata; + bool ok_dist = true; + + /* New view values. */ + Object *camera_old = NULL; + float dist_new, ofs_new[3]; + + rv3d->localvd = MEM_mallocN(sizeof(RegionView3D), "localview region"); + memcpy(rv3d->localvd, rv3d, sizeof(RegionView3D)); + + negate_v3_v3(ofs_new, mid); + + if (rv3d->persp == RV3D_CAMOB) { + rv3d->persp = RV3D_PERSP; + camera_old = v3d->camera; + } + + if (rv3d->persp == RV3D_ORTHO) { + if (size < 0.0001f) { + ok_dist = false; + } + } + + if (ok_dist) { + dist_new = ED_view3d_radius_to_dist(v3d, ar, depsgraph, rv3d->persp, true, (size / 2) * VIEW3D_MARGIN); + + if (rv3d->persp == RV3D_PERSP) { + /* Don't zoom closer than the near clipping plane. */ + dist_new = max_ff(dist_new, v3d->near * 1.5f); + } + } + + ED_view3d_smooth_view_ex( + depsgraph, + wm, win, sa, v3d, ar, smooth_viewtx, + &(const V3D_SmoothParams) { + .camera_old = camera_old, + .ofs = ofs_new, .quat = rv3d->viewquat, + .dist = ok_dist ? &dist_new : NULL, .lens = &v3d->lens}); + } + } + + v3d->local_view_uuid = local_view_bit; + } + + DEG_on_visible_update(bmain, false); + return ok; +} + +static void restore_localviewdata( + const Depsgraph *depsgraph, + wmWindowManager *wm, + wmWindow *win, + Main *bmain, + ScrArea *sa, + const int smooth_viewtx) +{ + const bool free = true; + ARegion *ar; + View3D *v3d = sa->spacedata.first; + Object *camera_old, *camera_new; + + if (v3d->localvd == NULL) return; + + camera_old = v3d->camera; + camera_new = v3d->localvd->camera; + + v3d->local_view_uuid = 0; + v3d->camera = v3d->localvd->camera; + + if (free) { + MEM_freeN(v3d->localvd); + v3d->localvd = NULL; + } + + for (ar = sa->regionbase.first; ar; ar = ar->next) { + if (ar->regiontype == RGN_TYPE_WINDOW) { + RegionView3D *rv3d = ar->regiondata; + + if (rv3d->localvd) { + Object *camera_old_rv3d, *camera_new_rv3d; + + camera_old_rv3d = (rv3d->persp == RV3D_CAMOB) ? camera_old : NULL; + camera_new_rv3d = (rv3d->localvd->persp == RV3D_CAMOB) ? camera_new : NULL; + + rv3d->view = rv3d->localvd->view; + rv3d->persp = rv3d->localvd->persp; + rv3d->camzoom = rv3d->localvd->camzoom; + + ED_view3d_smooth_view_ex( + depsgraph, + wm, win, sa, + v3d, ar, smooth_viewtx, + &(const V3D_SmoothParams) { + .camera_old = camera_old_rv3d, .camera = camera_new_rv3d, + .ofs = rv3d->localvd->ofs, .quat = rv3d->localvd->viewquat, + .dist = &rv3d->localvd->dist}); + + if (free) { + MEM_freeN(rv3d->localvd); + rv3d->localvd = NULL; + } + } + + ED_view3d_shade_update(bmain, v3d, sa); + } + } +} + +static bool view3d_localview_exit( + const Depsgraph *depsgraph, + wmWindowManager *wm, + wmWindow *win, + Main *bmain, + ViewLayer *view_layer, + ScrArea *sa, + const int smooth_viewtx) +{ + View3D *v3d = sa->spacedata.first; + struct Base *base; + unsigned int local_view_bit; + + if (v3d->localvd) { + + local_view_bit = v3d->local_view_uuid; + + restore_localviewdata(depsgraph, wm, win, bmain, sa, smooth_viewtx); + + Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer); + for (base = FIRSTBASE(view_layer); base; base = base->next) { + if (base->local_view_bits & local_view_bit) { + base->local_view_bits &= ~local_view_bit; + if (base->object != obedit) { + ED_object_base_select(base, BA_SELECT); + } + } + } + + DEG_on_visible_update(bmain, false); + + return true; + } + else { + return false; + } +} + +static int localview_exec(bContext *C, wmOperator *op) +{ + const Depsgraph *depsgraph = CTX_data_depsgraph(C); + const int smooth_viewtx = WM_operator_smooth_viewtx_get(op); + wmWindowManager *wm = CTX_wm_manager(C); + wmWindow *win = CTX_wm_window(C); + Main *bmain = CTX_data_main(C); + Scene *scene = CTX_data_scene(C); + ViewLayer *view_layer = CTX_data_view_layer(C); + ScrArea *sa = CTX_wm_area(C); + View3D *v3d = CTX_wm_view3d(C); + bool changed; + + if (v3d->localvd) { + changed = view3d_localview_exit(depsgraph, wm, win, bmain, view_layer, sa, smooth_viewtx); + } + else { + changed = view3d_localview_init(depsgraph, wm, win, bmain, view_layer, sa, smooth_viewtx, op->reports); + } + + if (changed) { + DEG_id_type_tag(bmain, ID_OB); + ED_area_tag_redraw(sa); + + /* Unselected objects become selected when exiting. */ + if (v3d->localvd == NULL) { + WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene); + } + else { + DEG_id_tag_update(&scene->id, DEG_TAG_BASE_FLAGS_UPDATE); + } + + return OPERATOR_FINISHED; + } + else { + return OPERATOR_CANCELLED; + } +} + +void VIEW3D_OT_localview(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Local View"; + ot->description = "Toggle display of selected object(s) separately and centered in view"; + ot->idname = "VIEW3D_OT_localview"; + + /* api callbacks */ + ot->exec = localview_exec; + ot->flag = OPTYPE_UNDO; /* localview changes object layer bitflags */ + + ot->poll = ED_operator_view3d_active; +} + +/** \} */ + /* -------------------------------------------------------------------- */ /** \name View Layer Utilities * \{ */ diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index adf4d5bec4b..4ef84f3f493 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1213,7 +1213,7 @@ void initTransDataContainers_FromObjectData(TransInfo *t, Object *obact, Object bool free_objects = false; if (objects == NULL) { objects = BKE_view_layer_array_from_objects_in_mode( - t->view_layer, &objects_len, { + t->view_layer, t->view, &objects_len, { .object_mode = object_mode, .no_dup_data = true}); free_objects = true; diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c index 48c18ef2d8a..6a6764e7a0b 100644 --- a/source/blender/editors/transform/transform_gizmo_2d.c +++ b/source/blender/editors/transform/transform_gizmo_2d.c @@ -165,10 +165,11 @@ static void gizmo2d_calc_bounds(const bContext *C, float *r_center, float *r_min if (sa->spacetype == SPACE_IMAGE) { SpaceImage *sima = sa->spacedata.first; ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); Image *ima = ED_space_image(sima); uint objects_len = 0; Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( - view_layer, &objects_len); + view_layer, v3d, &objects_len); if (!ED_uvedit_minmax_multi(CTX_data_scene(C), ima, objects, objects_len, r_min, r_max)) { zero_v2(r_min); zero_v2(r_max); diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c index 8872fe91ae3..5c3d8c0c791 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.c +++ b/source/blender/editors/transform/transform_gizmo_3d.c @@ -816,7 +816,7 @@ int ED_transform_calc_gizmo_stats( { \ invert_m4_m4(obedit->imat, obedit->obmat); \ uint objects_len = 0; \ - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len); \ + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, CTX_wm_view3d(C), &objects_len); \ for (uint ob_index = 0; ob_index < objects_len; ob_index++) { \ Object *ob_iter = objects[ob_index]; \ const bool use_mat_local = (ob_iter != obedit); diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index 22eb817c2b1..c2aacafa589 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -994,7 +994,7 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) uint objects_len = 0; Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( - t->view_layer, &objects_len); + t->view_layer, t->view, &objects_len); float dist_sq = FLT_MAX; if (ED_uvedit_nearest_uv_multi(t->scene, ima, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) { diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c index d9805214964..dcdcc50db6e 100644 --- a/source/blender/editors/uvedit/uvedit_draw.c +++ b/source/blender/editors/uvedit/uvedit_draw.c @@ -481,7 +481,7 @@ void ED_uvedit_draw_main( } else if (show_uvedit) { uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob_iter = objects[ob_index]; draw_uvs(sima, scene, ob_iter, depsgraph); diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 50b7290e8fb..d02bd95c047 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -1374,7 +1374,7 @@ static int uv_select_more_less(bContext *C, const bool select) ToolSettings *ts = scene->toolsettings; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -1537,7 +1537,7 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool) INIT_MINMAX2(min, max); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); if (tool == UV_ALIGN_AUTO) { for (uint ob_index = 0; ob_index < objects_len; ob_index++) { @@ -1825,7 +1825,7 @@ static int uv_remove_doubles_to_selected(bContext *C, wmOperator *op) const bool synced_selection = (ts->uv_flag & UV_SYNC_SELECTION) != 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); bool *changed = MEM_callocN(sizeof(bool) * objects_len, "uv_remove_doubles_selected.changed"); @@ -1971,7 +1971,7 @@ static int uv_remove_doubles_to_unselected(bContext *C, wmOperator *op) const bool synced_selection = (ts->uv_flag & UV_SYNC_SELECTION) != 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); /* Calculate max possible number of kdtree nodes. */ int uv_maxlen = 0; @@ -2254,7 +2254,7 @@ static int uv_select_all_exec(bContext *C, wmOperator *op) int action = RNA_enum_get(op->ptr, "action"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); uv_select_all_perform_multi(scene, ima, objects, objects_len, action); @@ -2585,7 +2585,7 @@ static int uv_mouse_select(bContext *C, const float co[2], bool extend, bool loo { ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); int ret = uv_mouse_select_multi(C, objects, objects_len, co, extend, loop); MEM_freeN(objects); return ret; @@ -2712,7 +2712,7 @@ static int uv_select_linked_internal(bContext *C, wmOperator *op, const wmEvent uvedit_pixel_to_float(sima, limit, 0.05f); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); if (pick) { float co[2]; @@ -2839,7 +2839,7 @@ static int uv_select_split_exec(bContext *C, wmOperator *op) bool changed_multi = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3203,7 +3203,7 @@ static int uv_box_select_exec(bContext *C, wmOperator *op) bool changed_multi = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); if (SEL_OP_USE_PRE_DESELECT(sel_op)) { uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT); @@ -3367,7 +3367,7 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op) bool changed_multi = false; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -3484,7 +3484,7 @@ static bool do_lasso_select_mesh_uv( BLI_lasso_boundbox(&rect, mcords, moves); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); if (SEL_OP_USE_PRE_DESELECT(sel_op)) { uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT); @@ -3645,7 +3645,7 @@ static int uv_snap_cursor_exec(bContext *C, wmOperator *op) uint objects_len = 0; Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( - view_layer, &objects_len); + view_layer, ((View3D *)NULL), &objects_len); changed = uv_snap_cursor_to_selection(scene, ima, objects, objects_len, sima); MEM_freeN(objects); break; @@ -3843,7 +3843,7 @@ static int uv_snap_selection_exec(bContext *C, wmOperator *op) float offset[2] = {0}; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); if (target == 2) { float center[2]; @@ -3934,7 +3934,7 @@ static int uv_pin_exec(bContext *C, wmOperator *op) const bool synced_selection = (ts->uv_flag & UV_SYNC_SELECTION) != 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -4011,7 +4011,7 @@ static int uv_select_pinned_exec(bContext *C, wmOperator *UNUSED(op)) MLoopUV *luv; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; @@ -4420,7 +4420,7 @@ static int uv_seams_from_islands_exec(bContext *C, wmOperator *op) const bool mark_sharp = RNA_boolean_get(op->ptr, "mark_sharp"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; @@ -4564,7 +4564,7 @@ static int uv_mark_seam_exec(bContext *C, wmOperator *op) const bool synced_selection = (ts->uv_flag & UV_SYNC_SELECTION) != 0; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, ((View3D *)NULL), &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *ob = objects[ob_index]; diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c index ffdd371dfdb..07184249d2c 100644 --- a/source/blender/editors/uvedit/uvedit_smart_stitch.c +++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c @@ -2241,8 +2241,9 @@ static int stitch_init_all(bContext *C, wmOperator *op) ssc->states = NULL; ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, v3d, &objects_len); if (objects_len == 0) { MEM_freeN(objects); diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index b344bb42318..66e64fe11a6 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -617,7 +617,7 @@ static bool minimize_stretch_init(bContext *C, wmOperator *op) bool implicit = true; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, CTX_wm_view3d(C), &objects_len); if (!uvedit_have_selection_multi(scene, objects, objects_len, implicit)) { MEM_freeN(objects); @@ -866,7 +866,7 @@ static int pack_islands_exec(bContext *C, wmOperator *op) bool do_rotate = RNA_boolean_get(op->ptr, "rotate"); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, CTX_wm_view3d(C), &objects_len); if (!uvedit_have_selection_multi(scene, objects, objects_len, true)) { MEM_freeN(objects); @@ -921,7 +921,7 @@ static int average_islands_scale_exec(bContext *C, wmOperator *UNUSED(op)) ParamHandle *handle; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(view_layer, CTX_wm_view3d(C), &objects_len); if (!uvedit_have_selection_multi(scene, objects, objects_len, implicit)) { MEM_freeN(objects); @@ -1436,7 +1436,7 @@ static int unwrap_exec(bContext *C, wmOperator *op) bool subsurf_error = use_subsurf; uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, CTX_wm_view3d(C), &objects_len); if (!uvedit_have_selection_multi(scene, objects, objects_len, implicit)) { MEM_freeN(objects); @@ -1591,7 +1591,7 @@ static int uv_from_view_exec(bContext *C, wmOperator *op) /* Note: objects that aren't touched are set to NULL (to skip clipping). */ uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, &objects_len); if (use_orthographic) { /* Calculate average object position. */ @@ -1731,10 +1731,11 @@ void UV_OT_project_from_view(wmOperatorType *ot) static int reset_exec(bContext *C, wmOperator *UNUSED(op)) { Scene *scene = CTX_data_scene(C); - ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); + uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; Mesh *me = (Mesh *)obedit->data; @@ -1825,7 +1826,7 @@ static int sphere_project_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -1913,7 +1914,7 @@ static int cylinder_project_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); @@ -2028,7 +2029,7 @@ static int cube_project_exec(bContext *C, wmOperator *op) ViewLayer *view_layer = CTX_data_view_layer(C); uint objects_len = 0; - Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); + Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, &objects_len); for (uint ob_index = 0; ob_index < objects_len; ob_index++) { Object *obedit = objects[ob_index]; BMEditMesh *em = BKE_editmesh_from_object(obedit); diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h index e363c0c54b2..c3e819c5538 100644 --- a/source/blender/makesdna/DNA_layer_types.h +++ b/source/blender/makesdna/DNA_layer_types.h @@ -37,7 +37,7 @@ extern "C" { typedef struct Base { struct Base *next, *prev; short flag; - short pad; + unsigned short local_view_bits; short sx, sy; struct Object *object; unsigned int lay DNA_DEPRECATED; diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h index 22b878ebac6..631bb26feec 100644 --- a/source/blender/makesdna/DNA_object_types.h +++ b/source/blender/makesdna/DNA_object_types.h @@ -245,7 +245,7 @@ typedef struct Object { /* Depsgraph */ short base_flag; /* used by depsgraph, flushed from base */ - short pad8; + unsigned short base_local_view_bits; /* used by viewport, synced from base */ /** Collision mask settings */ unsigned short col_group, col_mask; diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h index cb72d83e10b..92a1d6309ea 100644 --- a/source/blender/makesdna/DNA_scene_types.h +++ b/source/blender/makesdna/DNA_scene_types.h @@ -1806,28 +1806,34 @@ extern const char *RE_engine_id_CYCLES; /* deprecate this! */ #define TESTBASE(v3d, base) ( \ + (((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \ (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \ (((base)->flag & BASE_SELECTED) != 0) && \ (((base)->flag & BASE_VISIBLE) != 0)) #define TESTBASELIB(v3d, base) ( \ + (((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \ (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \ (((base)->flag & BASE_SELECTED) != 0) && \ ((base)->object->id.lib == NULL) && \ (((base)->flag & BASE_VISIBLE) != 0)) #define TESTBASELIB_BGMODE(v3d, base) ( \ + ((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \ ((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \ (((base)->flag & BASE_SELECTED) != 0) && \ ((base)->object->id.lib == NULL) && \ (((base)->flag & BASE_VISIBLE) != 0)) #define BASE_EDITABLE_BGMODE(v3d, base) ( \ + ((v3d == NULL) || ((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \ ((v3d == NULL) || (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0)) && \ ((base)->object->id.lib == NULL) && \ (((base)->flag & BASE_VISIBLE) != 0)) #define BASE_SELECTABLE(v3d, base) ( \ + (((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \ (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \ (((1 << (base)->object->type) & (v3d)->object_type_exclude_select) == 0) && \ (((base)->flag & BASE_SELECTABLE) != 0)) #define BASE_VISIBLE(v3d, base) ( \ + (((v3d)->localvd == NULL) || ((v3d)->local_view_uuid & (base)->local_view_bits)) && \ (((1 << (base)->object->type) & (v3d)->object_type_exclude_viewport) == 0) && \ (((base)->flag & BASE_VISIBLE) != 0)) diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index e778edff52e..b6d7fde7dfc 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -232,7 +232,8 @@ typedef struct View3D { char ob_centre_bone[64]; /* optional string for armature bone to define center, MAXBONENAME */ - unsigned int lay DNA_DEPRECATED; + unsigned short local_view_uuid; + short _pad6; int layact DNA_DEPRECATED; short ob_centre_cursor; /* optional bool for 3d cursor to define center */ diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c index 17233b100c8..0d2e5dce496 100644 --- a/source/blender/makesrna/intern/rna_object_api.c +++ b/source/blender/makesrna/intern/rna_object_api.c @@ -134,6 +134,7 @@ static bool rna_Object_select_get(Object *ob, bContext *C, ReportList *reports) static bool rna_Object_visible_get(Object *ob, bContext *C, ReportList *reports) { ViewLayer *view_layer = CTX_data_view_layer(C); + View3D *v3d = CTX_wm_view3d(C); Base *base = BKE_view_layer_base_find(view_layer, ob); if (!base) { @@ -141,6 +142,10 @@ static bool rna_Object_visible_get(Object *ob, bContext *C, ReportList *reports) return false; } + if (v3d->localvd && ((base->local_view_bits & v3d->local_view_uuid) == 0)) { + return false; + } + return ((base->flag & BASE_VISIBLE) != 0); } @@ -503,7 +508,7 @@ void RNA_api_object(StructRNA *srna) RNA_def_function_return(func, parm); func = RNA_def_function(srna, "visible_get", "rna_Object_visible_get"); - RNA_def_function_ui_description(func, "Get the object visibility for the active view layer"); + RNA_def_function_ui_description(func, "Get the object visibility for the active view layer and viewport"); RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS); parm = RNA_def_boolean(func, "result", 0, "", "Object visible"); RNA_def_function_return(func, parm); -- cgit v1.2.3