Grasshopper

algorithmic modeling for Rhino

Hi all,

I am working on bit of python script on grasshopper which enable to simulate movement of drops of water on a surface.
It works well with most of points(drops) on the surface, but it makes an error when it comes to points on edges of the surface.
I guess it is because normal vectors at a few of points are invalid. After all, because of these invalid points, an error message comes out which is saying " Runtime error (PythonException) : Unable to add polyline to document " and it results in no output. Please give me some help if you know how to handle this problem. I post a code below.
Thanks in advance.

---------------------------------------------------------------------------------------------

import Rhino
import rhinoscriptsyntax as rs
import math
import ghpythonlib.components as gh

output_crvs = []

for pt1 in input_pt :
output_pts = []
newPt = pt1
output_pts.append(newPt)

while len(output_pts) <= 100:
newPt = outputpoint(base_srf, newPt, distance_factor)
output_pts.append(newPt)

output_crv = rs.AddPolyline(output_pts)
output_crvs.append(output_crv)
A = output_crvs

def outputpoint(base_srf, input_pt, distance_factor):
centre_point = rs.AddPoint(0,0,0)
height_point = rs.AddPoint(0,0,10)

zaxis = rs.VectorAdd(centre_point, height_point)

cp_pt = rs.SurfaceClosestPoint(base_srf, input_pt)
normal_vector = rs.SurfaceNormal(base_srf, cp_pt)
drain_vector = rs.VectorCrossProduct(normal_vector, zaxis)

dvector2 = rs.VectorUnitize(drain_vector)
dvector3 = rs.VectorRotate(dvector2, 90, normal_vector)

mpt = gh.DeconstructVector(distance_factor*dvector3)
moved_pt = rs.PointAdd(input_pt, mpt)
moved_uv = rs.SurfaceClosestPoint(base_srf, moved_pt)
output_pt = rs.EvaluateSurface(base_srf, moved_uv[0], moved_uv[1])

return output_pt

Views: 628

Replies to This Discussion

Ideally you need to figure out why the error is happening but if you just want to pass the exception, you can use try - exception in python.  You can find so many examples online. I just write the generic pattern here:

try:

  # you code here

except:

 # handle the exception

else:

 # if exception didn't happen

finally:

 # code that should be executed either exception happens or not

 # useful for cases like closing the file, etc

RSS

About

Translate

Search

Photos

  • Add Photos
  • View All

Videos

  • Add Videos
  • View All

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service