UI: Add missing UV tools in the UV/Image Editor Window > Tools tab
authorAaron Carlisle <carlisle.b3d@gmail.com>
Mon, 10 Apr 2017 22:37:03 +0000 (18:37 -0400)
committerAaron Carlisle <carlisle.b3d@gmail.com>
Mon, 10 Apr 2017 22:37:03 +0000 (18:37 -0400)
Original Author: @xrg
Changes By @blendify

Image of patch: {F284237}

release/scripts/startup/bl_ui/space_image.py

index b274657b4f4ef6f343b95e58da0fc7212052bade..c748e71a0a244337e2293bcbb1c63119cda52ff7 100644 (file)
@@ -18,6 +18,7 @@
 
 # <pep8 compliant>
 import bpy
+import math
 from bpy.types import Header, Menu, Panel
 from bl_ui.properties_paint_common import (
         UnifiedPaintPanel,
@@ -727,11 +728,73 @@ class IMAGE_PT_tools_transform_uvs(Panel, UVToolsPanel):
         col.operator("transform.translate")
         col.operator("transform.rotate")
         col.operator("transform.resize", text="Scale")
-        col.separator()
-
         col.operator("transform.shear")
 
 
+class IMAGE_PT_tools_align_uvs(Panel, UVToolsPanel):
+    bl_label = "UV Align"
+
+    @classmethod
+    def poll(cls, context):
+        sima = context.space_data
+        return sima.show_uvedit and not context.tool_settings.use_uv_sculpt
+
+    def draw(self, context):
+        layout = self.layout
+        layout.operator_context = 'EXEC_REGION_WIN'
+
+        split = layout.split()
+        col = split.column(align=True)
+        col.operator("transform.mirror", text="Mirror X").constraint_axis[0] = True
+        col.operator("transform.mirror", text="Mirror Y").constraint_axis[1] = True
+        col = split.column(align=True)
+        col.operator("transform.rotate", text="Rotate +90°").value = math.pi / 2
+        col.operator("transform.rotate", text="Rotate  - 90°").value = math.pi / -2
+
+        split = layout.split()
+        col = split.column(align=True)
+        col.operator("uv.align", text="Straighten").axis = 'ALIGN_S'
+        col.operator("uv.align", text="Straighten X").axis = 'ALIGN_T'
+        col.operator("uv.align", text="Straighten Y").axis = 'ALIGN_U'
+        col = split.column(align=True)
+        col.operator("uv.align", text="Align Auto").axis = 'ALIGN_AUTO'
+        col.operator("uv.align", text="Align X").axis = 'ALIGN_X'
+        col.operator("uv.align", text="Align Y").axis = 'ALIGN_Y'
+
+
+class IMAGE_PT_tools_uvs(Panel, UVToolsPanel):
+    bl_label = "UV Tools"
+
+    @classmethod
+    def poll(cls, context):
+        sima = context.space_data
+        return sima.show_uvedit and not context.tool_settings.use_uv_sculpt
+
+    def draw(self, context):
+        layout = self.layout
+
+        col = layout.column(align=True)
+        row = col.row(align=True)
+        row.operator("uv.weld")
+        row.operator("uv.stitch")
+        col.operator("uv.remove_doubles")
+        col.operator("uv.average_islands_scale")
+        col.operator("uv.pack_islands")
+        col.operator("mesh.faces_mirror_uv")
+        col.operator("uv.minimize_stretch")
+
+        layout.label(text="UV Unwrap:")
+        row = layout.row(align=True)
+        row.operator("uv.pin").clear = False
+        row.operator("uv.pin", text="Unpin").clear = True
+        col = layout.column(align=True)
+        row = col.row(align=True)
+        row.operator("uv.mark_seam", text="Mark Seam").clear = False
+        row.operator("uv.mark_seam", text="Clear Seam").clear = True
+        col.operator("uv.seams_from_islands", text="Mark Seams from Islands")
+        col.operator("uv.unwrap")
+
+
 class IMAGE_PT_paint(Panel, ImagePaintPanel):
     bl_label = "Paint"
     bl_category = "Tools"
@@ -1100,6 +1163,29 @@ class IMAGE_PT_tools_mask(MASK_PT_tools, Panel):
 # --- end mask ---
 
 
+class IMAGE_PT_options_uvs(Panel, UVToolsPanel):
+    bl_label = "UV Options"
+    bl_category = "Options"
+
+    @classmethod
+    def poll(cls, context):
+        sima = context.space_data
+        return sima.show_uvedit
+
+    def draw(self, context):
+        layout = self.layout
+
+        sima = context.space_data
+        uv = sima.uv_editor
+        toolsettings = context.tool_settings
+
+        col = layout.column(align=True)
+        col.prop(toolsettings, "use_uv_sculpt")
+        col.prop(uv, "use_live_unwrap")
+        col.prop(uv, "use_snap_to_pixels")
+        col.prop(uv, "lock_bounds")
+
+
 class ImageScopesPanel:
     @classmethod
     def poll(cls, context):
@@ -1267,6 +1353,9 @@ classes = (
     IMAGE_PT_game_properties,
     IMAGE_PT_view_properties,
     IMAGE_PT_tools_transform_uvs,
+    IMAGE_PT_tools_align_uvs,
+    IMAGE_PT_tools_uvs,
+    IMAGE_PT_options_uvs,
     IMAGE_PT_paint,
     IMAGE_PT_tools_brush_overlay,
     IMAGE_PT_tools_brush_texture,