forked from bartvdbraak/blender
Layers: Scene copy should copy selection as well.
We need this for Depsgraph, otherwise CoW scene will have different selection properties.
This commit is contained in:
parent
830df9b33d
commit
32cd8ac710
@ -328,15 +328,17 @@ Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type)
|
|||||||
BLI_listbase_clear(&new_sl->drawdata);
|
BLI_listbase_clear(&new_sl->drawdata);
|
||||||
layer_collections_recreate(new_sl, &sl->layer_collections, mcn, mc);
|
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) {
|
if (new_base->object == active_ob) {
|
||||||
Object *active_ob = sl->basact->object;
|
new_sl->basact = new_base;
|
||||||
for (Base *base = new_sl->object_bases.first; base; base = base->next) {
|
|
||||||
if (base->object == active_ob) {
|
|
||||||
new_sl->basact = base;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new_base = new_base->next;
|
||||||
}
|
}
|
||||||
new_sl = new_sl->next;
|
new_sl = new_sl->next;
|
||||||
}
|
}
|
||||||
|
@ -169,4 +169,5 @@ RENDER_LAYER_TEST(scene_copy_a)
|
|||||||
RENDER_LAYER_TEST(scene_copy_b)
|
RENDER_LAYER_TEST(scene_copy_b)
|
||||||
RENDER_LAYER_TEST(scene_copy_c)
|
RENDER_LAYER_TEST(scene_copy_c)
|
||||||
RENDER_LAYER_TEST(scene_copy_d)
|
RENDER_LAYER_TEST(scene_copy_d)
|
||||||
|
RENDER_LAYER_TEST(scene_copy_e)
|
||||||
RENDER_LAYER_TEST(scene_write_read)
|
RENDER_LAYER_TEST(scene_write_read)
|
||||||
|
52
tests/python/render_layer/test_scene_copy_e.py
Normal file
52
tests/python/render_layer/test_scene_copy_e.py
Normal file
@ -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()
|
Loading…
Reference in New Issue
Block a user