correct for re-arranged imports
[blender-addons-contrib.git] / io_directx_bel / bel / uv.py
1 from mathutils import Vector
2 from .. import bel
3
4 def write(me, uvs, matimage = False) :
5     uvs, nest = bel.nested(uvs)
6     newuvs = []
7     for uvi, uvlist in enumerate(uvs) :
8
9         uv = me.uv_textures.new()
10         uv.name = 'UV%s'%uvi
11         
12         for uvfi, uvface in enumerate(uvlist) :
13             #uv.data[uvfi].use_twoside = True # 2.60 changes mat ways
14             mslotid = me.faces[uvfi].material_index
15             #mat = mesh.materials[mslotid]
16             if matimage :
17                 if matimage[mslotid] :
18                     img = matimage[mslotid]
19                     uv.data[uvfi].image=img
20                     #uv.data[uvfi].use_image = True
21             
22             uv.data[uvfi].uv1 = Vector((uvface[0],uvface[1]))
23             uv.data[uvfi].uv2 = Vector((uvface[2],uvface[3]))
24             uv.data[uvfi].uv3 = Vector((uvface[4],uvface[5]))
25             if len(uvface) == 8 :
26                 uv.data[uvfi].uv4 = Vector((uvface[6],uvface[7]))
27         newuvs.append(uv)
28     if nest : return newuvs
29     else : return newuvs[0]
30
31
32 # face are squared or rectangular, 
33 # any orientation
34 # vert order width then height 01 and 23 = x 12 and 03 = y
35 # normal default when face has been built
36 def row(vertices,faces,normals=True) :
37     uvs = []
38     for face in faces :
39         v0 = vertices[face[0]]
40         v1 = vertices[face[1]]
41         v2 = vertices[face[-1]]
42         print(v0,v1)
43         lx = (v1 - v0).length
44         ly = (v2 - v0).length
45         # init uv
46         if len(uvs) == 0 :
47             x = 0
48             y = 0
49         elif normals :
50             x = uvs[-1][2]
51             y = uvs[-1][3]
52         else :
53             x = uvs[-1][0]
54             y = uvs[-1][1]
55         if normals : uvs.append([x,y,x+lx,y,x+lx,y+ly,x,y+ly])
56         else : uvs.append([x+lx,y,x,y,x,y+ly,x+lx,y+ly])
57     return uvs
58
59 ## convert UV given as verts location to blender format
60 # eg : [ [v0x,v0y] , [vnx , vny] ... ] -> [ [ v1x,v1y,v0x,v0y,v4x,v4y] ... ]
61 # found in directx
62 def asVertsLocation(verts2d, faces) :
63     uv = []
64     for f in faces :
65         uvface = []
66         for vi in f :
67             uvface.extend(verts2d[vi])
68         uv.append(uvface)
69     return uv