########################################### ### WS24 DM2 HUE8 Lea Koraimann ### ########################################### ############################## import rhinoscriptsyntax as rs import random, time, sys, os ### sys.path.append("P:/") ### sys.path.append("P:/WWW/lekor27/") ### import DM_lib as dm ### reload( dm ) ############################## 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.ViewDisplayMode(rs.CurrentView(), "rendered") 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) dm.getCameraTarget() #dm.setCameraTarget( [673.18930438, 1030.33224011, 195.27547375], [783.53530192, 548.50819078, 57.26326059], lens=50.0, rota=0, upVec=[0.060033734311178547,-0.26213634935208346,0.9631617128462995] ) # ... danke, andi ! dm.setCameraTarget( [1181.70022019, 570.53801013, 23.19829094], [831.97828791, 598.0661928, 65.64907203], lens=40, rota=0, upVec=[0.1197632345782342,-0.009427101629380187,0.9927577234140403] ) # ... danke, andi ! ###_________________________________________# ### basic settings for grid to fit UN_slab # ### # floors = H = dm.H = 40 # default=40 / incl roof slabs = L = dm.L = 11 # default=11 depth = D = dm.D = 4 # default= 4 / division in building_depth floorHeight = fH = dm.fH = 4.0 # default= 4.0 / 4.0*(H-1) = 156 meters # ################ # get from DM_lib as dm: UnoGridCoords = dm.UnoGridCoords # get gridCoords L*D*H = 1760 UnoPanelCoords = dm.UnoPanelCoords # get panelCoords [frontPanels, backPanels, sidePanels, upSidePanels] / default arguments s.u. ################____________________________# ################ lengthVec = lVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) )) ## rs.AddPoint( dm.getUnoCoord(1, 0, 0) ) depthVec = dVec = rs.VectorUnitize(rs.VectorSubtract( dm.getUnoCoord(0, 1, 0), dm.getUnoCoord(0, 0, 0) )) ## rs.AddPoint( dm.getUnoCoord(0, 1, 0) ) ################ ########################################################################################### #UnoPanelCoords = dm.getUNpanelCoords(anzL=10*7, anzH=39, anzD=3, stepL=1, stepH=1, stepD=1) ### = all ~windows_panels BigPanelCoords = dm.getUNpanelCoords(anzL=10*1, anzH=39, anzD=3, stepL=2, stepH=6, stepD=2) ### = all ~windows_panels UnoPanelCoords = dm.getUNpanelCoords(anzL=10*1, anzH=39, anzD=3, stepL=1, stepH=2, stepD=1) ### = standard for hu_06 ########################################################################################### ########################################################## frontPanels = UnoPanelCoords[0] ### list of coordLists ! backPanels = UnoPanelCoords[1] sidePanels = UnoPanelCoords[2] upSidePanels = UnoPanelCoords[3] allUNPanels = UnoPanelCoords[4] topPanels = UnoPanelCoords[5] ### !!! ################################# dm.newEmptyLayer("UNO::setUp", [120,120,240]) if 0: ### SETUP >> dont' exec @ homework ! rs.ObjectColor(rs.AddCurve( [dm.getUnoCoord(0,0,0), dm.getUnoCoord(0,0,39), dm.getUnoCoord(10,0,39), dm.getUnoCoord(10,0,0), dm.getUnoCoord(10,3,0), dm.getUnoCoord(0,3,0), dm.getUnoCoord(0,3,39), dm.getUnoCoord(10,3,39)], 1), [100,110,111]) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 1, 0) ), [222, 0, 0] ) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(1, 0, 0) ), [0, 222, 0] ) rs.ObjectColor(rs.AddLine( dm.getUnoCoord(0, 0, 0), dm.getUnoCoord(0, 0, 2) ), [0, 0, 222] ) rs.ObjectPrintWidth( rs.AllObjects()[0:4], 0.5 ) #rs.ZoomExtents() #for coords in BigPanelCoords[4]: rs.AddCurve( coords, 1 ) bigPanels = [[dm.getUnoCoord( 0, 0, 20), dm.getUnoCoord( 0, 0, 39), dm.getUnoCoord(10, 0, 39), dm.getUnoCoord(10, 0, 20)]] bigPanels.append([dm.getUnoCoord( 0, 0, 0), dm.getUnoCoord( 0, 0, 20), dm.getUnoCoord(10, 0, 20), dm.getUnoCoord(10, 0, 0)]) random.shuffle(bigPanels) def dividePanel( panel=bigPanels[0], maxPanels=10, minHig=4.0 ): dm.esc() if maxPanels>500: maxPanels=500 random.shuffle(bigPanels) if rs.Distance( panel[0], panel[1] ) > minHig*2: bigPanels.remove( panel ) pMid = dm.pntInbetween(panel[0],panel[2]) bigPanels.append([panel[0], dm.pntInbetween(panel[0],panel[1]), pMid, dm.pntInbetween(panel[3],panel[0])]) bigPanels.append([dm.pntInbetween(panel[0],panel[1]), panel[1],dm.pntInbetween(panel[1],panel[2]), pMid]) bigPanels.append([pMid, dm.pntInbetween(panel[1],panel[2]), panel[2], dm.pntInbetween(panel[2],panel[3])]) bigPanels.append([dm.pntInbetween(panel[0],panel[3]), pMid, dm.pntInbetween(panel[2],panel[3]), panel[3]]) if len(bigPanels) <= maxPanels : dividePanel( panel=random.choice( bigPanels[0: int(len(bigPanels)*0.666)]), maxPanels=maxPanels ) ### dividePanel(panel=bigPanels[0], maxPanels=150, minHig=6.0 ) ### print "::: len(bigPanels)",len(bigPanels) #_____________________________here you go: def blumenPanel( panel, radi=5.0, radiFac=0.7, anz=20, variante = 0, prozent=100, geschoss=1): p0,p1,p2,p3 = panel coords = [p0,p1,p2,p3, p0] #rs.AddCurve( coords, 1 ) cenPt = dm.pntInbetween( p0, p2, random.uniform(0.1, 0.9) ) #rs.AddPoint( cenPt ) planeX = rs.PlaneFromPoints( cenPt, dm.pntInbetween(p0,p1), p1 ) circAussen = rs.AddCircle(planeX, radi) coordsAussen = rs.DivideCurve(circAussen, anz, 0) circInnen = rs.AddCircle(planeX, radi*radiFac) rs.RotateObject(circInnen, cenPt, -360/anz*0.5, dVec) coordsInnen = rs.DivideCurve(circInnen, anz*1, 0) #dm.textDots( coordsAussen ) #dm.textDots( coordsInnen ) rs.DeleteObject( circAussen ) rs.DeleteObject( circInnen ) if prozent > random.uniform(0,100) and geschoss==1: #circInnen = rs.AddCircle(planeX, radi*radiFac) for i in range(anz): p0 = coordsAussen[i] p0innen = coordsInnen[i] if i random.uniform(0,100): pUnten = dm.pntInbetween(p0, p3) pOben = dm.pntInbetween(p1, p2) stab = rs.AddCurve( [pUnten, cenPt, pOben], 1 ) rs.ObjectColor ( stab, stabColor ) rs.ObjectPrintWidth( stab, stabThickness ) rs.ObjectName( stab, "gitter" ) ### gitter horizontal pRechts = dm.pntInbetween(p0, p1) pLinx = dm.pntInbetween(p3, p2) if 70 > random.uniform(0,100): stab = rs.AddCurve( [pRechts, cenPt, pLinx], 1 ) rs.ObjectColor ( stab, stabColor ) rs.ObjectPrintWidth( stab, stabThickness ) rs.ObjectName( stab, "gitter" ) else: stab = rs.AddLine( cenPt, random.choice([pRechts, pLinx]), ) rs.ObjectColor ( stab, stabColor ) rs.ObjectPrintWidth( stab, stabThickness ) rs.ObjectName( stab, "gitter" ) def blumenPanel2 ( panel, radi=5.0, radiFac=0.5, anz=15, variante = 0, prozent=100, geschoss=1): p0,p1,p2,p3 = panel coords = [p0,p1,p2,p3, p0] #rs.AddCurve( coords, 1 ) cenPt = dm.pntInbetween( p0, p2, random.uniform(0.1, 0.9) ) #rs.AddPoint( cenPt ) if variante == 0: anz = random.randint(4,7) planeX = rs.PlaneFromPoints( cenPt, dm.pntInbetween(p0,p1), p1 ) circAussen = rs.AddCircle(planeX, radi) coordsAussen = rs.DivideCurve(circAussen, anz, 0) circInnen = rs.AddCircle(planeX, radi*radiFac) rs.RotateObject(circInnen, cenPt, -360/anz*0.5, dVec) coordsInnen = rs.DivideCurve(circInnen, anz*1, 0) #dm.textDots( coordsAussen[0:5] ) #dm.textDots( coordsInnen[0:5] ) rs.DeleteObject( circAussen ) rs.DeleteObject( circInnen ) cA = coordsAussen+coordsAussen cI = coordsInnen+coordsInnen allCoords = [] if prozent > random.uniform(0,100) and geschoss: #circInnen = rs.AddCircle(planeX, radi*radiFac) for i in range(anz): p0 = coordsAussen[i] p0innen = coordsInnen[i] if i random.uniform(0,100): gi=1 pUnten = dm.pntInbetween(p0, p3) pOben = dm.pntInbetween(p1, p2) pts = [pUnten, pOben] #stab = rs.AddCurve( [pUnten, cenPt, pOben], 1 ) stab = rs.AddCurve( [cenPt, random.choice(pts)], 1 ) rs.ObjectColor ( stab, stabColor ) rs.ObjectPrintWidth( stab, stabThickness ) rs.ObjectName( stab, "gitter" ) ### gitter horizontal if 50 > random.uniform(0,100) or gi==0: #else: pRechts = dm.pntInbetween(p0, p1) pLinx = dm.pntInbetween(p3, p2) pts = [pRechts, pLinx] #stab = rs.AddCurve( [pRechts, cenPt, pLinx], 1 ) stab = rs.AddCurve( [cenPt, random.choice(pts)], 1 ) rs.ObjectColor ( stab, stabColor ) rs.ObjectPrintWidth( stab, stabThickness ) rs.ObjectName( stab, "gitter" ) stabThickness = 1.0*0.3 stabColor = [222,11,11] ### testen: #blumenPanel2( frontPanels[0], variante=0 ) #blumenPanel( frontPanels[1], radi=5.0, radiFac=0.7, anz=5, variante = 1, prozent=110, geschoss=1) makePanels = allUNPanels makePanels = frontPanels backPanels.reverse() #makePanels = frontPanels+topPanels+backPanels makePanels = allUNPanels #### makePanels = frontPanels ### print "lenx", len(makePanels) ########################################### ### GENERATE one version of gitter + blueten if 1: dm.newEmptyLayer("myPROJ", [100,110,120]) for i,panel in enumerate( makePanels[0:]):#frontPanels[20:28]): dm.esc() ### wahrscheinlichkeit 10..100% prob = dm.reMap(panel[0][2], 0, 100, 10, 100, 1) geschoss = 0 if panel[0][2] > 10: geschoss = 1 anz = 64 rnd = random.randint( anz**0.5, anz*1.0 ) radAussen = random.uniform(3,6) ## 4 = panelbreite radAussen = rs.Distance(panel[0], panel[3])*0.5## 4 = panelbreite radiFac = random.uniform(0.1, 0.3) anz = random.randint( 6, 10) vari = 1 vari2 = random.randint( 0, 1) if random.randint(0,100) > prob:# or panel[0][2] > 1: geschoss = 0 if random.uniform(0,100) < 60: pass blumenPanel(panel, radi=radAussen, radiFac=radiFac, anz=anz, variante=vari, geschoss=geschoss ) elif random.uniform(0,100) < 50 and prob > 50: pass blumenPanel2 (panel, radi=radAussen+((vari2==0)*3), radiFac=radiFac, anz=anz, variante=vari2, geschoss=geschoss ) if i%10==0: rs.Redraw() #rs.AddCurve( panel, 1) p0,p1,p2,p3 = panel random.shuffle(panel) rs.AddCurve( panel, 1) nVec = dm.normVec3pnts(*panel[0:3]) for pX in panel: pass #rs.AddLine( pX, rs.VectorAdd(pX, rs.VectorScale(nVec, -22))) #dm.eDup() rs.Redraw() ############################## ### nachBearbeitung / stacheln if 1: gitters = rs.JoinCurves(rs.ObjectsByName("gitter"), delete_input=1) for i, stab in enumerate(gitters): dm.esc() rs.ObjectPrintWidth( stab, stabThickness*0.5 ) rs.ObjectColor ( stab, stabColor ) rs.ObjectName( stab, "stab" ) if rs.CurveLength(stab) > 1.0: rs.ObjectPrintWidth( stab, stabThickness ) anz = int(rs.CurveLength(stab)*0.999) coords = rs.DivideCurve( stab, anz, 0) coords = random.sample( coords, int(anz*0.5) ) for cor in coords[0:]: param = rs.CurveClosestPoint( stab, cor ) nPlane = rs.CurvePerpFrame( stab, param ) circ = rs.AddCircle( nPlane, random.uniform(0.5, 1.0) ) coordsC = rs.DivideCurve( circ, 10, 0 ) rs.DeleteObject( circ ) coordsC = random.sample(coordsC, 4) tanVec = rs.CurveTangent( stab, param ) coordsC = [rs.VectorAdd( corX, rs.VectorScale( tanVec, random.uniform(-1.0,1.0)) ) for corX in coordsC ] for corC in coordsC: lin = rs.AddLine( cor, corC ) rs.ObjectColor ( lin, stabColor ) rs.ObjectColor ( lin, [random.randint(60,100),random.randint(60,120),random.randint(10,20)] ) rs.ObjectPrintWidth( lin, stabThickness*0.3 ) rs.ObjectName( lin, "stab_stachel" ) if i%50==0: rs.Redraw() #if 1: ''' ANIMATZI 1. alles hiden 2. objects nach z sortieren gitter/staebe/stacheln: aufsteigend blueten: absteigend 3. in 2 loops - gitter, dann blueten - objects wieder zeigen + image_capture ''' gitter = rs.ObjectsByName("stab*") ###gitter = rs.ExplodeCurves( gitter, delete_input=1) blueten = rs.ObjectsByName("bluete*") rs.ObjectPrintWidth(blueten, 3.0) rs.ObjectPrintWidth(rs.ObjectsByName("stab"), 3.0) rs.ObjectPrintWidth(rs.ObjectsByName("stab_*"), 2.0) rs.ObjectColor(gitter, [10,10,10]) rs.ObjectPrintColor(rs.ObjectsByName("stab"), [10,10,10]) rs.Redraw() rs.HideObjects( gitter+blueten ) gitter = sorted( [ [crv, rs.CurveMidPoint(crv)[2]] for crv in gitter ], key=lambda sortKey: (sortKey[1]) ) gitter = [ item[0] for item in gitter ] blueten = sorted( [ [crv, rs.CurveMidPoint(crv)[2]] for crv in blueten ], key=lambda sortKey: (sortKey[1]) ) ### blueten = reversed( sorted( [ [crv, rs.CurveMidPoint(crv)[2]] for crv in blueten ], key=lambda sortKey: (sortKey[1]) ) ) blueten = [ item[0] for item in blueten ] blueten.reverse() print "gitter =", len(gitter) print "blueten =", len(blueten) path = "D:/animatzi/LEA/" if not os.path.exists(path): os.makedirs(path) frameNr = 0 ############## captureIt = 1 scale = 2 steps = 1 ############## rs.ViewDisplayMode(rs.CurrentView(), "pen_UNheadquaters") rs.CurrentView("Perspective") dm.printDisplay( state=1, scale=1000 ) anzFrames = int( len(gitter)/(100*steps) + len(blueten)/(20*steps) ) + 1 ### wg int print "anzFrames", anzFrames dAng = 360.0 / anzFrames dZ = 300.0 / anzFrames dZoom = 20.0 / anzFrames ### fuer runde: 20 ! #dZoom = 0 cam = [1250, 570, 50+300] tar = [760, 570, 77] ##tar = dm.getUnoCoord(5,2,20) ##tar[2] = 90 lens = 40.0 camVec = rs.VectorSubtract(cam, tar) dm.printDisplay( state=1, scale=1000 ) #dm.setCameraTarget( rs.VectorAdd(tar, camVec), tar, lens=lens ) # ... danke, andi ! if 0: ### test camera_rotation dm.newEmptyLayer("Default") for frameNr in range( anzFrames + 1 ): dm.esc() #camVec = rs.VectorRotate(camVec, dAng, [0,0,1] ) #camVec = rs.VectorAdd(camVec, [0,0, -dZ]) #lens += dZoom cam = rs.VectorAdd(tar, rs.VectorAdd(rs.VectorRotate(camVec, dAng*frameNr, [0,0,1] ),[0,0, -dZ*frameNr])) dm.setCameraTarget( cam , tar, lens=lens+dZoom*frameNr ) # ... danke, andi ! rs.AddPoint( cam ) rs.ObjectName(rs.AllObjects()[0], "fram_"+str(frameNr) ) if frameNr%10==0: rs.AddLine( cam, tar ) rs.Redraw() if 1: ii = 0 dm.setCameraTarget( rs.VectorAdd(tar, rs.VectorAdd(rs.VectorRotate(camVec, dAng*ii, [0,0,1] ),[0,0, -dZ*ii])) , tar, lens=lens+dZoom*ii ) # ... danke, andi ! dm.printDisplay(state=1, scale=1000, thickness=500, color="display") for i,crv in enumerate(gitter): dm.esc() rs.ShowObject(crv) if i%(100*steps) == 0: dm.setCameraTarget( rs.VectorAdd(tar, rs.VectorAdd(rs.VectorRotate(camVec, dAng*ii, [0,0,1] ),[0,0, -dZ*ii])) , tar, lens=lens+dZoom*ii ) # ... danke, andi ! rs.Redraw() ###print "frameNr", frameNr frameNam = dm.makeName("blumX", frameNumber=frameNr, anzahl=4, format='jpg') if captureIt: ### 1280x720px rs.Command("-viewCaptureToFile Width=640 Height=360 Scale="+str(scale)+" DrawCPlaneAxes=No TransparentBackground=No "+path+frameNam+" ", 0) if i==0: for x in range(25): frameNr +=1 frameNam = dm.makeName("blumX", frameNumber=frameNr, anzahl=4, format='jpg') if captureIt: rs.Command("-viewCaptureToFile Width=640 Height=360 Scale="+str(scale)+" DrawCPlaneAxes=No TransparentBackground=No "+path+frameNam+" ", 0) ii += 1 frameNr +=1 dm.printDisplay(state=1, scale=1000, thickness=500, color="display") for i,crv in enumerate(blueten): dm.esc() rs.ShowObject(crv) if i%(20*steps) == 0: ###print "frameNr", frameNr dm.setCameraTarget( rs.VectorAdd(tar, rs.VectorAdd(rs.VectorRotate(camVec, dAng*ii, [0,0,1] ),[0,0, -dZ*ii])) , tar, lens=lens+dZoom*ii ) # ... danke, andi ! rs.Redraw() frameNam = dm.makeName("blumX", frameNumber=frameNr, anzahl=4, format='jpg') if captureIt: rs.Command("-viewCaptureToFile Width=640 Height=360 Scale="+str(scale)+" DrawCPlaneAxes=No TransparentBackground=No "+path+frameNam+" ", 0) frameNr +=1 ii += 1 for x in range(25): frameNam = dm.makeName("blumX", frameNumber=frameNr, anzahl=4, format='jpg') if captureIt: rs.Command("-viewCaptureToFile Width=640 Height=360 Scale="+str(scale)+" DrawCPlaneAxes=No TransparentBackground=No "+path+frameNam+" ", 0) frameNr +=1 print "::: fini" #____________________________:here you end ################################# #rs.ZoomExtents() rs.ShowObjects(rs.AllObjects()) rs.EnableRedraw(1) ### 4 the MACs dm.printDisplay(state=1, scale=1000, thickness=1000, color="display") rs.Redraw() #dm.newEmptyLayer("Default") rs.CurrentLayer("Default")