import rhinoscriptsyntax as rs import random as ran import math #import flipped_classroom_lib as fc #reload(fc) rs.DeleteObjects(rs.AllObjects()) rs.EnableRedraw(enable=False) # variablen abstand = 10 weite = 80 boegen = 50 unterteilungen = 50 hoehe_max = 100 hoehe_min= 80 hoehe_2_max = 60 hoehe_2_min= 40 curv=rs.AddCurve(([0,0,0],[80,50,0],[130,-20,0], [280,70,0])) line_u=rs.OffsetCurve(curv, (0,-500,0),weite/2) line_o=rs.OffsetCurve(curv, (0,500,0),weite/2) spline_points_anfang = (0, 0, 0) spline_points_ende = (abstand * boegen, 0, 0) # gerade linie spline = rs.AddCurve([spline_points_anfang,spline_points_ende]) # hoeher werdende linie #spline = rs.AddCurve([spline_points_anfang, ((abstand*boegen)/2, 0, 0), ((abstand*boegen)/2, weite/2, 0), ((abstand*boegen), weite/2, 0), spline_points_ende], 3) # schlangenlinie #spline = rs.AddCurve([spline_points_anfang, ((abstand*boegen)/2, 0, 0), ((abstand*boegen)/2, weite/2, 0), ((abstand*boegen), weite/2, 0), spline_points_ende], 3) # irgendwas mathematisches als spline, aus dem internet, fuer eine schoenere schlangenlinie umdrehungen = 5 punkte_pro_umdrehung = 100 gesamtpunkte = umdrehungen * punkte_pro_umdrehung spline_points = [] for i in range(gesamtpunkte): t = i / float(gesamtpunkte - 1) x = t * (abstand * boegen) y = weite/2 * math.sin(2 * math.pi * t) z = 0 spline_points.append((x, y, z)) #spline = rs.AddCurve(spline_points, 5) start_points = rs.DivideCurve(line_u, boegen, create_points=True) end_points= rs.DivideCurve(line_o, boegen, create_points=True) all_mid_pts=[] for i in range(boegen): mid_line=rs.AddLine(start_points[i],end_points[i]) mid_pts=rs.DivideCurve(mid_line,2) all_mid_pts.append(mid_pts[1]) # kurven vorherige_points = None for i in range(boegen): hoehe=ran.randint(hoehe_min, hoehe_max) hoehe_2=ran.randint(hoehe_2_min,hoehe_2_max) param = rs.CurveClosestPoint(spline, start_points[i]) normal = rs.CurveTangent(spline, param) angle = rs.Angle((0,0,0), normal)[0] if i % 2 == 0: # hohe boegen #curve_rahmen = [(i * abstand, 0, 0), (i * abstand, weite/2, hoehe), (i * abstand, weite, 0)] curve_rahmen = [start_points[i],[all_mid_pts[i][0],all_mid_pts[i][1],all_mid_pts[i][2]+hoehe], end_points[i]] curve = rs.AddCurve(curve_rahmen, 3) #rs.MoveObject(curve, start_points[i]) #rs.RotateObject(curve, start_points[i],angle, (0,0,1)) pipe = rs.AddPipe(curve, parameters = 0, radii=0.8, blend_type=0, cap=1, fit=False) points = rs.DivideCurve(curve, unterteilungen, create_points=True) if vorherige_points: for pt1, pt2 in zip(vorherige_points, points): line = rs.AddLine(pt1, pt2) pipe = rs.AddPipe(line, parameters = 0, radii=0.2, blend_type=0, cap=1, fit=False) vorherige_points = points if i % 2 != 0: # niedrige boegen #curve_rahmen = [(i * abstand, 0, 0), (i * abstand, weite/2, hoehe), (i * abstand, weite, 0)] curve_rahmen = [start_points[i],[all_mid_pts[i][0],all_mid_pts[i][1],all_mid_pts[i][2]+hoehe_2], end_points[i]] curve_2 = rs.AddCurve(curve_rahmen, 3) #rs.MoveObject(curve_2, start_points[i]) #rs.RotateObject(curve_2, start_points[i],angle, (0,0,1)) pipe = rs.AddPipe(curve_2, parameters = 0, radii=0.6, blend_type=0, cap=1, fit=False) points_2 = rs.DivideCurve(curve_2, unterteilungen, create_points=True) if vorherige_points: for pt1, pt2 in zip(vorherige_points, points_2): line = rs.AddLine(pt1, pt2) pipe = rs.AddPipe(line, parameters = 0, radii=0.2, blend_type=0, cap=1, fit=False) vorherige_points = points_2 rs.EnableRedraw(enable=True)