Profiling of python code in rhino

Hello I am trying to creat a grid of points, where only the point inside a surface should be set.
To do this I use IsPointInSurface
The problem is that I get a huge time difference depending on the setup.

Depending on the point setup I get a huge diffrence in time as show below.

point1 = [b0+x*d_x, b1+y*d_y, b2+z*d_z] 17 sec
point2 = [b0+x*d_x, b1+y*d_y, b2+z] 2 sec

Is this because point1 is more inside the surface? se the code below

Are there any way of profiling the code more in deapth? python have the profiling tool cProfile which do not work native in the rhino python

best kasper

import rhinoscriptsyntax as rs
import random
import timeit

rs.EnableRedraw(False)
surface = rs.GetObject("pick a surface")
bounding_box = rs.BoundingBox(surface)
shape = [25,25,25]

d_x = (bounding_box[1][0] - bounding_box[0][0])/float(shape[0]-1)
d_y = (bounding_box[2][1] - bounding_box[0][1])/float(shape[1]-1)
d_z = (bounding_box[4][2] - bounding_box[0][2])/float(shape[2]-1)

b0 = bounding_box[0][0]
b1 = bounding_box[0][1]
b2 = bounding_box[0][2]

a = 0
start = timeit.default_timer()
for x in range(shape[0]):
    for y in range(shape[1]):
        for z in range(shape[2]):
            point = [b0+x*d_x, b1+y*d_y, b2+z*d_z]
            if rs.IsPointInSurface(surface, point, False, 0.01):
                a += 1
print str(timeit.default_timer() - start) + " sec"
start = timeit.default_timer()

for x in range(shape[0]):
    for y in range(shape[1]):
        for z in range(shape[2]):
            point = [b0+x*d_x, b1+y*d_y, b2+z]
            if rs.IsPointInSurface(surface, point, False, 0.01):
                a += 1
print str(timeit.default_timer() - start) + " sec"

rs.EnableRedraw(True)
1 Like

Hi,
Do you run this code with a complex surface ?
When I try it on a random surface it is solved pretty fast and as quick in both part of your code.