import rhinoscriptsyntax as rs import math # DELETE EVERYTHING AND START FROM SCRATCH # allobjs = rs.AllObjects() rs.DeleteObjects(allobjs) #s = 137.508 # golden angle s = 137 radius_scale = 0.4 # Scaling factor for circle radius z_scale = 0.1 # Scaling factor for height per circle block_name = "bl_cones" # Block name for cones b_scale = [0.1, 0.1, 0.1] # Scale factor for Block c_radius = 20 # Radius for main cone c_height = 20 # Height for main cone ### MAKE FIBBONACCI SPIRAL### f_points = [] # List for points for n in range(0, 380): # Fibonacci-loop t = math.sqrt(n) g = n * s xy_point = rs.Polar([0, 0, 20], g, t) f_point = rs.AddPoint(xy_point) f_points.append(f_point) # CALCULATE THE POSITION IN THE FIBONACCI SPIRAL # xy_point = rs.Polar([0, 0, 20], g, t) # Z-COORDINATE BASED ON THE POSITION IN THE SPIRAL # z = n * z_scale # Linear increase in Z-height xyz_point = (-xy_point[0], -xy_point[1], -z) # MAKE MAIN CONE # base_point = [0, 0, 20] # Basepoint for cone cone = rs.AddCone(base_point, -c_height, c_radius, cap=False) # PROJECT POINT ONTO THE MAIN CONE # projected_points = [] sm_cones = [] for f_point in f_points: projected = rs.ProjectPointToSurface(f_point, cone, (0, 0, -20)) if projected: for proj in projected: projected_points.append(proj) plane = rs.PlaneFromNormal(proj, [0, 0, 1]) # MAKE SMALLER CONES WITH PLANE # sm_height = -2 sm_radius = 2 sm_cone = rs.AddCone(plane, sm_height, sm_radius, cap=False) if sm_cone: rs.MoveObject(sm_cone, [0, 0, 1]) sm_cones.append(sm_cone) rs.DeleteObjects(f_points) # MAKE SMALLER CONES INTO BLOCK AND INSERT BLOCK # rs.AddBlock(sm_cones, [0,0,0], block_name, delete_input=False) for proj_point in projected_points[0:380]: block = rs.InsertBlock(block_name, proj_point, b_scale, 0, [0, 0, 0]) rs.MoveObject(block, [0,0,-1])