diff options
Diffstat (limited to 'source/blender/blenkernel/intern/object.cc')
-rw-r--r-- | source/blender/blenkernel/intern/object.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc index d4cf9d421d3..cbe5ea425fb 100644 --- a/source/blender/blenkernel/intern/object.cc +++ b/source/blender/blenkernel/intern/object.cc @@ -2271,7 +2271,7 @@ static Object *object_add_common( } Object *BKE_object_add( - Main *bmain, const Scene *scene, ViewLayer *view_layer, int type, const char *name) + Main *bmain, Scene *scene, ViewLayer *view_layer, int type, const char *name) { Object *ob = object_add_common(bmain, scene, view_layer, type, name); @@ -2280,6 +2280,7 @@ Object *BKE_object_add( /* NOTE: There is no way to be sure that #BKE_collection_viewlayer_object_add will actually * manage to find a valid collection in given `view_layer` to add the new object to. */ + BKE_view_layer_synced_ensure(scene, view_layer); Base *base = BKE_view_layer_base_find(view_layer, ob); if (base != nullptr) { BKE_view_layer_base_select_and_set_active(view_layer, base); @@ -2294,6 +2295,7 @@ Object *BKE_object_add_from( Object *ob = object_add_common(bmain, scene, view_layer, type, name); BKE_collection_object_add_from(bmain, scene, ob_src, ob); + BKE_view_layer_synced_ensure(scene, view_layer); Base *base = BKE_view_layer_base_find(view_layer, ob); BKE_view_layer_base_select_and_set_active(view_layer, base); @@ -2322,6 +2324,7 @@ Object *BKE_object_add_for_data(Main *bmain, LayerCollection *layer_collection = BKE_layer_collection_get_active(view_layer); BKE_collection_object_add(bmain, layer_collection->collection, ob); + BKE_view_layer_synced_ensure(scene, view_layer); Base *base = BKE_view_layer_base_find(view_layer, ob); BKE_view_layer_base_select_and_set_active(view_layer, base); @@ -2538,12 +2541,13 @@ Object *BKE_object_pose_armature_get(Object *ob) } Object *BKE_object_pose_armature_get_visible(Object *ob, - const Scene *UNUSED(scene), + const Scene *scene, ViewLayer *view_layer, View3D *v3d) { Object *ob_armature = BKE_object_pose_armature_get(ob); if (ob_armature) { + BKE_view_layer_synced_ensure(scene, view_layer); Base *base = BKE_view_layer_base_find(view_layer, ob_armature); if (base) { if (BASE_VISIBLE(v3d, base)) { @@ -2557,6 +2561,7 @@ Object *BKE_object_pose_armature_get_visible(Object *ob, Object **BKE_object_pose_array_get_ex( const Scene *scene, ViewLayer *view_layer, View3D *v3d, uint *r_objects_len, bool unique) { + BKE_view_layer_synced_ensure(scene, view_layer); Object *ob_active = BKE_view_layer_active_object_get(view_layer); Object *ob_pose = BKE_object_pose_armature_get(ob_active); Object **objects = nullptr; @@ -2597,7 +2602,8 @@ Object **BKE_object_pose_array_get(const Scene *scene, 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; + BKE_view_layer_synced_ensure(scene, view_layer); + Base *base_active = BKE_view_layer_active_base_get(view_layer); Object *ob_pose = base_active ? BKE_object_pose_armature_get(base_active->object) : nullptr; Base *base_pose = nullptr; Base **bases = nullptr; @@ -5154,7 +5160,7 @@ static void obrel_list_add(LinkNode **links, Object *ob) ob->id.tag |= LIB_TAG_DOIT; } -LinkNode *BKE_object_relational_superset(const Scene *UNUSED(scene), +LinkNode *BKE_object_relational_superset(const Scene *scene, struct ViewLayer *view_layer, eObjectSet objectSet, eObRelationTypes includeFilter) @@ -5162,12 +5168,13 @@ LinkNode *BKE_object_relational_superset(const Scene *UNUSED(scene), LinkNode *links = nullptr; /* Remove markers from all objects */ - LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) { + BKE_view_layer_synced_ensure(scene, view_layer); + LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer)) { base->object->id.tag &= ~LIB_TAG_DOIT; } /* iterate over all selected and visible objects */ - LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) { + LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer)) { if (objectSet == OB_SET_ALL) { /* as we get all anyways just add it */ Object *ob = base->object; @@ -5203,7 +5210,7 @@ LinkNode *BKE_object_relational_superset(const Scene *UNUSED(scene), /* child relationship */ if (includeFilter & (OB_REL_CHILDREN | OB_REL_CHILDREN_RECURSIVE)) { - LISTBASE_FOREACH (Base *, local_base, &view_layer->object_bases) { + LISTBASE_FOREACH (Base *, local_base, BKE_view_layer_object_bases_get(view_layer)) { if (BASE_EDITABLE(((View3D *)nullptr), local_base)) { Object *child = local_base->object; |