new script seams from islands, adds seams at the boundries of existing UV islands.

uvcalc_smart_project - needed to import Main
This commit is contained in:
Campbell Barton 2007-03-01 05:32:06 +00:00
parent 3aaea833b9
commit 52f105b32e
2 changed files with 79 additions and 1 deletions

@ -0,0 +1,78 @@
#!BPY
"""
Name: 'Seams from Islands'
Blender: 243
Group: 'UV'
Tooltip: 'Add seams onto the mesh at the bounds of UV islands'
"""
# Add a licence here if you wish to re-distribute, we recommend the GPL
from Blender import Scene, Mesh, Window, sys
import BPyMessages
def seams_from_islands(me):
# This function runs out of editmode with a mesh
# error cases are alredy checked for
# next intex
wrap_q = [1,2,3,0]
wrap_t = [1,2,0]
edge_uvs = {}
for f in me.faces:
f_uv = [(round(uv.x, 6), round(uv.y, 6)) for uv in f.uv]
f_vi = [v.index for v in f]
for i, key in enumerate(f.edge_keys):
if len(f)==3:
uv1, uv2 = f_uv[i], f_uv[wrap_t[i]]
vi1, vi2 = f_vi[i], f_vi[wrap_t[i]]
else: # quad
uv1, uv2 = f_uv[i], f_uv[wrap_q[i]]
vi1, vi2 = f_vi[i], f_vi[wrap_q[i]]
if vi1 > vi2: uv1,uv2 = uv2,uv1
edge_uvs.setdefault(key, []).append((uv1, uv2))
# add seams
SEAM = Mesh.EdgeFlags.SEAM
for ed in me.edges:
print len(set(edge_uvs[ed.key]))
if len(set(edge_uvs[ed.key])) > 1:
ed.flag |= SEAM
def main():
# Gets the current scene, there can be many scenes in 1 blend file.
sce = Scene.GetCurrent()
# Get the active object, there can only ever be 1
# and the active object is always the editmode object.
ob_act = sce.objects.active
me = ob_act.getData(mesh=1)
if not ob_act or ob_act.type != 'Mesh' or not me.faceUV:
BPyMessages.Error_NoMeshUvActive()
return
# Saves the editmode state and go's out of
# editmode if its enabled, we cant make
# changes to the mesh data while in editmode.
is_editmode = Window.EditMode()
if is_editmode: Window.EditMode(1)
Window.WaitCursor(1)
t = sys.time()
# Run the mesh editing function
seams_from_islands(me)
# Timing the script is a good way to be aware on any speed hits when scripting
print 'My Script finished in %.2f seconds' % (sys.time()-t)
Window.WaitCursor(0)
# This lets you can import the script without running it
if __name__ == '__main__':
main()

@ -42,7 +42,7 @@ selected faces, or all faces.
# --------------------------------------------------------------------------
from Blender import Object, Draw, Window, sys, Mesh, Geometry
from Blender import Object, Draw, Window, sys, Mesh, Geometry, Main
from Blender.Mathutils import CrossVecs, Matrix, Vector, RotationMatrix, DotVecs
from math import cos