[Bf-extensions-cvs] [0023a36b] master: Magic UV: Fix bugs, add copy/paste seams option to Copy/Paste UV, Transfer UV
Nutti
noreply at git.blender.org
Wed Aug 2 14:34:42 CEST 2017
Commit: 0023a36b40d2df9b05c45a4634f76ba4a179f349
Author: Nutti
Date: Wed Aug 2 21:33:43 2017 +0900
Branches: master
https://developer.blender.org/rBA0023a36b40d2df9b05c45a4634f76ba4a179f349
Magic UV: Fix bugs, add copy/paste seams option to Copy/Paste UV, Transfer
UV
===================================================================
M uv_magic_uv/__init__.py
M uv_magic_uv/muv_common.py
M uv_magic_uv/muv_cpuv_ops.py
M uv_magic_uv/muv_cpuv_selseq_ops.py
M uv_magic_uv/muv_fliprot_ops.py
M uv_magic_uv/muv_menu.py
M uv_magic_uv/muv_mirroruv_ops.py
M uv_magic_uv/muv_mvuv_ops.py
M uv_magic_uv/muv_packuv_ops.py
M uv_magic_uv/muv_preferences.py
M uv_magic_uv/muv_preserve_uv_aspect.py
M uv_magic_uv/muv_props.py
M uv_magic_uv/muv_texlock_ops.py
M uv_magic_uv/muv_texproj_ops.py
M uv_magic_uv/muv_transuv_ops.py
M uv_magic_uv/muv_unwrapconst_ops.py
M uv_magic_uv/muv_uvbb_ops.py
M uv_magic_uv/muv_wsuv_ops.py
===================================================================
diff --git a/uv_magic_uv/__init__.py b/uv_magic_uv/__init__.py
index 01d3582a..6b9b6d2b 100644
--- a/uv_magic_uv/__init__.py
+++ b/uv_magic_uv/__init__.py
@@ -20,16 +20,16 @@
__author__ = "Nutti <nutti.metro at gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
bl_info = {
"name": "Magic UV",
"author": "Nutti, Mifth, Jace Priester, kgeogeo, mem, "
"Keith (Wahooney) Boshoff, McBuff, MaxRobinot",
- "version": (4, 3, 1),
- "blender": (2, 77, 0),
+ "version": (4, 4, 0),
+ "blender": (2, 79, 0),
"location": "See Add-ons Preferences",
"description": "UV Manipulator Tools. See Add-ons Preferences for details",
"warning": "",
diff --git a/uv_magic_uv/muv_common.py b/uv_magic_uv/muv_common.py
index 121915e8..ff2fe3f0 100644
--- a/uv_magic_uv/muv_common.py
+++ b/uv_magic_uv/muv_common.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro at gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
from . import muv_props
diff --git a/uv_magic_uv/muv_cpuv_ops.py b/uv_magic_uv/muv_cpuv_ops.py
index 3ef1a9de..257d686e 100644
--- a/uv_magic_uv/muv_cpuv_ops.py
+++ b/uv_magic_uv/muv_cpuv_ops.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro at gmail.com>, Jace Priester"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "1 Apr 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
import bmesh
@@ -80,12 +80,15 @@ class MUV_CPUVCopyUV(bpy.types.Operator):
# get selected face
props.src_uvs = []
props.src_pin_uvs = []
+ props.src_seams = []
for face in bm.faces:
if face.select:
uvs = [l[uv_layer].uv.copy() for l in face.loops]
pin_uvs = [l[uv_layer].pin_uv for l in face.loops]
+ seams = [l.edge.seam for l in face.loops]
props.src_uvs.append(uvs)
props.src_pin_uvs.append(pin_uvs)
+ props.src_seams.append(seams)
if len(props.src_uvs) == 0 or len(props.src_pin_uvs) == 0:
self.report({'WARNING'}, "No faces are selected")
return {'CANCELLED'}
@@ -153,6 +156,11 @@ class MUV_CPUVPasteUV(bpy.types.Operator):
min=0,
max=30
)
+ copy_seams = BoolProperty(
+ name="Copy Seams",
+ description="Copy Seams",
+ default=True
+ )
def execute(self, context):
props = context.scene.muv_props.cpuv
@@ -182,14 +190,17 @@ class MUV_CPUVPasteUV(bpy.types.Operator):
# get selected face
dest_uvs = []
dest_pin_uvs = []
+ dest_seams = []
dest_face_indices = []
for face in bm.faces:
if face.select:
dest_face_indices.append(face.index)
uvs = [l[uv_layer].uv.copy() for l in face.loops]
pin_uvs = [l[uv_layer].pin_uv for l in face.loops]
+ seams = [l.edge.seam for l in face.loops]
dest_uvs.append(uvs)
dest_pin_uvs.append(pin_uvs)
+ dest_seams.append(seams)
if len(dest_uvs) == 0 or len(dest_pin_uvs) == 0:
self.report({'WARNING'}, "No faces are selected")
return {'CANCELLED'}
@@ -205,37 +216,48 @@ class MUV_CPUVPasteUV(bpy.types.Operator):
for i, idx in enumerate(dest_face_indices):
suv = None
spuv = None
+ ss = None
duv = None
if self.strategy == 'N_N':
suv = props.src_uvs[i]
spuv = props.src_pin_uvs[i]
+ ss = props.src_seams[i]
duv = dest_uvs[i]
elif self.strategy == 'N_M':
suv = props.src_uvs[i % len(props.src_uvs)]
spuv = props.src_pin_uvs[i % len(props.src_pin_uvs)]
+ ss = props.src_seams[i % len(props.src_seams)]
duv = dest_uvs[i]
if len(suv) != len(duv):
self.report({'WARNING'}, "Some faces are different size")
return {'CANCELLED'}
suvs_fr = [uv for uv in suv]
spuvs_fr = [pin_uv for pin_uv in spuv]
+ ss_fr = [s for s in ss]
# flip UVs
if self.flip_copied_uv is True:
suvs_fr.reverse()
spuvs_fr.reverse()
+ ss_fr.reverse()
# rotate UVs
for _ in range(self.rotate_copied_uv):
uv = suvs_fr.pop()
pin_uv = spuvs_fr.pop()
+ s = ss_fr.pop()
suvs_fr.insert(0, uv)
spuvs_fr.insert(0, pin_uv)
+ ss_fr.insert(0, s)
# paste UVs
- for l, suv, spuv in zip(bm.faces[idx].loops, suvs_fr, spuvs_fr):
+ for l, suv, spuv, ss in zip(bm.faces[idx].loops, suvs_fr, spuvs_fr, ss_fr):
l[uv_layer].uv = suv
l[uv_layer].pin_uv = spuv
+ if self.copy_seams is True:
+ l.edge.seam = ss
self.report({'INFO'}, "%d face(s) are copied" % len(dest_uvs))
bmesh.update_edit_mesh(obj.data)
+ if self.copy_seams is True:
+ obj.data.show_edge_seams = True
return {'FINISHED'}
@@ -305,11 +327,14 @@ class MUV_CPUVObjCopyUV(bpy.types.Operator):
# get selected face
props.src_uvs = []
props.src_pin_uvs = []
+ props.src_seams = []
for face in bm.faces:
uvs = [l[uv_layer].uv.copy() for l in face.loops]
pin_uvs = [l[uv_layer].pin_uv for l in face.loops]
+ seams = [l.edge.seam for l in face.loops]
props.src_uvs.append(uvs)
props.src_pin_uvs.append(pin_uvs)
+ props.src_seams.append(seams)
self.report({'INFO'}, "%s's UV coordinates are copied" % (obj.name))
@@ -349,6 +374,11 @@ class MUV_CPUVObjPasteUV(bpy.types.Operator):
bl_options = {'REGISTER', 'UNDO'}
uv_map = StringProperty(options={'HIDDEN'})
+ copy_seams = BoolProperty(
+ name="Copy Seams",
+ description="Copy Seams",
+ default=True
+ )
@memorize_view_3d_mode
def execute(self, context):
@@ -393,13 +423,16 @@ class MUV_CPUVObjPasteUV(bpy.types.Operator):
# get selected face
dest_uvs = []
dest_pin_uvs = []
+ dest_seams = []
dest_face_indices = []
for face in bm.faces:
dest_face_indices.append(face.index)
uvs = [l[uv_layer].uv.copy() for l in face.loops]
pin_uvs = [l[uv_layer].pin_uv for l in face.loops]
+ seams = [l.edge.seam for l in face.loops]
dest_uvs.append(uvs)
dest_pin_uvs.append(pin_uvs)
+ dest_seams.append(seams)
if len(props.src_uvs) != len(dest_uvs):
self.report(
{'WARNING'},
@@ -413,19 +446,25 @@ class MUV_CPUVObjPasteUV(bpy.types.Operator):
for i, idx in enumerate(dest_face_indices):
suv = props.src_uvs[i]
spuv = props.src_pin_uvs[i]
+ ss = props.src_seams[i]
duv = dest_uvs[i]
if len(suv) != len(duv):
self.report({'WARNING'}, "Some faces are different size")
return {'CANCELLED'}
suvs_fr = [uv for uv in suv]
spuvs_fr = [pin_uv for pin_uv in spuv]
+ ss_fr = [s for s in ss]
# paste UVs
- for l, suv, spuv in zip(
- bm.faces[idx].loops, suvs_fr, spuvs_fr):
+ for l, suv, spuv, ss in zip(
+ bm.faces[idx].loops, suvs_fr, spuvs_fr, ss_fr):
l[uv_layer].uv = suv
l[uv_layer].pin_uv = spuv
+ if self.copy_seams is True:
+ l.edge.seam = ss
bmesh.update_edit_mesh(obj.data)
+ if self.copy_seams is True:
+ obj.data.show_edge_seams = True
self.report(
{'INFO'}, "%s's UV coordinates are pasted" % (obj.name))
diff --git a/uv_magic_uv/muv_cpuv_selseq_ops.py b/uv_magic_uv/muv_cpuv_selseq_ops.py
index bbb9de5a..5a1154a9 100644
--- a/uv_magic_uv/muv_cpuv_selseq_ops.py
+++ b/uv_magic_uv/muv_cpuv_selseq_ops.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro at gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
import bmesh
@@ -73,12 +73,15 @@ class MUV_CPUVSelSeqCopyUV(bpy.types.Operator):
# get selected face
props.src_uvs = []
props.src_pin_uvs = []
+ props.src_seams = []
for hist in bm.select_history:
if isinstance(hist, bmesh.types.BMFace) and hist.select:
uvs = [l[uv_layer].uv.copy() for l in hist.loops]
pin_uvs = [l[uv_layer].pin_uv for l in hist.loops]
+ seams = [l.edge.seam for l in hist.loops]
props.src_uvs.append(uvs)
props.src_pin_uvs.append(pin_uvs)
+ props.src_seams.append(seams)
if len(props.src_uvs) == 0 or len(props.src_pin_uvs) == 0:
self.report({'WARNING'}, "No faces are selected")
return {'CANCELLED'}
@@ -128,16 +131,24 @@ class MUV_CPUVSelSeqPasteUV(bpy.types.Operator):
('N_N', 'N:N', 'Number of faces must be equal to source'),
('N_M', 'N:M', 'Number of faces must not be equal to source')
],
- default="N_M")
+ default="N_M"
+ )
flip_copied_uv = BoolProperty(
name="Flip Copied UV",
description="Flip Copied UV...",
- default=False)
+ default=False
+ )
rotate_copied_uv = IntProperty(
default=0,
name="Rotate Copied UV",
min=0,
- max=30)
+ max=30
+ )
+ copy_seams = BoolProperty(
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list