import rhinoscriptsyntax as rs import random as ran rs.DeleteObjects(rs.AllObjects()) ######################SCHLUMPFHAUSEN########################## # Mittelpunkt und Radius #cent = centerpoint radius1 = 10 # Radius des Kreises def makeBox(point1,point2,point3,point4,point5,height,cent): tp=[point1,point2,point3,point4,point5] rechteck1=rs.AddPolyline(tp) path1 = rs.AddLine([cent[0]+10,cent[1]+0,0], [cent[0]+10,cent[1]+0,height]) box1=rs.ExtrudeCurve(rechteck1,path1) rs.CapPlanarHoles(box1) rs.DeleteObjects([path1,rechteck1]) return box1 #Bodenplatte def makeBoden(): Circle1=rs.AddCircle((34,31,0),100) path1 = rs.AddLine([34,31,0], [34,31,-1]) Bodenplatte=rs.ExtrudeCurve(Circle1,path1) rs.CapPlanarHoles(Bodenplatte) #Teich wp=[(21.5,10.4,0),(28.3,18,0),(36.3,16.8,0),(43.6,2.4,0),(35,-9.6,0),(22.5,-5.9,0),(23.7,4.9,0),(21.5,10.4,0)] Teichcurve=rs.AddInterpCurve(wp, 10) rs.MoveObject(Teichcurve, (5,35,0)) path2 = rs.AddLine([21.5,10.4,0], [21.5,10.4,-0.9]) Teich=rs.ExtrudeCurve(Teichcurve,path2) Bodenplatte2=rs.BooleanDifference(Bodenplatte,Teich,True) rs.AddLayer("Bodenplatte") rs.LayerColor("Bodenplatte",(154,205,50)) rs.ObjectLayer(Bodenplatte2,"Bodenplatte") path3 = rs.AddLine([21.5,10.4,-0.2], [21.5,10.4,-0.9]) Teich_Neu=rs.ExtrudeCurve(Teichcurve,path3) rs.CapPlanarHoles(Teich_Neu) rs.AddLayer("Teich") rs.LayerColor("Teich",(92,172,238)) rs.ObjectLayer(Teich_Neu,"Teich") rs.DeleteObject(Teichcurve) def makeDorf(): #Farbauswahl colors_stamm = [(240,230,175),(234,206,156)] colors_kopf = [(57,120,147),(178,211,181),(223,45,73),(53,137,195),(255,249,144),(165,42,42),(255,165,79),(139,134,78),(240,128,128),(139,34,82)] #Bodenplatte makeBoden() #Pilze max_x = 4 max_z = 9 index=1 spiral = rs.AddSpiral([0,0,0],(0,0,1), 0, 2, 10, 85) rs.MoveObject(spiral, (27,38,0)) pts = rs.DivideCurve(spiral, 31, False, True) index=1 for index, p in enumerate(pts): if index == 0: dummy = 0 #teich. elif(index%3==0): createPilz(colors_kopf,colors_stamm,p,ran.randint(0,max_x),ran.randint(0,max_z)) elif(index%2==0): makeTree(p,25,0.9,7) else: makeTree(p,32,1.1,10) rs.DeleteObject(spiral) #Bäume def makeTree(base_point, trunk_height, trunk_radius, crown_radius): #Stamm top_point = (base_point[0], base_point[1], base_point[2] + trunk_height) trunk = rs.AddCylinder(base_point, trunk_height, trunk_radius) #Baumkrone crown_center = (base_point[0], base_point[1], base_point[2] + trunk_height + crown_radius) crown = rs.AddSphere(crown_center, crown_radius) #Farben rs.AddLayer("Baumkrone") rs.LayerColor( "Baumkrone",(110,139,61)) rs.ObjectLayer(crown, "Baumkrone") rs.AddLayer("Baumstamm") rs.LayerColor("Baumstamm",(139,90,43)) rs.ObjectLayer(trunk,"Baumstamm") #Schornstein def makeSchornstein(cent,z): objects = [] sp1=[(15,0,0),(15,3,0),(19,3,0),(19,0,0),(15,0,0)] rechteck1=rs.AddPolyline(sp1) sp2=[(19,0,0),(18.8,0,0.5),(18.5,0,1.9),(18.4,0,5.4),(18.38,0.5,8.12),(18.4,0.6,10.3),(18.4,0.625,10.86),(18.4,0.625,13)] curve3=rs.AddInterpCurve(sp2,2) sp3=[(15,3,0),(15.6,3,2.9),(15.8,2.6,5.9),(16.4,2.6,10.9),(16.4,2.6,13)] curve4=rs.AddInterpCurve(sp3,1) Schornstein=rs.AddSweep2([curve3,curve4],[rechteck1], False) rs.MoveObject(Schornstein, (cent[0]-10,cent[1]+6,cent[2]+15)) rs.DeleteObjects([curve3,curve4,rechteck1]) rs.CapPlanarHoles(Schornstein) Schornstein_Top=makeBox((cent[0]+5.6,cent[1]+6.6,27.7),(cent[0]+8.8,cent[1]+6.2,27.7),(cent[0]+9.1,cent[1]+8.5,27.7),(cent[0]+5.8,cent[1]+8.9,27.7),(cent[0]+5.6,cent[1]+6.6,27.7),0.85,cent) rs.MoveObject(Schornstein_Top,(0,0,z)) rs.MoveObject(Schornstein,(0,0,z)) objects.append(Schornstein) objects.append(Schornstein_Top) return objects #Tür def makeDoor(cent,Pilzstamm): objects = {} Door1=makeBox((cent[0]+11.5,cent[1]-2.5,0),(cent[0]+11.5,cent[1]+2.5,0),(cent[0]+7.5,cent[1]+2.5,0),(cent[0]+7.5,cent[1]-2.5,0),(cent[0]+11.5,cent[1]-2.5,0),6,cent) Pilzstamm_Door=rs.BooleanDifference(Pilzstamm, Door1, True) DoorBox=makeBox((cent[0]+7.5,cent[1]-2.5,0),(cent[0]+7.5,cent[1]+2.5,0),(cent[0]+8,cent[1]+2.5,0),(cent[0]+8,cent[1]-2.5,0),(cent[0]+7.5,cent[1]-2.5,0),6,cent) DoorBox_Bottom=makeBox((cent[0]+8,cent[1]-2.5,0),(cent[0]+8,cent[1]+2.5,0),(cent[0]+9,cent[1]+2.5,0),(cent[0]+9,cent[1]-2.5,0),(cent[0]+8,cent[1]-2.5,0),1,cent) DoorBox_Top=makeBox((cent[0]+8,cent[1]-2.5,5),(cent[0]+8,cent[1]+2.5,5),(cent[0]+9,cent[1]+2.5,5),(cent[0]+9,cent[1]-2.5,5),(cent[0]+8,cent[1]-2.5,5),1,cent) DoorKnob1=rs.AddTorus((cent[0]+8.08,cent[1]+0,3),0.3,0.065,(cent[0]+8.08,cent[1]+3,3)) DoorKnob2=rs.AddTorus((cent[0]+8.08,cent[1]+0,2.6),0.4,0.1,(cent[0]+9,cent[1]+0,2.6)) Door_Box_Top=makeBox((cent[0]+7.312,cent[1]-3,5.999),(cent[0]+7.312,cent[1]+3.1,5.999),(cent[0]+11.312,cent[1]+3.1,5.999),(cent[0]+11.312,cent[1]-3,5.999),(cent[0]+7.312,cent[1]-3,5.999),0.8,cent) Door_Box_Top_Final=rs.BooleanDifference(Door_Box_Top,Pilzstamm_Door,False) rs.DeleteObject(Door_Box_Top) objects["Door_Box_Top_Final"] = Door_Box_Top_Final objects["Pilzstamm_Door"] = Pilzstamm_Door objects["DoorBox_Bottom"] = DoorBox_Bottom objects["DoorBox_Top"] = DoorBox_Top objects["DoorBox"] = DoorBox objects["DoorKnob1"] = DoorKnob1 objects["DoorKnob2"] = DoorKnob2 return objects #Fenster def makeWindow(cent,tuer_objects): objects = {} Window1=makeBox((cent[0]+8.2,cent[1]-2,3),(cent[0]+8.2,cent[1]+1,3),(cent[0]+13,cent[1]+1,3),(cent[0]+13,cent[1]-2,3),(cent[0]+8.2,cent[1]-2,3),3,cent) Pilzstamm_Window=rs.BooleanDifference(tuer_objects["Pilzstamm_Door"], Window1, True) Window_Box=makeBox((cent[0]+8.2,cent[1]-2,3),(cent[0]+8.2,cent[1]+1,3),(cent[0]+8.7,cent[1]+1,3),(cent[0]+8.7,cent[1]-2,3),(cent[0]+8.2,cent[1]-2,3),3,cent) Window_Frame=makeBox((cent[0]+9.5,cent[1]-2,3),(cent[0]+9.5,cent[1]+1,3),(cent[0]+10,cent[1]+1,3),(cent[0]+10,cent[1]-2,3),(cent[0]+9.5,cent[1]-2,3),3,cent) Window_InnerBox_1=makeBox((cent[0]+9.5,cent[1]-1.667,4.667),(cent[0]+9.5,cent[1]-0.667,4.667),(cent[0]+10.5,cent[1]-0.667,4.667),(cent[0]+10.5,cent[1]-1.667,4.667),(cent[0]+9.5,cent[1]-1.667,4.667),1,cent) Window_InnerBox_2=rs.CopyObject(Window_InnerBox_1, (0,1.33333,0)) Window_InnerBox_3=rs.CopyObject(Window_InnerBox_1, (0,0,-1.33333)) Window_InnerBox_4=rs.CopyObject(Window_InnerBox_1, (0,1.33333,-1.33333)) Window_Frame2=rs.BooleanDifference(Window_Frame, [Window_InnerBox_1,Window_InnerBox_2,Window_InnerBox_3,Window_InnerBox_4], True) Window_Box_Top=makeBox((cent[0]+7.312,cent[1]-2.5,5.999),(cent[0]+7.312,cent[1]+1.5,5.999),(cent[0]+11.312,cent[1]+1.5,5.999),(cent[0]+11.312,cent[1]-2.5,5.999),(cent[0]+7.312,cent[1]-2.5,5.999),0.8,cent) Window_Box_Top_Final=rs.BooleanDifference(Window_Box_Top,Pilzstamm_Window,False) rs.DeleteObject(Window_Box_Top) Window_Box_Bottom=makeBox((cent[0]+7.312,cent[1]-2.5,2),(cent[0]+7.312,cent[1]+1.5,2),(cent[0]+12,cent[1]+1.5,2),(cent[0]+12,cent[1]-2.5,2),(cent[0]+7.312,cent[1]-2.5,2),1.01,cent) Window_Box_Bottom_Final=rs.BooleanDifference(Window_Box_Bottom,Pilzstamm_Window,False) rs.DeleteObject(Window_Box_Bottom) objects["Window_Box_Bottom_Final"] = Window_Box_Bottom_Final objects["Window_Box_Top_Final"] = Window_Box_Top_Final objects["Window_Frame2"] = Window_Frame2 objects["Window_Box"] = Window_Box objects["Pilzstamm_Window"] = Pilzstamm_Window return objects def makePilzkopf(cent,circle,x,z): rs.MoveObject(circle,[0,0,cent[2]+14]) #Dachpoints von Curve dp=[(cent[0]+10,cent[1]+0,cent[2]+8),(cent[0]+13,cent[1]+0,cent[2]+8),(cent[0]+15+x,cent[1]+0,cent[2]+12), (cent[0]+12+x,cent[1]+0,cent[2]+16+z),(cent[0]+7+x,cent[1]+0,cent[2]+20+z),(cent[0]+4,cent[1]+0,cent[2]+27+z), (cent[0]+0,cent[1]+0,cent[2]+29+z)] curve2=rs.AddInterpCurve(dp,5) #Wellige Kurve für Form von Pilzkopf #punkte=rs.AddPoints(dp) Pilzkopf=rs.AddSweep1(circle,[curve2],False) rs.CapPlanarHoles(Pilzkopf) rs.DeleteObject(curve2) return Pilzkopf #Pilzhaus def createPilz(color_Pilzkopf,color_Pilzstamm,cent,kopf_x,kopf_z): objects = [] # Kreis erstellen für Pilzstamm circle = rs.AddCircle(cent, radius1) # Linie für Form von Pilzstamm cp=[(cent[0]+10,cent[1]+0,cent[2]+0),(cent[0]+13,cent[1]+0,cent[2]+3),(cent[0]+10,cent[1]+0,cent[2]+8)] #curve points curve1=rs.AddCurve(cp,30) Pilzstamm=rs.AddSweep1(circle,[curve1],False) rs.CapPlanarHoles(Pilzstamm) rs.DeleteObject(curve1) #Pilzkopf Pilzkopf = makePilzkopf(cent,circle,kopf_x,kopf_z) tuer_objects = makeDoor(cent,Pilzstamm) schornstein_objects = makeSchornstein(cent,kopf_z) rs.RotateObjects([schornstein_objects[0],schornstein_objects[1],Pilzkopf,Pilzstamm,tuer_objects["Pilzstamm_Door"],tuer_objects["DoorBox"], tuer_objects["DoorBox_Bottom"], tuer_objects["DoorBox_Top"], tuer_objects["DoorKnob1"], tuer_objects["DoorKnob2"],tuer_objects["Door_Box_Top_Final"]],cent, -55) window_objects = makeWindow(cent,tuer_objects) rs.RotateObjects([schornstein_objects[0],schornstein_objects[1],window_objects["Window_Box"],window_objects["Window_Frame2"],window_objects["Window_Box_Top_Final"],window_objects["Window_Box_Bottom_Final"],Pilzkopf,window_objects["Pilzstamm_Window"],tuer_objects["Pilzstamm_Door"], tuer_objects["Door_Box_Top_Final"], tuer_objects["DoorBox"], tuer_objects["DoorBox_Bottom"], tuer_objects["DoorBox_Top"], tuer_objects["DoorKnob1"], tuer_objects["DoorKnob2"]],cent, ran.randint(20,180)) #Farben color_Pilzkopf=color_Pilzkopf[ran.randint(0,len(color_Pilzkopf)-1)] color_Pilzstamm=color_Pilzstamm[ran.randint(0,len(color_Pilzstamm)-1)] layername = str(ran.randint(0,9999)) rs.AddLayer(layername + "pilzkopf") rs.LayerColor(layername + "pilzkopf", color_Pilzkopf) rs.ObjectLayer(Pilzkopf,layername + "pilzkopf") rs.AddLayer(layername + "pilzstamm2") rs.LayerColor(layername + "pilzstamm2", color_Pilzstamm) rs.ObjectLayer(window_objects["Pilzstamm_Window"],layername + "pilzstamm2") rs.AddLayer(layername + "Door") rs.LayerColor(layername + "Door",(130,92,62)) rs.ObjectLayer([tuer_objects["Door_Box_Top_Final"],tuer_objects["DoorBox"],tuer_objects["DoorBox_Bottom"],tuer_objects["DoorBox_Top"],window_objects["Window_Frame2"],window_objects["Window_Box_Top_Final"],window_objects["Window_Box_Bottom_Final"]],layername + "Door") rs.AddLayer(layername + "DoorKnob") rs.LayerColor(layername + "DoorKnob",(165,165,165)) rs.ObjectLayer([tuer_objects["DoorKnob1"],tuer_objects["DoorKnob2"]],layername + "DoorKnob") rs.AddLayer(layername + "Schornstein") rs.LayerColor(layername + "Schornstein",(223,220,203)) rs.ObjectLayer([schornstein_objects[0],schornstein_objects[1]],layername + "Schornstein") rs.AddLayer(layername + "Window_Box") rs.LayerColor(layername + "Window_Box",(10,10,10)) rs.ObjectLayer(window_objects["Window_Box"],layername + "Window_Box") #Schlumpfhausen makeDorf()