import maya.cmds as cmd

def makePart(_name):
    lol = cmd.polyCube(n="derp",w=0.7,h=0.1,d=0.1)
    cmd.select(("derp.f[5]","derp.f[4]"))
    cmd.polyExtrudeFacet()
    cmd.scale(1.2,1,1)
    cmd.move(0,0.05,0,r=True)
    cmd.polyExtrudeFacet()
    cmd.scale(1.2,1,1)
    cmd.select("derp.f[15]","derp.f[7]","derp.f[2]","derp.f[13]","derp.f[21]",
    "derp.f[19]","derp.f[11]","derp.f[0]","derp.f[9]","derp.f[17]")
    cmd.delete()
    cmd.select("derp.f[:]")
    cmd.polyProjection(t="planar",md="y")
    cmd.select("derp")
    cmd.rename(_name);
    return _name

datCurve = cmd.ls(type='nurbsCurve')
divisions = 50
columns = 20

fromVerts = [22,14,2,3,11,19,17,9,1,0,13,21]
toVerts = [23,15,4,5,10,18,16,8,7,6,12,20]

for butts in range(0,divisions):
    cmd.select(datCurve)
    pos = cmd.pointOnCurve(pr=(butts/(divisions*1.0)),top=True)
    tan = cmd.pointOnCurve(pr=(butts/(divisions*1.0)),top=True,t=True)
    tan[0] = -(tan[0])
    tan[1]=0
    tan[2] = (tan[2])
    currCube = makePart("Cubey"+str(butts))
	
	
    cmd.select(currCube)
    cmd.move(pos[0],pos[1],pos[2])
    rotation = cmd.angleBetween(v1=(tan),v2=(0,0,1),er=True)
    print(tan," ",rotation)
    cmd.rotate(0,rotation[1],0)
    
    if butts != 0:
        for i in range(0,12):
            cVals = cmd.xform("Cubey"+str(butts)+".vtx["+str(toVerts[i])+"]",t=True,q=True,ws=True)
            print("\n")
            print(cVals)
            pVals = cmd.xform("Cubey"+str(butts-1)+".vtx["+str(fromVerts[i])+"]",t=True,q=True,ws=True)
            print(pVals)
            print("\n")
            nVals = [0.0,0.0,0.0]
            for j in range(0,3):
                nVals[j] = cVals[j]-nVals[j];
                print(cVals[j]-nVals[j])
                print(nVals[j])
            cmd.xform("Cubey"+str(butts)+".vtx["+str(toVerts[i])+"]",t=pVals,ws=True)
            cmd.refresh(cv=True)
            
for i in range(0,12):
    cVals = cmd.xform("Cubey"+str(0)+".vtx["+str(toVerts[i])+"]",t=True,q=True,ws=True)
    print("\n")
    print(cVals)
    pVals = cmd.xform("Cubey"+str(divisions-1)+".vtx["+str(fromVerts[i])+"]",t=True,q=True,ws=True)
    print(pVals)
    print("\n")
    nVals = [0.0,0.0,0.0]
    for j in range(0,3):
        nVals[j] = cVals[j]-nVals[j]
        print(cVals[j]-nVals[j])
        print(nVals[j])
    cmd.xform("Cubey"+str(0)+".vtx["+str(toVerts[i])+"]",t=pVals,ws=True)
    cmd.refresh(cv=True)

for butts in range(0,columns):
    cmd.select(datCurve)
    pos = cmd.pointOnCurve(pr=(butts/(columns*1.0)),top=True)
    tan = cmd.pointOnCurve(pr=(butts/(columns*1.0)),top=True,t=True)
    tan[0] = -(tan[0])
    tan[1]=0
    tan[2] = (tan[2])
    currCol = cmd.polyCylinder(n="Column"+str(butts),r=0.1,h=pos[1])
	
    cmd.select(currCol)
    cmd.move(pos[0],pos[1]/2,pos[2])
    print(tan," ",rotation)

cmd.select(cl=True)
for butts in range(0,divisions):
    cmd.select("Cubey"+str(butts),add=True)
cmd.polyUnite(n="Track")
cmd.select("Track.vtx[:]")
cmd.polyMergeVertex()

cmd.select(cl=True)
for butts in range(0,columns):
    cmd.select("Column"+str(butts),add=True)
cmd.polyUnite(n="Columns")

cmd.delete(all=True,ch=True)