Rhino python help!

Hi, I was trying one code from rhino python primer, I wrote the exact definition, but it shows an error(Message: range() integer end argument expected, got float)
srf peel.py (721 Bytes)

PFA a screenshot, and code for reference,Capture
thanks

uDomain and vDomain are intervals of two floats, so you are feeding floats to the range() function which wants integers.

range ( start , stop [, step ])

This is a versatile function to create lists containing arithmetic progressions. It is most often used in for loops. The arguments must be plain integers.

Maybe try something like this instead:

#calculate uStep and vStep as you did originally
for i in range(intCount):
    for j in range(intCount):
        pt=rs.EvaluateSurface(idSurface,[(uDomain[0]+(i*uStep),(vDomain[0]+(i*vStep)])
        #etc.

Hey, I tried your option/suggestion, but now it shows some other errors. I checked rhino python primer and my code is an exact copy of that code. why its showing error? it should be working, isn’t it?

Sorry, I typed that a bit too quickly without checking, there are a couple of parentheses too many…

Should read:

#calculate uStep and vStep as you did originally
for i in range(intCount):
    for j in range(intCount):
        pt=rs.EvaluateSurface(idSurface,[uDomain[0]+(i*uStep),vDomain[0]+(i*vStep)])
        #etc.

Hey Helvetosaur,

Sorry to say but it still has no improvements, shows the same error :frowning:

Below is some working code…

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)
for i in range(intCount+1):
    for j in range(intCount+1):
        pt=rs.EvaluateSurface(idSurface,uDomain[0]+(i*uStep),vDomain[0]+(j*vStep))
        if rs.Distance(pt,rs.BrepClosestPoint(idSurface,pt)[0])<0.1:
            srfFrame=rs.SurfaceFrame(idSurface,[i*uStep,j*vStep])
            rs.AddPlaneSurface(srfFrame,1.0,1.0)

I added the +1 in range(intCount+1) so that you go all the way to the far edges of the surface in both directions.

are you sure you typed everything correctly from the primer? as far as the range problem and floats VS integer, use rs.frange
Edit: I wonder if some functionality changed between versions…or it was a typo. That script does work… with two edits:
use rs.frange in place of range
and change
pt = rs.EvaluateSurface(idSurface, [u, v])
to
pt = rs.EvaluateSurface(idSurface, u, v)

thankyou, it worked!

I typed code correctly, later when it wasn’t working I copy pasted it. still it did not worked. I’ll check rs,frange.
thanks!