Collection Manager: Add disable override. Task: T69577.
Add an override checkbox to the preferences to override the object hiding hotkeys with object disabling hotkeys and add menu items to the Object->Show/Hide menu for the disable object operators. Disabling objects is needed to preserve their visibility state when excluding and unexcluding collections. This makes it easier to disable objects, and disabling objects prevents QCD slot switching from resetting the objects visibility state.
This commit is contained in:
parent
8488f40e0b
commit
7cc2e4b14f
|
@ -22,7 +22,7 @@ bl_info = {
|
|||
"name": "Collection Manager",
|
||||
"description": "Manage collections and their objects",
|
||||
"author": "Ryan Inch",
|
||||
"version": (2, 17, 1),
|
||||
"version": (2, 18, 0),
|
||||
"blender": (2, 80, 0),
|
||||
"location": "View3D - Object Mode (Shortcut - M)",
|
||||
"warning": '', # used for warning icon and text in addons panel
|
||||
|
@ -35,6 +35,7 @@ bl_info = {
|
|||
if "bpy" in locals():
|
||||
import importlib
|
||||
|
||||
importlib.reload(cm_init)
|
||||
importlib.reload(internals)
|
||||
importlib.reload(operator_utils)
|
||||
importlib.reload(operators)
|
||||
|
@ -45,6 +46,7 @@ if "bpy" in locals():
|
|||
importlib.reload(preferences)
|
||||
|
||||
else:
|
||||
from . import cm_init
|
||||
from . import internals
|
||||
from . import operator_utils
|
||||
from . import operators
|
||||
|
@ -55,124 +57,9 @@ else:
|
|||
from . import preferences
|
||||
|
||||
import bpy
|
||||
from bpy.app.handlers import persistent
|
||||
from bpy.types import PropertyGroup
|
||||
from bpy.props import (
|
||||
CollectionProperty,
|
||||
EnumProperty,
|
||||
IntProperty,
|
||||
BoolProperty,
|
||||
StringProperty,
|
||||
PointerProperty,
|
||||
)
|
||||
|
||||
|
||||
class CollectionManagerProperties(PropertyGroup):
|
||||
cm_list_collection: CollectionProperty(type=internals.CMListCollection)
|
||||
cm_list_index: IntProperty()
|
||||
|
||||
show_exclude: BoolProperty(default=True, name="[EC] Exclude from View Layer")
|
||||
show_selectable: BoolProperty(default=True, name="[SS] Disable Selection")
|
||||
show_hide_viewport: BoolProperty(default=True, name="[VV] Hide in Viewport")
|
||||
show_disable_viewport: BoolProperty(default=False, name="[DV] Disable in Viewports")
|
||||
show_render: BoolProperty(default=False, name="[RR] Disable in Renders")
|
||||
show_holdout: BoolProperty(default=False, name="[HH] Holdout")
|
||||
show_indirect_only: BoolProperty(default=False, name="[IO] Indirect Only")
|
||||
|
||||
align_local_ops: BoolProperty(default=False, name="Align Local Options",
|
||||
description="Align local options in a column to the right")
|
||||
|
||||
in_phantom_mode: BoolProperty(default=False)
|
||||
|
||||
update_header: CollectionProperty(type=internals.CMListCollection)
|
||||
|
||||
ui_separator: StringProperty(name="", default="")
|
||||
|
||||
qcd_slots_blend_data: StringProperty()
|
||||
|
||||
|
||||
addon_keymaps = []
|
||||
|
||||
classes = (
|
||||
internals.CMListCollection,
|
||||
internals.CMSendReport,
|
||||
operators.SetActiveCollection,
|
||||
operators.ExpandAllOperator,
|
||||
operators.ExpandSublevelOperator,
|
||||
operators.CMExcludeOperator,
|
||||
operators.CMUnExcludeAllOperator,
|
||||
operators.CMRestrictSelectOperator,
|
||||
operators.CMUnRestrictSelectAllOperator,
|
||||
operators.CMHideOperator,
|
||||
operators.CMUnHideAllOperator,
|
||||
operators.CMDisableViewportOperator,
|
||||
operators.CMUnDisableViewportAllOperator,
|
||||
operators.CMDisableRenderOperator,
|
||||
operators.CMUnDisableRenderAllOperator,
|
||||
operators.CMHoldoutOperator,
|
||||
operators.CMUnHoldoutAllOperator,
|
||||
operators.CMIndirectOnlyOperator,
|
||||
operators.CMUnIndirectOnlyAllOperator,
|
||||
operators.CMNewCollectionOperator,
|
||||
operators.CMRemoveCollectionOperator,
|
||||
operators.CMRemoveEmptyCollectionsOperator,
|
||||
operators.CMSelectCollectionObjectsOperator,
|
||||
operators.CMSetCollectionOperator,
|
||||
operators.CMPhantomModeOperator,
|
||||
operators.CMApplyPhantomModeOperator,
|
||||
preferences.CMPreferences,
|
||||
ui.CM_UL_items,
|
||||
ui.CollectionManager,
|
||||
ui.CMDisplayOptionsPanel,
|
||||
ui.SpecialsMenu,
|
||||
CollectionManagerProperties,
|
||||
)
|
||||
|
||||
@persistent
|
||||
def depsgraph_update_post_handler(dummy):
|
||||
if internals.move_triggered:
|
||||
internals.move_triggered = False
|
||||
return
|
||||
|
||||
internals.move_selection.clear()
|
||||
internals.move_active = None
|
||||
|
||||
@persistent
|
||||
def undo_redo_post_handler(dummy):
|
||||
internals.move_selection.clear()
|
||||
internals.move_active = None
|
||||
|
||||
|
||||
def menu_addition(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator('view3d.collection_manager')
|
||||
|
||||
if bpy.context.preferences.addons[__package__].preferences.enable_qcd:
|
||||
layout.operator('view3d.qcd_move_widget')
|
||||
|
||||
layout.separator()
|
||||
|
||||
|
||||
def register():
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
bpy.types.Scene.collection_manager = PointerProperty(type=CollectionManagerProperties)
|
||||
|
||||
# create the global menu hotkey
|
||||
wm = bpy.context.window_manager
|
||||
if wm.keyconfigs.addon: # not present when started with --background
|
||||
km = wm.keyconfigs.addon.keymaps.new(name='Object Mode')
|
||||
kmi = km.keymap_items.new('view3d.collection_manager', 'M', 'PRESS')
|
||||
addon_keymaps.append((km, kmi))
|
||||
|
||||
# Add Collection Manager & QCD Move Widget to the Object->Collections menu
|
||||
bpy.types.VIEW3D_MT_object_collection.prepend(menu_addition)
|
||||
|
||||
bpy.app.handlers.depsgraph_update_post.append(depsgraph_update_post_handler)
|
||||
bpy.app.handlers.undo_post.append(undo_redo_post_handler)
|
||||
bpy.app.handlers.redo_post.append(undo_redo_post_handler)
|
||||
cm_init.register_cm()
|
||||
|
||||
if bpy.context.preferences.addons[__package__].preferences.enable_qcd:
|
||||
qcd_init.register_qcd()
|
||||
|
@ -181,22 +68,7 @@ def unregister():
|
|||
if bpy.context.preferences.addons[__package__].preferences.enable_qcd:
|
||||
qcd_init.unregister_qcd()
|
||||
|
||||
for cls in classes:
|
||||
bpy.utils.unregister_class(cls)
|
||||
|
||||
# Remove Collection Manager & QCD Move Widget from the Object->Collections menu
|
||||
bpy.types.VIEW3D_MT_object_collection.remove(menu_addition)
|
||||
|
||||
bpy.app.handlers.depsgraph_update_post.remove(depsgraph_update_post_handler)
|
||||
bpy.app.handlers.undo_post.remove(undo_redo_post_handler)
|
||||
bpy.app.handlers.redo_post.remove(undo_redo_post_handler)
|
||||
|
||||
del bpy.types.Scene.collection_manager
|
||||
|
||||
# remove keymaps when add-on is deactivated
|
||||
for km, kmi in addon_keymaps:
|
||||
km.keymap_items.remove(kmi)
|
||||
addon_keymaps.clear()
|
||||
cm_init.unregister_cm()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -1387,3 +1387,45 @@ class CMApplyPhantomModeOperator(Operator):
|
|||
cm.in_phantom_mode = False
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
class CMDisableObjectsOperator(Operator):
|
||||
'''Disable selected objects in viewports'''
|
||||
bl_label = "Disable Selected"
|
||||
bl_idname = "view3d.disable_selected_objects"
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
|
||||
def execute(self, context):
|
||||
for obj in context.selected_objects:
|
||||
obj.hide_viewport = True
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
class CMDisableUnSelectedObjectsOperator(Operator):
|
||||
'''Disable unselected objects in viewports'''
|
||||
bl_label = "Disable Unselected"
|
||||
bl_idname = "view3d.disable_unselected_objects"
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
|
||||
def execute(self, context):
|
||||
for obj in bpy.data.objects:
|
||||
if obj in context.visible_objects and not obj in context.selected_objects:
|
||||
obj.hide_viewport = True
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
|
||||
class CMRestoreDisabledObjectsOperator(Operator):
|
||||
'''Restore disabled objects in viewports'''
|
||||
bl_label = "Restore Disabled Objects"
|
||||
bl_idname = "view3d.restore_disabled_objects"
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
|
||||
def execute(self, context):
|
||||
for obj in bpy.data.objects:
|
||||
if obj.hide_viewport:
|
||||
obj.hide_viewport = False
|
||||
obj.select_set(True)
|
||||
|
||||
return {'FINISHED'}
|
||||
|
|
|
@ -26,8 +26,16 @@ from bpy.props import (
|
|||
FloatVectorProperty,
|
||||
)
|
||||
|
||||
from . import cm_init
|
||||
from . import qcd_init
|
||||
|
||||
def update_disable_objects_hotkeys_status(self, context):
|
||||
if self.enable_disable_objects_override:
|
||||
cm_init.register_disable_objects_hotkeys()
|
||||
|
||||
else:
|
||||
cm_init.unregister_disable_objects_hotkeys()
|
||||
|
||||
def update_qcd_status(self, context):
|
||||
if self.enable_qcd:
|
||||
qcd_init.register_qcd()
|
||||
|
@ -188,6 +196,17 @@ def set_tooltip_outline(self, values):
|
|||
class CMPreferences(AddonPreferences):
|
||||
bl_idname = __package__
|
||||
|
||||
# ENABLE DISABLE OBJECTS OVERRIDE
|
||||
enable_disable_objects_override: BoolProperty(
|
||||
name="Disable Objects Override",
|
||||
description=(
|
||||
"Replace the object hiding hotkeys with object disabling hotkeys and add them to the Object->Show/Hide menu.\n"
|
||||
"Disabling objects prevents them from being automatically shown again when collections are unexcluded"
|
||||
),
|
||||
default=False,
|
||||
update=update_disable_objects_hotkeys_status,
|
||||
)
|
||||
|
||||
# ENABLE QCD BOOLS
|
||||
enable_qcd: BoolProperty(
|
||||
name="QCD",
|
||||
|
@ -426,6 +445,7 @@ class CMPreferences(AddonPreferences):
|
|||
layout = self.layout
|
||||
box = layout.box()
|
||||
|
||||
box.row().prop(self, "enable_disable_objects_override")
|
||||
box.row().prop(self, "enable_qcd")
|
||||
|
||||
if not self.enable_qcd:
|
||||
|
|
|
@ -18,16 +18,27 @@
|
|||
|
||||
# Copyright 2011, Ryan Inch
|
||||
|
||||
if "bpy" in locals():
|
||||
import importlib
|
||||
|
||||
importlib.reload(internals)
|
||||
importlib.reload(qcd_move_widget)
|
||||
importlib.reload(qcd_operators)
|
||||
importlib.reload(ui)
|
||||
importlib.reload(preferences)
|
||||
|
||||
else:
|
||||
from . import internals
|
||||
from . import qcd_move_widget
|
||||
from . import qcd_operators
|
||||
from . import ui
|
||||
from . import preferences
|
||||
|
||||
import os
|
||||
import bpy
|
||||
import bpy.utils.previews
|
||||
from bpy.app.handlers import persistent
|
||||
|
||||
from . import internals
|
||||
from . import preferences
|
||||
from . import qcd_move_widget
|
||||
from . import qcd_operators
|
||||
from . import ui
|
||||
|
||||
addon_qcd_keymaps = []
|
||||
addon_qcd_view_hotkey_keymaps = []
|
||||
|
|
Loading…
Reference in New Issue