View Javadoc
1   package edu.uci.ics.jung.visualization.layout;
2   
3   import java.awt.geom.Point2D;
4   
5   import edu.uci.ics.jung.algorithms.layout.Layout;
6   import edu.uci.ics.jung.algorithms.layout.StaticLayout;
7   import edu.uci.ics.jung.algorithms.layout.util.Relaxer;
8   import edu.uci.ics.jung.algorithms.layout.util.VisRunner;
9   import edu.uci.ics.jung.algorithms.util.IterativeContext;
10  import edu.uci.ics.jung.graph.Graph;
11  import edu.uci.ics.jung.visualization.VisualizationViewer;
12  
13  public class LayoutTransition<V,E> implements IterativeContext {
14  	
15  	protected Layout<V,E> startLayout;
16  	protected Layout<V,E> endLayout;
17  	protected Layout<V,E> transitionLayout;
18  	protected boolean done = false;
19  	protected int count = 20;
20  	protected int counter = 0;
21  	protected VisualizationViewer<V,E> vv;
22  
23  	public LayoutTransition(VisualizationViewer<V,E> vv, Layout<V, E> startLayout, Layout<V, E> endLayout) {
24  		this.vv = vv;
25  		this.startLayout = startLayout;
26  		this.endLayout = endLayout;
27  		if(endLayout instanceof IterativeContext) {
28  			Relaxer relaxer = new VisRunner((IterativeContext)endLayout);
29  			relaxer.prerelax();
30  		}
31  		this.transitionLayout =
32  			new StaticLayout<V,E>(startLayout.getGraph(), startLayout);
33  		vv.setGraphLayout(transitionLayout);
34  	}
35  
36  	public boolean done() {
37  		return done;
38  	}
39  
40  	public void step() {
41  		Graph<V,E> g = transitionLayout.getGraph();
42  		for(V v : g.getVertices()) {
43  			Point2D tp = transitionLayout.apply(v);
44  			Point2D fp = endLayout.apply(v);
45  			double dx = (fp.getX()-tp.getX())/(count-counter);
46  			double dy = (fp.getY()-tp.getY())/(count-counter);
47  			transitionLayout.setLocation(v, 
48  					new Point2D.Double(tp.getX()+dx,tp.getY()+dy));
49  		}
50  		counter++;
51  		if(counter >= count) {
52  			done = true;
53  			vv.setGraphLayout(endLayout);
54  		}
55  		vv.repaint();
56  	}
57  }