Working through Python for Rhino

I’m trying to work my way through the Python for Rhinoceros 5 primer. I’m getting frustrated partly because I don’t have the example curves and surfaces that were used and partly because of errors in the python code. For example in some places there is a
for i in range(x,y,z) where the x,y, and z are real numbers instead of ints. My current problem is on page 77 about Interpolated curves. I’m doing fine till I get to the description where it says that the complete script is supplied in the article archive. ?? Where is the article archive? I’m trying to understand whether this primer was written just to give me ideas of what I might do? I am learning, but it’s hard sledding.

Perhaps the online version provides fixed/updated/missing code snippets:

Nope. In section 8.7.2 it still says the complete script is in the article archive. And in section 8.5 on planes I still find the problem with “for i in range” problem. Here’s the code snippet.

uStep = (uDomain[1] - uDomain[0]) / intCount
vStep = (vDomain[1] - vDomain[0]) / intCount

rs.EnableRedraw(False)
for u in range(uDomain[0],uDomain[1], uStep):
    For v in range(vdomain[0],vDomain[1],vStep):

When I try this script with a surface I created, I get errors because the range values are real and fractional, not integers.

Hi @Joe4,

Try using a while loop:

import rhinoscriptsyntax as rs

idSurface = rs.GetObject("Surface to frame", 8, True, True)
intCount = rs.GetInteger("Number of iterations per direction", 20, 2)

uDomain = rs.SurfaceDomain(idSurface, 0)
vDomain = rs.SurfaceDomain(idSurface, 1)

uStep = (uDomain[1] - uDomain[0]) / intCount
vStep = (vDomain[1] - vDomain[0]) / intCount

rs.EnableRedraw(False)

u = uDomain[0]
while u <= uDomain[1]:
    v = vDomain[0]
    while v <= vDomain[1]:
        pt = rs.EvaluateSurface(idSurface, u, v)
        if rs.Distance(pt, rs.BrepClosestPoint(idSurface, pt)[0]) < 0.1:
            srfFrame = rs.SurfaceFrame(idSurface, [u, v])
            rs.AddPlaneSurface(srfFrame, 1.0, 1.0)
        v += vStep
    u += uStep

rs.EnableRedraw(True)

– Dale

Perhaps the author meant to call the rhinoscriptsyntax.frange function (i.e. a float version of the standard Python range function).

Yes, thank you. Both solutions are possible. But I still wish I had access to the original Rhino files that were used. And where is the archive where the rest of the script for section 8.7.2 resides?

@scottd - do you know anything about this?