import rhinoscriptsyntax as rs import random as ran allobjs = rs.AllObjects() rs.DeleteObjects(allobjs) #rs.EnableRedraw(False) ##################################### #radius= 70 #radius sphere #thick= radius/14 #extrude thick start_line= [0,0,0] #startpoint of the line if 1: length_1= 250 #length of the line length_2= 350 length_3= 450 length_4= 550 length_5= 300 length_6= 400 length_7= 500 length_8= 600 if 0: length_1= ran.randint(250,800) length_2= ran.randint(250,800) length_3= ran.randint(250,800) length_4= ran.randint(250,800) length_5= ran.randint(250,800) length_6= ran.randint(250,800) length_7= ran.randint(250,800) length_8= ran.randint(250,800) if 1: pts1= 3 #punkte auf linie immer eins mehr als wert pts2= 4 pts3= 5 pts4= 6 pts5= 3 pts6= 4 pts7= 6 pts8= 7 if 0: pts1= ran.randint(3,8) pts2= ran.randint(3,8) pts3= ran.randint(3,8) pts4= ran.randint(3,8) pts5= ran.randint(3,8) pts6= ran.randint(3,8) pts7= ran.randint(3,8) pts8= ran.randint(3,8) xdi=1 ydi=1 zdi=1 width_pod= 55 #breite vom podest thick_pod= 5 #dicke vom podest def make_segel(): ranrad= ran.randint(20,80) radius= ranrad thick= radius/14 ur_s = rs.AddSphere([0,0,0],radius) crv = rs.AddCircle3Pt([-radius,0,0], [0,0,radius], [radius,0,0]) my_pts = rs.DivideCurve(crv, 20, False, True) start1 = [0,0,0] start2 = [(radius/2),0,0] #random werte ranstart= ran.randint(1,2) if ranstart==1: start= start1 middle= my_pts[5] p1_ran= ran.randint(3,4) if p1_ran==3: pts1= my_pts[3] if p1_ran==4: pts1= my_pts[4] p2_ran= ran.randint(6,8) if p2_ran==6: pts2= my_pts[6] if p2_ran==7: pts2= my_pts[7] if p2_ran==8: pts2= my_pts[8] if ranstart==2: start= start2 middle= my_pts[7] p1_ran= ran.randint(4,6) if p1_ran==4: pts1= my_pts[4] if p1_ran==5: pts1= my_pts[5] if p1_ran==6: pts1= my_pts[6] p2_ran= ran.randint(8,9) if p2_ran==8: pts2= my_pts[8] if p2_ran==9: pts2= my_pts[9] ################################################ line1= rs.AddLine(start, pts1) line2= rs.AddLine(start, pts2) crv_new= rs.AddArc3Pt(pts1 ,pts2, middle) schale= rs.JoinCurves((line1, line2, crv_new), True) rs.MoveObjects(schale, [0,-radius,0]) ##auf kugel projezieren## p_schale= rs.PullCurve(ur_s, schale) p_schale= rs.JoinCurves((p_schale), True) ##schale ausschneiden## rs.Command("_Split _SelID {} _Enter _SelID {} _Enter".format(ur_s, p_schale[0]),True) my_segment = rs.FirstObject() rs.DeleteObject(rs.NextObject(my_segment)) ##mirror## points = rs.CurvePoints(p_schale) my_seg = rs.MirrorObject(my_segment, points[0], points[3], copy=True) ##extrude## line= rs.AddLine([0,0,0], [0,0,thick]) seg1= rs.ExtrudeSurface(my_segment, line) seg2= rs.ExtrudeSurface(my_seg, line) ##delete objects## rs.DeleteObjects([schale, crv, my_segment, my_seg, p_schale, line]) ##move to null point## if start==start1: rs.MoveObjects([seg1, seg2], [0,radius,0]) if start==start2: rs.MoveObjects([seg1, seg2], [-(radius/2),radius,0]) ############################################### return(seg1, seg2) def make_star(start_line=start_line, length_1=length_1, pts1=pts1, length_2=length_2, pts2=pts2, length_3=length_3, pts3=pts3, length_4=length_4, pts4=pts4, length_5=length_5, pts5=pts5, length_6=length_6, pts6=pts6, length_7=length_7, pts7=pts7, length_8=length_8, pts8=pts8): line1= rs.AddLine(start_line, [length_1,0,0]) pts_on_line1= rs.DivideCurve(line1, pts1, False, True) for i,p in enumerate(pts_on_line1): if i>0: (l_list)= make_segel() rs.MoveObject(l_list, p) # line2= rs.AddLine(start_line, [length_2,0,0]) pts_on_line2= rs.DivideCurve(line2, pts2, False, True) for i,p in enumerate(pts_on_line2): if i>0: (l_list)= make_segel() rs.MoveObject(l_list, p) rs.RotateObject(l_list, [0,0,0], 90) # line3= rs.AddLine(start_line, [length_3,0,0]) pts_on_line3= rs.DivideCurve(line3, pts3, False, True) for i,p in enumerate(pts_on_line3): if i>0: (l_list)= make_segel() rs.MoveObject(l_list, p) rs.RotateObject(l_list, [0,0,0], 180) # line4= rs.AddLine(start_line, [length_4,0,0]) pts_on_line4= rs.DivideCurve(line4, pts4, False, True) for i,p in enumerate(pts_on_line4): if i>0: (l_list)= make_segel() rs.MoveObject(l_list, p) rs.RotateObject(l_list, [0,0,0], 270) # line5= rs.AddLine(start_line, [length_5,0,0]) pts_on_line5= rs.DivideCurve(line5, pts5, False, True) for i,p in enumerate(pts_on_line5): if i>0: (l_list)= make_segel() rs.MoveObject(l_list, p) rs.RotateObject(l_list, [0,0,0], 45) # line6= rs.AddLine(start_line, [length_6,0,0]) pts_on_line6= rs.DivideCurve(line6, pts6, False, True) for i,p in enumerate(pts_on_line6): if i>0: (l_list)= make_segel() rs.MoveObject(l_list, p) rs.RotateObject(l_list, [0,0,0], 135) # line7= rs.AddLine(start_line, [length_7,0,0]) pts_on_line7= rs.DivideCurve(line7, pts7, False, True) for i,p in enumerate(pts_on_line7): if i>0: (l_list)= make_segel() rs.MoveObject(l_list, p) rs.RotateObject(l_list, [0,0,0], 225) # line8= rs.AddLine(start_line, [length_8,0,0]) pts_on_line8= rs.DivideCurve(line8, pts8, False, True) for i,p in enumerate(pts_on_line8): if i>0: (l_list)= make_segel() rs.MoveObject(l_list, p) rs.RotateObject(l_list, [0,0,0], 315) # rs.DeleteObjects([line1, line2, line3, line4, line5, line6, line7, line8]) def make_podest(insertion=[0,0,0], xdi=xdi, ydi=ydi, zdi=zdi): corners= ([0,0,0], [xdi,0,0], [xdi,ydi,0], [0,ydi,0], [0,0,zdi], [xdi,0,zdi], [xdi,ydi,zdi], [0,ydi,zdi]) box_1= rs.AddBox(corners) rs.MoveObject(box_1, [-10,-10,0]) return(box_1) def make_underground(width_pod=width_pod, thick_pod=thick_pod): re_list=[] o_list=[] li_list=[] u_list=[] eck_r_list=[] eck_li_list=[] eck_u_li_list=[] eck_u_re_list=[] re_list.append(make_podest(xdi=length_1+20, ydi=width_pod, zdi=thick_pod)) o_list.append(make_podest(xdi=length_2+20, ydi=width_pod, zdi=thick_pod)) li_list.append(make_podest(xdi=length_3+20, ydi=width_pod, zdi=thick_pod)) u_list.append(make_podest(xdi=length_4+20, ydi=width_pod, zdi=thick_pod)) eck_r_list.append(make_podest(xdi=length_5+20, ydi=width_pod, zdi=thick_pod)) eck_li_list.append(make_podest(xdi=length_6+20, ydi=width_pod, zdi=thick_pod)) eck_u_li_list.append(make_podest(xdi=length_7+20, ydi=width_pod, zdi=thick_pod)) eck_u_re_list.append(make_podest(xdi=length_8+20, ydi=width_pod, zdi=thick_pod)) rs.RotateObject(o_list, [0,0,0], 90) rs.RotateObject(li_list, [0,0,0], 180) rs.RotateObject(u_list, [0,0,0], 270) rs.RotateObject(eck_r_list, [0,0,0], 45) rs.RotateObject(eck_li_list, [0,0,0], 135) rs.RotateObject(eck_u_li_list, [0,0,0], 225) rs.RotateObject(eck_u_re_list, [0,0,0], 315) rs.BooleanUnion([re_list, o_list, li_list, u_list, eck_r_list, eck_li_list, eck_u_li_list, eck_u_re_list]) return(re_list, o_list, li_list, u_list, eck_r_list, eck_li_list, eck_u_li_list, eck_u_re_list) make_star() (re_list, o_list, li_list, u_list, eck_r_list, eck_li_list, eck_u_li_list, eck_u_re_list)= make_underground()