[Bf-extensions-cvs] [c6e30fee] master: Collection Manager: Small refactor. Task: T69577

Ryan Inch noreply at git.blender.org
Tue Apr 14 08:39:05 CEST 2020


Commit: c6e30fee4c5d67d94ba61c92b4b36df7015a9ea3
Author: Ryan Inch
Date:   Tue Apr 14 01:56:12 2020 -0400
Branches: master
https://developer.blender.org/rBAc6e30fee4c5d67d94ba61c92b4b36df7015a9ea3

Collection Manager: Small refactor. Task: T69577

Refactor some operators and QCD operators to use new
operator_utils functions.

===================================================================

M	object_collection_manager/__init__.py
M	object_collection_manager/operators.py
M	object_collection_manager/qcd_operators.py

===================================================================

diff --git a/object_collection_manager/__init__.py b/object_collection_manager/__init__.py
index a10bab4c..ef46feed 100644
--- a/object_collection_manager/__init__.py
+++ b/object_collection_manager/__init__.py
@@ -22,7 +22,7 @@ bl_info = {
     "name": "Collection Manager",
     "description": "Manage collections and their objects",
     "author": "Ryan Inch",
-    "version": (2,6,0),
+    "version": (2,6,1),
     "blender": (2, 80, 0),
     "location": "View3D - Object Mode (Shortcut - M)",
     "warning": '',  # used for warning icon and text in addons panel
diff --git a/object_collection_manager/operators.py b/object_collection_manager/operators.py
index 0bf2bafa..45993f1f 100644
--- a/object_collection_manager/operators.py
+++ b/object_collection_manager/operators.py
@@ -128,19 +128,13 @@ class ExpandSublevelOperator(Operator):
                 expand = True
 
             # do expanding/collapsing
-            def loop(laycol):
-                for item in laycol.children:
-                    if expand:
-                        if not item.name in expanded:
-                            expanded.add(item.name)
-                    else:
-                        if item.name in expanded:
-                            expanded.remove(item.name)
+            def set_expanded(layer_collection):
+                if expand:
+                    expanded.add(layer_collection.name)
+                else:
+                    expanded.discard(layer_collection.name)
 
-                    if len(item.children) > 0:
-                        loop(item)
-
-            loop(layer_collections[self.name]["ptr"])
+            apply_to_children(layer_collections[self.name]["ptr"], set_expanded)
 
             expand_history["target"] = ""
             expand_history["history"].clear()
@@ -930,12 +924,8 @@ class CMPhantomModeOperator(Operator):
             # save current visibility state
             phantom_history["view_layer"] = view_layer.name
 
-            laycol_iter_list = [view_layer.layer_collection.children]
-            while len(laycol_iter_list) > 0:
-                new_laycol_iter_list = []
-                for laycol_iter in laycol_iter_list:
-                    for layer_collection in laycol_iter:
-                        phantom_history["initial_state"][layer_collection.name] = {
+            def save_visibility_state(layer_collection):
+                phantom_history["initial_state"][layer_collection.name] = {
                             "exclude": layer_collection.exclude,
                             "select": layer_collection.collection.hide_select,
                             "hide": layer_collection.hide_viewport,
@@ -943,11 +933,7 @@ class CMPhantomModeOperator(Operator):
                             "render": layer_collection.collection.hide_render,
                                 }
 
-                        if len(layer_collection.children) > 0:
-                            new_laycol_iter_list.append(layer_collection.children)
-
-                laycol_iter_list = new_laycol_iter_list
-
+            apply_to_children(view_layer.layer_collection, save_visibility_state)
 
             # save current rto history
             for rto, history, in rto_history.items():
@@ -955,35 +941,18 @@ class CMPhantomModeOperator(Operator):
                     phantom_history[rto+"_history"] = deepcopy(history[view_layer.name])
 
 
-        # return to normal mode
-        else:
-            laycol_iter_list = [view_layer.layer_collection.children]
-            while len(laycol_iter_list) > 0:
-                new_laycol_iter_list = []
-                for laycol_iter in laycol_iter_list:
-                    for layer_collection in laycol_iter:
-                        phantom_laycol = phantom_history["initial_state"][layer_collection.name]
-
-                        layer_collection.exclude = \
-                            phantom_laycol["exclude"]
-
-                        layer_collection.collection.hide_select = \
-                            phantom_laycol["select"]
-
-                        layer_collection.hide_viewport = \
-                            phantom_laycol["hide"]
-
-                        layer_collection.collection.hide_viewport = \
-                            phantom_laycol["disable"]
-
-                        layer_collection.collection.hide_render = \
-                            phantom_laycol["render"]
 
+        else: # return to normal mode
+            def restore_visibility_state(layer_collection):
+                phantom_laycol = phantom_history["initial_state"][layer_collection.name]
 
-                        if len(layer_collection.children) > 0:
-                            new_laycol_iter_list.append(layer_collection.children)
+                layer_collection.exclude = phantom_laycol["exclude"]
+                layer_collection.collection.hide_select = phantom_laycol["select"]
+                layer_collection.hide_viewport = phantom_laycol["hide"]
+                layer_collection.collection.hide_viewport = phantom_laycol["disable"]
+                layer_collection.collection.hide_render = phantom_laycol["render"]
 
-                laycol_iter_list = new_laycol_iter_list
+            apply_to_children(view_layer.layer_collection, restore_visibility_state)
 
 
             # restore previous rto history
diff --git a/object_collection_manager/qcd_operators.py b/object_collection_manager/qcd_operators.py
index 56272171..5c5300c1 100644
--- a/object_collection_manager/qcd_operators.py
+++ b/object_collection_manager/qcd_operators.py
@@ -44,6 +44,10 @@ from .internals import (
     update_qcd_header,
 )
 
+from .operator_utils import (
+    apply_to_children,
+)
+
 
 class MoveToQCDSlot(Operator):
     '''Move object(s) to QCD slot'''
@@ -198,16 +202,10 @@ class ViewQCDSlot(Operator):
             # get current child exclusion state
             child_exclusion = []
 
-            laycol_iter_list = [qcd_laycol.children]
-            while len(laycol_iter_list) > 0:
-                new_laycol_iter_list = []
-                for laycol_iter in laycol_iter_list:
-                    for layer_collection in laycol_iter:
-                        child_exclusion.append([layer_collection, layer_collection.exclude])
-                        if len(layer_collection.children) > 0:
-                            new_laycol_iter_list.append(layer_collection.children)
+            def get_child_exclusion(layer_collection):
+                child_exclusion.append([layer_collection, layer_collection.exclude])
 
-                laycol_iter_list = new_laycol_iter_list
+            apply_to_children(qcd_laycol, get_child_exclusion)
 
             # toggle exclusion of qcd_laycol
             qcd_laycol.exclude = not qcd_laycol.exclude
@@ -227,16 +225,10 @@ class ViewQCDSlot(Operator):
             qcd_laycol.exclude = False
 
             # exclude all children
-            laycol_iter_list = [qcd_laycol.children]
-            while len(laycol_iter_list) > 0:
-                new_laycol_iter_list = []
-                for laycol_iter in laycol_iter_list:
-                    for layer_collection in laycol_iter:
-                        layer_collection.exclude = True
-                        if len(layer_collection.children) > 0:
-                            new_laycol_iter_list.append(layer_collection.children)
-
-                laycol_iter_list = new_laycol_iter_list
+            def exclude_all_children(layer_collection):
+                layer_collection.exclude = True
+
+            apply_to_children(qcd_laycol, exclude_all_children)
 
             # set layer as active layer collection
             context.view_layer.active_layer_collection = qcd_laycol



More information about the Bf-extensions-cvs mailing list