1 # ##### BEGIN GPL LICENSE BLOCK #####
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 # ##### END GPL LICENSE BLOCK #####
19 # Copyright 2011, Ryan Inch
24 importlib
.reload(internals
)
25 importlib
.reload(operator_utils
)
26 importlib
.reload(operators
)
28 importlib
.reload(preferences
)
31 from . import internals
32 from . import operator_utils
33 from . import operators
35 from . import preferences
38 from bpy
.app
.handlers
import persistent
39 from bpy
.types
import PropertyGroup
40 from bpy
.props
import (
50 class CollectionManagerProperties(PropertyGroup
):
51 cm_list_collection
: CollectionProperty(type=internals
.CMListCollection
)
52 cm_list_index
: IntProperty()
54 show_exclude
: BoolProperty(default
=True, name
="[EC] Exclude from View Layer")
55 show_selectable
: BoolProperty(default
=True, name
="[SS] Disable Selection")
56 show_hide_viewport
: BoolProperty(default
=True, name
="[VV] Hide in Viewport")
57 show_disable_viewport
: BoolProperty(default
=False, name
="[DV] Disable in Viewports")
58 show_render
: BoolProperty(default
=False, name
="[RR] Disable in Renders")
59 show_holdout
: BoolProperty(default
=False, name
="[HH] Holdout")
60 show_indirect_only
: BoolProperty(default
=False, name
="[IO] Indirect Only")
62 align_local_ops
: BoolProperty(default
=False, name
="Align Local Options",
63 description
="Align local options in a column to the right")
65 in_phantom_mode
: BoolProperty(default
=False)
67 update_header
: CollectionProperty(type=internals
.CMListCollection
)
69 ui_separator
: StringProperty(name
="", default
="")
71 qcd_slots_blend_data
: StringProperty()
75 addon_disable_objects_hotkey_keymaps
= []
78 internals
.CMListCollection
,
79 internals
.CMSendReport
,
80 operators
.SetActiveCollection
,
81 operators
.ExpandAllOperator
,
82 operators
.ExpandSublevelOperator
,
83 operators
.CMExcludeOperator
,
84 operators
.CMUnExcludeAllOperator
,
85 operators
.CMRestrictSelectOperator
,
86 operators
.CMUnRestrictSelectAllOperator
,
87 operators
.CMHideOperator
,
88 operators
.CMUnHideAllOperator
,
89 operators
.CMDisableViewportOperator
,
90 operators
.CMUnDisableViewportAllOperator
,
91 operators
.CMDisableRenderOperator
,
92 operators
.CMUnDisableRenderAllOperator
,
93 operators
.CMHoldoutOperator
,
94 operators
.CMUnHoldoutAllOperator
,
95 operators
.CMIndirectOnlyOperator
,
96 operators
.CMUnIndirectOnlyAllOperator
,
97 operators
.CMNewCollectionOperator
,
98 operators
.CMRemoveCollectionOperator
,
99 operators
.CMRemoveEmptyCollectionsOperator
,
100 operators
.CMSelectCollectionObjectsOperator
,
101 operators
.CMSetCollectionOperator
,
102 operators
.CMPhantomModeOperator
,
103 operators
.CMApplyPhantomModeOperator
,
104 operators
.CMDisableObjectsOperator
,
105 operators
.CMDisableUnSelectedObjectsOperator
,
106 operators
.CMRestoreDisabledObjectsOperator
,
107 preferences
.CMPreferences
,
109 ui
.CollectionManager
,
110 ui
.CMDisplayOptionsPanel
,
112 CollectionManagerProperties
,
117 def depsgraph_update_post_handler(dummy
):
118 if internals
.move_triggered
:
119 internals
.move_triggered
= False
122 internals
.move_selection
.clear()
123 internals
.move_active
= None
126 def undo_redo_post_handler(dummy
):
127 internals
.move_selection
.clear()
128 internals
.move_active
= None
131 def menu_addition(self
, context
):
134 layout
.operator('view3d.collection_manager')
136 if bpy
.context
.preferences
.addons
[__package__
].preferences
.enable_qcd
:
137 layout
.operator('view3d.qcd_move_widget')
141 def disable_objects_menu_addition(self
, context
):
142 preferences
= bpy
.context
.preferences
.addons
[__package__
].preferences
143 if preferences
.enable_disable_objects_override
:
146 layout
.operator('view3d.disable_selected_objects')
147 layout
.operator('view3d.disable_unselected_objects')
148 layout
.operator('view3d.restore_disabled_objects')
151 def register_disable_objects_hotkeys():
152 wm
= bpy
.context
.window_manager
153 if wm
.keyconfigs
.addon
: # not present when started with --background
154 km
= wm
.keyconfigs
.addon
.keymaps
.new(name
='Object Mode')
155 kmi
= km
.keymap_items
.new('view3d.disable_selected_objects', 'H', 'PRESS')
156 addon_disable_objects_hotkey_keymaps
.append((km
, kmi
))
158 km
= wm
.keyconfigs
.addon
.keymaps
.new(name
='Object Mode')
159 kmi
= km
.keymap_items
.new('view3d.disable_unselected_objects', 'H', 'PRESS', shift
=True)
160 addon_disable_objects_hotkey_keymaps
.append((km
, kmi
))
162 km
= wm
.keyconfigs
.addon
.keymaps
.new(name
='Object Mode')
163 kmi
= km
.keymap_items
.new('view3d.restore_disabled_objects', 'H', 'PRESS', alt
=True)
164 addon_disable_objects_hotkey_keymaps
.append((km
, kmi
))
166 def unregister_disable_objects_hotkeys():
167 # remove keymaps when disable objects hotkeys are deactivated
168 for km
, kmi
in addon_disable_objects_hotkey_keymaps
:
169 km
.keymap_items
.remove(kmi
)
170 addon_disable_objects_hotkey_keymaps
.clear()
175 bpy
.utils
.register_class(cls
)
177 bpy
.types
.Scene
.collection_manager
= PointerProperty(type=CollectionManagerProperties
)
179 # create the global menu hotkey
180 wm
= bpy
.context
.window_manager
181 if wm
.keyconfigs
.addon
: # not present when started with --background
182 km
= wm
.keyconfigs
.addon
.keymaps
.new(name
='Object Mode')
183 kmi
= km
.keymap_items
.new('view3d.collection_manager', 'M', 'PRESS')
184 addon_keymaps
.append((km
, kmi
))
186 # Add Collection Manager & QCD Move Widget to the Object->Collections menu
187 bpy
.types
.VIEW3D_MT_object_collection
.prepend(menu_addition
)
189 # Add Disable Object Operators to the Object->Show/Hide menu
190 bpy
.types
.VIEW3D_MT_object_showhide
.append(disable_objects_menu_addition
)
192 bpy
.app
.handlers
.depsgraph_update_post
.append(depsgraph_update_post_handler
)
193 bpy
.app
.handlers
.undo_post
.append(undo_redo_post_handler
)
194 bpy
.app
.handlers
.redo_post
.append(undo_redo_post_handler
)
196 preferences
= bpy
.context
.preferences
.addons
[__package__
].preferences
197 if preferences
.enable_disable_objects_override
:
198 register_disable_objects_hotkeys()
201 preferences
= bpy
.context
.preferences
.addons
[__package__
].preferences
202 if preferences
.enable_disable_objects_override
:
203 unregister_disable_objects_hotkeys()
206 bpy
.utils
.unregister_class(cls
)
208 # Remove Collection Manager & QCD Move Widget from the Object->Collections menu
209 bpy
.types
.VIEW3D_MT_object_collection
.remove(menu_addition
)
211 # Remove Disable Object Operators to the Object->Show/Hide menu
212 bpy
.types
.VIEW3D_MT_object_showhide
.remove(disable_objects_menu_addition
)
214 bpy
.app
.handlers
.depsgraph_update_post
.remove(depsgraph_update_post_handler
)
215 bpy
.app
.handlers
.undo_post
.remove(undo_redo_post_handler
)
216 bpy
.app
.handlers
.redo_post
.remove(undo_redo_post_handler
)
218 del bpy
.types
.Scene
.collection_manager
220 # remove keymaps when add-on is deactivated
221 for km
, kmi
in addon_keymaps
:
222 km
.keymap_items
.remove(kmi
)
223 addon_keymaps
.clear()