[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