[Bf-blender-cvs] [32cd8ac7106] blender2.8: Layers: Scene copy should copy selection as well.

Dalai Felinto noreply at git.blender.org
Thu Jun 15 13:47:20 CEST 2017


Commit: 32cd8ac71065857ef5f638c4840d3422be531a9e
Author: Dalai Felinto
Date:   Thu Jun 15 13:46:52 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB32cd8ac71065857ef5f638c4840d3422be531a9e

Layers: Scene copy should copy selection as well.

We need this for Depsgraph, otherwise CoW scene will have different selection properties.

===================================================================

M	source/blender/blenkernel/intern/scene.c
M	tests/python/render_layer/CMakeLists.txt
A	tests/python/render_layer/test_scene_copy_e.py

===================================================================

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);
 
-
-			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;
-					}
+			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 (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()




More information about the Bf-blender-cvs mailing list