1 package prefuse.action.layout; 2 3 import java.awt.geom.Rectangle2D ; 4 import java.util.Iterator ; 5 6 import prefuse.data.tuple.TupleSet; 7 import prefuse.visual.VisualItem; 8 9 15 public class CircleLayout extends Layout { 16 17 private double m_radius; 19 24 public CircleLayout(String group) { 25 super(group); 26 } 27 28 34 public CircleLayout(String group, double radius) { 35 super(group); 36 m_radius = radius; 37 } 38 39 43 public double getRadius() { 44 return m_radius; 45 } 46 47 51 public void setRadius(double radius) { 52 m_radius = radius; 53 } 54 55 58 public void run(double frac) { 59 TupleSet ts = m_vis.getGroup(m_group); 60 61 int nn = ts.getTupleCount(); 62 63 Rectangle2D r = getLayoutBounds(); 64 double height = r.getHeight(); 65 double width = r.getWidth(); 66 double cx = r.getCenterX(); 67 double cy = r.getCenterY(); 68 69 double radius = m_radius; 70 if (radius <= 0) { 71 radius = 0.45 * (height < width ? height : width); 72 } 73 74 Iterator items = ts.tuples(); 75 for (int i=0; items.hasNext(); i++) { 76 VisualItem n = (VisualItem)items.next(); 77 double angle = (2*Math.PI*i) / nn; 78 double x = Math.cos(angle)*radius + cx; 79 double y = Math.sin(angle)*radius + cy; 80 setX(n, null, x); 81 setY(n, null, y); 82 } 83 } 84 85 } | Popular Tags |