cylinder.py

#!BPY
import bpy
import math
'''
for x in bpy.context.scene.objects:
    bpy.context.scene.objects.unlink(x)
     
for x in bpy.data.objects:
    bpy.data.objects.remove(x)

for x in bpy.data.objects:
    x.select = True
    bpy.ops.object.delete()
'''    
#############
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)
def vert():
#    yield (0.0, 0.0, 1.0)
    for v in range(n):
        for u in range(m):
            theta = float(u)*dt
            x = cos(theta)
            y = sin(theta)
            yield(x, y, h*float(v))
     
def edge():
    for v in range(n-1):
        for u in range(m-1):
            yield(v*m+u, (v+1)*m+u)
            yield((v+1)*m+u, v*m+u+1)
        u=m-1
        yield(v*m+u, (v+1)*m+u)
        yield((v+1)*m+u, v*m)
        yield(v*m, (v+1)*m)

def face():
    for v in range(n-1):
        for u in range(m-1):
            yield(v*m+u, (v+1)*m+u, v*m+u+1)
            yield((v+1)*m+u, v*m+u+1, (v+1)*m+u+1)
#            yield((v+1)*m+u, v*m+u+1)
        u=m-1
        yield(v*m+u, (v+1)*m+u, v*m)
        yield((v+1)*m+u, v*m, (v+1)*m)

#msh.from_pydata(list(vert()), list(edge()), [])
msh.from_pydata(list(vert()), [], list(face()))
msh.update()