package infovis; import java.awt.Color; import java.awt.geom.Point2D; import javax.swing.BorderFactory; import javax.swing.JFrame; import edu.berkeley.guir.prefuse.Display; import edu.berkeley.guir.prefuse.ItemRegistry; import edu.berkeley.guir.prefuse.action.RepaintAction; import edu.berkeley.guir.prefuse.action.animate.ColorAnimator; import edu.berkeley.guir.prefuse.action.animate.PolarLocationAnimator; import edu.berkeley.guir.prefuse.action.assignment.ColorFunction; import edu.berkeley.guir.prefuse.action.filter.TreeFilter; import edu.berkeley.guir.prefuse.activity.ActionList; import edu.berkeley.guir.prefuse.activity.SlowInSlowOutPacer; import edu.berkeley.guir.prefuse.graph.Graph; import edu.berkeley.guir.prefuse.graph.io.XMLGraphReader; import edu.berkeley.guir.prefuse.render.DefaultEdgeRenderer; import edu.berkeley.guir.prefuse.render.DefaultRendererFactory; import edu.berkeley.guir.prefuse.render.Renderer; import edu.berkeley.guir.prefuse.render.TextItemRenderer; import edu.berkeley.guir.prefusex.controls.AnchorUpdateControl; import edu.berkeley.guir.prefusex.controls.DragControl; import edu.berkeley.guir.prefusex.controls.FocusControl; import edu.berkeley.guir.prefusex.controls.NeighborHighlightControl; import edu.berkeley.guir.prefusex.controls.PanControl; import edu.berkeley.guir.prefusex.controls.ZoomControl; import edu.berkeley.guir.prefusex.distortion.Distortion; import edu.berkeley.guir.prefusex.distortion.FisheyeDistortion; import edu.berkeley.guir.prefusex.force.DragForce; import edu.berkeley.guir.prefusex.force.ForceSimulator; import edu.berkeley.guir.prefusex.force.NBodyForce; import edu.berkeley.guir.prefusex.layout.ForceDirectedLayout; import edu.berkeley.guir.prefusex.layout.RadialTreeLayout; /** * PrefuseDemo * * @author jeffrey heer */ public class PrefuseDemo { private static final String datafile = "../prefuse/etc/friendster.xml"; public static void main(String[] argv) { // create graph and registry Graph g = null; try { g = new XMLGraphReader().loadGraph(datafile); } catch ( Exception e ) { e.printStackTrace(); System.exit(0); } ItemRegistry registry = new ItemRegistry(g); // intialize renderers TextItemRenderer nodeR = new TextItemRenderer(); // Uncomment to draw rectangles with rounded corners //nodeR.setRoundedCorner(8,8); Renderer edgeR = new DefaultEdgeRenderer(); registry.setRendererFactory( new DefaultRendererFactory(nodeR, edgeR)); // initialize action lists ActionList layout = new ActionList(registry); layout.add(new TreeFilter(true)); layout.add(new RadialTreeLayout()); layout.add(new ColorFunction()); ActionList repaint = new ActionList(registry); repaint.add(new ColorFunction()); repaint.add(new RepaintAction()); ActionList animate = new ActionList(registry,1500); animate.setPacingFunction(new SlowInSlowOutPacer()); animate.add(new PolarLocationAnimator()); animate.add(new ColorAnimator()); animate.add(repaint); animate.alwaysRunAfter(layout); // initialize display Display display = new Display(registry); display.setSize(500,500); display.addControlListener(new DragControl()); display.addControlListener(new FocusControl(layout)); // Uncomment to highlight neighbors on mouse over //display.addControlListener(new NeighborHighlightControl(repaint)); /* // --------------------------- // force-based jitter ForceSimulator fsim = new ForceSimulator(); fsim.addForce(new NBodyForce(-0.1f, 15f, 0.9f)); fsim.addForce(new DragForce()); ActionList forces = new ActionList(registry, 1000); forces.add(new ForceDirectedLayout(fsim, true)); forces.add(new RepaintAction()); forces.alwaysRunAfter(animate); */ /* // --------------------------- // overview Display overview = new Display(registry); overview.setBorder( BorderFactory.createLineBorder(Color.BLACK, 1)); overview.setSize(75,75); overview.zoom(new Point2D.Float(0,0),0.15); display.add(overview); display.addControlListener(new PanControl()); display.addControlListener(new ZoomControl()); */ /* // --------------------------- // distortion Distortion feye = new FisheyeDistortion(); ActionList distort = new ActionList(registry); distort.add(feye); distort.add(new RepaintAction()); AnchorUpdateControl auc = new AnchorUpdateControl(feye, distort); display.addMouseListener(auc); display.addMouseMotionListener(auc); */ // initialize enclosing window frame JFrame frame = new JFrame("prefuse example"); frame.getContentPane().add(display); frame.pack(); frame.setVisible(true); // run the layout list layout.runNow(); } }