Fix FOREACH_SCENE_COLLECTION/FOREACH_SCENE_OBJECT for nested collections
This fixes any function that relied on these iterators such as: * Outliner Same Type * Metaballs * scene.objects We were not considering the collections when there was collections nested to the collections nested to the master collection. It includes a unittest.
This commit is contained in:
parent
10f0635d32
commit
e1cbac715a
|
@ -725,6 +725,7 @@ void BKE_scene_collections_iterator_begin(BLI_Iterator *iter, void *data_in)
|
|||
|
||||
data->owner_id = owner_id;
|
||||
iter->data = data;
|
||||
iter->valid = true;
|
||||
|
||||
scene_collections_array(owner_id, (SceneCollection ***)&data->array, &data->tot);
|
||||
BLI_assert(data->tot != 0);
|
||||
|
|
|
@ -178,5 +178,6 @@ VIEW_LAYER_TEST(scene_copy_d)
|
|||
VIEW_LAYER_TEST(scene_copy_e)
|
||||
VIEW_LAYER_TEST(scene_copy_f)
|
||||
VIEW_LAYER_TEST(scene_delete)
|
||||
VIEW_LAYER_TEST(scene_objects)
|
||||
VIEW_LAYER_TEST(scene_write_read)
|
||||
VIEW_LAYER_TEST(view_layer_rename)
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
# ############################################################
|
||||
# Importing - Same For All Render Layer Tests
|
||||
# ############################################################
|
||||
|
||||
import unittest
|
||||
import os
|
||||
import sys
|
||||
|
||||
from view_layer_common import *
|
||||
|
||||
|
||||
# ############################################################
|
||||
# Testing
|
||||
# ############################################################
|
||||
|
||||
class UnitTesting(ViewLayerTesting):
|
||||
def test_scene_objects_a(self):
|
||||
"""
|
||||
Test vanilla scene
|
||||
"""
|
||||
import bpy
|
||||
|
||||
scene = bpy.context.scene
|
||||
self.assertEqual(len(scene.objects), 3)
|
||||
|
||||
def test_scene_objects_b(self):
|
||||
"""
|
||||
Test scene with nested collections
|
||||
"""
|
||||
import bpy
|
||||
scene = bpy.context.scene
|
||||
|
||||
# move default objects to a nested collection
|
||||
master_collection = scene.master_collection
|
||||
collection = master_collection.collections[0]
|
||||
collection_nested = collection.collections.new()
|
||||
|
||||
for ob in collection.objects:
|
||||
collection_nested.objects.link(ob)
|
||||
|
||||
while collection.objects:
|
||||
collection.objects.unlink(collection.objects[0])
|
||||
|
||||
self.assertEqual(len(scene.objects), 3)
|
||||
|
||||
|
||||
# ############################################################
|
||||
# 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