##############################
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])
    #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, 10, 0)
    rs.ObjectColor( top_arcOffset, [200,0,0])
    #
    #rs.DeleteObject(
    print " type(top_arc)", type(top_arc)
    if rs.IsCurve(top_arc):
        topOffset = rs.OffsetCurve( top_arc, [0,0,0], 1.0 )
        coords2 = rs.CurveEditPoints(rs.AllObjects()[0])
        top2 = rs.AddPoints( coords2 )
        topOffset1 = rs.OffsetCurve( top_arc, [0,0,0], -1.0 )
        coords2 = rs.CurveEditPoints(rs.AllObjects()[0])
        top2 = rs.AddPoints( coords2 )
        topOffset2 = rs.OffsetCurve( top_arc, [0,0,0], -2.0 )
        coords2 = rs.CurveEditPoints(rs.AllObjects()[0])
        top2 = rs.AddPoints( coords2 )
#    top_arcToCrv = rs.AddLine( rs.CurveStartPoint(top_arc), rs.CurveEndPoint(top_arc))
#    coordsA = rs.DivideCurve(top_arcToCrv, 10, 0)
#    rs.ObjectColor(rs.AddPoints(coordsA), [100,0,0] )
    for i in range(floor):
        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])
        if rs.IsCurve(arc):
            c0 = rs.OffsetCurve( arc, [0,0,0], 1.0 )
            coords3 = rs.CurveEditPoints(rs.AllObjects()[0])
#            coordsC0 = rs.DivideCurve(arc, 10, 0)
            top3 = rs.AddPoints( coords3 )
#            top3C0 = rs.AddPoints( coordsC0 )
            c1 = rs.OffsetCurve( arc, [0,0,0], -1.0 )
            coords31 = rs.CurveEditPoints(rs.AllObjects()[0])
#            coordsC1 = rs.DivideCurve(c1, 10, 0)
            top31 = rs.AddPoints( coords31 )
#            top3C1 = rs.AddPoints( coordsC1 )
            c2 = rs.OffsetCurve( arc, [0,0,0], -2.0 )
            coords3 = rs.CurveEditPoints(rs.AllObjects()[0])
            coordsC2 = rs.DivideCurve(c2, 10, 0)
            top3 = rs.AddPoints( coords3 )
            top3C2 = rs.AddPoints( coordsC2 )
#        newPoints = rs.AddPoints( coords )
#        arcToCrv = rs.AddLine( rs.CurveStartPoint(arc), rs.CurveEndPoint(arc))
#        coordsC = rs.DivideCurve(arcToCrv, 10, 0)
#        rs.ObjectColor(rs.AddPoints(coordsC), [60,170,15] )
#        crv = rs.AddCurve( coords, 2 )
#    rs.AddCurve(coords,1)

#    crvDiv = 5
#    top_crv = rs.AddCurve( coords, 2 )
#    coords = rs.DivideCurve( top_crv, crvDiv, create_points=0 )
#    rs.AddPoints( coords ) 


    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])
#rs.AddCurve( spiraCoords, 1)
#rs.AddCurve( spiraCoords, 2)
#rs.AddInterpCurve(spiraCoords, degree=3, knotstyle=3, start_tangent=None, end_tangent=None)