############################## 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) import Rhino import scriptcontext as sc ############################## ################### #rs.ViewDisplayMode(view=None, mode="rendered") #rs.EnableRedraw(0) #dm.printDisplay(1) #dm.newEmptyLayer("FIBONACCI::ADA", [0,0,0]) ################### dm.eA() rs.Redraw() n = 5 a = b = 1 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 base = [] top = [] top2 = [] base2 = [] div = 10-2^i 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) coords = rs.CurveEditPoints(rs.AllObjects()[0]) base_arc = rs.AddArc3Pt(coords[0], coords[2], coords[1]) base_arcOffset = rs.OffsetCurve( base_arc, [0,0,0], 0.0000001 )[0] coords_base_arc = rs.DivideCurve(base_arcOffset, div, 0) base.extend(coords_base_arc) 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] coords_top_arc = rs.DivideCurve(top_arcOffset, div, 0) rs.ObjectColor( top_arcOffset, [80,80,80]) top.extend(coords_top_arc) # rs.DeleteObject(top_arc) # print " type(top_arc)", type(top_arc) # topOffset2 = rs.OffsetCurve( top_arc, [0,0,0], -4.0 ) # coords_top_arc2 = rs.DivideCurve(topOffset2, div, 0) # top2.extend(coords_top_arc2) # rs.ObjectColor( topOffset2, [0,255,255])#cyan # 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 ) base2Offset = rs.OffsetCurve( arc, [0,0,0], -4.0 ) # coords3 = rs.CurveEditPoints(rs.AllObjects()[0]) coordsC2 = rs.DivideCurve(base2Offset, div, 0) base2.extend(coordsC2) # 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], [80,80,80]) spiraCoords.extend( coords[1:3]) rs.DeleteObject(base_arc) rs.DeleteObject(base_arcOffset) rs.DeleteObject(top_arc) # rs.DeleteObject(top_arcOffset) rs.DeleteObjects(fibis) # print "base",base #rs.ObjectColor(rs.AddCurve(base,1),[0,255,0]) baseCurve = rs.AddCurve(base,1) rs.ObjectColor(baseCurve,[80,80,80]) print "len",rs.CurveLength(baseCurve) #rs.AddCircle(base[0],1) hoehe = 1 allCoords = [] lin_out_mids = [] anzSegments = 90 #oder 90 for i in range(40): pBase2 = base2[i] pTop = top[i] pBase = base[i] lin_out = rs.AddLine(pBase2,pTop) #Linie aussen lin_mid = rs.AddLine(pBase,pTop) vecRadial = rs.VectorUnitize(pBase) if hoehe == 15: hoehe = 15 else: hoehe = hoehe + 0.2 p1 = rs.VectorAdd(pBase, [0,0,hoehe]) p1 = rs.VectorAdd(p1, rs.VectorScale(vecRadial, -i/40-5.0)) p2 = rs.VectorAdd(pBase, [0,0,2]) p2 = rs.VectorAdd(p2, rs.VectorScale(vecRadial, -i/40-2)) lin_out = rs.AddLine(pBase2,pTop) #Linie aussen lin_out = rs.DivideCurve(lin_out, 10,0) # lin_out_mid = rs.VectorAdd(lin_out[5], rs.VectorScale(vecRadial, -3.0)) # rs.AddPoint( lin_out_mid ) # lin_out_mids.extend(lin_out_mid) crv = rs.AddCurve( [ pBase, p2, p1, pTop ], 2 ) coords = rs.DivideCurve( crv, div, 0) # rs.ObjectColor( crv , [255,0,0] ) rs.ObjectPrintWidth( crv , 0.05 ) rs.DeleteObject( crv ) # coords_2 = coords [1] allCoords.append( coords ) for i in range(40,90):#oder (40, 90) pBase = base[i] pTop = top[i] pBase2 = base2[i] # pTop2 = top2[i] vecRadial = rs.VectorUnitize(pBase) if hoehe == 15: hoehe = 15 else: hoehe = hoehe + 0.2 p1 = rs.VectorAdd(pBase, [0,0,hoehe]) p1 = rs.VectorAdd(p1, rs.VectorScale(vecRadial, -6.0)) p2 = rs.VectorAdd(pBase, [0,0,2]) p2 = rs.VectorAdd(p2, rs.VectorScale(vecRadial, -3.0)) lin_out = rs.AddLine(pBase2,pTop) #Linie aussen lin_out = rs.DivideCurve(lin_out, 10,0) # lin_out_mid = rs.VectorAdd(lin_out[5], rs.VectorScale(vecRadial, -3.0)) # rs.AddPoint( lin_out_mid ) # lin_out_mids.extend(lin_out_mid) crv = rs.AddCurve( [ pBase, p2, p1, pTop ], 2 ) coords = rs.DivideCurve( crv, div, 0) # rs.ObjectColor( crv , [255,0,0] ) rs.ObjectPrintWidth( crv , 0.05 ) rs.DeleteObject( crv ) # coords_2 = coords [1] allCoords.append( coords ) if 1: ### DM2_nerd^2 : AddArc3Pt for i in range( div-0 ): # zVal = allCoords[0][i][2] # pZ = [0,0,zVal] # rs.AddPoint( pZ ) for j in range(anzSegments-0): p0 = allCoords[j%anzSegments][i] #Um Zacken herausstehen zu lassen # pout = rs.VectorAdd(p0, rs.VectorScale(vecRadial, -1.0)) p1 = allCoords[j%anzSegments][i+1] p2 = allCoords[(j+1)%anzSegments][i+1] p3 = allCoords[(j+1)%anzSegments][i+0] pMid12 = dm.pntInbetween(p1,p2) pMid23 = dm.pntInbetween(p2,p3) pMid3 = dm.pntInbetween(pMid12,p3) pMid1 = dm.pntInbetween(pMid12,p0) pMid2 = dm.pntInbetween(pMid12,pMid1) pMid03 = dm.pntInbetween(p0,p3) pMid030 = dm.pntInbetween(pMid03,p0) pMid = dm.pntInbetween(p0,p2) pMid01 = dm.pntInbetween(p0,p1) pMid012 = dm.pntInbetween(p0,pMid12) pMid00 = dm.pntInbetween(p0,pMid012) pMid123 = dm.pntInbetween(pMid12,p3) pMid11 = dm.pntInbetween(pMid12,p1) if random.random() < 0.5: # if j == 0: # lin = rs.ObjectColor(rs.AddLine(p0,top[0]),[150,155,166]) if j == 89:#89: lin = rs.ObjectColor(rs.AddLine(p0,lin_out[0]),[80,80,80]) else: lin = rs.ObjectColor(rs.AddLine( p0, pMid12 ),[80,80,80]) lin = rs.ObjectColor(rs.AddLine(pMid12,p3),[80,80,80]) lin = rs.ObjectColor(rs.AddLine(p3,p0),[28,134,238]) lin = rs.ObjectColor(rs.AddLine(pMid3,pMid),[80,80,80]) lin = rs.ObjectColor(rs.AddLine(pMid,pMid030),[80,80,80]) lin = rs.ObjectColor(rs.AddLine(pMid,pMid2),[80,80,80]) lin = rs.ObjectColor(rs.AddLine(p1,p2),[28,134,238]) lin = rs.ObjectColor(rs.AddLine(pMid01,pMid00),[28,134,238]) lin = rs.ObjectColor(rs.AddLine(pMid23,pMid123),[28,134,238]) lin = rs.ObjectColor(rs.AddLine(pMid11,pMid01),[28,134,238]) elif j == 89:#89: lin = rs.ObjectColor(rs.AddLine(p0,lin_out[0]),[80,80,80]) else: lin_re = rs.AddLine( p0, pMid12 ) lin_base = rs.AddLine( p0, p3 ) lin_div_re = rs.DivideCurve(lin_re,10,0) lin_div_base = rs.DivideCurve(lin_base,10,0) rs.AddLine( lin_div_re[9],lin_div_base[0]) rs.AddLine( lin_div_re[8],lin_div_base[1]) rs.AddLine( lin_div_re[7],lin_div_base[2]) rs.AddLine( lin_div_re[6],lin_div_base[3]) rs.AddLine( lin_div_re[5],lin_div_base[4]) rs.AddLine( lin_div_re[4],lin_div_base[5]) rs.AddLine( lin_div_re[3],lin_div_base[6]) rs.AddLine( lin_div_re[2],lin_div_base[7]) rs.AddLine( lin_div_re[1],lin_div_base[8]) rs.AddLine( lin_div_re[0],lin_div_base[9]) lin = rs.ObjectColor(rs.AddLine( p3, pMid12 ),[28,134,238]) lin = rs.ObjectColor(rs.AddLine( p2, p1 ),[28,134,238]) lin = rs.ObjectColor(rs.AddLine(pMid01,pMid00),[28,134,238]) lin = rs.ObjectColor(rs.AddLine(pMid23,pMid123),[28,134,238]) lin = rs.ObjectColor(rs.AddLine(pMid11,pMid01),[28,134,238])