expre-gen/blender/3.4/scripts/addons/mesh_snap_utilities_line/preferences.py
2025-10-17 09:47:23 +08:00

213 lines
8.0 KiB
Python

# SPDX-License-Identifier: GPL-2.0-or-later
import bpy
from bpy.props import (
EnumProperty,
StringProperty,
BoolProperty,
IntProperty,
FloatVectorProperty,
FloatProperty,
)
from bpy.app.translations import contexts as i18n_contexts
import rna_keymap_ui
class SnapUtilitiesPreferences(bpy.types.AddonPreferences):
# this must match the addon name, use '__package__'
# when defining this in a submodule of a python package.
bl_idname = __package__
intersect: BoolProperty(name="Intersect",
description="intersects created line with the existing edges, even if the lines do not intersect",
default=True)
create_face: BoolProperty(name="Create faces",
description="Create faces defined by enclosed edges",
default=False)
outer_verts: BoolProperty(name="Snap to outer vertices",
description="The vertices of the objects are not activated also snapped",
default=True)
increments_grid: BoolProperty(name="Increments of Grid",
description="Snap to increments of grid",
default=False)
auto_constrain: BoolProperty(name="Automatic Constraint",
description="Detects a direction to constrain depending on the position of the mouse",
default=False)
incremental: FloatProperty(name="Incremental",
description="Snap in defined increments",
default=0,
min=0,
step=1,
precision=3)
relative_scale: FloatProperty(name="Relative Scale",
description="Value that divides the global scale",
default=1,
min=0,
step=1,
precision=3)
out_color: FloatVectorProperty(name="Floor",
default=(0.0, 0.0, 0.0, 0.5),
size=4,
subtype="COLOR",
min=0,
max=1)
face_color: FloatVectorProperty(name="Face Highlighted",
default=(1.0, 0.8, 0.0, 0.5),
size=4,
subtype="COLOR",
min=0,
max=1)
edge_color: FloatVectorProperty(name="Edge Highlighted",
default=(0.0, 0.8, 1.0, 0.5),
size=4,
subtype="COLOR",
min=0,
max=1)
vert_color: FloatVectorProperty(name="Vertex Highlighted",
default=(1.0, 0.5, 0.0, 0.5),
size=4, subtype="COLOR",
min=0,
max=1)
center_color: FloatVectorProperty(name="Middle of the Edge",
default=(1.0, 0.0, 1.0, 1.0),
size=4,
subtype="COLOR",
min=0,
max=1)
perpendicular_color: FloatVectorProperty(name="Perpendicular Point",
default=(0.1, 0.5, 0.5, 1.0),
size=4,
subtype="COLOR",
min=0,
max=1)
constrain_shift_color: FloatVectorProperty(name="Shift Constrain",
default=(0.8, 0.5, 0.4, 1.0),
size=4,
subtype="COLOR",
min=0,
max=1)
tabs: EnumProperty(name="Tabs",
items=[("GENERAL", "General", ""),
("KEYMAPS", "Keymaps", ""),
("COLORS", "Colors", ""),
("HELP", "Links", ""), ],
default="GENERAL")
def draw(self, context):
layout = self.layout
# TAB BAR
row = layout.row()
row.prop(self, "tabs", expand=True)
box = layout.box()
if self.tabs == "GENERAL":
self.draw_general(box)
elif self.tabs == "COLORS":
self.draw_snap_utilities_colors(box)
elif self.tabs == "KEYMAPS":
self.draw_snap_utilities_keymaps(context, box)
elif self.tabs == "HELP":
self.draw_snap_utilities_help(box)
def draw_general(self, layout):
row = layout.row()
col = row.column()
col.label(text="Snap Properties:")
col.prop(self, "incremental")
col.prop(self, "increments_grid")
if self.increments_grid:
col.prop(self, "relative_scale")
col.prop(self, "outer_verts")
row.separator()
col = row.column()
col.label(text="Line Tool:")
col.prop(self, "intersect")
col.prop(self, "create_face")
def draw_snap_utilities_colors(self, layout):
layout.use_property_split = True
flow = layout.grid_flow(
row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(self, "out_color")
flow.prop(self, "constrain_shift_color")
flow.prop(self, "face_color")
flow.prop(self, "edge_color")
flow.prop(self, "vert_color")
flow.prop(self, "center_color")
flow.prop(self, "perpendicular_color")
def draw_snap_utilities_help(self, layout):
#layout.operator("wm.url_open", text="Gumroad Page", icon='HELP',).url = "https://gum.co/IaqQf"
#layout.operator("wm.url_open", text="Blender Market Page", icon='HELP',).url = "https://blendermarket.com/products/snap-utilities"
layout.operator("wm.url_open", text="Wiki", icon='HELP',
).url = "https://github.com/Mano-Wii/Addon-Snap-Utilities-Line/wiki"
layout.operator("wm.url_open", text="Forum", icon='HELP',
).url = "https://blenderartists.org/t/cad-snap-utilities"
def draw_snap_utilities_keymaps(self, context, layout):
from .keys import (
generate_snap_utilities_global_keymaps,
generate_snap_utilities_tools_keymaps,
)
wm = context.window_manager
#kc = wm.keyconfigs.addon
kc = wm.keyconfigs.user
layout.label(text="Global:")
for km_name, km_args, km_content in generate_snap_utilities_global_keymaps():
km = kc.keymaps.get(km_name)
if km:
self.draw_snap_utilities_km(kc, km, layout)
layout.label(text="Tools:")
for km_name, km_args, km_content in generate_snap_utilities_tools_keymaps():
km = kc.keymaps.get(km_name)
if km:
self.draw_snap_utilities_km(kc, km, layout)
@staticmethod
def draw_snap_utilities_km(kc, km, layout):
layout.context_pointer_set("keymap", km)
row = layout.row()
row.prop(km, "show_expanded_items", text="", emboss=False)
row.label(text=km.name, text_ctxt=i18n_contexts.id_windowmanager)
if km.show_expanded_items:
col = layout.column()
for kmi in km.keymap_items:
if "snap_utilities" in kmi.idname:
rna_keymap_ui.draw_kmi(
["ADDON", "USER", "DEFAULT"], kc, km, kmi, col, 0)