I was trying to get a dynamic display within Rhino.Input.Custom.GetPoint.OnDynamicDraw. The point would be to include an iterative process dependent on the mouse position, and show these iterations (e.g. mouse moves once, but as a result, geometry changes 10x, and I want to show that as an animation).
I was trying to achieve this by making OnDynamicDraw() recursive (couldn’t get it to work) or opening a new conduit (also doesn’t work like this). Any thoughts on how to make this work? I’m not a total noob at Python, but this level of Rhinocommon use is a bit beyond me.
import Rhino
import System.Drawing
import scriptcontext as sc
class GetLines(Rhino.Input.Custom.GetPoint):
def OnDynamicDraw(self, args):
for i in range(10):
pt3 = Rhino.Geometry.Point3d(0,0,i)
line = args.Display.DrawLine(pt3, args.CurrentPoint, System.Drawing.Color.Green, 2)
class GetLinesRecursive(Rhino.Input.Custom.GetPoint):
def __init__(self):
self.count = 0
def OnDynamicDraw(self, args):
print self.count
if self.count < 10:
pt3 = Rhino.Geometry.Point3d(0,0,self.count)
line = args.Display.DrawLine(pt3, args.CurrentPoint, System.Drawing.Color.Green, 2)
self.count += 1
OnDynamicDraw(args)
else:
pass
class GetLinesConduit(Rhino.Input.Custom.GetPoint):
def __init__(self):
self.count = 0
def OnDynamicDraw(self, args):
while self.count < 10:
pt3 = Rhino.Geometry.Point3d(0,0,self.count)
conduit = DrawConduit(pt3, args.CurrentPoint, System.Drawing.Color.Green)
conduit.Enabled = True
sc.doc.Views.Redraw()
conduit.Enabled = False
self.count += 1
class DrawConduit(Rhino.Display.DisplayConduit):
def __init__(self, pt3, pt4, color):
self.pt3 = pt3
self.pt4 = pt4
self.color = color
def DrawOverlay(self, args):
args.Display.DrawLine(pt3, pt4, color, 2)
gp = GetLines()
gp.Get()
gp2 = GetLinesRecursive()
gp2.Get()
gp3 = GetLinesConduit()
gp3.Get()