[Bf-extensions-cvs] [bf176041] master: Collection Manager: Add QVT. Task: T69577

Ryan Inch noreply at git.blender.org
Sat Sep 26 09:27:21 CEST 2020


Commit: bf176041da95d4b07d74727acb78f7cf6a46785e
Author: Ryan Inch
Date:   Sat Sep 26 03:20:53 2020 -0400
Branches: master
https://developer.blender.org/rBAbf176041da95d4b07d74727acb78f7cf6a46785e

Collection Manager: Add QVT. Task: T69577

Add Quick View Toggles for influencing QCD setup,
e.g. enable all slots.
Fix bugs with QCD slot switching.
Fix the active object sometimes getting lost when toggling slots.

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

M	object_collection_manager/__init__.py
M	object_collection_manager/internals.py
M	object_collection_manager/operator_utils.py
M	object_collection_manager/operators.py
M	object_collection_manager/qcd_init.py
M	object_collection_manager/qcd_operators.py
M	object_collection_manager/ui.py

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

diff --git a/object_collection_manager/__init__.py b/object_collection_manager/__init__.py
index 72a279d1..792f5d1c 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, 14, 3),
+    "version": (2, 15, 0),
     "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/internals.py b/object_collection_manager/internals.py
index 163e9804..34e66737 100644
--- a/object_collection_manager/internals.py
+++ b/object_collection_manager/internals.py
@@ -39,6 +39,7 @@ move_active = None
 layer_collections = {}
 collection_tree = []
 collection_state = {}
+qcd_collection_state = {}
 expanded = set()
 row_index = 0
 max_lvl = 0
@@ -60,6 +61,8 @@ rto_history = {
     "indirect_all": {},
 }
 
