diff options
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_collection.h | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_effect.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_layer.h | 79 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_object.h | 26 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_scene.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/blender_copybuffer.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/collection.c | 11 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/collision.c | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/effect.c | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/layer.c | 42 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/layer_utils.c | 44 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.cc | 75 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.cc | 4 |
13 files changed, 192 insertions, 106 deletions
diff --git a/source/blender/blenkernel/BKE_collection.h b/source/blender/blenkernel/BKE_collection.h index 4346c2a3d23..dd7866d83e5 100644 --- a/source/blender/blenkernel/BKE_collection.h +++ b/source/blender/blenkernel/BKE_collection.h @@ -216,7 +216,8 @@ struct ListBase BKE_collection_object_cache_get(struct Collection *collection); ListBase BKE_collection_object_cache_instanced_get(struct Collection *collection); void BKE_collection_object_cache_free(struct Collection *collection); -struct Base *BKE_collection_or_layer_objects(const struct ViewLayer *view_layer, +struct Base *BKE_collection_or_layer_objects(const struct Scene *scene, + struct ViewLayer *view_layer, struct Collection *collection); /* Editing. */ @@ -239,7 +240,8 @@ const char *BKE_collection_ui_name_get(struct Collection *collection); * Select all the objects in this Collection (and its nested collections) for this ViewLayer. * Return true if any object was selected. */ -bool BKE_collection_objects_select(struct ViewLayer *view_layer, +bool BKE_collection_objects_select(const struct Scene *scene, + struct ViewLayer *view_layer, struct Collection *collection, bool deselect); diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h index 113f9ac3b4c..3226455a183 100644 --- a/source/blender/blenkernel/BKE_effect.h +++ b/source/blender/blenkernel/BKE_effect.h @@ -103,6 +103,7 @@ void BKE_partdeflect_free(struct PartDeflect *pd); * lookup of effectors during evaluation. */ struct ListBase *BKE_effector_relations_create(struct Depsgraph *depsgraph, + const struct Scene *scene, struct ViewLayer *view_layer, struct Collection *collection); void BKE_effector_relations_free(struct ListBase *lb); diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h index 8bc89c56450..486095c79d7 100644 --- a/source/blender/blenkernel/BKE_layer.h +++ b/source/blender/blenkernel/BKE_layer.h @@ -78,7 +78,9 @@ void BKE_view_layer_free_ex(struct ViewLayer *view_layer, bool do_id_user); /** * Tag all the selected objects of a render-layer. */ -void BKE_view_layer_selected_objects_tag(struct ViewLayer *view_layer, int tag); +void BKE_view_layer_selected_objects_tag(const struct Scene *scene, + struct ViewLayer *view_layer, + int tag); /** * Fallback for when a Scene has no camera to use. @@ -87,14 +89,14 @@ void BKE_view_layer_selected_objects_tag(struct ViewLayer *view_layer, int tag); * If rendering you pass the scene active layer, when viewing in the viewport * you want to get #ViewLayer from context. */ -struct Object *BKE_view_layer_camera_find(struct ViewLayer *view_layer); +struct Object *BKE_view_layer_camera_find(const struct Scene *scene, struct ViewLayer *view_layer); /** * Find the #ViewLayer a #LayerCollection belongs to. */ struct ViewLayer *BKE_view_layer_find_from_collection(const struct Scene *scene, struct LayerCollection *lc); struct Base *BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob); -void BKE_view_layer_base_deselect_all(struct ViewLayer *view_layer); +void BKE_view_layer_base_deselect_all(const struct Scene *scene, struct ViewLayer *view_layer); void BKE_view_layer_base_select_and_set_active(struct ViewLayer *view_layer, struct Base *selbase); @@ -161,7 +163,9 @@ void BKE_scene_collection_sync(const struct Scene *scene); * and on file loaded in case linked data changed or went missing. */ void BKE_layer_collection_sync(const struct Scene *scene, struct ViewLayer *view_layer); -void BKE_layer_collection_local_sync(struct ViewLayer *view_layer, const struct View3D *v3d); +void BKE_layer_collection_local_sync(const struct Scene *scene, + struct ViewLayer *view_layer, + const struct View3D *v3d); /** * Sync the local collection for all the 3D Viewports. */ @@ -192,10 +196,12 @@ bool BKE_scene_has_object(struct Scene *scene, struct Object *ob); * It also select the objects that are in nested collections. * \note Recursive. */ -bool BKE_layer_collection_objects_select(struct ViewLayer *view_layer, +bool BKE_layer_collection_objects_select(const struct Scene *scene, + struct ViewLayer *view_layer, struct LayerCollection *lc, bool deselect); -bool BKE_layer_collection_has_selected_objects(struct ViewLayer *view_layer, +bool BKE_layer_collection_has_selected_objects(const struct Scene *scene, + struct ViewLayer *view_layer, struct LayerCollection *lc); bool BKE_layer_collection_has_layer_collection(struct LayerCollection *lc_parent, struct LayerCollection *lc_child); @@ -226,7 +232,8 @@ void BKE_layer_collection_isolate_global(struct Scene *scene, * * Same as #BKE_layer_collection_isolate_local but for a viewport */ -void BKE_layer_collection_isolate_local(struct ViewLayer *view_layer, +void BKE_layer_collection_isolate_local(const struct Scene *scene, + struct ViewLayer *view_layer, const struct View3D *v3d, struct LayerCollection *lc, bool extend); @@ -235,7 +242,8 @@ void BKE_layer_collection_isolate_local(struct ViewLayer *view_layer, * Don't change the collection children enable/disable state, * but it may change it for the collection itself. */ -void BKE_layer_collection_set_visible(struct ViewLayer *view_layer, +void BKE_layer_collection_set_visible(const struct Scene *scene, + struct ViewLayer *view_layer, struct LayerCollection *lc, bool visible, bool hierarchy); @@ -256,7 +264,9 @@ void BKE_layer_eval_view_layer_indexed(struct Depsgraph *depsgraph, /* .blend file I/O */ -void BKE_view_layer_blend_write(struct BlendWriter *writer, struct ViewLayer *view_layer); +void BKE_view_layer_blend_write(struct BlendWriter *writer, + const struct Scene *scene, + struct ViewLayer *view_layer); void BKE_view_layer_blend_read_data(struct BlendDataReader *reader, struct ViewLayer *view_layer); void BKE_view_layer_blend_read_lib(struct BlendLibReader *reader, struct Library *lib, @@ -352,7 +362,8 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter); } \ ((void)0) -#define FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, _object_type, _object_mode, _instance) \ +#define FOREACH_BASE_IN_MODE_BEGIN( \ + _scene, _view_layer, _v3d, _object_type, _object_mode, _instance) \ { \ struct ObjectsInModeIteratorData data_; \ memset(&data_, 0, sizeof(data_)); \ @@ -360,6 +371,7 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter); data_.object_type = _object_type; \ data_.view_layer = _view_layer; \ data_.v3d = _v3d; \ + UNUSED_VARS(_scene); \ data_.base_active = _view_layer->basact; \ ITER_BEGIN (BKE_view_layer_bases_in_mode_iterator_begin, \ BKE_view_layer_bases_in_mode_iterator_next, \ @@ -373,21 +385,22 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter); } \ ((void)0) -#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_view_layer, _v3d, _instance) \ - FOREACH_BASE_IN_MODE_BEGIN (_view_layer, _v3d, -1, OB_MODE_EDIT, _instance) +#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_scene, _view_layer, _v3d, _instance) \ + FOREACH_BASE_IN_MODE_BEGIN (_scene, _view_layer, _v3d, -1, OB_MODE_EDIT, _instance) #define FOREACH_BASE_IN_EDIT_MODE_END FOREACH_BASE_IN_MODE_END -#define FOREACH_OBJECT_IN_MODE_BEGIN(_view_layer, _v3d, _object_type, _object_mode, _instance) \ - FOREACH_BASE_IN_MODE_BEGIN (_view_layer, _v3d, _object_type, _object_mode, _base) { \ +#define FOREACH_OBJECT_IN_MODE_BEGIN( \ + _scene, _view_layer, _v3d, _object_type, _object_mode, _instance) \ + FOREACH_BASE_IN_MODE_BEGIN (_scene, _view_layer, _v3d, _object_type, _object_mode, _base) { \ Object *_instance = _base->object; #define FOREACH_OBJECT_IN_MODE_END \ } \ FOREACH_BASE_IN_MODE_END -#define FOREACH_OBJECT_IN_EDIT_MODE_BEGIN(_view_layer, _v3d, _instance) \ - FOREACH_BASE_IN_EDIT_MODE_BEGIN (_view_layer, _v3d, _base) { \ +#define FOREACH_OBJECT_IN_EDIT_MODE_BEGIN(_scene, _view_layer, _v3d, _instance) \ + FOREACH_BASE_IN_EDIT_MODE_BEGIN (_scene, _view_layer, _v3d, _base) { \ Object *_instance = _base->object; #define FOREACH_OBJECT_IN_EDIT_MODE_END \ @@ -404,7 +417,7 @@ 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, _v3d, _instance) \ +#define FOREACH_VISIBLE_BASE_BEGIN(_scene, _view_layer, _v3d, _instance) \ { \ struct ObjectsVisibleIteratorData data_ = {NULL}; \ data_.view_layer = _view_layer; \ @@ -421,10 +434,11 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter); } \ ((void)0) -#define FOREACH_OBJECT_BEGIN(view_layer, _instance) \ +#define FOREACH_OBJECT_BEGIN(scene, view_layer, _instance) \ { \ Object *_instance; \ Base *_base; \ + UNUSED_VARS(scene); \ for (_base = (Base *)(view_layer)->object_bases.first; _base; _base = _base->next) { \ _instance = _base->object; @@ -494,7 +508,8 @@ struct Object **BKE_view_layer_array_selected_objects_params( * Returns NULL with it finds multiple other selected objects * as behavior in this case would be random from the user perspective. */ -struct Object *BKE_view_layer_non_active_selected_object(struct ViewLayer *view_layer, +struct Object *BKE_view_layer_non_active_selected_object(const struct Scene *scene, + struct ViewLayer *view_layer, const struct View3D *v3d); #define BKE_view_layer_array_selected_objects(view_layer, v3d, r_len, ...) \ @@ -510,12 +525,14 @@ struct ObjectsInModeParams { }; struct Base **BKE_view_layer_array_from_bases_in_mode_params( + const struct Scene *scene, struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len, const struct ObjectsInModeParams *params); struct Object **BKE_view_layer_array_from_objects_in_mode_params( + const struct Scene *scene, struct ViewLayer *view_layer, const struct View3D *v3d, uint *len, @@ -526,20 +543,32 @@ bool BKE_view_layer_filter_edit_mesh_has_edges(const struct Object *ob, void *us /* Utility functions that wrap common arguments (add more as needed). */ -struct Object **BKE_view_layer_array_from_objects_in_edit_mode(struct ViewLayer *view_layer, +struct Object **BKE_view_layer_array_from_objects_in_edit_mode(const struct Scene *scene, + struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len); -struct Base **BKE_view_layer_array_from_bases_in_edit_mode(struct ViewLayer *view_layer, +struct Base **BKE_view_layer_array_from_bases_in_edit_mode(const struct Scene *scene, + struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len); struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data( - struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len); + const struct Scene *scene, + struct ViewLayer *view_layer, + const struct View3D *v3d, + uint *r_len); struct Base **BKE_view_layer_array_from_bases_in_edit_mode_unique_data( - struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len); + const struct Scene *scene, + struct ViewLayer *view_layer, + const struct View3D *v3d, + uint *r_len); struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( - struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len); -struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(struct ViewLayer *view_layer, + const struct Scene *scene, + struct ViewLayer *view_layer, + const struct View3D *v3d, + uint *r_len); +struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(const struct Scene *scene, + struct ViewLayer *view_layer, const struct View3D *v3d, uint *r_len, eObjectMode mode); diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index e0fb6c5e834..c60893b6d74 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -175,9 +175,10 @@ struct Object *BKE_object_add_only_object(struct Main *bmain, * \note Creates minimum required data, but without vertices etc. */ struct Object *BKE_object_add(struct Main *bmain, + const struct Scene *scene, struct ViewLayer *view_layer, int type, - const char *name) ATTR_NONNULL(1, 2) ATTR_RETURNS_NONNULL; + const char *name) ATTR_NONNULL(1, 2, 3) ATTR_RETURNS_NONNULL; /** * Add a new object, using another one as a reference * @@ -200,6 +201,7 @@ struct Object *BKE_object_add_from(struct Main *bmain, * assigning it to the object. */ struct Object *BKE_object_add_for_data(struct Main *bmain, + const struct Scene *scene, struct ViewLayer *view_layer, int type, const char *name, @@ -283,31 +285,38 @@ void BKE_object_matrix_local_get(struct Object *ob, float r_mat[4][4]); 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, + const struct Scene *scene, struct ViewLayer *view_layer, struct View3D *v3d); /** * Access pose array with special check to get pose object when in weight paint mode. */ -struct Object **BKE_object_pose_array_get_ex(struct ViewLayer *view_layer, +struct Object **BKE_object_pose_array_get_ex(const struct Scene *scene, + 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 Object **BKE_object_pose_array_get_unique(const struct Scene *scene, + struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_objects_len); -struct Object **BKE_object_pose_array_get(struct ViewLayer *view_layer, +struct Object **BKE_object_pose_array_get(const struct Scene *scene, + 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, +struct Base **BKE_object_pose_base_array_get_ex(const struct Scene *scene, + 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 Base **BKE_object_pose_base_array_get_unique(const struct Scene *scene, + 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 Base **BKE_object_pose_base_array_get(const struct Scene *scene, + struct ViewLayer *view_layer, struct View3D *v3d, unsigned int *r_bases_len); @@ -612,7 +621,8 @@ typedef enum eObjectSet { * If #OB_SET_VISIBLE or#OB_SET_SELECTED are collected, * then also add related objects according to the given \a includeFilter. */ -struct LinkNode *BKE_object_relational_superset(struct ViewLayer *view_layer, +struct LinkNode *BKE_object_relational_superset(const struct Scene *scene, + struct ViewLayer *view_layer, eObjectSet objectSet, eObRelationTypes includeFilter); /** diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h index 61fc883fe7f..c6ccd4493fe 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -97,7 +97,7 @@ int BKE_scene_base_iter_next(struct Depsgraph *depsgraph, struct Base **base, struct Object **ob); -void BKE_scene_base_flag_to_objects(struct ViewLayer *view_layer); +void BKE_scene_base_flag_to_objects(const struct Scene *scene, struct ViewLayer *view_layer); /** * Synchronize object base flags * diff --git a/source/blender/blenkernel/intern/blender_copybuffer.c b/source/blender/blenkernel/intern/blender_copybuffer.c index 4b507beb6b3..82df2714a71 100644 --- a/source/blender/blenkernel/intern/blender_copybuffer.c +++ b/source/blender/blenkernel/intern/blender_copybuffer.c @@ -150,7 +150,7 @@ int BKE_copybuffer_paste(bContext *C, return 0; } - BKE_view_layer_base_deselect_all(view_layer); + BKE_view_layer_base_deselect_all(scene, view_layer); copybuffer_append(lapp_context, bmain, reports); diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c index 41ec120519b..95457b6f790 100644 --- a/source/blender/blenkernel/intern/collection.c +++ b/source/blender/blenkernel/intern/collection.c @@ -859,7 +859,9 @@ void BKE_collection_object_cache_free(Collection *collection) collection_object_cache_free(collection); } -Base *BKE_collection_or_layer_objects(const ViewLayer *view_layer, Collection *collection) +Base *BKE_collection_or_layer_objects(const Scene *UNUSED(scene), + ViewLayer *view_layer, + Collection *collection) { if (collection) { return BKE_collection_object_cache_get(collection).first; @@ -1785,13 +1787,16 @@ static bool collection_objects_select(ViewLayer *view_layer, Collection *collect return changed; } -bool BKE_collection_objects_select(ViewLayer *view_layer, Collection *collection, bool deselect) +bool BKE_collection_objects_select(const Scene *scene, + ViewLayer *view_layer, + Collection *collection, + bool deselect) { LayerCollection *layer_collection = BKE_layer_collection_first_from_scene_collection(view_layer, collection); if (layer_collection != NULL) { - return BKE_layer_collection_objects_select(view_layer, layer_collection, deselect); + return BKE_layer_collection_objects_select(scene, view_layer, layer_collection, deselect); } return collection_objects_select(view_layer, collection, deselect); diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c index ae99f0d17df..0bacd657981 100644 --- a/source/blender/blenkernel/intern/collision.c +++ b/source/blender/blenkernel/intern/collision.c @@ -1248,8 +1248,9 @@ ListBase *BKE_collision_relations_create(Depsgraph *depsgraph, Collection *collection, unsigned int modifier_type) { + const Scene *scene = DEG_get_input_scene(depsgraph); ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph); - Base *base = BKE_collection_or_layer_objects(view_layer, collection); + Base *base = BKE_collection_or_layer_objects(scene, view_layer, collection); const bool for_render = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER); const int base_flag = (for_render) ? BASE_ENABLED_RENDER : BASE_ENABLED_VIEWPORT; diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index f6a2975bea8..6719590e7c0 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -207,10 +207,11 @@ static void add_effector_evaluation(ListBase **effectors, } ListBase *BKE_effector_relations_create(Depsgraph *depsgraph, + const Scene *scene, ViewLayer *view_layer, Collection *collection) { - Base *base = BKE_collection_or_layer_objects(view_layer, collection); + Base *base = BKE_collection_or_layer_objects(scene, view_layer, collection); const bool for_render = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER); const int base_flag = (for_render) ? BASE_ENABLED_RENDER : BASE_ENABLED_VIEWPORT; diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index 2b49da6dbe9..a388df7efc9 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -284,7 +284,9 @@ void BKE_view_layer_free_ex(ViewLayer *view_layer, const bool do_id_user) MEM_freeN(view_layer); } -void BKE_view_layer_selected_objects_tag(ViewLayer *view_layer, const int tag) +void BKE_view_layer_selected_objects_tag(const Scene *UNUSED(scene), + ViewLayer *view_layer, + const int tag) { LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) { if ((base->flag & BASE_SELECTED) != 0) { @@ -309,7 +311,7 @@ static bool find_scene_collection_in_scene_collections(ListBase *lb, const Layer return false; } -Object *BKE_view_layer_camera_find(ViewLayer *view_layer) +Object *BKE_view_layer_camera_find(const Scene *UNUSED(scene), ViewLayer *view_layer) { LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) { if (base->object->type == OB_CAMERA) { @@ -386,7 +388,7 @@ Base *BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob) return BLI_ghash_lookup(view_layer->object_bases_hash, ob); } -void BKE_view_layer_base_deselect_all(ViewLayer *view_layer) +void BKE_view_layer_base_deselect_all(const Scene *UNUSED(scene), ViewLayer *view_layer) { Base *base; @@ -1408,7 +1410,10 @@ void BKE_main_collection_sync_remap(const Main *bmain) /** \name Object Selection * \{ */ -bool BKE_layer_collection_objects_select(ViewLayer *view_layer, LayerCollection *lc, bool deselect) +bool BKE_layer_collection_objects_select(const Scene *scene, + ViewLayer *view_layer, + LayerCollection *lc, + bool deselect) { if (lc->collection->flag & COLLECTION_HIDE_SELECT) { return false; @@ -1438,13 +1443,15 @@ bool BKE_layer_collection_objects_select(ViewLayer *view_layer, LayerCollection } LISTBASE_FOREACH (LayerCollection *, iter, &lc->layer_collections) { - changed |= BKE_layer_collection_objects_select(view_layer, iter, deselect); + changed |= BKE_layer_collection_objects_select(scene, view_layer, iter, deselect); } return changed; } -bool BKE_layer_collection_has_selected_objects(ViewLayer *view_layer, LayerCollection *lc) +bool BKE_layer_collection_has_selected_objects(const Scene *scene, + ViewLayer *view_layer, + LayerCollection *lc) { if (lc->collection->flag & COLLECTION_HIDE_SELECT) { return false; @@ -1462,7 +1469,7 @@ bool BKE_layer_collection_has_selected_objects(ViewLayer *view_layer, LayerColle } LISTBASE_FOREACH (LayerCollection *, iter, &lc->layer_collections) { - if (BKE_layer_collection_has_selected_objects(view_layer, iter)) { + if (BKE_layer_collection_has_selected_objects(scene, view_layer, iter)) { return true; } } @@ -1678,7 +1685,9 @@ static void layer_collection_local_sync(ViewLayer *view_layer, } } -void BKE_layer_collection_local_sync(ViewLayer *view_layer, const View3D *v3d) +void BKE_layer_collection_local_sync(const Scene *UNUSED(scene), + ViewLayer *view_layer, + const View3D *v3d) { if (no_resync) { return; @@ -1711,7 +1720,7 @@ void BKE_layer_collection_local_sync_all(const Main *bmain) } View3D *v3d = area->spacedata.first; if (v3d->flag & V3D_LOCAL_COLLECTIONS) { - BKE_layer_collection_local_sync(view_layer, v3d); + BKE_layer_collection_local_sync(scene, view_layer, v3d); } } } @@ -1719,10 +1728,8 @@ void BKE_layer_collection_local_sync_all(const Main *bmain) } } -void BKE_layer_collection_isolate_local(ViewLayer *view_layer, - const View3D *v3d, - LayerCollection *lc, - bool extend) +void BKE_layer_collection_isolate_local( + const Scene *scene, ViewLayer *view_layer, const View3D *v3d, LayerCollection *lc, bool extend) { LayerCollection *lc_master = view_layer->layer_collections.first; bool hide_it = extend && ((v3d->local_collections_uuid & lc->local_collections_bits) != 0); @@ -1762,7 +1769,7 @@ void BKE_layer_collection_isolate_local(ViewLayer *view_layer, layer_collection_local_visibility_set_recursive(lc, v3d->local_collections_uuid); } - BKE_layer_collection_local_sync(view_layer, v3d); + BKE_layer_collection_local_sync(scene, view_layer, v3d); } static void layer_collection_bases_show_recursive(ViewLayer *view_layer, LayerCollection *lc) @@ -1791,7 +1798,8 @@ static void layer_collection_bases_hide_recursive(ViewLayer *view_layer, LayerCo } } -void BKE_layer_collection_set_visible(ViewLayer *view_layer, +void BKE_layer_collection_set_visible(const Scene *UNUSED(scene), + ViewLayer *view_layer, LayerCollection *lc, const bool visible, const bool hierarchy) @@ -2277,7 +2285,9 @@ static void write_layer_collections(BlendWriter *writer, ListBase *lb) } } -void BKE_view_layer_blend_write(BlendWriter *writer, ViewLayer *view_layer) +void BKE_view_layer_blend_write(BlendWriter *writer, + const Scene *UNUSED(scene), + ViewLayer *view_layer) { BLO_write_struct(writer, ViewLayer, view_layer); BLO_write_struct_list(writer, Base, &view_layer->object_bases); diff --git a/source/blender/blenkernel/intern/layer_utils.c b/source/blender/blenkernel/intern/layer_utils.c index 3e41479c22c..f6233f215ce 100644 --- a/source/blender/blenkernel/intern/layer_utils.c +++ b/source/blender/blenkernel/intern/layer_utils.c @@ -84,13 +84,14 @@ Object **BKE_view_layer_array_selected_objects_params( /** \name Objects in Mode Array * \{ */ -Base **BKE_view_layer_array_from_bases_in_mode_params(ViewLayer *view_layer, +Base **BKE_view_layer_array_from_bases_in_mode_params(const Scene *scene, + ViewLayer *view_layer, const View3D *v3d, uint *r_len, const struct ObjectsInModeParams *params) { if (params->no_dup_data) { - FOREACH_BASE_IN_MODE_BEGIN (view_layer, v3d, -1, params->object_mode, base_iter) { + FOREACH_BASE_IN_MODE_BEGIN (scene, view_layer, v3d, -1, params->object_mode, base_iter) { ID *id = base_iter->object->data; if (id) { id->tag |= LIB_TAG_DOIT; @@ -102,7 +103,7 @@ Base **BKE_view_layer_array_from_bases_in_mode_params(ViewLayer *view_layer, Base **base_array = NULL; BLI_array_declare(base_array); - FOREACH_BASE_IN_MODE_BEGIN (view_layer, v3d, -1, params->object_mode, base_iter) { + FOREACH_BASE_IN_MODE_BEGIN (scene, view_layer, v3d, -1, params->object_mode, base_iter) { if (params->filter_fn) { if (!params->filter_fn(base_iter->object, params->filter_userdata)) { continue; @@ -134,13 +135,14 @@ Base **BKE_view_layer_array_from_bases_in_mode_params(ViewLayer *view_layer, return base_array; } -Object **BKE_view_layer_array_from_objects_in_mode_params(ViewLayer *view_layer, +Object **BKE_view_layer_array_from_objects_in_mode_params(const Scene *scene, + ViewLayer *view_layer, const View3D *v3d, uint *r_len, const struct ObjectsInModeParams *params) { Base **base_array = BKE_view_layer_array_from_bases_in_mode_params( - view_layer, v3d, r_len, params); + scene, 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; @@ -149,55 +151,60 @@ Object **BKE_view_layer_array_from_objects_in_mode_params(ViewLayer *view_layer, return (Object **)base_array; } -struct Object **BKE_view_layer_array_from_objects_in_edit_mode(ViewLayer *view_layer, +struct Object **BKE_view_layer_array_from_objects_in_edit_mode(const Scene *scene, + ViewLayer *view_layer, const View3D *v3d, uint *r_len) { struct ObjectsInModeParams params = {0}; params.object_mode = OB_MODE_EDIT; - return BKE_view_layer_array_from_objects_in_mode_params(view_layer, v3d, r_len, ¶ms); + return BKE_view_layer_array_from_objects_in_mode_params(scene, view_layer, v3d, r_len, ¶ms); } -struct Base **BKE_view_layer_array_from_bases_in_edit_mode(ViewLayer *view_layer, +struct Base **BKE_view_layer_array_from_bases_in_edit_mode(const Scene *scene, + ViewLayer *view_layer, const View3D *v3d, uint *r_len) { struct ObjectsInModeParams params = {0}; params.object_mode = OB_MODE_EDIT; - return BKE_view_layer_array_from_bases_in_mode_params(view_layer, v3d, r_len, ¶ms); + return BKE_view_layer_array_from_bases_in_mode_params(scene, view_layer, v3d, r_len, ¶ms); } -struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data(ViewLayer *view_layer, +struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data(const Scene *scene, + ViewLayer *view_layer, const View3D *v3d, uint *r_len) { struct ObjectsInModeParams params = {0}; params.object_mode = OB_MODE_EDIT; params.no_dup_data = true; - return BKE_view_layer_array_from_objects_in_mode_params(view_layer, v3d, r_len, ¶ms); + return BKE_view_layer_array_from_objects_in_mode_params(scene, view_layer, v3d, r_len, ¶ms); } -struct Base **BKE_view_layer_array_from_bases_in_edit_mode_unique_data(ViewLayer *view_layer, +struct Base **BKE_view_layer_array_from_bases_in_edit_mode_unique_data(const Scene *scene, + ViewLayer *view_layer, const View3D *v3d, uint *r_len) { struct ObjectsInModeParams params = {0}; params.object_mode = OB_MODE_EDIT; params.no_dup_data = true; - return BKE_view_layer_array_from_bases_in_mode_params(view_layer, v3d, r_len, ¶ms); + return BKE_view_layer_array_from_bases_in_mode_params(scene, view_layer, v3d, r_len, ¶ms); } struct Object **BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs( - ViewLayer *view_layer, const View3D *v3d, uint *r_len) + const Scene *scene, ViewLayer *view_layer, const View3D *v3d, uint *r_len) { struct ObjectsInModeParams params = {0}; params.object_mode = OB_MODE_EDIT; params.no_dup_data = true; params.filter_fn = BKE_view_layer_filter_edit_mesh_has_uvs; - return BKE_view_layer_array_from_objects_in_mode_params(view_layer, v3d, r_len, ¶ms); + return BKE_view_layer_array_from_objects_in_mode_params(scene, view_layer, v3d, r_len, ¶ms); } -struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(ViewLayer *view_layer, +struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(const Scene *scene, + ViewLayer *view_layer, const View3D *v3d, uint *r_len, const eObjectMode mode) @@ -205,7 +212,7 @@ struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(ViewLayer struct ObjectsInModeParams params = {0}; params.object_mode = mode; params.no_dup_data = true; - return BKE_view_layer_array_from_objects_in_mode_params(view_layer, v3d, r_len, ¶ms); + return BKE_view_layer_array_from_objects_in_mode_params(scene, view_layer, v3d, r_len, ¶ms); } /** \} */ @@ -242,7 +249,8 @@ bool BKE_view_layer_filter_edit_mesh_has_edges(const Object *ob, void *UNUSED(us return false; } -Object *BKE_view_layer_non_active_selected_object(struct ViewLayer *view_layer, +Object *BKE_view_layer_non_active_selected_object(const Scene *UNUSED(scene), + struct ViewLayer *view_layer, const struct View3D *v3d) { Object *ob_active = BKE_view_layer_active_object_get(view_layer); diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc index e4d09fddb79..d4cf9d421d3 100644 --- a/source/blender/blenkernel/intern/object.cc +++ b/source/blender/blenkernel/intern/object.cc @@ -2258,20 +2258,22 @@ Object *BKE_object_add_only_object(Main *bmain, int type, const char *name) return ob; } -static Object *object_add_common(Main *bmain, ViewLayer *view_layer, int type, const char *name) +static Object *object_add_common( + Main *bmain, const Scene *scene, ViewLayer *view_layer, int type, const char *name) { Object *ob = BKE_object_add_only_object(bmain, type, name); ob->data = BKE_object_obdata_add_from_type(bmain, type, name); - BKE_view_layer_base_deselect_all(view_layer); + BKE_view_layer_base_deselect_all(scene, view_layer); DEG_id_tag_update_ex( bmain, &ob->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION); return ob; } -Object *BKE_object_add(Main *bmain, ViewLayer *view_layer, int type, const char *name) +Object *BKE_object_add( + Main *bmain, const Scene *scene, ViewLayer *view_layer, int type, const char *name) { - Object *ob = object_add_common(bmain, view_layer, type, name); + Object *ob = object_add_common(bmain, scene, view_layer, type, name); LayerCollection *layer_collection = BKE_layer_collection_get_active(view_layer); BKE_collection_viewlayer_object_add(bmain, view_layer, layer_collection->collection, ob); @@ -2289,7 +2291,7 @@ Object *BKE_object_add(Main *bmain, ViewLayer *view_layer, int type, const char Object *BKE_object_add_from( Main *bmain, Scene *scene, ViewLayer *view_layer, int type, const char *name, Object *ob_src) { - Object *ob = object_add_common(bmain, view_layer, type, name); + Object *ob = object_add_common(bmain, scene, view_layer, type, name); BKE_collection_object_add_from(bmain, scene, ob_src, ob); Base *base = BKE_view_layer_base_find(view_layer, ob); @@ -2298,8 +2300,13 @@ Object *BKE_object_add_from( return ob; } -Object *BKE_object_add_for_data( - Main *bmain, ViewLayer *view_layer, int type, const char *name, ID *data, bool do_id_user) +Object *BKE_object_add_for_data(Main *bmain, + const Scene *scene, + ViewLayer *view_layer, + int type, + const char *name, + ID *data, + bool do_id_user) { /* same as object_add_common, except we don't create new ob->data */ Object *ob = BKE_object_add_only_object(bmain, type, name); @@ -2308,7 +2315,7 @@ Object *BKE_object_add_for_data( id_us_plus(data); } - BKE_view_layer_base_deselect_all(view_layer); + BKE_view_layer_base_deselect_all(scene, view_layer); DEG_id_tag_update_ex( bmain, &ob->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION); @@ -2530,7 +2537,10 @@ Object *BKE_object_pose_armature_get(Object *ob) return nullptr; } -Object *BKE_object_pose_armature_get_visible(Object *ob, ViewLayer *view_layer, View3D *v3d) +Object *BKE_object_pose_armature_get_visible(Object *ob, + const Scene *UNUSED(scene), + ViewLayer *view_layer, + View3D *v3d) { Object *ob_armature = BKE_object_pose_armature_get(ob); if (ob_armature) { @@ -2544,10 +2554,8 @@ Object *BKE_object_pose_armature_get_visible(Object *ob, ViewLayer *view_layer, return nullptr; } -Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, - View3D *v3d, - uint *r_objects_len, - bool unique) +Object **BKE_object_pose_array_get_ex( + const Scene *scene, ViewLayer *view_layer, View3D *v3d, uint *r_objects_len, bool unique) { Object *ob_active = BKE_view_layer_active_object_get(view_layer); Object *ob_pose = BKE_object_pose_armature_get(ob_active); @@ -2558,7 +2566,7 @@ Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, ob_params.no_dup_data = unique; objects = BKE_view_layer_array_from_objects_in_mode_params( - view_layer, v3d, r_objects_len, &ob_params); + scene, view_layer, v3d, r_objects_len, &ob_params); } else if (ob_pose != nullptr) { *r_objects_len = 1; @@ -2571,19 +2579,23 @@ Object **BKE_object_pose_array_get_ex(ViewLayer *view_layer, } return objects; } -Object **BKE_object_pose_array_get_unique(ViewLayer *view_layer, View3D *v3d, uint *r_objects_len) +Object **BKE_object_pose_array_get_unique(const Scene *scene, + ViewLayer *view_layer, + View3D *v3d, + uint *r_objects_len) { - return BKE_object_pose_array_get_ex(view_layer, v3d, r_objects_len, true); + return BKE_object_pose_array_get_ex(scene, view_layer, v3d, r_objects_len, true); } -Object **BKE_object_pose_array_get(ViewLayer *view_layer, View3D *v3d, uint *r_objects_len) +Object **BKE_object_pose_array_get(const Scene *scene, + ViewLayer *view_layer, + View3D *v3d, + uint *r_objects_len) { - return BKE_object_pose_array_get_ex(view_layer, v3d, r_objects_len, false); + return BKE_object_pose_array_get_ex(scene, view_layer, v3d, r_objects_len, false); } -Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, - View3D *v3d, - uint *r_bases_len, - bool unique) +Base **BKE_object_pose_base_array_get_ex( + const Scene *scene, ViewLayer *view_layer, View3D *v3d, uint *r_bases_len, bool unique) { Base *base_active = view_layer->basact; Object *ob_pose = base_active ? BKE_object_pose_armature_get(base_active->object) : nullptr; @@ -2605,7 +2617,7 @@ Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, ob_params.no_dup_data = unique; bases = BKE_view_layer_array_from_bases_in_mode_params( - view_layer, v3d, r_bases_len, &ob_params); + scene, view_layer, v3d, r_bases_len, &ob_params); } else if (base_pose != nullptr) { *r_bases_len = 1; @@ -2618,13 +2630,19 @@ Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer, } return bases; } -Base **BKE_object_pose_base_array_get_unique(ViewLayer *view_layer, View3D *v3d, uint *r_bases_len) +Base **BKE_object_pose_base_array_get_unique(const Scene *scene, + ViewLayer *view_layer, + View3D *v3d, + uint *r_bases_len) { - return BKE_object_pose_base_array_get_ex(view_layer, v3d, r_bases_len, true); + return BKE_object_pose_base_array_get_ex(scene, view_layer, v3d, r_bases_len, true); } -Base **BKE_object_pose_base_array_get(ViewLayer *view_layer, View3D *v3d, uint *r_bases_len) +Base **BKE_object_pose_base_array_get(const Scene *scene, + ViewLayer *view_layer, + View3D *v3d, + uint *r_bases_len) { - return BKE_object_pose_base_array_get_ex(view_layer, v3d, r_bases_len, false); + return BKE_object_pose_base_array_get_ex(scene, view_layer, v3d, r_bases_len, false); } void BKE_object_transform_copy(Object *ob_tar, const Object *ob_src) @@ -5136,7 +5154,8 @@ static void obrel_list_add(LinkNode **links, Object *ob) ob->id.tag |= LIB_TAG_DOIT; } -LinkNode *BKE_object_relational_superset(struct ViewLayer *view_layer, +LinkNode *BKE_object_relational_superset(const Scene *UNUSED(scene), + struct ViewLayer *view_layer, eObjectSet objectSet, eObRelationTypes includeFilter) { diff --git a/source/blender/blenkernel/intern/scene.cc b/source/blender/blenkernel/intern/scene.cc index 9bb9ad9073f..96be505d214 100644 --- a/source/blender/blenkernel/intern/scene.cc +++ b/source/blender/blenkernel/intern/scene.cc @@ -1056,7 +1056,7 @@ static void scene_blend_write(BlendWriter *writer, ID *id, const void *id_addres BKE_curvemapping_curves_blend_write(writer, &sce->r.mblur_shutter_curve); LISTBASE_FOREACH (ViewLayer *, view_layer, &sce->view_layers) { - BKE_view_layer_blend_write(writer, view_layer); + BKE_view_layer_blend_write(writer, sce, view_layer); } if (sce->master_collection) { @@ -2880,7 +2880,7 @@ bool BKE_scene_uses_cycles_experimental_features(Scene *scene) return RNA_enum_get(&cycles_ptr, "feature_set") == CYCLES_FEATURES_EXPERIMENTAL; } -void BKE_scene_base_flag_to_objects(ViewLayer *view_layer) +void BKE_scene_base_flag_to_objects(const Scene *UNUSED(scene), ViewLayer *view_layer) { Base *base = static_cast<Base *>(view_layer->object_bases.first); |