Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNutti <nutti.metro@gmail.com>2017-08-02 15:33:43 +0300
committerNutti <nutti.metro@gmail.com>2017-08-02 15:33:43 +0300
commit0023a36b40d2df9b05c45a4634f76ba4a179f349 (patch)
tree5e9a4f60051f6ead96a95f4f78226efe254d600e
parent69cb19cf71bf62fddb5e43e1aa31a807e839eb41 (diff)
Magic UV: Fix bugs, add copy/paste seams option to Copy/Paste UV, Transfer
UV
-rw-r--r--uv_magic_uv/__init__.py8
-rw-r--r--uv_magic_uv/muv_common.py4
-rw-r--r--uv_magic_uv/muv_cpuv_ops.py49
-rw-r--r--uv_magic_uv/muv_cpuv_selseq_ops.py37
-rw-r--r--uv_magic_uv/muv_fliprot_ops.py25
-rw-r--r--uv_magic_uv/muv_menu.py4
-rw-r--r--uv_magic_uv/muv_mirroruv_ops.py4
-rw-r--r--uv_magic_uv/muv_mvuv_ops.py4
-rw-r--r--uv_magic_uv/muv_packuv_ops.py4
-rw-r--r--uv_magic_uv/muv_preferences.py4
-rw-r--r--uv_magic_uv/muv_preserve_uv_aspect.py4
-rw-r--r--uv_magic_uv/muv_props.py6
-rw-r--r--uv_magic_uv/muv_texlock_ops.py4
-rw-r--r--uv_magic_uv/muv_texproj_ops.py4
-rw-r--r--uv_magic_uv/muv_transuv_ops.py22
-rw-r--r--uv_magic_uv/muv_unwrapconst_ops.py4
-rw-r--r--uv_magic_uv/muv_uvbb_ops.py4
-rw-r--r--uv_magic_uv/muv_wsuv_ops.py17
18 files changed, 150 insertions, 58 deletions
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@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@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@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@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(
+ name="Copy Seams",
+ description="Copy Seams",
+ default=True
+ )
def execute(self, context):
props = context.scene.muv_props.cpuv_selseq
@@ -170,14 +181,17 @@ class MUV_CPUVSelSeqPasteUV(bpy.types.Operator):
# get selected face
dest_uvs = []
dest_pin_uvs = []
+ dest_seams = []
dest_face_indices = []
for hist in bm.select_history:
if isinstance(hist, bmesh.types.BMFace) and hist.select:
dest_face_indices.append(hist.index)
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]
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'}
@@ -193,38 +207,49 @@ class MUV_CPUVSelSeqPasteUV(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'}
diff --git a/uv_magic_uv/muv_fliprot_ops.py b/uv_magic_uv/muv_fliprot_ops.py
index 2c72d643..7b8b6a7f 100644
--- a/uv_magic_uv/muv_fliprot_ops.py
+++ b/uv_magic_uv/muv_fliprot_ops.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
import bmesh
@@ -53,6 +53,11 @@ class MUV_FlipRot(bpy.types.Operator):
min=0,
max=30
)
+ seams = BoolProperty(
+ name="Seams",
+ description="Seams",
+ default=True
+ )
def execute(self, context):
self.report({'INFO'}, "Flip/Rotate UV")
@@ -70,40 +75,52 @@ class MUV_FlipRot(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'}
self.report({'INFO'}, "%d face(s) are selected" % len(dest_uvs))
# paste
- for idx, duvs, dpuvs in zip(dest_face_indices, dest_uvs, dest_pin_uvs):
+ for idx, duvs, dpuvs, dss in zip(dest_face_indices, dest_uvs, dest_pin_uvs, dest_seams):
duvs_fr = [uv for uv in duvs]
dpuvs_fr = [pin_uv for pin_uv in dpuvs]
+ dss_fr = [s for s in dss]
# flip UVs
if self.flip is True:
duvs_fr.reverse()
dpuvs_fr.reverse()
+ dss_fr.reverse()
# rotate UVs
for _ in range(self.rotate):
uv = duvs_fr.pop()
pin_uv = dpuvs_fr.pop()
+ s = dss_fr.pop()
duvs_fr.insert(0, uv)
dpuvs_fr.insert(0, pin_uv)
+ dss_fr.insert(0, s)
# paste UVs
- for l, duv, dpuv in zip(bm.faces[idx].loops, duvs_fr, dpuvs_fr):
+ for l, duv, dpuv, ds in zip(
+ bm.faces[idx].loops, duvs_fr, dpuvs_fr, dss_fr):
l[uv_layer].uv = duv
l[uv_layer].pin_uv = dpuv
+ if self.seams is True:
+ l.edge.seam = ds
self.report({'INFO'}, "%d face(s) are flipped/rotated" % len(dest_uvs))
bmesh.update_edit_mesh(obj.data)
+ if self.seams is True:
+ obj.data.show_edge_seams = True
return {'FINISHED'}
diff --git a/uv_magic_uv/muv_menu.py b/uv_magic_uv/muv_menu.py
index b177e9c8..f53a8d7f 100644
--- a/uv_magic_uv/muv_menu.py
+++ b/uv_magic_uv/muv_menu.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
from . import muv_cpuv_ops
diff --git a/uv_magic_uv/muv_mirroruv_ops.py b/uv_magic_uv/muv_mirroruv_ops.py
index 5fc2ac4c..e1955360 100644
--- a/uv_magic_uv/muv_mirroruv_ops.py
+++ b/uv_magic_uv/muv_mirroruv_ops.py
@@ -20,8 +20,8 @@
__author__ = "Keith (Wahooney) Boshoff, Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
from bpy.props import (
diff --git a/uv_magic_uv/muv_mvuv_ops.py b/uv_magic_uv/muv_mvuv_ops.py
index 192d7f21..847b34fe 100644
--- a/uv_magic_uv/muv_mvuv_ops.py
+++ b/uv_magic_uv/muv_mvuv_ops.py
@@ -20,8 +20,8 @@
__author__ = "kgeogeo, mem, Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
import bmesh
diff --git a/uv_magic_uv/muv_packuv_ops.py b/uv_magic_uv/muv_packuv_ops.py
index 829bf605..66d32766 100644
--- a/uv_magic_uv/muv_packuv_ops.py
+++ b/uv_magic_uv/muv_packuv_ops.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
from math import fabs
from collections import defaultdict
diff --git a/uv_magic_uv/muv_preferences.py b/uv_magic_uv/muv_preferences.py
index f80ad28e..fe807d67 100644
--- a/uv_magic_uv/muv_preferences.py
+++ b/uv_magic_uv/muv_preferences.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
from bpy.props import (
BoolProperty,
diff --git a/uv_magic_uv/muv_preserve_uv_aspect.py b/uv_magic_uv/muv_preserve_uv_aspect.py
index bc9ce3eb..93f53307 100644
--- a/uv_magic_uv/muv_preserve_uv_aspect.py
+++ b/uv_magic_uv/muv_preserve_uv_aspect.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
import bmesh
diff --git a/uv_magic_uv/muv_props.py b/uv_magic_uv/muv_props.py
index 3fdbdf00..f28fcdbc 100644
--- a/uv_magic_uv/muv_props.py
+++ b/uv_magic_uv/muv_props.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
from bpy.props import (
@@ -67,11 +67,13 @@ class MUV_Properties():
class MUV_CPUVProps():
src_uvs = []
src_pin_uvs = []
+ src_seams = []
class MUV_CPUVSelSeqProps():
src_uvs = []
src_pin_uvs = []
+ src_seams = []
class MUV_TransUVProps():
diff --git a/uv_magic_uv/muv_texlock_ops.py b/uv_magic_uv/muv_texlock_ops.py
index f3ff499e..08b42309 100644
--- a/uv_magic_uv/muv_texlock_ops.py
+++ b/uv_magic_uv/muv_texlock_ops.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import math
from math import (
diff --git a/uv_magic_uv/muv_texproj_ops.py b/uv_magic_uv/muv_texproj_ops.py
index 7b796e81..1cf749ab 100644
--- a/uv_magic_uv/muv_texproj_ops.py
+++ b/uv_magic_uv/muv_texproj_ops.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
from collections import namedtuple
diff --git a/uv_magic_uv/muv_transuv_ops.py b/uv_magic_uv/muv_transuv_ops.py
index 095fa99b..faf1304d 100644
--- a/uv_magic_uv/muv_transuv_ops.py
+++ b/uv_magic_uv/muv_transuv_ops.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>, Mifth, MaxRobinot"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
from collections import OrderedDict
@@ -77,10 +77,12 @@ class MUV_TransUVCopy(bpy.types.Operator):
if all_sorted_faces:
for face_data in all_sorted_faces.values():
+ edges = face_data[1]
uv_loops = face_data[2]
uvs = [l.uv.copy() for l in uv_loops]
pin_uvs = [l.pin_uv for l in uv_loops]
- props.topology_copied.append([uvs, pin_uvs])
+ seams = [e.seam for e in edges]
+ props.topology_copied.append([uvs, pin_uvs, seams])
bmesh.update_edit_mesh(active_obj.data)
@@ -101,7 +103,13 @@ class MUV_TransUVPaste(bpy.types.Operator):
invert_normals = BoolProperty(
name="Invert Normals",
description="Invert Normals",
- default=False)
+ default=False
+ )
+ copy_seams = BoolProperty(
+ name="Copy Seams",
+ description="Copy Seams",
+ default=True
+ )
def execute(self, context):
props = context.scene.muv_props.transuv
@@ -161,11 +169,15 @@ class MUV_TransUVPaste(bpy.types.Operator):
)
return {'FINISHED'}
- for j, uvloop in enumerate(face_data[2]):
+ for j, (edge, uvloop) in enumerate(zip(face_data[1], face_data[2])):
uvloop.uv = copied_data[0][j]
uvloop.pin_uv = copied_data[1][j]
+ if self.copy_seams:
+ edge.seam = copied_data[2][j]
bmesh.update_edit_mesh(active_obj.data)
+ if self.copy_seams:
+ active_obj.data.show_edge_seams = True
return {'FINISHED'}
diff --git a/uv_magic_uv/muv_unwrapconst_ops.py b/uv_magic_uv/muv_unwrapconst_ops.py
index 86686090..28800c42 100644
--- a/uv_magic_uv/muv_unwrapconst_ops.py
+++ b/uv_magic_uv/muv_unwrapconst_ops.py
@@ -18,8 +18,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
import bpy
import bmesh
diff --git a/uv_magic_uv/muv_uvbb_ops.py b/uv_magic_uv/muv_uvbb_ops.py
index 3e773b7a..c3fedf8e 100644
--- a/uv_magic_uv/muv_uvbb_ops.py
+++ b/uv_magic_uv/muv_uvbb_ops.py
@@ -20,8 +20,8 @@
__author__ = "Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
from enum import IntEnum
import math
diff --git a/uv_magic_uv/muv_wsuv_ops.py b/uv_magic_uv/muv_wsuv_ops.py
index debc666c..3e47d960 100644
--- a/uv_magic_uv/muv_wsuv_ops.py
+++ b/uv_magic_uv/muv_wsuv_ops.py
@@ -20,8 +20,9 @@
__author__ = "McBuff, Nutti <nutti.metro@gmail.com>"
__status__ = "production"
-__version__ = "4.3.1"
-__date__ = "6 June 2017"
+__version__ = "4.4"
+__date__ = "2 Aug 2017"
+
import bpy
import bmesh
@@ -126,6 +127,9 @@ class MUV_WSUVApply(bpy.types.Operator):
orig_area = bpy.context.area.type
bpy.context.area.type = 'IMAGE_EDITOR'
+ # select all UV related to the selected faces
+ bpy.ops.uv.select_all(action='SELECT')
+
# apply scaled UV
bpy.ops.transform.resize(
value=(ratio, ratio, ratio),
@@ -134,14 +138,7 @@ class MUV_WSUVApply(bpy.types.Operator):
mirror=False,
proportional='DISABLED',
proportional_edit_falloff='SMOOTH',
- proportional_size=1,
- snap=False,
- snap_target='CLOSEST',
- snap_point=(0, 0, 0),
- snap_align=False,
- snap_normal=(0, 0, 0),
- texture_space=False,
- release_confirm=False)
+ proportional_size=1)
bpy.context.area.type = orig_area