PlotDevice is designed to output PDF documents, images, and movies. In general it makes the trade-off of output quality over realtime responsiveness. If you’re looking to make something with low-latency interactivity (or other general whizzy-ness) you’re probably better off with a tool like NodeBox for OpenGL or Processing.
However, if you do want to experiment with interactivity in PlotDevice, there’s some built-in
support that might be of help to you. This assumes you already know how to make an animation in PlotDevice.
Interacting with the mouse
In a PlotDevice animation, there are three predefined variables that store the current position of the mouse cursor and the state of the mouse button:
MOUSEX: the horizontal location of the mouse cursor
MOUSEY: the vertical location of the mouse cursor
mousedown: is True when the mouse button is pressed, False otherwise
You would typically use the
mousedown variable in an if-statement:
if mousedown: # do stuff when the mouse is pressed else: # do stuff when the mouse isn't pressed
Interacting with the keyboard
Three predefined variables store the keys a user is pressing during a PlotDevice animation:
key: the last key pressed
keycode: the integer keycode of the last key pressed
keydown: is True when a key is being pressed, False otherwise
keycode variables are updated as long as any key is being pressed.
KEY_RIGHT contain the keycodes for the arrow keys and the delete key is represented by
A fun example is this little sketch application. It builds up a list of points you’ve clicked-and-dragged over then draws a smooth bezier path connecting the vertices at every frame.
size(400 ,400) speed(30) def setup(anim): anim.path =  def draw(anim): nofill() stroke(0) if mousedown: pt = Point(MOUSEX, MOUSEY) anim.path.append(pt) if anim.path: bezier(anim.path, smooth=True)