Let's start by working in 2D first (in Rhino, only look at Top window) and understanding how to represent and generate points in 2D.
First,
import rhinoscriptpackage as rs
Representing Points
Points in 2D can be represented by a list of numbers [x, y, 0] p1 = [1,12,0] p2 = [-2,2,0] #and drawn to the canvas by using a built-in function rs.AddPoint(p1) rs.AddPoint(p2)
Generating Points
Generating a collection of points based on user-inputed data:
#we can draw a collection of points, such as this zig-zag, #based on user-inputted data count = rs.GetInteger("Number of points") height = rs.GetInteger("Height of zig-zag") if count: for i in range(count): x = i if (i%(2*height) < height): y = i%height else: y =height-(i%height) rs.AddPoint([x,y,0])
Generating a collection of points based on a mathematical function y = f(x):
#this is a collecton of points along a 'curve' defined by a #mathematical function, y = |x|sin(5x), for a specified range #and a fixed stepsize in x (representing angle in degrees). #For fixed intervals, the built-in function frange is very useful import math lower = -30 upper = 60 step = 0.5 #print rs.frange(lower, upper, step) #remember this handy little function? def sinDegrees(angleIn): angleRad = angleIn*2*math.pi/360 return math.sin(angleRad) for x in rs.frange(lower, upper, step): y = math.fabs(x)*sinDegrees(10*x) rs.AddPoint([x,y,0]) #up to this point, every point in the collection is printed out one at a time. #But suppose we wanted to save this collection of points so that this can be #used later. This can be done using a list of points, using the same operations #on lists that we used when we were working with lists of numbers. listPoints = [] for x in rs.frange(lower, upper, step): y = math.fabs(x)*sinDegrees(10*x) listPoints.append([x,y,0]) #this collection can now be used as input for built-in functions #such as AddInterpCurve which draws an interpolated curve based #on input of a list of points rs.AddInterpCurve(listPoints)