diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 94372588957..ad00ba909b4 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -328,15 +328,17 @@ Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type) BLI_listbase_clear(&new_sl->drawdata); layer_collections_recreate(new_sl, &sl->layer_collections, mcn, mc); + Object *active_ob = OBACT_NEW; + Base *new_base = new_sl->object_bases.first; + for (Base *base = sl->object_bases.first; base; base = base->next) { + new_base->flag = base->flag; + new_base->flag_legacy = base->flag_legacy; - if (sl->basact) { - Object *active_ob = sl->basact->object; - for (Base *base = new_sl->object_bases.first; base; base = base->next) { - if (base->object == active_ob) { - new_sl->basact = base; - break; - } + if (new_base->object == active_ob) { + new_sl->basact = new_base; } + + new_base = new_base->next; } new_sl = new_sl->next; } diff --git a/tests/python/render_layer/CMakeLists.txt b/tests/python/render_layer/CMakeLists.txt index 9d19985000d..526b169bc3d 100644 --- a/tests/python/render_layer/CMakeLists.txt +++ b/tests/python/render_layer/CMakeLists.txt @@ -169,4 +169,5 @@ RENDER_LAYER_TEST(scene_copy_a) RENDER_LAYER_TEST(scene_copy_b) RENDER_LAYER_TEST(scene_copy_c) RENDER_LAYER_TEST(scene_copy_d) +RENDER_LAYER_TEST(scene_copy_e) RENDER_LAYER_TEST(scene_write_read) diff --git a/tests/python/render_layer/test_scene_copy_e.py b/tests/python/render_layer/test_scene_copy_e.py new file mode 100644 index 00000000000..350729d14e0 --- /dev/null +++ b/tests/python/render_layer/test_scene_copy_e.py @@ -0,0 +1,52 @@ +# ############################################################ +# Importing - Same For All Render Layer Tests +# ############################################################ + +import unittest +import os +import sys + +from render_layer_common import * + + +# ############################################################ +# Testing +# ############################################################ + +class UnitTesting(RenderLayerTesting): + def test_shared_layer_collections_copy_full(self): + """ + See if scene copying 'FULL_COPY' is working for scene collections + with a shared object + """ + import os + import bpy + + scene = bpy.context.scene + layer = bpy.context.render_layer + + original_cube = layer.objects.get('Cube') + original_cube.select_set('SELECT') + self.assertTrue(original_cube.select_get()) + + bpy.ops.scene.new(type='FULL_COPY') + new_layer = bpy.context.render_layer + + self.assertNotEqual(layer, new_layer) + new_cube = new_layer.objects.get('Cube.001') + self.assertNotEqual(original_cube, new_cube) + self.assertTrue(new_cube.select_get()) + + +# ############################################################ +# Main - Same For All Render Layer Tests +# ############################################################ + +if __name__ == '__main__': + import sys + + extra_arguments = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [] + sys.argv = [__file__] + (sys.argv[sys.argv.index("--") + 2:] if "--" in sys.argv else []) + + UnitTesting._extra_arguments = extra_arguments + unittest.main()