2026-03-11_4
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
import bpy
|
||||
from bpy.types import AddonPreferences
|
||||
from bpy.props import StringProperty, BoolProperty, FloatProperty, EnumProperty
|
||||
|
||||
from .panels import BONEWIDGET_PT_bw_panel_main
|
||||
from .operators import BONEWIDGET_OT_reset_default_images, BONEWIDGET_OT_user_data_filebrowser
|
||||
|
||||
|
||||
class BoneWidget_preferences(AddonPreferences):
|
||||
bl_idname = __package__
|
||||
|
||||
# Use Rigify Defaults
|
||||
use_rigify_defaults: BoolProperty(
|
||||
name="Use Rigify Defaults",
|
||||
description="Use the same naming convention for widget creation (disable if you prefer your naming convention)",
|
||||
default=True,
|
||||
)
|
||||
|
||||
# widget prefix
|
||||
widget_prefix: StringProperty(
|
||||
name="Bone Widget prefix",
|
||||
description="Choose a prefix for the widget objects",
|
||||
default="WGT-",
|
||||
)
|
||||
|
||||
# symmetry suffix
|
||||
symmetry_suffix: StringProperty(
|
||||
name="Bone Widget symmetry suffix",
|
||||
description="Choose a naming convention for the symmetrical widgets, separate by semicolon.",
|
||||
default="L; R",
|
||||
)
|
||||
|
||||
# collection name
|
||||
bonewidget_collection_name: StringProperty(
|
||||
name="Bone Widget collection name",
|
||||
description="Choose a name for the collection the widgets will appear",
|
||||
default="WGTS",
|
||||
)
|
||||
|
||||
def panel_category_update_fn(self, context):
|
||||
has_panel = hasattr(bpy.types, BONEWIDGET_PT_bw_panel_main.bl_idname)
|
||||
if has_panel:
|
||||
try:
|
||||
bpy.utils.unregister_class(BONEWIDGET_PT_bw_panel_main)
|
||||
except:
|
||||
pass
|
||||
BONEWIDGET_PT_bw_panel_main.bl_category = self.panel_category
|
||||
bpy.utils.register_class(BONEWIDGET_PT_bw_panel_main)
|
||||
|
||||
panel_category: StringProperty(
|
||||
name="Panel Category",
|
||||
description="Category to show Bone-Widgets panel",
|
||||
default="Rigging",
|
||||
update=panel_category_update_fn,
|
||||
)
|
||||
|
||||
preview_panel_size: FloatProperty(
|
||||
name="Preview Panel Size",
|
||||
description="Size of the Preview Panel",
|
||||
default=6.0,
|
||||
min=1.0,
|
||||
max=10.0,
|
||||
precision=1,
|
||||
)
|
||||
|
||||
preview_popup_size: FloatProperty(
|
||||
name="Preview Popup Size",
|
||||
description="Size of the Preview Popup Thumbnails",
|
||||
default=3.5,
|
||||
min=1.0,
|
||||
max=10.0,
|
||||
precision=1,
|
||||
)
|
||||
|
||||
preview_default: BoolProperty(
|
||||
name="Default Preview State",
|
||||
description="Default state of preview panel",
|
||||
default=True,
|
||||
)
|
||||
|
||||
edit_bone_colors: EnumProperty(
|
||||
name="Edit Bone Colors",
|
||||
description="Behavior of Edit Bone colors",
|
||||
items=[
|
||||
('DEFAULT', "Default", "Set the Edit Bone color to the default colors"),
|
||||
('LINKED', "Linked",
|
||||
"Use the same colors for both the Edit bones and Pose bones"),
|
||||
('SEPARATE', "Separate",
|
||||
"Edit bones and Pose bones will have their own colors"),
|
||||
],
|
||||
default='DEFAULT'
|
||||
)
|
||||
|
||||
clear_both_modes: bpy.props.BoolProperty(
|
||||
name="Clear All Bone Color",
|
||||
description='When enabled, bone colors from Edit mode and Pose mode will be cleared. When disabled, only the color from the current mode will be cleared',
|
||||
default=True
|
||||
)
|
||||
|
||||
symmetrize_color: bpy.props.BoolProperty(
|
||||
name="Symmetrize Bone Colors",
|
||||
description='When enabled, bone colors will be copied when you symmetrize a widget. When disabled, only the shape will be symmetrized',
|
||||
default=True
|
||||
)
|
||||
|
||||
use_default_location: bpy.props.BoolProperty(
|
||||
name="Use default location",
|
||||
description='When enabled, user widgets and color sets will be saved to extensions/.user/{repository_name}/bone_widget/bone_widget_custom_data',
|
||||
default=True
|
||||
)
|
||||
|
||||
user_data_location: StringProperty(
|
||||
name="User Data Location",
|
||||
description="Choose a location where you want to save custom data",
|
||||
default="",
|
||||
)
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
box = layout.box()
|
||||
box.label(text="Widget Naming Convention:")
|
||||
box.prop(self, "use_rigify_defaults", text="Use Rigify Defaults")
|
||||
|
||||
box_row = box.row()
|
||||
box_col = box_row.column()
|
||||
box_col.prop(self, "widget_prefix", text="Widget Prefix")
|
||||
box_col.prop(self, "bonewidget_collection_name",
|
||||
text="Collection name")
|
||||
box_row.enabled = not self.use_rigify_defaults
|
||||
|
||||
box_row = box.row()
|
||||
box_row = box.row()
|
||||
box_row.prop(self, "symmetry_suffix", text="Symmetry suffix")
|
||||
|
||||
row = layout.row()
|
||||
|
||||
box = layout.box()
|
||||
box_col = box.column()
|
||||
box_col.label(text="Set the category to show Bone-Widgets panel:")
|
||||
box_col.prop(self, "panel_category")
|
||||
|
||||
# edit bone colors
|
||||
row = layout.row()
|
||||
box = layout.box()
|
||||
box.label(text="Bone Color Behavior:")
|
||||
row = box.row()
|
||||
row.prop(self, "edit_bone_colors")
|
||||
row = box.row()
|
||||
row.label(text="Clearing Colors:")
|
||||
row.prop(self, "clear_both_modes")
|
||||
row = box.row()
|
||||
row.label(text="Symmetrize Colors:")
|
||||
row.prop(self, "symmetrize_color")
|
||||
|
||||
# preview area
|
||||
row = layout.row()
|
||||
box = layout.box()
|
||||
|
||||
box.label(text="Thumbnail Previews:")
|
||||
box_row = box.row()
|
||||
box_row.prop(self, "preview_default",
|
||||
text="Display Previews by Default")
|
||||
|
||||
box_row = box.row()
|
||||
box_col = box_row.column()
|
||||
box_col.label(text="Preview Panel Size:")
|
||||
box_row.prop(self, "preview_panel_size", text="")
|
||||
|
||||
box_row = box.row()
|
||||
box_col = box_row.column()
|
||||
box_col.label(text="Preview Popup Size:")
|
||||
box_row.prop(self, "preview_popup_size", text="")
|
||||
|
||||
# custom data
|
||||
row = layout.row()
|
||||
box = layout.box()
|
||||
|
||||
box.label(text="Custom Data:")
|
||||
box_row = box.row()
|
||||
box_row.prop(self, "use_default_location", text="Use Default Location")
|
||||
|
||||
box_row = box.row()
|
||||
box_col = box_row.column()
|
||||
box_col.prop(self, "user_data_location", text="Custom Path")
|
||||
box_row.operator("bonewidget.user_data_filebrowser",
|
||||
icon="FILEBROWSER", text="")
|
||||
box_row.enabled = not self.use_default_location
|
||||
|
||||
# reset button
|
||||
layout.separator()
|
||||
row = layout.row()
|
||||
row = row.split(factor=.75)
|
||||
row.label(text="Reset Default Widget Thumbnails")
|
||||
row.operator("bonewidget.reset_default_images", icon="ERROR")
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(BoneWidget_preferences)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(BoneWidget_preferences)
|
||||
Reference in New Issue
Block a user