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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'object_collection_manager/operators.py')
-rw-r--r--object_collection_manager/operators.py209
1 files changed, 209 insertions, 0 deletions
diff --git a/object_collection_manager/operators.py b/object_collection_manager/operators.py
index 7509d3f2..ff1bbf95 100644
--- a/object_collection_manager/operators.py
+++ b/object_collection_manager/operators.py
@@ -909,6 +909,211 @@ class CMUnDisableRenderAllOperator(Operator):
return {'FINISHED'}
+class CMHoldoutOperator(Operator):
+ bl_label = "[HH] Holdout"
+ bl_description = (
+ " * Shift+LMB - Isolate/Restore.\n"
+ " * Shift+Ctrl+LMB - Isolate nested/Restore.\n"
+ " * Ctrl+LMB - Toggle nested.\n"
+ " * Alt+LMB - Discard history"
+ )
+ bl_idname = "view3d.holdout_collection"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ name: StringProperty()
+
+ # static class var
+ isolated = False
+
+ def invoke(self, context, event):
+ global rto_history
+ cls = CMHoldoutOperator
+
+ modifiers = get_modifiers(event)
+ view_layer = context.view_layer.name
+ laycol_ptr = layer_collections[self.name]["ptr"]
+
+ if not view_layer in rto_history["holdout"]:
+ rto_history["holdout"][view_layer] = {"target": "", "history": []}
+
+ if modifiers == {"alt"}:
+ del rto_history["holdout"][view_layer]
+ cls.isolated = False
+
+ elif modifiers == {"shift"}:
+ isolate_rto(cls, self, view_layer, "holdout")
+
+ elif modifiers == {"ctrl"}:
+ toggle_children(self, view_layer, "holdout")
+
+ cls.isolated = False
+
+ elif modifiers == {"ctrl", "shift"}:
+ isolate_rto(cls, self, view_layer, "holdout", children=True)
+
+ else:
+ # toggle holdout
+
+ # reset holdout history
+ del rto_history["holdout"][view_layer]
+
+ # toggle holdout of collection in viewport
+ laycol_ptr.holdout = not laycol_ptr.holdout
+
+ cls.isolated = False
+
+ # reset holdout all history
+ if view_layer in rto_history["holdout_all"]:
+ del rto_history["holdout_all"][view_layer]
+
+ return {'FINISHED'}
+
+
+class CMUnHoldoutAllOperator(Operator):
+ bl_label = "[HH Global] Holdout"
+ bl_description = (
+ " * LMB - Enable all/Restore.\n"
+ " * Shift+LMB - Invert.\n"
+ " * Ctrl+LMB - Copy/Paste RTOs.\n"
+ " * Ctrl+Alt+LMB - Swap RTOs.\n"
+ " * Alt+LMB - Discard history"
+ )
+ bl_idname = "view3d.un_holdout_all_collections"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def invoke(self, context, event):
+ global rto_history
+
+ view_layer = context.view_layer.name
+ modifiers = get_modifiers(event)
+
+ if not view_layer in rto_history["holdout_all"]:
+ rto_history["holdout_all"][view_layer] = []
+
+ if modifiers == {"alt"}:
+ # clear all states
+ del rto_history["holdout_all"][view_layer]
+ clear_copy("holdout")
+ clear_swap("holdout")
+
+ elif modifiers == {"ctrl"}:
+ copy_rtos(view_layer, "holdout")
+
+ elif modifiers == {"ctrl", "alt"}:
+ swap_rtos(view_layer, "holdout")
+
+ elif modifiers == {"shift"}:
+ invert_rtos(view_layer, "holdout")
+
+ else:
+ activate_all_rtos(view_layer, "holdout")
+
+ return {'FINISHED'}
+
+
+class CMIndirectOnlyOperator(Operator):
+ bl_label = "[IO] Indirect Only"
+ bl_description = (
+ " * Shift+LMB - Isolate/Restore.\n"
+ " * Shift+Ctrl+LMB - Isolate nested/Restore.\n"
+ " * Ctrl+LMB - Toggle nested.\n"
+ " * Alt+LMB - Discard history"
+ )
+ bl_idname = "view3d.indirect_only_collection"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ name: StringProperty()
+
+ # static class var
+ isolated = False
+
+ def invoke(self, context, event):
+ global rto_history
+ cls = CMIndirectOnlyOperator
+
+ modifiers = get_modifiers(event)
+ view_layer = context.view_layer.name
+ laycol_ptr = layer_collections[self.name]["ptr"]
+
+ if not view_layer in rto_history["indirect"]:
+ rto_history["indirect"][view_layer] = {"target": "", "history": []}
+
+
+ if modifiers == {"alt"}:
+ del rto_history["indirect"][view_layer]
+ cls.isolated = False
+
+ elif modifiers == {"shift"}:
+ isolate_rto(cls, self, view_layer, "indirect")
+
+ elif modifiers == {"ctrl"}:
+ toggle_children(self, view_layer, "indirect")
+
+ cls.isolated = False
+
+ elif modifiers == {"ctrl", "shift"}:
+ isolate_rto(cls, self, view_layer, "indirect", children=True)
+
+ else:
+ # toggle indirect only
+
+ # reset indirect history
+ del rto_history["indirect"][view_layer]
+
+ # toggle indirect only of collection
+ laycol_ptr.indirect_only = not laycol_ptr.indirect_only
+
+ cls.isolated = False
+
+ # reset indirect all history
+ if view_layer in rto_history["indirect_all"]:
+ del rto_history["indirect_all"][view_layer]
+
+ return {'FINISHED'}
+
+
+class CMUnIndirectOnlyAllOperator(Operator):
+ bl_label = "[IO Global] Indirect Only"
+ bl_description = (
+ " * LMB - Enable all/Restore.\n"
+ " * Shift+LMB - Invert.\n"
+ " * Ctrl+LMB - Copy/Paste RTOs.\n"
+ " * Ctrl+Alt+LMB - Swap RTOs.\n"
+ " * Alt+LMB - Discard history"
+ )
+ bl_idname = "view3d.un_indirect_only_all_collections"
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def invoke(self, context, event):
+ global rto_history
+
+ view_layer = context.view_layer.name
+ modifiers = get_modifiers(event)
+
+ if not view_layer in rto_history["indirect_all"]:
+ rto_history["indirect_all"][view_layer] = []
+
+ if modifiers == {"alt"}:
+ # clear all states
+ del rto_history["indirect_all"][view_layer]
+ clear_copy("indirect")
+ clear_swap("indirect")
+
+ elif modifiers == {"ctrl"}:
+ copy_rtos(view_layer, "indirect")
+
+ elif modifiers == {"ctrl", "alt"}:
+ swap_rtos(view_layer, "indirect")
+
+ elif modifiers == {"shift"}:
+ invert_rtos(view_layer, "indirect")
+
+ else:
+ activate_all_rtos(view_layer, "indirect")
+
+ return {'FINISHED'}
+
+
class CMRemoveCollectionOperator(Operator):
'''Remove Collection'''
bl_label = "Remove Collection"
@@ -1112,6 +1317,8 @@ class CMPhantomModeOperator(Operator):
"hide": layer_collection.hide_viewport,
"disable": layer_collection.collection.hide_viewport,
"render": layer_collection.collection.hide_render,
+ "holdout": layer_collection.holdout,
+ "indirect": layer_collection.indirect_only,
}
apply_to_children(view_layer.layer_collection, save_visibility_state)
@@ -1132,6 +1339,8 @@ class CMPhantomModeOperator(Operator):
layer_collection.hide_viewport = phantom_laycol["hide"]
layer_collection.collection.hide_viewport = phantom_laycol["disable"]
layer_collection.collection.hide_render = phantom_laycol["render"]
+ layer_collection.holdout = phantom_laycol["holdout"]
+ layer_collection.indirect_only = phantom_laycol["indirect"]
apply_to_children(view_layer.layer_collection, restore_visibility_state)