Fix collection syncing when creating new collections from the outliner
We were not passing a scene collection parent to the BKE_collection_add function, which in turn made syncing not work. Right now we: * Explicitly pass the master collection in this case * Fallback to the master collection in other cases With unittest.
This commit is contained in:
parent
37e53ca5f3
commit
25074be697
|
@ -111,6 +111,10 @@ static SceneCollection *collection_add(ID *owner_id, SceneCollection *sc_parent,
|
|||
*/
|
||||
SceneCollection *BKE_collection_add(ID *owner_id, SceneCollection *sc_parent, const int type, const char *name_custom)
|
||||
{
|
||||
if (sc_parent == NULL) {
|
||||
sc_parent = BKE_collection_master(owner_id);
|
||||
}
|
||||
|
||||
SceneCollection *scene_collection = collection_add(owner_id, sc_parent, type, name_custom);
|
||||
BKE_layer_sync_new_scene_collection(owner_id, sc_parent, scene_collection);
|
||||
return scene_collection;
|
||||
|
|
|
@ -375,6 +375,7 @@ static void layer_collection_sync_flags(
|
|||
|
||||
static void layer_collections_sync_flags(ListBase *layer_collections_dst, const ListBase *layer_collections_src)
|
||||
{
|
||||
BLI_assert(BLI_listbase_count(layer_collections_dst) == BLI_listbase_count(layer_collections_src));
|
||||
LayerCollection *layer_collection_dst = (LayerCollection *)layer_collections_dst->first;
|
||||
const LayerCollection *layer_collection_src = (const LayerCollection *)layer_collections_src->first;
|
||||
while (layer_collection_dst != NULL) {
|
||||
|
|
|
@ -342,7 +342,8 @@ static int collection_new_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
SceneCollection *scene_collection = BKE_collection_add(&scene->id, NULL, COLLECTION_TYPE_NONE, NULL);
|
||||
SceneCollection *scene_collection_parent = BKE_collection_master(&scene->id);
|
||||
SceneCollection *scene_collection = BKE_collection_add(&scene->id, scene_collection_parent, COLLECTION_TYPE_NONE, NULL);
|
||||
BKE_collection_link(view_layer, scene_collection);
|
||||
|
||||
DEG_relations_tag_update(bmain);
|
||||
|
|
|
@ -62,6 +62,7 @@ endmacro()
|
|||
|
||||
VIEW_LAYER_TEST(active_collection)
|
||||
VIEW_LAYER_TEST(background_set)
|
||||
VIEW_LAYER_TEST(collection_new_sync)
|
||||
VIEW_LAYER_TEST(collection_rename_a)
|
||||
VIEW_LAYER_TEST(collection_rename_b)
|
||||
VIEW_LAYER_TEST(evaluation_render_settings_a)
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
# ############################################################
|
||||
# Importing - Same For All Render Layer Tests
|
||||
# ############################################################
|
||||
|
||||
import unittest
|
||||
import os
|
||||
import sys
|
||||
|
||||
from view_layer_common import *
|
||||
|
||||
|
||||
# ############################################################
|
||||
# Testing
|
||||
# ############################################################
|
||||
|
||||
class UnitTesting(ViewLayerTesting):
|
||||
def test_view_layer_syncing(self):
|
||||
"""
|
||||
See if we can copy view layers.
|
||||
"""
|
||||
import bpy
|
||||
scene = bpy.context.scene
|
||||
view_layer = scene.view_layers.new("All")
|
||||
|
||||
self.assertEqual(len(view_layer.collections), 1)
|
||||
self.assertEqual(view_layer.collections[0].collection, scene.master_collection)
|
||||
|
||||
self.assertEqual(
|
||||
{collection.name for collection in view_layer.collections[0].collections},
|
||||
{'Collection 1'})
|
||||
|
||||
self.assertEqual(
|
||||
bpy.ops.outliner.collection_new(),
|
||||
{'FINISHED'})
|
||||
|
||||
self.assertEqual(
|
||||
{collection.name for collection in view_layer.collections[0].collections},
|
||||
{'Collection 1', 'Collection 2'})
|
||||
|
||||
|
||||
# ############################################################
|
||||
# Main - Same For All Render Layer Tests
|
||||
# ############################################################
|
||||
|
||||
if __name__ == '__main__':
|
||||
UnitTesting._extra_arguments = setup_extra_arguments(__file__)
|
||||
unittest.main()
|
Loading…
Reference in New Issue