In trying to get a feel for the working of dynamic draw, I have am mimicing interpolated curve on surface. sometimes rhino will crash after picking the first point already, sometimes just after a couple of picked points, and sometimes it doesn’t crash. Any idea what is going wrong?
However when I just use the (commented out) control point curve instead, things run fine.
see script below:
import Rhino
import rhinoscriptsyntax as rs
from System.Drawing import Color
import scriptcontext as sc
def DynamicCrvOnSrf():
def drawmycurve(sender,e):
points[len(points)-1]=e.CurrentPoint#change last point to CurrentPoint
curve=rhsrf.InterpolatedCurveOnSurface(points,0.1)
#curve=Rhino.Geometry.Curve.CreateControlPointCurve(points,3)
e.Display.DrawCurve(curve, Color.Black,1)
#e.Display.DrawDottedPolyline(points,Color.DarkBlue,False)
e.Display.DrawPoints(points,0,3,Color.Black)
def getpoint():
gp.Get()
if gp.CommandResult() == Rhino.Commands.Result.Success:
pt=gp.Point()
if len(points)==0:#initial point
points.append(pt)
#add one temporary point that gets overriden in drawmycurve()
points.append(tempPoint)
elif len(points)>=2:
points.append(tempPoint)#add new temporary point
gp.DynamicDraw+=drawmycurve
#recursion: getpoint calling itself after a point has been picked:
getpoint()
elif len(points)>2:#2 picked points +1 temporary point
#remove last added preview point
del points[-1]
rs.AddInterpCrvOnSrf(srf, points)
srf=rs.GetObject("select surface to draw on", rs.filter.surface)
if srf==None:
return
rhsrf=rs.coercesurface(srf)
tempPoint=Rhino.Geometry.Point3d(0,0,0)
gp=Rhino.Input.Custom.GetPoint()
gp.SetCommandPrompt("Draw on surface")
gp.Constrain(rhsrf, False)
points=[]
getpoint()
if( __name__ == "__main__" ):
DynamicCrvOnSrf()