##############################
import rhinoscriptsyntax as rs
import random, time, sys   ###                                              
sys.path.append("P:/")     ### add path where "DM_lib.py" can be found !!!
sys.path.append("P:/WWW/tkonrad/DM2/")                                             
import DM_lib as dm        ### reload(dm)    
############################## 


rs.EnableRedraw(0)
dm.eA()

rs.Redraw()

n = 5
a = b = 1
print 

fibReihe = [a,b]
for i in range(n):
    c = a+b
    a = b
    b = c
    fibReihe.append(c)
print "fibi =", fibReihe

for i,fibi in enumerate(fibReihe):
    rect = rs.AddRectangle([[0,0,0], [fibi,0,0], [0,fibi,0]], fibi, fibi)
    rs.RotateObject(rect, [0,0,0], -90, [0,0,1])
    rs.ObjectName( rect, "fibi_"+str(i) )
    if i:
        p0 = rs.CurveEditPoints(rs.ObjectsByType(4)[0])[(i-0)%4-0]
        p1 = rs.CurveEditPoints(rs.ObjectsByType(4)[1])[(i+1)%4-0]
        ##coords = rs.CurveEditPoints(rs.ObjectsByType(4)[0])
        ##print i, "..", fibi, "--", (i-0)%4, i%4, ".." ,
        ##print p0, p1, "__", rs.VectorSubtract(p1, p0)
        #rs.ObjectColor(rs.AddPoint(p0), [200,0,0])
        #rs.ObjectName( rs.AddPoint(p0), str(i))
        rs.MoveObject(rs.ObjectsByType(4)[0], rs.VectorSubtract(p1, p0))
        ##coords = rs.CurveEditPoints(rs.ObjectsByType(4)[0])
        #rs.AddCurve(coords[0:3], 2)
dm.zA()


fibis = rs.ObjectsByName("fibi_*", 1)
fibis.reverse()

print "len(fibis)", len(fibis)
rota = 0
spiraCoords=[]
floor = 10

for i,crv in enumerate(fibis[1:]):
    coords = rs.CurveEditPoints(crv)
    p0 = dm.pnt2str( coords[0] )
    p1 = dm.pnt2str( coords[1] )
    p3 = dm.pnt2str( coords[3] )
    #p3 = rs.VectorAdd(p3, rs.VectorScale( dVec3, 500.0 ) )
    rs.Command("Arc "+str(p0)+" "+str(p1)+" "+str(p3)+" enter", 0)
    rs.ObjectColor(rs.AllObjects()[0], [200,100,100])
    #rs.RotateObject(rs.AddCurve(coords[1:4], 2), dm.pntCentroid(coords[0:4]), rota)
    rs.RotateObject(rs.AllObjects()[0], dm.pntCentroid(coords[0:4]), rota+180*(0))
    rota += 90#*(i>0)
    print i, fibReihe[i+1]
    coords = rs.CurveEditPoints(rs.AllObjects()[0])
    rs.AddPoints( coords )
    #print "fibReihei-0",fibReihe[i-0]
    coords[0][2]=fibReihe[i-0]
    coords[1][2]=fibReihe[i-0]+(fibReihe[i+1]-fibReihe[i-0])*0.5
    coords[2][2]=fibReihe[i+1]
    top = rs.AddPoints( coords )
    top_arc = rs.AddArc3Pt(coords[0], coords[2],  coords[1])
    top_arcOffset = rs.OffsetCurve( top_arc, [0,0,0], 0.0000001 )[0]
#    rs.DivideCurve(top_arcOffset, 3, 0)
    rs.ObjectColor( top_arcOffset, [200,0,0])
    #
#    rs.DeleteObject(top_arc)
    print " type(top_arc)", type(top_arc)

    topOffset2 = rs.OffsetCurve( top_arc, [0,0,0], -4.0 )
    coords2 = rs.CurveEditPoints(rs.AllObjects()[0])
    top2 = rs.AddPoints( coords2 )

    i = 0
    coords[0][2]=i#fibReihe[i-0]
    coords[1][2]=i#fibReihe[i-0]+(fibReihe[i+1]-fibReihe[i-0])*0.5
    coords[2][2]=i#fibReihe[i+1]
    rs.AddPoints(coords)
    arc = rs.AddArc3Pt(coords[0], coords[2], coords[1])
    rs.OffsetCurve( top_arcOffset, [0,0,0], 1.0 )
    coords3 = rs.CurveEditPoints(rs.AllObjects()[0])
    coordsC0 = rs.DivideCurve(arc, 10, 0)
    top3 = rs.AddPoints( coords3 )
    c2 = rs.OffsetCurve( arc, [0,0,0], -4.0 )
    coords3 = rs.CurveEditPoints(rs.AllObjects()[0])
    coordsC2 = rs.DivideCurve(c2, 10, 0)
    top3 = rs.AddPoints( coords3 )
    top3C2 = rs.AddPoints( coordsC2 )

    if i==0:
        coords[0][2]=0
        coords[1][2]=0.5
        coords[2][2]=1
#    rs.AddArc3Pt(coords[0], coords[2], coords[1])
    rs.ObjectColor(rs.AllObjects()[0], [100,100,200])
    spiraCoords.extend( coords[1:3])
