import rhinoscriptsyntax as rs import random as ran #cleanup and start from scratch rs.DeleteObjects(rs.AllObjects()) #variables xsize=10 #xside length of box ysize=10 #yside length of box zsize=10 #zside length of box p_num=20 #number of segments rs.EnableRedraw(False) #make box def make_box(insertion=[0,0,0],xsize=10,ysize=10,zsize=10): corners=[[0,0,0],[xsize,0,0],[xsize,ysize,0],[0,ysize,0], [0,0,zsize],[xsize,0,zsize],[xsize,ysize,zsize],[0,ysize,zsize]] box=rs.AddBox(corners) rs.MoveObject(box,(-xsize/2,-ysize/2,0)) rs.MoveObject(box,insertion) return(box) crv=rs.AddCurve([[0,0,0],[50,0,20],[70,40,30],[100,0,0]],3) c_len=rs.CurveLength(crv) seg_len=c_len/p_num #segment length pts=rs.DivideCurveEquidistant(crv,seg_len,create_points=True,return_points=True) for p in pts: rs.AddCircle(p,seg_len) param=rs.CurveClosestPoint(crv,p) normal=rs.CurveTangent(crv,param) #find tangent of point t_angle=rs.Angle([0,0,0],normal)[0] #find angle of tangent box=make_box(p,xsize=seg_len,ysize=4*seg_len,zsize=seg_len/4) rs.RotateObject(box,p,t_angle,[0,0,1]) #cleanup rs.Command("_SelCrv _Enter") crvs=rs.SelectedObjects() #rs.DeleteObjects(crvs) rs.EnableRedraw(True)