[EMAIL PROTECTED] wrote:
I'm trying to implement an interactive graph visualisation tool using
matplotlib.
I want to use a spring layout, where nodes repulse each other and
edges act as springs to pull connected nodes together. Usually, this
algorithm runs through a number of iterations of attraction/repulsion
to allow the nodes to converge to suitable positions. However, rather
than running all these iterations to lay out the graph and then
rendering it, I want to animate the graph as it is "springing" into
place, and then allow the user to drag nodes around and have the graph
redraw on the fly.
My idea for doing this was to use a generator function, where I yield
the position of the nodes after each iteration and then call draw() on
the position yielded. Does this seem like a sensible approach?
To me, no. The reasons for using one do not apply here. What you
describe is much like a game with auto updates plus user intervention.
I would write an update function and add it to the gui mainloop (if
running: update()) along with the draw function to be tied into the gui
redraw (those parts I know little about). I would allow use of the
spacebar instead of or in addition to a button to toggle 'running' on
and off. That is standard in games that allow users to stop the action.
tjr
--
http://mail.python.org/mailman/listinfo/python-list