Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2017-12-01 17:23:05 +0300
committerDalai Felinto <dfelinto@gmail.com>2017-12-01 19:15:54 +0300
commitaeaf87bbeb011e9a571eefa12d81fa6fb2b8bd5b (patch)
tree895f28e2650a2436ebbf8f699d838d71c83d9d5b /tests/python/view_layer
parentbe9e469ead227aee8d4c29b98a125cf599c5c8bb (diff)
Groups and collection: create group from collection
You could still create groups as before, with Ctl + G. This will create a group with a single visible collection. However you can also create a group from an existing collection. Just go to the menu you get in the outliner when clicking in a collection and pick "Create Group". Remember to instance the group afterwards, or link it into a new scene or file. The group and the collection are not kept in sync afterwards. You need to manually edit the group for further changes.
Diffstat (limited to 'tests/python/view_layer')
-rw-r--r--tests/python/view_layer/CMakeLists.txt4
-rw-r--r--tests/python/view_layer/test_group_a.py46
-rw-r--r--tests/python/view_layer/test_group_b.py72
-rw-r--r--tests/python/view_layer/test_group_c.py56
-rw-r--r--tests/python/view_layer/test_group_d.py76
5 files changed, 254 insertions, 0 deletions
diff --git a/tests/python/view_layer/CMakeLists.txt b/tests/python/view_layer/CMakeLists.txt
index e5b271dcb1e..22cfcd344f3 100644
--- a/tests/python/view_layer/CMakeLists.txt
+++ b/tests/python/view_layer/CMakeLists.txt
@@ -87,6 +87,10 @@ VIEW_LAYER_TEST(evaluation_selectability_c)
VIEW_LAYER_TEST(evaluation_selectability_d)
VIEW_LAYER_TEST(evaluation_selectability_e)
VIEW_LAYER_TEST(evaluation_selectability_f)
+VIEW_LAYER_TEST(group_a)
+VIEW_LAYER_TEST(group_b)
+VIEW_LAYER_TEST(group_c)
+VIEW_LAYER_TEST(group_d)
VIEW_LAYER_TEST(object_add_cylinder)
VIEW_LAYER_TEST(object_add_empty)
VIEW_LAYER_TEST(object_add_torus)
diff --git a/tests/python/view_layer/test_group_a.py b/tests/python/view_layer/test_group_a.py
new file mode 100644
index 00000000000..6e1b83efbe5
--- /dev/null
+++ b/tests/python/view_layer/test_group_a.py
@@ -0,0 +1,46 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_create_basic(self):
+ """
+ See if the creation of new groups is not crashing anything.
+ """
+ import bpy
+ scene = bpy.context.scene
+ layer_collection = bpy.context.layer_collection
+
+ # Cleanup Viewport view layer
+ # technically this shouldn't be needed but
+ # for now we need it because depsgraph build all the view layers
+ # at once.
+
+ while len(scene.view_layers) > 1:
+ scene.view_layers.remove(scene.view_layers[1])
+
+ # create group
+ group = layer_collection.create_group()
+
+ # update depsgraph
+ scene.update()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_group_b.py b/tests/python/view_layer/test_group_b.py
new file mode 100644
index 00000000000..6a4478aeba8
--- /dev/null
+++ b/tests/python/view_layer/test_group_b.py
@@ -0,0 +1,72 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_create_basic(self):
+ """
+ See if the creation of new groups is preserving visibility flags
+ from the original collections.
+ """
+ import bpy
+ scene = bpy.context.scene
+
+ # clean slate
+ self.cleanup_tree()
+
+ master_collection = scene.master_collection
+ grandma = master_collection.collections.new('бабушка')
+ mom = grandma.collections.new('матушка')
+
+ child = bpy.data.objects.new("Child", None)
+ mom.objects.link(child)
+
+ grandma_layer_collection = scene.view_layers[0].collections.link(grandma)
+ mom_layer_collection = grandma_layer_collection.collections[0]
+
+ grandma_layer_collection.hide = False
+ grandma_layer_collection.hide = False
+ mom_layer_collection.hide = True
+ mom_layer_collection.hide_select = False
+
+ # update depsgraph
+ scene.update()
+
+ # create group
+ group = grandma_layer_collection.create_group()
+
+ # update depsgraph
+ scene.update()
+
+ # compare
+ self.assertEqual(len(group.view_layer.collections), 1)
+ grandma_group_layer = group.view_layer.collections[0]
+
+ self.assertEqual(grandma_group_layer.hide, False)
+ self.assertEqual(grandma_group_layer.hide_select, False)
+
+ self.assertEqual(len(grandma_group_layer.collections), 1)
+ mom_group_layer = grandma_group_layer.collections[0]
+
+ self.assertEqual(mom_group_layer.hide, True)
+ self.assertEqual(mom_group_layer.hide_select, False)
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_group_c.py b/tests/python/view_layer/test_group_c.py
new file mode 100644
index 00000000000..69feab1a56e
--- /dev/null
+++ b/tests/python/view_layer/test_group_c.py
@@ -0,0 +1,56 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_create_basic(self):
+ """
+ More advanced creation of group from a collection not directly linked
+ to the scene layer.
+ """
+ import bpy
+ scene = bpy.context.scene
+
+ # clean slate
+ self.cleanup_tree()
+
+ children = [bpy.data.objects.new("Child", None) for i in range(3)]
+ master_collection = scene.master_collection
+
+ grandma_scene_collection = master_collection.collections.new('Grand-Mother')
+ mom_scene_collection = grandma_scene_collection.collections.new('Mother')
+
+ grandma_scene_collection.objects.link(children[0])
+ mom_scene_collection.objects.link(children[1])
+
+ grandma_layer_collection = scene.view_layers[0].collections.link(grandma_scene_collection)
+ mom_layer_collection = grandma_layer_collection.collections[mom_scene_collection.name]
+
+ # update depsgraph
+ scene.update()
+
+ # create group
+ group = mom_layer_collection.create_group()
+
+ # update depsgraph
+ scene.update()
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()
diff --git a/tests/python/view_layer/test_group_d.py b/tests/python/view_layer/test_group_d.py
new file mode 100644
index 00000000000..6f54ca5340a
--- /dev/null
+++ b/tests/python/view_layer/test_group_d.py
@@ -0,0 +1,76 @@
+# ############################################################
+# Importing - Same For All Render Layer Tests
+# ############################################################
+
+import unittest
+import os
+import sys
+
+from view_layer_common import *
+
+
+# ############################################################
+# Testing
+# ############################################################
+
+class UnitTesting(ViewLayerTesting):
+ def test_group_write_load(self):
+ """
+ See if saving/loading is working for groups
+ """
+ import bpy
+ scene = bpy.context.scene
+ layer_collection = bpy.context.layer_collection
+
+ while len(scene.view_layers) > 1:
+ scene.view_layers.remove(scene.view_layers[1])
+
+ # create group
+ group = layer_collection.create_group()
+
+ self.assertEqual(1, len(bpy.data.groups))
+ self.assertEqual(1, bpy.data.groups[0].users)
+ self.assertEqual(3, len(bpy.data.groups[0].objects))
+
+ import os
+ import tempfile
+ with tempfile.TemporaryDirectory() as dirpath:
+ filepath = os.path.join(dirpath, 'layers.blend')
+
+ for i in range(3):
+ # save and re-open file
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath)
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath)
+
+ self.assertEqual(1, len(bpy.data.groups))
+ self.assertEqual(1, bpy.data.groups[0].users)
+ self.assertEqual(3, len(bpy.data.groups[0].objects))
+
+
+ # empty the group of objects
+ group = bpy.data.groups[0]
+ while group.objects:
+ group.view_layer.collections[0].collection.objects.unlink(group.objects[0])
+
+ # save and re-open file
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath)
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath)
+
+ self.assertEqual(1, len(bpy.data.groups))
+ self.assertEqual(0, bpy.data.groups[0].users)
+ self.assertEqual(0, len(bpy.data.groups[0].objects))
+
+ # save and re-open file
+ bpy.ops.wm.save_mainfile('EXEC_DEFAULT', filepath=filepath)
+ bpy.ops.wm.open_mainfile('EXEC_DEFAULT', filepath=filepath)
+
+ self.assertEqual(0, len(bpy.data.groups))
+
+
+# ############################################################
+# Main - Same For All Render Layer Tests
+# ############################################################
+
+if __name__ == '__main__':
+ UnitTesting._extra_arguments = setup_extra_arguments(__file__)
+ unittest.main()