############################################## ### DM2_w24 # svitlana.kisteniuk@tugraz.at ################### ### KIEW Svitlana Kisteniuk ### SETUP_Kyjiw ### ############################################################## ############################## import rhinoscriptsyntax as rs import random, time, sys ### sys.path.append("P:/") ### sys.path.append("C:\D\Education\TU Graz\WS_2024\Informatik\Final") ### import DM_lib as dm ### reload( dm ) import math allobjs=rs.AllObjects() rs.DeleteObjects(allobjs) ############################## rs.UnitSystem(4) # km = 5, meters = 4, cm = 3 etc rs.ShowGrid(None, 0) # grid > 0 = off rs.ShowGridAxes(None, 1) # y/y/z axen display > 0/1 = off/on rs.ViewDisplayMode(rs.CurrentView(), "wireframe") rs.Command("cplane w t enter", 0) # cPlane World Top dm.PointRadius(displayModeX=0, rad=3, styl=3) dm.printDisplay(1) # nomen est omen rs.EnableRedraw(0) #haus = rs.ObjectsByName("_bldg3D_higBy_flo_1013412697")[0] #print haus #coords = dm.getSurfacePoints( haus ) #dm.textDots(coords) # #crv = rs.AddCurve( coords ) #print rs.CurveEditPoints( crv ) #coords = [ [cor[0],cor[1],cor[2]] for cor in coords ] #coords = [[43977.861566135660, 61993.393486421555, 0.0], [43977.861566135660, 61993.393486421555, 28.0], [43983.554040818941, 61988.101287643425, 28.0], [44002.105108461343, 62008.026439345442, 28.0], [43996.412633778527, 62013.318654978648, 28.0], [43996.412633778527, 62013.318654978648, 0.0], [44002.105108461343, 62008.026439345442, 0.0], [43983.554040818941, 61988.101287643425, 0.0]] coords = [ [43996.412633778527, 62013.318654978648, 0.0], [44002.105108461343, 62008.026439345442, 0.0], [43983.554040818941, 61988.101287643425, 0.0]] #dm.textDots(coords) gH = 4.0 ### 7 x 4 = hoehe = 28m // geschosshoehe lRaster = 4.0 ### 7 x 4 = laenge = 28m dRaster = 4.0 ### 2 x 4 = tiefe = 8m ################# origin = coords[1] lVec = rs.VectorSubtract(coords[2], coords[1]) lVec = rs.VectorUnitize(lVec) dVec = rs.VectorSubtract(coords[0], coords[1]) dVec = rs.VectorUnitize(dVec) ################# ## get coordinate def gC( L=2, D=1, H=3 ): cor = rs.VectorAdd(origin, rs.VectorScale(lVec, L*lRaster)) cor = rs.VectorAdd(cor, [0,0,H*gH]) cor = rs.VectorAdd(cor, rs.VectorScale(dVec, D*dRaster)) return cor ############## dm.newEmptyLayer("Default") ### setUp if 0: for L in range(7+1): for D in range(2+1): for H in range(7+1): rs.AddPoint( gC(L, D, H) ) rs.AddCurve( [gC(0,0,0), gC(0,0,7), gC(7,0,7), gC(7,0,0), gC(7,2,0), gC(7,2,7), gC(0,2,7), gC(0,2,0), gC(0,0,0)] ,1) frontPanels = [ [gC(L,0,H), gC(L,0,H+1), gC(L+1,0,H+1), gC(L+1,0,H)] for L in range(7) for H in range(7) ] sidePanels = [ [gC(0,D+1,H), gC(0,D+1,H+1), gC(0,D,H+1), gC(0,D,H)] for H in range(7) for D in range(2) ] backPanels = [ [gC(L+1,2,H), gC(L+1,2,H+1), gC(L,2,H+1), gC(L,2,H)] for L in range(7) for H in range(7) ] upSidePanels = [ [gC(7,D+1,H), gC(7,D+1,H+1), gC(7,D,H+1), gC(7,D,H)] for H in range(7) for D in range(2) ] #UnoPanelCoords = dm.UnoPanelCoords #allPanels = UnoPanelCoords[4] #divPanels = [[gC( 0, 0, 0), gC( 0, 0, 7), gC( 7, 0, 7), gC( 7, 0, 0)]] divPanels = [[gC( 1, 0, 1), gC( 1, 0, 7), gC( 6, 0, 7), gC( 6, 0, 1)]] midPanels = [[gC( 1, 0, 1), gC( 1, 0, 7), gC( 6, 0, 7), gC( 6, 0, 1)]] auPanels1 = [[gC( 0, 0, 1), gC( 0, 0, 7), gC( 1, 0, 7), gC( 1, 0, 1)]] auPanels2 = [[gC( 7, 0, 1), gC( 7, 0, 7), gC( 6, 0, 7), gC( 6, 0, 1)]] def dividePanel( panel=divPanels[0], maxPanels=10, minHig=4.0 ): dm.esc() if maxPanels>200: maxPanels=200 random.shuffle(divPanels) if 1 and rs.Distance( panel[0], panel[1]) > minHig*0.2: divPanels.remove( panel ) pMid = dm.pntInbetween(panel[0],panel[2]) divPanels.append([panel[0], dm.pntInbetween(panel[0],panel[1]), pMid, dm.pntInbetween(panel[3],panel[0])]) divPanels.append([dm.pntInbetween(panel[0],panel[1]), panel[1],dm.pntInbetween(panel[1],panel[2]), pMid]) divPanels.append([pMid, dm.pntInbetween(panel[1],panel[2]), panel[2], dm.pntInbetween(panel[2],panel[3])]) divPanels.append([dm.pntInbetween(panel[0],panel[3]), pMid, dm.pntInbetween(panel[2],panel[3]), panel[3]]) #print rs.Distance( panel[0], panel[1] ), ">>", rs.Distance( divPanels[-1][0], divPanels[-1][1] ) if len(divPanels) <= maxPanels : dividePanel( panel=random.choice( divPanels[0: int(len(divPanels)*0.666)]), maxPanels=maxPanels ) else: #print "::: brrrrrrrrrrrr..." return divPanels return divPanels dividePanel(panel=divPanels[0], maxPanels=64, minHig=1.0 ) #print "::: len(divPanels)",len(divPanels) def myPanel(panel,anz=8): p0,p1,p2,p3 = panel coords = [p0,p1,p2,p3,p0] #rs.AddCurve( coords, 2) if rs.Distance(p0,p1) != 4.0: coords = coords+coords random.shuffle(coords) coords.append(coords[0]) crv=rs.AddCurve( coords, 2) rs.ObjectColor(crv, [40,80,20]) else: rs.AddCurve( coords, 2) rs.AddCurve( [p0,p2, dm.pntInbetween(p0,p3), p1], 2 ) #dm.textDots( [p0, p3] ) def DNApanelNeu (panel, steps = 40): p0,p1,p2,p3 = panel coords = [p0,p1,p2,p3,p0] #p0 = [10,0,0] #p1 = [10,0,40] #p3 = [-10,0,0] center = dm.pntInbetween(p0,p3) #rs.AddPoint(center) vec1 = rs.VectorCreate(p0,center) vec2 = rs.VectorCreate(p3,center) steps = 40 vecZ = rs.VectorScale(rs.VectorCreate(p1,p0),1/steps) coords1 = [] coords2 = [] for i in range (steps): center = rs.VectorAdd(center, vecZ) cor1 = rs.VectorAdd(center,rs.VectorRotate(vec1,( 360*2 /steps)*i,[0,0,1])) cor2 = rs.VectorAdd(center,rs.VectorRotate(vec2,-1*( 360*2 /steps)*i,[0,0,1])) coords1.append(cor1) coords2.append(cor2) #rs.AddPoints(coords1) #rs.AddPoints(coords2) rs.AddCurve(coords1) rs.AddCurve(coords2) Verb = [] for i in range(len(coords1)): rs.AddCurve([coords1[i],coords2[i]]) def MikrobePanel (panel): p0,p1,p2,p3 = panel coords = [p0,p1,p2,p3,p0] center=dm.pntInbetween(p0,p2) vecl = rs.VectorCreate(p0,p3) negvecl = rs.VectorRotate(vecl,180,[0,0,1]) vech = rs.VectorCreate(p0,p1) negvech = [vech[0],vech[1],-vech[2]] #Q1 h+, l+ q1 = rs.VectorAdd(center, rs.VectorScale(vecl,random.uniform(0.1,0.5))) q1 = rs.VectorAdd(q1, rs.VectorScale(vech,random.uniform(0.1,0.5))) #Q2 h+, l- q2 = rs.VectorAdd(center, rs.VectorScale(negvecl,random.uniform(0.1,0.5))) q2 = rs.VectorAdd(q2, rs.VectorScale(vech,random.uniform(0.1,0.5))) #Q3 h-, l- q3 = rs.VectorAdd(center, rs.VectorScale(negvecl,random.uniform(0.1,0.5))) q3 = rs.VectorAdd(q3, rs.VectorScale(negvech,random.uniform(0.1,0.5))) #Q4 h-, l+ q4 = rs.VectorAdd(center, rs.VectorScale(vecl,random.uniform(0.1,0.5))) q4 = rs.VectorAdd(q4, rs.VectorScale(negvech,random.uniform(0.1,0.5))) crvMikrobe = rs.AddCurve([q1,center, q2,q3,center, q4,q1]) def MikrobePanel2 (panel): p0,p1,p2,p3 = panel coords = [p0,p1,p2,p3,p0] center=dm.pntInbetween(p0,p2) vecl = rs.VectorCreate(p0,p3) negvecl = rs.VectorRotate(vecl,180,[0,0,1]) vech = rs.VectorCreate(p0,p1) negvech = [vech[0],vech[1],-vech[2]] #Q1 h+, l+ q1 = rs.VectorAdd(center, rs.VectorScale(vecl,random.uniform(0.1,0.5))) q1 = rs.VectorAdd(q1, rs.VectorScale(vech,random.uniform(0.1,0.5))) #Q2 h+, l- q2 = rs.VectorAdd(center, rs.VectorScale(negvecl,random.uniform(0.1,0.5))) q2 = rs.VectorAdd(q2, rs.VectorScale(vech,random.uniform(0.1,0.5))) #Q3 h-, l- q3 = rs.VectorAdd(center, rs.VectorScale(negvecl,random.uniform(0.1,0.5))) q3 = rs.VectorAdd(q3, rs.VectorScale(negvech,random.uniform(0.1,0.5))) #Q4 h-, l+ q4 = rs.VectorAdd(center, rs.VectorScale(vecl,random.uniform(0.1,0.5))) q4 = rs.VectorAdd(q4, rs.VectorScale(negvech,random.uniform(0.1,0.5))) crvMikrobe2 = rs.AddCurve([q1, q2,q3, q4,q1]) rs.ObjectColor(crvMikrobe2, [random.randint(50, 200), random.randint(50, 200), 100]) def kugel (panel): p0,p1,p2,p3 = panel coords = [p0,p1,p2,p3,p0] center=dm.pntInbetween(p0,p2) anz = 100 rad = 0.2 deltaAngle = 360/anz vec = [1, 0, 0] for i in range(anz): angX = deltaAngle*i #print angX vecX = rs.VectorRotate( vec, deltaAngle*i, [random.uniform(-0.1,0.1), random.uniform(-0.1,0.1) , random.uniform(-0.1,0.1) ] ) vecX = rs.VectorScale (vecX, 1) #vecX = rs.VectorScale( vecX, random.uniform( 5,rad) ) vecX = rs.VectorAdd( vecX, center) ku1 = rs.AddPoint( vecX ) rs.ObjectColor(ku1, [0,0,200]) dm.newEmptyLayer("KIEW", [100,100,200]) Sockel1 = gC( 0, 0, 0) Sockel2 = gC( 7, 0, 0) Sockel3 = gC( 0, 0, 1) Sockel4 = gC( 7, 0, 1) crvSock1 = rs.AddCurve([Sockel1,Sockel2]) crvSock2 = rs.AddCurve([Sockel3,Sockel4]) Anz = 20 SockCoords1 = rs.DivideCurve(crvSock1,Anz) SockCoords2 = rs.DivideCurve(crvSock2,Anz) #SauelVec = rs.VectorUnitize(rs.VectorCreate(SockCoords2[0],SockCoords2[1])) #SauelTiefVec = rs.VectorRotate(SauelVec, 90,[0,0,1]) for i in range(len(SockCoords1)): # SP1 = rs.VectorAdd(SockCoords1,SauelVec) # SP2 = rs.VectorAdd(SockCoords1, rs.VectorRotate(SauelVec, 180, [0,0,1])) # SP3 = rs.VectorAdd(SP1, SauelTiefVec) # SP3 = rs.VectorAdd(SP2, SauelTiefVec) rs.AddCurve([SockCoords1[i],SockCoords2[i]]) """ for i,panel in enumerate(divPanels[0:]): if random.uniform(0,100) < 60: MikrobePanel(panel) else: #myPanel(panel,anz=8) DNApanelNeu(panel, steps = 20) """ for i, panel in enumerate(divPanels[0:]): if random.uniform(0, 100) < 40: MikrobePanel(panel) elif 40 < random.uniform(0, 100) < 95: MikrobePanel2(panel) else: kugel(panel) for panel in auPanels1: DNApanelNeu(panel, steps = 40) for panel in auPanels2: DNApanelNeu(panel, steps = 40) #for panel in divPanels: MikrobePanel(panel) #for panel in sidePanels: myPanel(panel,anz=8) #for panel in backPanels: myPanel(panel,anz=8) #for panel in upSidePanels: myPanel(panel,anz=8) rs.CurrentLayer("Default")