diff options
Diffstat (limited to 'object_collection_manager')
-rw-r--r-- | object_collection_manager/__init__.py | 138 | ||||
-rw-r--r-- | object_collection_manager/operators.py | 42 | ||||
-rw-r--r-- | object_collection_manager/preferences.py | 20 | ||||
-rw-r--r-- | object_collection_manager/qcd_init.py | 21 |
4 files changed, 83 insertions, 138 deletions
diff --git a/object_collection_manager/__init__.py b/object_collection_manager/__init__.py index bc62e947..0e093bc5 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, 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__": diff --git a/object_collection_manager/operators.py b/object_collection_manager/operators.py index a12b8339..16d8bba9 100644 --- a/object_collection_manager/operators.py +++ b/object_collection_manager/operators.py @@ -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'} diff --git a/object_collection_manager/preferences.py b/object_collection_manager/preferences.py index d155b9ce..4a1d6540 100644 --- a/object_collection_manager/preferences.py +++ b/object_collection_manager/preferences.py @@ -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: diff --git a/object_collection_manager/qcd_init.py b/object_collection_manager/qcd_init.py index 3a8dfc2f..41363b7b 100644 --- a/object_collection_manager/qcd_init.py +++ b/object_collection_manager/qcd_init.py @@ -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 = [] |