1393249177**Still Developing* UV unwrapper for HexHemisphere only Visible Faces

import bmesh
import math
'''
msh = bpy.data.meshes.new('hexHemisphereMesh')
obj = bpy.data.objects.new('hexHemisphere', msh)
bpy.context.scene.objects.link(obj)
'''
#########################
nnn = 5
#########################
#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

def uvVerts(n):
    yield(0.0, 0.0)
    for p in range(1, n+1):
        dTheta = 2.0*math.pi/float(p)/6.0
        for q in range(p*6):
            theta = dTheta * float(q)
            yield(math.cos(theta), math.sin(theta))
        
vrts = list(uvVerts(nnn))
inds = list(uvIndices(nnn))

#p = 0
#q = 0
loopNode = 0
cord = 0
for face in bm.faces:
    for loop in face.loops:
        loop[uv_lay].uv = vrts[ind[loopNode][cord]]
        loopNode += 1
        cord += 1
    cord = 0

#           print("Loop UV: %f, %f" % uv[:])

#//TODO study loop structure

def uvIndices(n):
    for q in range(1,6):
        yield(q,0,q+1)
    yield(6,0,1)
    for p in range(1,n):
        u00 = 3*p*(p-1)+1
        l00 = 3*p*(p+1)+1
        u0 = u00
        l0 = l00
        for q in range(6):
            for r in range(p):
                yield(l0+r, u0+r, l0+r+1)
                if q==5 and r==p-1:
                    yield(u0+r, l0+r+1, u00)
                else:
                    yield(u0+r, l0+r+1, u0+r+1)                    
            if q<5:
                yield(l0+r+1, u0+r+1, l0+r+2)
            else:
                yield(l0+r+1, u00, l00)
            u0 += p
            l0 += p+1