Cylinder BMesh UV mapping for Blender 2.6 or later
It seems that bmesh data are refreshed when the mode is changed from "edit" to "object", though I have not figured out the exact moment yet. The code is the same as ever.
import bmesh import math msh = bpy.data.meshes.new('cylinderMesh') obj = bpy.data.objects.new('cylinder', msh) bpy.context.scene.objects.link(obj) ######################### m = 10 n = 10 ######################### w = 1.0/float(m) h = 2.0/float(n) dt = 2.0*math.pi/float(m) obj = bpy.context.active_object me = obj.data bm = bmesh.from_edit_mesh(me) #uv_layer = bm.loops.layers.uv.verify() #bm.faces.layers.tex.verify() # currently blender needs both layers. uv_lay = bm.loops.layers.uv.active x = 0 y = 0 loopNode = 0 for face in bm.faces: for loop in face.loops: uv = loop[uv_lay].uv # print("Loop UV: %f, %f" % uv[:]) vert = loop.vert print("Loop Vert: (%f,%f,%f)" % vert.co[:]) if loopNode == 0: loop[uv_lay].uv = (float(x)*w, float(y)*h) elif loopNode == 1: loop[uv_lay].uv = (float(x)*w, float(y+1)*h) elif loopNode == 2: loop[uv_lay].uv = (float(x+1)*w, float(y)*h) elif loopNode == 3: loop[uv_lay].uv = (float(x)*w, float(y+1)*h) elif loopNode == 4: loop[uv_lay].uv = (float(x+1)*w, float(y)*h) elif loopNode == 5: loop[uv_lay].uv = (float(x+1)*w, float(y+1)*h) print("Loop UV: %f, %f" % loop[uv_lay].uv[:]) loopNode += 1 if loopNode == 6: loopNode = 0 x += 1 if x == m: x = 0 y += 1