+qcd_history = {}
+
 expand_history = {
     "target": "",
     "history": [],
@@ -131,6 +134,13 @@ class QCDSlots():
 
         raise
 
+    def object_in_slots(self, obj):
+        for collection in obj.users_collection:
+            if self.contains(name=collection.name):
+                return True
+
+        return False
+
     def get_data_for_blend(self):
         return f"{self._slots.__repr__()}\n{self.overrides.__repr__()}"
 
@@ -584,8 +594,9 @@ def get_modifiers(event):
     return set(modifiers)
 
 
-def generate_state():
+def generate_state(*, qcd=False):
     global layer_collections
+    global qcd_slots
 
     state = {
         "name": [],
@@ -608,6 +619,9 @@ def generate_state():
         state["holdout"].append(laycol["ptr"].holdout)
         state["indirect"].append(laycol["ptr"].indirect_only)
 
+    if qcd:
+        state["qcd"] = dict(qcd_slots)
+
     return state
 
 
diff --git a/object_collection_manager/operator_utils.py b/object_collection_manager/operator_utils.py
index 20c7dee7..2544b76b 100644
--- a/object_collection_manager/operator_utils.py
+++ b/object_collection_manager/operator_utils.py
@@ -31,6 +31,29 @@ from .internals import (
     get_move_selection,
 )
 
+mode_converter = {
+    'EDIT_MESH': 'EDIT',
+    'EDIT_CURVE': 'EDIT',
+    'EDIT_SURFACE': 'EDIT',
+    'EDIT_TEXT': 'EDIT',
+    'EDIT_ARMATURE': 'EDIT',
+    'EDIT_METABALL': 'EDIT',
+    'EDIT_LATTICE': 'EDIT',
+    'POSE': 'POSE',
+    'SCULPT': 'SCULPT',
+    'PAINT_WEIGHT': 'WEIGHT_PAINT',
+    'PAINT_VERTEX': 'VERTEX_PAINT',
+    'PAINT_TEXTURE': 'TEXTURE_PAINT',
+    'PARTICLE': 'PARTICLE_EDIT',
+    'OBJECT': 'OBJECT',
+    'PAINT_GPENCIL': 'PAINT_GPENCIL',
+    'EDIT_GPENCIL': 'EDIT_GPENCIL',
+    'SCULPT_GPENCIL': 'SCULPT_GPENCIL',
+    'WEIGHT_GPENCIL': 'WEIGHT_GPENCIL',
+    'VERTEX_GPENCIL': 'VERTEX_GPENCIL',
+    }
+
+
 rto_path = {
     "exclude": "exclude",
     "select": "collection.hide_select",
@@ -469,7 +492,7 @@ def remove_collection(laycol, collection, context):
             cm.cm_list_index = laycol["row_index"]
 
 
-def select_collection_objects(is_master_collection, collection_name, replace, nested):
+def select_collection_objects(is_master_collection, collection_name, replace, nested, selection_state=None):
     if is_master_collection:
         target_collection = bpy.context.view_layer.layer_collection.collection
 
@@ -480,7 +503,8 @@ def select_collection_objects(is_master_collection, collection_name, replace, ne
     if replace:
         bpy.ops.object.select_all(action='DESELECT')
 
-    selection_state = get_move_selection().isdisjoint(target_collection.objects)
+    if selection_state == None:
+        selection_state = get_move_selection().isdisjoint(target_collection.objects)
 
     def select_objects(collection):
             for obj in collection.objects:
@@ -493,3 +517,21 @@ def select_collection_objects(is_master_collection, collection_name, replace, ne
 
     if nested:
         apply_to_children(target_collection, select_objects)
+
+def set_exclude_state(target_layer_collection, state):
+    # get current child exclusion state
+    child_exclusion = []
+
+    def get_child_exclusion(layer_collection):
+        child_exclusion.append([layer_collection, layer_collection.exclude])
+
+    apply_to_children(target_layer_collection, get_child_exclusion)
+
+
+    # set exclusion
+    target_layer_collection.exclude = state
+
+
+    # set correct state for all children
+    for laycol in child_exclusion:
+        laycol[0].exclude = laycol[1]
diff --git a/object_collection_manager/operators.py b/object_collection_manager/operators.py
index 1e265e52..b18fc44a 100644
--- a/object_collection_manager/operators.py
+++ b/object_collection_manager/operators.py
@@ -66,6 +66,7 @@ from .operator_utils import (
     link_child_collections_to_parent,
     remove_collection,
     select_collection_objects,
+    set_exclude_state,
 )
 
 class SetActiveCollection(Operator):
@@ -424,23 +425,7 @@ class CMExcludeOperator(Operator):
             # reset exclude history
             del rto_history["exclude"][view_layer]
 
-
-            # get current child exclusion state
-            child_exclusion = []
-
-            def get_child_exclusion(layer_collection):
-                child_exclusion.append([layer_collection, layer_collection.exclude])
-
-            apply_to_children(laycol_ptr, get_child_exclusion)
-
-
-            # toggle exclusion of collection
-            laycol_ptr.exclude = not laycol_ptr.exclude
-
-
-            # set correct state for all children
-            for laycol in child_exclusion:
-                laycol[0].exclude = laycol[1]
+            set_exclude_state(laycol_ptr, not laycol_ptr.exclude)
 
             cls.isolated = False
 
diff --git a/object_collection_manager/qcd_init.py b/object_collection_manager/qcd_init.py
index 358d7617..035d62a0 100644
--- a/object_collection_manager/qcd_init.py
+++ b/object_collection_manager/qcd_init.py
@@ -16,10 +16,18 @@ addon_qcd_view_edit_mode_hotkey_keymaps = []
 
 qcd_classes = (
     qcd_move_widget.QCDMoveWidget,
+    qcd_operators.EnableAllQCDSlotsMeta,
+    qcd_operators.EnableAllQCDSlots,
+    qcd_operators.EnableAllQCDSlotsIsolated,
+    qcd_operators.DisableAllNonQCDSlots,
+    qcd_operators.DisableAllCollections,
+    qcd_operators.SelectAllQCDObjects,
+    qcd_operators.DiscardQCDHistory,
     qcd_operators.MoveToQCDSlot,
     qcd_operators.ViewQCDSlot,
     qcd_operators.ViewMoveQCDSlot,
     qcd_operators.RenumerateQCDSlots,
+    ui.EnableAllQCDSlotsMenu,
     )
 
 
@@ -41,6 +49,13 @@ def load_internal_data(dummy):
     internals.qcd_slots.load_blend_data(data)
 
 
+ at persistent
+def load_pre_handler(dummy):
+    internals.qcd_collection_state.clear()
+    for key in list(internals.qcd_history.keys()):
+        del internals.qcd_history[key]
+
+
 def register_qcd():
     for cls in qcd_classes:
         bpy.utils.register_class(cls)
@@ -60,6 +75,7 @@ def register_qcd():
 
     bpy.app.handlers.save_pre.append(save_internal_data)
     bpy.app.handlers.load_post.append(load_internal_data)
+    bpy.app.handlers.load_pre.append(load_pre_handler)
 
     prefs = bpy.context.preferences.addons[__package__].preferences
 
@@ -114,6 +130,27 @@ def register_qcd_view_hotkeys():
                 kmi.properties.toggle = True
                 addon_qcd_view_hotkey_keymaps.append((km, kmi))
 
+                km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                kmi = km.keymap_items.new('view3d.enable_all_qcd_slots', 'PLUS', 'PRESS', shift=True)
+                addon_qcd_view_hotkey_keymaps.append((km, kmi))
+
+                km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                kmi = km.keymap_items.new('view3d.enable_all_qcd_slots_isolated', 'PLUS', 'PRESS', shift=True, alt=True)
+                addon_qcd_view_hotkey_keymaps.append((km, kmi))
+
+                km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                kmi = km.keymap_items.new('view3d.disable_all_non_qcd_slots', 'PLUS', 'PRESS', shift=True, ctrl=True)
+                addon_qcd_view_hotkey_keymaps.append((km, kmi))
+
+                km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                kmi = km.keymap_items.new('view3d.disable_all_collections', 'EQUAL', 'PRESS', alt=True, ctrl=True)
+                addon_qcd_view_hotkey_keymaps.append((km, kmi))
+
+                if mode == 'Object Mode':
+                    km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                    kmi = km.keymap_items.new('view3d.select_all_qcd_objects', 'EQUAL', 'PRESS', alt=True)
+                    addon_qcd_view_hotkey_keymaps.append((km, kmi))
+
 
 def register_qcd_view_edit_mode_hotkeys():
     wm = bpy.context.window_manager
@@ -156,6 +193,22 @@ def register_qcd_view_edit_mode_hotkeys():
                 kmi.properties.toggle = True
                 addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
 
+                km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                kmi = km.keymap_items.new('view3d.enable_all_qcd_slots', 'PLUS', 'PRESS', shift=True)
+                addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
+
+                km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                kmi = km.keymap_items.new('view3d.enable_all_qcd_slots_isolated', 'PLUS', 'PRESS', shift=True, alt=True)
+                addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
+
+                km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                kmi = km.keymap_items.new('view3d.disable_all_non_qcd_slots', 'PLUS', 'PRESS', shift=True, ctrl=True)
+                addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
+
+                km = wm.keyconfigs.addon.keymaps.new(name=mode)
+                kmi = km.keymap_items.new('view3d.disable_all_collections', 'EQUAL', 'PRESS', alt=True, ctrl=True)
+                addon_qcd_view_edit_mode_hotkey_keymaps.append((km, kmi))
+
 
         km = wm.keyconfigs.addon.keymaps.new(name="Mesh")
         kmi = km.keymap_items.new('wm.call_menu', 'ACCENT_GRAVE', 'PRESS')
@@ -173,6 +226,7 @@ def unregister_qcd():
 
     bpy.app.handlers.save_pre.remove(save_internal_data)
     

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list