2025-07-01
This commit is contained in:
@@ -0,0 +1,506 @@
|
||||
from bpy.types import Panel
|
||||
import os
|
||||
|
||||
from ..functions import get_addon_preferences
|
||||
from ..utils.ui_utils import get_icons_set
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_uv_sync(Panel):
|
||||
bl_label = "UV Sync"
|
||||
bl_idname = "UVTOOLKIT_PT_uv_sync"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.operator("uv.toolkit_sync_mode", text="Toggle UV Sync", icon='UV_SYNC_SELECT')
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_uv_sync_settings(Panel):
|
||||
bl_label = "UV Sync Settings"
|
||||
bl_parent_id = "UVTOOLKIT_PT_uv_sync"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
addon_prefs = get_addon_preferences()
|
||||
layout.label(text="Sync Selected Elements")
|
||||
layout.prop(addon_prefs, "sync_selection", expand=True)
|
||||
layout.label(text="Sync Selection Mode")
|
||||
layout.prop(addon_prefs, "sync_uv_selction_mode", expand=True)
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_tools(Panel):
|
||||
bl_label = "Tools"
|
||||
bl_idname = "UVTOOLKIT_PT_tools"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
layout.operator("uv.toolkit_sharp_edges_from_uv_islands",
|
||||
icon_value=icons_coll["sharp_edges_from_uv_islands"].icon_id)
|
||||
prop = layout.operator("uv.seams_from_islands", icon_value=icons_coll["seams_from_islands"].icon_id)
|
||||
prop.mark_seams, prop.mark_sharp = True, False
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_border_seam", icon_value=icons_coll["border_seam"].icon_id)
|
||||
row.operator("uv.toolkit_mirror_seam", icon_value=icons_coll["mirror_seam"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_split_faces_move", text="Split Faces",
|
||||
icon_value=icons_coll["split_faces_move"].icon_id)
|
||||
row.operator("uv.toolkit_clear_all_seams", icon_value=icons_coll["clear_all_seams"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_udim_packing", icon_value=icons_coll["udim_packing"].icon_id)
|
||||
row.label(text="")
|
||||
# layout.label(text="Debug")
|
||||
# layout.scale_y = 2
|
||||
# layout.operator("uv.toolkit_test_op", icon='SHADERFX')
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_unwrap(Panel):
|
||||
bl_label = "Unwrap"
|
||||
bl_idname = "UVTOOLKIT_PT_unwrap"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_unwrap_selected", icon_value=icons_coll["unwrap_selected"].icon_id)
|
||||
row.operator("uv.toolkit_straighten_island",
|
||||
icon_value=icons_coll["straighten_island"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator('uv.toolkit_straighten',
|
||||
icon_value=icons_coll["straighten"].icon_id).gridify = False
|
||||
row.operator('uv.toolkit_straighten', text="Gridify",
|
||||
icon_value=icons_coll["gridify"].icon_id).gridify = True
|
||||
# row = layout.row(align=True)
|
||||
# row.operator("uv.toolkit_lazy_unwrap")
|
||||
# row.label(text="")
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_align(Panel):
|
||||
bl_label = "Align"
|
||||
bl_idname = "UVTOOLKIT_PT_align"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
scene = context.scene
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
|
||||
row = layout.row(align=True)
|
||||
# First column
|
||||
col = row.column(align=True)
|
||||
col.label(text="")
|
||||
col.operator('uv.toolkit_align_uv', text='', icon_value=icons_coll["align_uv_min_x"].icon_id).align_uv = 'MIN_U'
|
||||
# Second column
|
||||
col = row.column(align=True)
|
||||
col.scale_x = 3.15
|
||||
col.operator('uv.toolkit_align_uv', text='', icon_value=icons_coll["align_uv_max_y"].icon_id).align_uv = 'MAX_V'
|
||||
col.operator('uv.toolkit_align_uv', text='', icon_value=icons_coll["align_uv_min_y"].icon_id).align_uv = 'MIN_V'
|
||||
# Third column
|
||||
col = row.column(align=True)
|
||||
col.label(text="")
|
||||
col.operator('uv.toolkit_align_uv', text='', icon_value=icons_coll["align_uv_max_x"].icon_id).align_uv = 'MAX_U'
|
||||
row = layout.row(align=True)
|
||||
row.label(text="Mode")
|
||||
row.prop(scene.uv_toolkit, "align_mode", expand=True)
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_arrange(Panel):
|
||||
bl_label = "Arrange"
|
||||
bl_idname = "UVTOOLKIT_PT_arrange"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_orient_islands", icon_value=icons_coll["orient_islands"].icon_id)
|
||||
row.operator("uv.toolkit_orient_to_edge", icon_value=icons_coll["orient_to_edge"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_stack_islands", icon_value=icons_coll["stack_islands"].icon_id)
|
||||
row.operator("uv.toolkit_stack_similar_islands", text="Stack Similar",
|
||||
icon_value=icons_coll["stack_similar_islands"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_unstack_islands", text="Unstack", icon_value=icons_coll["unstack_islands"].icon_id)
|
||||
row.operator("uv.toolkit_unstack_overlapped_uvs", icon_value=icons_coll["unstack_overlapped_uvs"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_distribute", icon_value=icons_coll["distribute"].icon_id)
|
||||
row.operator("uv.toolkit_match_islands", icon_value=icons_coll["match_islands"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_randomize_islands", text="Randomize",
|
||||
icon_value=icons_coll["randomize_islands"].icon_id)
|
||||
row.operator("uv.toolkit_fit_to_bounds", icon_value=icons_coll["fit_to_bounds"].icon_id)
|
||||
# row.label(text="")
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_pins(Panel):
|
||||
bl_label = "Pins"
|
||||
bl_idname = "UVTOOLKIT_PT_pins"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.pin", text="Pin", icon_value=icons_coll["pin_uv"].icon_id).clear = False
|
||||
row.operator("uv.pin", text="Unpin", icon_value=icons_coll["unpin_uv"].icon_id).clear = True
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_clear_all_pins", icon_value=icons_coll["clear_all_pins"].icon_id)
|
||||
row.label(text="")
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_transform(Panel):
|
||||
bl_label = "Transform"
|
||||
bl_idname = "UVTOOLKIT_PT_transform"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
scene = context.scene
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
distance = scene.uv_toolkit.move_distance
|
||||
# First column
|
||||
col = row.column(align=True)
|
||||
col.operator_context = 'EXEC_DEFAULT'
|
||||
col.label(text="Move")
|
||||
col.operator("transform.translate", text="",
|
||||
icon_value=icons_coll["move_left"].icon_id).value = (distance * -1, 0, 0)
|
||||
col.label(text="")
|
||||
# Second column
|
||||
col = row.column(align=True)
|
||||
col.operator("transform.translate", text="",
|
||||
icon_value=icons_coll["move_up"].icon_id).value = (0, distance, 0)
|
||||
col.prop(scene.uv_toolkit, "move_distance", text="")
|
||||
col.operator("transform.translate", text="",
|
||||
icon_value=icons_coll["move_down"].icon_id).value = (0, distance * - 1, 0)
|
||||
# Third column
|
||||
col = row.column(align=True)
|
||||
col.label(text="")
|
||||
col.operator("transform.translate", text="",
|
||||
icon_value=icons_coll["move_right"].icon_id).value = (distance, 0, 0)
|
||||
col.label(text="")
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.scale_x = 2
|
||||
row.label(text="Rotate")
|
||||
row.scale_x = 2
|
||||
row.prop(scene.uv_toolkit, "island_rotation_angle", text="")
|
||||
row.prop(scene.uv_toolkit, "island_rotation_mode", expand=True)
|
||||
row = layout.row(align=True)
|
||||
angle = scene.uv_toolkit.island_rotation_angle
|
||||
row.operator("uv.toolkit_rotate_islands", text=f"-{angle}°",
|
||||
icon_value=icons_coll["rotate_ccw"].icon_id).cw = False
|
||||
row.operator("uv.toolkit_rotate_islands", text=f"{angle}°",
|
||||
icon_value=icons_coll["rotate_cw"].icon_id).cw = True
|
||||
# Scale
|
||||
row = layout.row(align=True)
|
||||
row.label(text="Scale")
|
||||
row.prop(scene.uv_toolkit, "island_scale_x")
|
||||
row.prop(scene.uv_toolkit, "island_scale_y")
|
||||
|
||||
split = layout.split(factor=0.68, align=True)
|
||||
col = split.column(align=True)
|
||||
col.operator("uv.toolkit_scale_islands", icon_value=icons_coll["scale"].icon_id)
|
||||
col = split.column(align=True)
|
||||
row = col.row(align=True)
|
||||
row.prop(scene.uv_toolkit, "island_scale_mode", expand=True)
|
||||
|
||||
row = layout.row(align=True)
|
||||
row.operator_context = 'EXEC_DEFAULT'
|
||||
row.operator("transform.mirror", text="Flip X",
|
||||
icon_value=icons_coll["mirror_x"].icon_id).constraint_axis = (True, False, False)
|
||||
row.operator("transform.mirror", text="Flip Y",
|
||||
icon_value=icons_coll["mirror_y"].icon_id).constraint_axis = (False, True, False)
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_select(Panel):
|
||||
bl_label = "Select"
|
||||
bl_idname = "UVTOOLKIT_PT_select"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_select_island_border",
|
||||
text="Island border", icon_value=icons_coll["select_island_border"].icon_id)
|
||||
row.operator("uv.toolkit_select_similar_islands",
|
||||
text="Similar Islands", icon_value=icons_coll["select_similar_islands"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_invert_selection", icon_value=icons_coll["invert_selection"].icon_id)
|
||||
row.operator("uv.toolkit_select_flipped_islands", text="Flipped Islands",
|
||||
icon_value=icons_coll["select_flipped_islands"].icon_id)
|
||||
layout.operator("uv.toolkit_find_udim_crossing", icon_value=icons_coll["find_udim_crossing"].icon_id)
|
||||
layout.operator("uv.toolkit_find_shattered_islands", icon_value=icons_coll["find_shattered_islands"].icon_id)
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_display(Panel):
|
||||
bl_label = "Display"
|
||||
bl_idname = "UVTOOLKIT_PT_display"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_toggle_material", icon_value=icons_coll["toggle_material"].icon_id)
|
||||
row.operator("uv.toolkit_toggle_color_mode", icon_value=icons_coll["toggle_color_mode"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_toggle_grid_type", icon_value=icons_coll["toggle_grid_type"].icon_id)
|
||||
row.label(text="")
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_checker_map(Panel):
|
||||
bl_label = "Checker Map"
|
||||
bl_idname = "UVTOOLKIT_PT_checker_map"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw_user_checker_maps(self, context):
|
||||
supported_formats = {
|
||||
".bmp", ".sgi", ".rgb", ".bw", ".png",
|
||||
".jpg", ".jpeg", ".jp2", ".jp2", ".j2c",
|
||||
".tga", ".cin", ".dpx", ".exr", ".hdr",
|
||||
".tif", ".tiff"
|
||||
}
|
||||
|
||||
def get_checker_maps_path():
|
||||
addon_prefs = get_addon_preferences()
|
||||
c_maps_path = addon_prefs.chekcer_maps_path
|
||||
if os.path.exists(c_maps_path):
|
||||
for path in os.listdir(path=c_maps_path):
|
||||
current_path = os.path.join(c_maps_path, path)
|
||||
if os.path.isfile(current_path):
|
||||
file_format = os.path.splitext(current_path)[-1]
|
||||
if file_format in supported_formats:
|
||||
yield current_path
|
||||
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
idx = None
|
||||
for idx, path in enumerate(sorted(get_checker_maps_path()), 1):
|
||||
c_map_name = os.path.basename(os.path.splitext(path)[0])
|
||||
row.operator("uv.toolkit_create_checker_material", text=c_map_name).checker_image_path = path
|
||||
if idx % 2 == 0:
|
||||
row = layout.row(align=True)
|
||||
if idx and idx % 2 != 0:
|
||||
row.label(text="")
|
||||
|
||||
def draw(self, context):
|
||||
scene = context.scene
|
||||
addon_prefs = get_addon_preferences()
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
row = layout.row()
|
||||
row.prop(addon_prefs, "checker_map", expand=True)
|
||||
if addon_prefs.checker_map == "BUILT-IN":
|
||||
col = layout.column(align=True)
|
||||
split = col.split(align=True)
|
||||
split.prop(scene.uv_toolkit, "checker_map_width")
|
||||
split.prop(scene.uv_toolkit, "checker_map_height")
|
||||
row = col.row(align=True)
|
||||
row.prop(addon_prefs, "checker_type", expand=True)
|
||||
|
||||
prop = layout.operator("uv.toolkit_create_checker_material",
|
||||
icon_value=icons_coll["create_checker_material"].icon_id)
|
||||
prop.width, prop.height = scene.uv_toolkit.checker_map_width, scene.uv_toolkit.checker_map_height
|
||||
else:
|
||||
self.draw_user_checker_maps(context)
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_quick_presets(Panel):
|
||||
bl_label = "Quick Presets"
|
||||
bl_idname = "UVTOOLKIT_PT_quick_presets"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, _context):
|
||||
return get_addon_preferences().checker_map == "BUILT-IN"
|
||||
|
||||
def draw(self, context):
|
||||
pass
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_checker_map_square(Panel):
|
||||
bl_label = "Square"
|
||||
bl_parent_id = "UVTOOLKIT_PT_quick_presets"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="64x64")
|
||||
prop.width, prop.height = 64, 64
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="128x128")
|
||||
prop.width, prop.height = 128, 128
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="256x256")
|
||||
prop.width, prop.height = 256, 256
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="512x512")
|
||||
prop.width, prop.height = 512, 512
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="1024x1024")
|
||||
prop.width, prop.height = 1024, 1024
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="2048x2048")
|
||||
prop.width, prop.height = 2048, 2048
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="4096x4096")
|
||||
prop.width, prop.height = 4096, 4096
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="8192x8192")
|
||||
prop.width, prop.height = 8192, 8192
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_checker_map_horizontal_rectangle(Panel):
|
||||
bl_label = "Horizontal Rectangle"
|
||||
bl_parent_id = "UVTOOLKIT_PT_quick_presets"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="64x32")
|
||||
prop.width, prop.height = 64, 32
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="128x64")
|
||||
prop.width, prop.height = 128, 64
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="256x128")
|
||||
prop.width, prop.height = 256, 128
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="512x256")
|
||||
prop.width, prop.height = 512, 256
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="1024x512")
|
||||
prop.width, prop.height = 1024, 512
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="2048x1024")
|
||||
prop.width, prop.height = 2048, 1024
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="4096x2048")
|
||||
prop.width, prop.height = 4096, 2048
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="8192x4096")
|
||||
prop.width, prop.height = 8192, 4096
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_checker_map_vertical_rectangle(Panel):
|
||||
bl_label = "Vertical Rectangle"
|
||||
bl_parent_id = "UVTOOLKIT_PT_quick_presets"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="32x64")
|
||||
prop.width, prop.height = 32, 64
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="64x128")
|
||||
prop.width, prop.height = 64, 128
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="128x256")
|
||||
prop.width, prop.height = 128, 256
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="256x512")
|
||||
prop.width, prop.height = 256, 512
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="512x1024")
|
||||
prop.width, prop.height = 512, 1024
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="1024x2048")
|
||||
prop.width, prop.height = 1024, 2048
|
||||
row = layout.row(align=True)
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="2048x4096")
|
||||
prop.width, prop.height = 2048, 4096
|
||||
prop = row.operator("uv.toolkit_create_checker_material", text="4096x8192")
|
||||
prop.width, prop.height = 4096, 8192
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_cleanup(Panel):
|
||||
bl_label = "Cleanup"
|
||||
bl_idname = "UVTOOLKIT_PT_cleanup"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
layout.operator("uv.toolkit_remove_all_checker_materials",
|
||||
icon_value=icons_coll["remove_all_checker_materials"].icon_id)
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_uv_maps(Panel):
|
||||
bl_label = "UV Maps"
|
||||
bl_idname = "UVTOOLKIT_PT_uv_maps"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
|
||||
def draw(self, context):
|
||||
scene = context.scene
|
||||
icons_coll = get_icons_set(context)
|
||||
|
||||
layout = self.layout
|
||||
row = layout.row()
|
||||
row.prop(scene.uv_toolkit, "uv_layer_name", text="Name")
|
||||
split = layout.split(factor=0.4)
|
||||
col = split.column()
|
||||
col.label(text="UV Set Index:")
|
||||
col = split.column()
|
||||
col.prop(scene.uv_toolkit, "uv_layer_index")
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_set_active_uv_layer", text="Set Active",
|
||||
icon_value=icons_coll["set_active_uv_layer"].icon_id)
|
||||
row.operator("uv.toolkit_create_new_uv_layer", text="Create New",
|
||||
icon_value=icons_coll["create_new_uv_layer"].icon_id)
|
||||
row = layout.row(align=True)
|
||||
row.operator("uv.toolkit_rename_uv_layers", text="Rename",
|
||||
icon_value=icons_coll["rename_uv_layers"].icon_id)
|
||||
row.operator("uv.toolkit_delete_uv_layer", text="Delete",
|
||||
icon_value=icons_coll["delete_uv_layer"].icon_id)
|
||||
|
||||
|
||||
class UVTOOLKIT_PT_help(Panel):
|
||||
bl_label = "Help/Settings"
|
||||
bl_idname = "UVTOOLKIT_PT_help"
|
||||
bl_space_type = 'IMAGE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
bl_category = "UV Toolkit"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
|
||||
def draw(self, context):
|
||||
documentation = "https://alexbelyakov.gitlab.io/uv-toolkit-docs/"
|
||||
tutorials = "https://www.youtube.com/playlist?list=PLex7IjhY06w63StowG501tBbEyZrzHa00"
|
||||
icons_coll = get_icons_set(context)
|
||||
layout = self.layout
|
||||
layout.operator("uv.toolkit_open_addon_settings", icon_value=icons_coll["settings"].icon_id)
|
||||
layout.operator("uv.toolkit_hotkeys", text="List of Hotkeys", icon_value=icons_coll["hotkeys"].icon_id)
|
||||
layout.operator("wm.url_open", text="Documentation",
|
||||
icon_value=icons_coll["documentation"].icon_id).url = documentation
|
||||
layout.operator("wm.url_open", text="Tutorials",
|
||||
icon_value=icons_coll["tutorials"].icon_id).url = tutorials
|
||||
@@ -0,0 +1,88 @@
|
||||
from bpy.types import Menu
|
||||
|
||||
from ..functions import get_addon_preferences
|
||||
from ..utils.ui_utils import get_operator_name, get_icons_set
|
||||
|
||||
|
||||
class Pie3dView(Menu):
|
||||
bl_idname = "UVTOOLKIT_MT_pie_3dview"
|
||||
bl_label = "3D View Pie"
|
||||
|
||||
def pie_item(self, context, pie_property, custom_op, custom_op_name):
|
||||
icons_coll = get_icons_set(context, pie_menu=True)
|
||||
layout = self.layout
|
||||
pie = layout.menu_pie()
|
||||
if pie_property == "UV_MENU":
|
||||
self.uv_menu(context, pie)
|
||||
elif pie_property == "MARK_SEAM":
|
||||
pie.operator("mesh.mark_seam", text="Mark Seam",
|
||||
icon_value=icons_coll["mark_seam"].icon_id).clear = False
|
||||
elif pie_property == "CLEAR_SEAM":
|
||||
pie.operator("mesh.mark_seam", text="Clear Seam",
|
||||
icon_value=icons_coll["clear_seam"].icon_id).clear = True
|
||||
elif pie_property == "CUSTOM_OP":
|
||||
if custom_op_name:
|
||||
op_name = custom_op_name
|
||||
else:
|
||||
op_name = get_operator_name(context, custom_op)
|
||||
pie.operator("uv.toolkit_execute_custom_op", text=op_name).exec_op = custom_op
|
||||
elif pie_property == "DISABLE":
|
||||
pie.separator()
|
||||
else:
|
||||
if pie_property == "uv.unwrap":
|
||||
icon_name = "unwrap"
|
||||
else:
|
||||
icon_name = pie_property[11:]
|
||||
pie.operator(pie_property, icon_value=icons_coll[icon_name].icon_id)
|
||||
|
||||
def uv_menu(self, context, pie):
|
||||
tool_settings = context.tool_settings
|
||||
split = pie.split()
|
||||
box = split.box().column()
|
||||
box.operator("uv.unwrap")
|
||||
box.prop(tool_settings, "use_edge_path_live_unwrap")
|
||||
box.operator("uv.smart_project")
|
||||
box.operator("uv.project_from_view")
|
||||
box.operator("uv.lightmap_pack")
|
||||
box.operator("uv.follow_active_quads")
|
||||
box.operator("uv.cube_project")
|
||||
box.operator("uv.cylinder_project")
|
||||
box.operator("uv.sphere_project")
|
||||
box.operator("uv.project_from_view")
|
||||
box.operator("uv.project_from_view", text="Project from View (Bounds)")
|
||||
box.operator("uv.reset")
|
||||
|
||||
def draw(self, context):
|
||||
addon_prefs = get_addon_preferences()
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_3dview_left,
|
||||
addon_prefs.pie_3dview_custom_op_left,
|
||||
addon_prefs.pie_3dview_custom_op_name_left) # 4
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_3dview_right,
|
||||
addon_prefs.pie_3dview_custom_op_right,
|
||||
addon_prefs.pie_3dview_custom_op_name_right) # 6
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_3dview_bottom,
|
||||
addon_prefs.pie_3dview_custom_op_bottom,
|
||||
addon_prefs.pie_3dview_custom_op_name_bottom) # 2
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_3dview_top,
|
||||
addon_prefs.pie_3dview_custom_op_top,
|
||||
addon_prefs.pie_3dview_custom_op_name_top) # 8
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_3dview_top_left,
|
||||
addon_prefs.pie_3dview_custom_op_top_left,
|
||||
addon_prefs.pie_3dview_custom_op_name_top_left) # 7
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_3dview_top_right,
|
||||
addon_prefs.pie_3dview_custom_op_top_right,
|
||||
addon_prefs.pie_3dview_custom_op_name_top_right) # 9
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_3dview_bottom_left,
|
||||
addon_prefs.pie_3dview_custom_op_bottom_left,
|
||||
addon_prefs.pie_3dview_custom_op_name_bottom_left) # 1
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_3dview_bottom_right,
|
||||
addon_prefs.pie_3dview_custom_op_bottom_right,
|
||||
addon_prefs.pie_3dview_custom_op_name_bottom_right) # 3
|
||||
@@ -0,0 +1,76 @@
|
||||
from bpy.types import Menu
|
||||
|
||||
from ..functions import get_addon_preferences
|
||||
from ..utils.ui_utils import get_operator_name, get_icons_set
|
||||
|
||||
|
||||
class PieUvEditor(Menu):
|
||||
bl_idname = "UVTOOLKIT_MT_pie_uv_editor"
|
||||
bl_label = "UV Editor Pie"
|
||||
|
||||
def pie_item(self, context, pie_property, custom_op, custom_op_name):
|
||||
icons_coll = get_icons_set(context, pie_menu=True)
|
||||
layout = self.layout
|
||||
pie = layout.menu_pie()
|
||||
if pie_property == "CUSTOM_OP":
|
||||
if custom_op_name:
|
||||
op_name = custom_op_name
|
||||
else:
|
||||
op_name = get_operator_name(context, custom_op)
|
||||
pie.operator("uv.toolkit_execute_custom_op", text=op_name).exec_op = custom_op
|
||||
elif pie_property == "MARK_SEAM":
|
||||
pie.operator("uv.mark_seam", text="Mark Seam",
|
||||
icon_value=icons_coll["mark_seam"].icon_id).clear = False
|
||||
elif pie_property == "CLEAR_SEAM":
|
||||
pie.operator("uv.mark_seam", text="Clear Seam",
|
||||
icon_value=icons_coll["clear_seam"].icon_id).clear = True
|
||||
elif pie_property == "PIN":
|
||||
pie.operator("uv.pin", text="Pin",
|
||||
icon_value=icons_coll["pin_uv"].icon_id).clear = False
|
||||
elif pie_property == "UNPIN":
|
||||
pie.operator("uv.pin", text="Unpin",
|
||||
icon_value=icons_coll["unpin_uv"].icon_id).clear = True
|
||||
elif pie_property == "DISABLE":
|
||||
pie.separator()
|
||||
elif pie_property == "uv.toolkit_center_cursor_and_frame_all":
|
||||
pie.operator(pie_property)
|
||||
else:
|
||||
icon_name = pie_property[11:]
|
||||
if icon_name == "align_uv":
|
||||
icon_name = "align_uv_min_y"
|
||||
pie.operator(pie_property, icon_value=icons_coll[icon_name].icon_id)
|
||||
|
||||
def draw(self, context):
|
||||
addon_prefs = get_addon_preferences()
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_uv_editor_left,
|
||||
addon_prefs.pie_uv_editor_custom_op_left,
|
||||
addon_prefs.pie_uv_editor_custom_op_name_left) # 4
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_uv_editor_right,
|
||||
addon_prefs.pie_uv_editor_custom_op_right,
|
||||
addon_prefs.pie_uv_editor_custom_op_name_right) # 6
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_uv_editor_bottom,
|
||||
addon_prefs.pie_uv_editor_custom_op_bottom,
|
||||
addon_prefs.pie_uv_editor_custom_op_name_bottom) # 2
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_uv_editor_top,
|
||||
addon_prefs.pie_uv_editor_custom_op_top,
|
||||
addon_prefs.pie_uv_editor_custom_op_name_top) # 8
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_uv_editor_top_left,
|
||||
addon_prefs.pie_uv_editor_custom_op_top_left,
|
||||
addon_prefs.pie_uv_editor_custom_op_name_top_left) # 7
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_uv_editor_top_right,
|
||||
addon_prefs.pie_uv_editor_custom_op_top_right,
|
||||
addon_prefs.pie_uv_editor_custom_op_name_top_right) # 9
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_uv_editor_bottom_left,
|
||||
addon_prefs.pie_uv_editor_custom_op_bottom_left,
|
||||
addon_prefs.pie_uv_editor_custom_op_name_bottom_left) # 1
|
||||
self.pie_item(context,
|
||||
addon_prefs.pie_uv_editor_bottom_right,
|
||||
addon_prefs.pie_uv_editor_custom_op_bottom_right,
|
||||
addon_prefs.pie_uv_editor_custom_op_name_bottom_right) # 3
|
||||
Reference in New Issue
Block a user