Merge branch 'blender-v3.6-release'
[blender-addons.git] / mesh_snap_utilities_line / __init__.py
blobae5cb5ba5472980a8dc3f22d2da81c00def80d76
1 # SPDX-License-Identifier: GPL-2.0-or-later
3 # Contact for more information about the Addon:
4 # Email: germano.costa@ig.com.br
5 # Twitter: wii_mano @mano_wii
6 bl_info = {
7 "name": "Snap_Utilities_Line",
8 "author": "Germano Cavalcante",
9 "version": (6, 7, 1),
10 "blender": (3, 2, 0),
11 "location": "View3D > TOOLS > Line Tool",
12 "description": "Extends Blender Snap controls",
13 "doc_url": "{BLENDER_MANUAL_URL}/addons/mesh/snap_utilities_line.html",
14 "category": "Mesh",
17 if "bpy" in locals():
18 import importlib
19 importlib.reload(navigation_ops)
20 importlib.reload(widgets)
21 importlib.reload(preferences)
22 importlib.reload(op_line)
23 importlib.reload(keys)
24 else:
25 from . import navigation_ops
26 from . import widgets
27 from . import preferences
28 from . import op_line
29 from . import keys
31 # autopep8: off
32 import bpy
33 from bpy.utils.toolsystem import ToolDef
34 # autopep8: on
36 if not __package__:
37 __package__ = "mesh_snap_utilities_line"
40 @ToolDef.from_fn
41 def tool_line():
42 import os
44 def draw_settings(context, layout, tool):
45 addon_prefs = context.preferences.addons[__package__].preferences
47 layout.prop(addon_prefs, "incremental")
48 layout.prop(addon_prefs, "increments_grid")
49 layout.prop(addon_prefs, "intersect")
50 layout.prop(addon_prefs, "create_face")
51 if context.mode == 'EDIT_MESH':
52 layout.prop(addon_prefs, "outer_verts")
53 # props = tool.operator_properties("mesh.snap_utilities_line")
54 # layout.prop(props, "radius")
56 icons_dir = os.path.join(os.path.dirname(__file__), "icons")
58 return dict(
59 idname="snap_utilities.line",
60 label="Make Line",
61 description=(
62 "Make Lines\n"
63 "Connect them to split faces"
65 icon=os.path.join(icons_dir, "ops.mesh.snap_utilities_line"),
66 widget="MESH_GGT_snap_point",
67 # operator="mesh.snap_utilities_line",
68 keymap=keys.km_tool_snap_utilities_line,
69 draw_settings=draw_settings,
73 # -----------------------------------------------------------------------------
74 # Tool Registration
77 def get_tool_list(space_type, context_mode):
78 from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
79 cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type)
80 return cls._tools[context_mode]
83 def register_snap_tools():
84 tools = get_tool_list('VIEW_3D', 'EDIT_MESH')
86 for index, tool in enumerate(tools, 1):
87 if isinstance(tool, ToolDef) and tool.label == "Measure":
88 break
90 tools[:index] += None, tool_line
92 del tools
95 def unregister_snap_tools():
96 tools = get_tool_list('VIEW_3D', 'EDIT_MESH')
98 index = tools.index(tool_line) - 1 # None
99 tools.pop(index)
100 tools.remove(tool_line)
102 del tools
103 del index
106 def register_keymaps():
107 keyconfigs = bpy.context.window_manager.keyconfigs
108 kc_defaultconf = keyconfigs.default
109 kc_addonconf = keyconfigs.addon
110 # In background mode.
111 if kc_defaultconf is None or kc_addonconf is None:
112 return
114 # TODO: find the user defined tool_mouse.
115 from bl_keymap_utils.io import keyconfig_init_from_data
116 keyconfig_init_from_data(
117 kc_defaultconf, keys.generate_empty_snap_utilities_tools_keymaps())
118 keyconfig_init_from_data(
119 kc_addonconf, keys.generate_snap_utilities_keymaps())
121 # snap_modalkeymap = kc_addonconf.keymaps.find(keys.km_snap_utilities_modal_keymap)
122 # snap_modalkeymap.assign("MESH_OT_snap_utilities_line")
125 def unregister_keymaps():
126 keyconfigs = bpy.context.window_manager.keyconfigs
127 defaultmap = getattr(keyconfigs.get("Blender"), "keymaps", None)
128 addonmap = getattr(keyconfigs.get("Blender addon"), "keymaps", None)
129 # In background mode.
130 if defaultmap is None or addonmap is None:
131 return
133 for keyconfig_data in keys.generate_snap_utilities_global_keymaps():
134 km_name, km_args, km_content = keyconfig_data
135 keymap = addonmap.find(km_name, **km_args)
136 keymap_items = keymap.keymap_items
137 for item in km_content['items']:
138 item_id = keymap_items.find(item[0])
139 if item_id != -1:
140 keymap_items.remove(keymap_items[item_id])
142 for keyconfig_data in keys.generate_snap_utilities_tools_keymaps():
143 km_name, km_args, km_content = keyconfig_data
144 addonmap.remove(addonmap.find(km_name, **km_args))
146 for keyconfig_data in keys.generate_empty_snap_utilities_tools_keymaps():
147 km_name, km_args, km_content = keyconfig_data
148 defaultmap.remove(defaultmap.find(km_name, **km_args))
151 # -----------------------------------------------------------------------------
152 # Addon Registration
154 classes = (
155 preferences.SnapUtilitiesPreferences,
156 op_line.SnapUtilitiesLine,
157 navigation_ops.VIEW3D_OT_rotate_custom_pivot,
158 navigation_ops.VIEW3D_OT_zoom_custom_target,
159 widgets.SnapPointWidget,
160 widgets.SnapPointWidgetGroup,
164 def register():
165 for cls in classes:
166 bpy.utils.register_class(cls)
168 register_snap_tools()
169 register_keymaps()
172 def unregister():
173 unregister_keymaps()
174 unregister_snap_tools()
176 for cls in reversed(classes):
177 bpy.utils.unregister_class(cls)
180 if __name__ == "__main__":
181 register()