[Bf-extensions-cvs] [7e1b58a4] master: Collection Manager: Add highlighting to isolation toggle. Task: T69577

Ryan Inch noreply at git.blender.org
Mon Dec 9 06:41:48 CET 2019


Commit: 7e1b58a42678391c8d6cf9ae32388f5eff16aed5
Author: Ryan Inch
Date:   Mon Dec 9 00:39:42 2019 -0500
Branches: master
https://developer.blender.org/rBAC7e1b58a42678391c8d6cf9ae32388f5eff16aed5

Collection Manager: Add highlighting to isolation toggle. Task: T69577

Fixed a bug where isolation didn't handle chains for the select RT

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

M	collection_manager/__init__.py
M	collection_manager/operators.py
M	collection_manager/ui.py

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

diff --git a/collection_manager/__init__.py b/collection_manager/__init__.py
index 11ae0c1b..75142a35 100644
--- a/collection_manager/__init__.py
+++ b/collection_manager/__init__.py
@@ -23,7 +23,7 @@ bl_info = {
     "name": "Collection Manager",
     "description": "Manage collections and their objects",
     "author": "Ryan Inch",
-    "version": (1,7,0),
+    "version": (1,8,0),
     "blender": (2, 80, 0),
     "location": "View3D - Object Mode (Shortcut - M)",
     "warning": '',  # used for warning icon and text in addons panel
diff --git a/collection_manager/operators.py b/collection_manager/operators.py
index d0ca98ed..84396e7e 100644
--- a/collection_manager/operators.py
+++ b/collection_manager/operators.py
@@ -152,9 +152,10 @@ class CMExcludeOperator(bpy.types.Operator):
         laycol_ptr = layer_collections[self.name]["ptr"]
         
         if not view_layer in rto_history["exclude"]:
-            rto_history["exclude"][view_layer] = []
+            rto_history["exclude"][view_layer] = {"target": "", "history": []}
         
-        exclude_history = rto_history["exclude"][view_layer]
+        rto_history["exclude"][view_layer]["target"] = self.name
+        exclude_history = rto_history["exclude"][view_layer]["history"]
         
         if event.shift:
             # isolate/de-isolate exclusion of collections
@@ -174,6 +175,9 @@ class CMExcludeOperator(bpy.types.Operator):
                     # enable all collections
                     for item in layer_collections.values():
                         item["ptr"].exclude = False
+                
+                # reset exclude history
+                del rto_history["exclude"][view_layer]
             
             else:
                 # isolate collection
@@ -328,9 +332,10 @@ class CMRestrictSelectOperator(bpy.types.Operator):
         laycol_ptr = layer_collections[self.name]["ptr"]
         
         if not view_layer in rto_history["select"]:
-            rto_history["select"][view_layer] = []
-
-        select_history = rto_history["select"][view_layer]
+            rto_history["select"][view_layer] = {"target": "", "history": []}
+        
+        rto_history["select"][view_layer]["target"] = self.name
+        select_history = rto_history["select"][view_layer]["history"]
         
         if event.shift:
             # isolate/de-isolate selectability of collections
@@ -339,8 +344,16 @@ class CMRestrictSelectOperator(bpy.types.Operator):
             active_layer_collections = [x for x in layer_collections.values() \
                                           if x["ptr"].collection.hide_select == False]
             
-            # check if selectable isolated
-            if len(active_layer_collections) == 1 and active_layer_collections[0]["name"] == self.name:
+            layerchain = []
+            laycol = layer_collections[self.name]
+            
+            # get chain of parents up to top level collection
+            while laycol["id"] != 0:
+                    layerchain.append(laycol)
+                    laycol = laycol["parent"]
+                    
+            # check if reversed layerchain matches active collections
+            if layerchain[::-1] == active_layer_collections:
                 if len(select_history) > 1:
                     # restore previous state
                     for x, item in enumerate(layer_collections.values()):
@@ -351,6 +364,9 @@ class CMRestrictSelectOperator(bpy.types.Operator):
                     for item in layer_collections.values():
                         item["ptr"].collection.hide_select = False
             
+                # reset select history
+                del rto_history["select"][view_layer]
+            
             else:
                 # reset select history
                 select_history.clear()
@@ -366,18 +382,23 @@ class CMRestrictSelectOperator(bpy.types.Operator):
                 if not keep_history:
                     del rto_history["select"][view_layer]
                 
-                # isolate selectable collection
+                # make all collections unselectable
                 for item in layer_collections.values():
-                    if item["name"] != laycol_ptr.name:
-                        item["ptr"].collection.hide_select = True
+                    item["ptr"].collection.hide_select = True
                 
+                # allow selection of active collection plus parents
                 laycol_ptr.collection.hide_select = False
+                
+                laycol = layer_collections[self.name]
+                while laycol["id"] != 0:
+                    laycol["ptr"].collection.hide_select = False
+                    laycol = laycol["parent"]
                             
         
         elif event.ctrl:
             # toggle children
             
-            # reset selectable history
+            # reset select history
             del rto_history["select"][view_layer]
             
             # toggle selectability of collection
@@ -397,14 +418,14 @@ class CMRestrictSelectOperator(bpy.types.Operator):
                 laycol_iter_list = new_laycol_iter_list
         
         else:
-            # reset selectable history
+            # reset select history
             del rto_history["select"][view_layer]
             
             # toggle selectability of collection
             laycol_ptr.collection.hide_select = not laycol_ptr.collection.hide_select
         
         
-        # reset selectable all history
+        # reset select all history
         if view_layer in rto_history["select_all"]:
             del rto_history["select_all"][view_layer]
         
@@ -471,9 +492,10 @@ class CMHideOperator(bpy.types.Operator):
         laycol_ptr = layer_collections[self.name]["ptr"]
         
         if not view_layer in rto_history["hide"]:
-            rto_history["hide"][view_layer] = []
-
-        hide_history = rto_history["hide"][view_layer]
+            rto_history["hide"][view_layer] = {"target": "", "history": []}
+        
+        rto_history["hide"][view_layer]["target"] = self.name
+        hide_history = rto_history["hide"][view_layer]["history"]
         
         if event.shift:
             # isolate/de-isolate view of collections
@@ -502,6 +524,9 @@ class CMHideOperator(bpy.types.Operator):
                     for laycol in layer_collections.values():
                         laycol["ptr"].hide_viewport = False
                     
+                # reset hide history
+                del rto_history["hide"][view_layer]
+                
             else:
                 # reset hide history
                 hide_history.clear()
@@ -626,9 +651,10 @@ class CMDisableViewportOperator(bpy.types.Operator):
         laycol_ptr = layer_collections[self.name]["ptr"]
         
         if not view_layer in rto_history["disable"]:
-            rto_history["disable"][view_layer] = []
-
-        disable_history = rto_history["disable"][view_layer]
+            rto_history["disable"][view_layer] = {"target": "", "history": []}
+        
+        rto_history["disable"][view_layer]["target"] = self.name
+        disable_history = rto_history["disable"][view_layer]["history"]
         
         if event.shift:
             # isolate/de-isolate disablement of collections in viewport
@@ -656,7 +682,10 @@ class CMDisableViewportOperator(bpy.types.Operator):
                     # enable all collections in viewport
                     for laycol in layer_collections.values():
                         laycol["ptr"].collection.hide_viewport = False
-                    
+                
+                # reset disable history
+                del rto_history["disable"][view_layer]
+                
             else:
                 # reset disable history
                 disable_history.clear()
@@ -687,7 +716,7 @@ class CMDisableViewportOperator(bpy.types.Operator):
         elif event.ctrl:
             # toggle children
             
-            # reset viewport history
+            # reset disable history
             del rto_history["disable"][view_layer]
             
             # toggle view of collection
@@ -707,14 +736,14 @@ class CMDisableViewportOperator(bpy.types.Operator):
                 laycol_iter_list = new_laycol_iter_list
         
         else:
-            # reset viewport history
+            # reset disable history
             del rto_history["disable"][view_layer]
             
             # toggle disable of collection in viewport
             laycol_ptr.collection.hide_viewport = not laycol_ptr.collection.hide_viewport
         
         
-        # reset viewport all history
+        # reset disable all history
         if view_layer in rto_history["disable_all"]:
             del rto_history["disable_all"][view_layer]
         
@@ -782,9 +811,10 @@ class CMDisableRenderOperator(bpy.types.Operator):
         laycol_ptr = layer_collections[self.name]["ptr"]
         
         if not view_layer in rto_history["render"]:
-            rto_history["render"][view_layer] = []
+            rto_history["render"][view_layer] = {"target": "", "history": []}
 
-        render_history = rto_history["render"][view_layer]
+        rto_history["render"][view_layer]["target"] = self.name
+        render_history = rto_history["render"][view_layer]["history"]
         
         if event.shift:
             # isolate/de-isolate render of collections
@@ -812,7 +842,10 @@ class CMDisableRenderOperator(bpy.types.Operator):
                     # allow render of all collections
                     for laycol in layer_collections.values():
                         laycol["ptr"].collection.hide_render = False
-                    
+                
+                # reset render history
+                del rto_history["render"][view_layer]
+                
             else:
                 # reset render history
                 render_history.clear()
@@ -1133,7 +1166,7 @@ class CMPhantomModeOperator(bpy.types.Operator):
             
             # save current rto history
             for rto, history, in rto_history.items():
-                phantom_history[rto+"_history"] = history.get(view_layer, [

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list