001 package nl.cwi.sen1.gui.plugin.prefusedot;
002
003 import java.awt.Shape;
004 import java.awt.geom.Ellipse2D;
005 import java.awt.geom.Point2D;
006 import java.awt.geom.Rectangle2D;
007
008 import prefuse.render.AbstractShapeRenderer;
009 import prefuse.visual.VisualItem;
010
011 public class DotNodeRenderer extends AbstractShapeRenderer {
012 private Rectangle2D box = new Rectangle2D.Double();
013
014 private Ellipse2D ellipse = new Ellipse2D.Double();
015
016 private Point2D intersection[] = new Point2D[2];
017
018 public DotNodeRenderer() {
019 super();
020 intersection[0] = new Point2D.Float();
021 intersection[1] = new Point2D.Float();
022 System.err.println("Init DotNodeRenderer");
023 }
024
025
026
027 public Shape getRawShape(VisualItem item) {
028 Rectangle2D bounds = ((Rectangle2D) item.get(VisualItem.BOUNDS))
029 .getFrame();
030 double x = item.getX();
031 double y = item.getY();
032 double w = bounds.getWidth();
033 double h = bounds.getHeight();
034 String shapeName = item.getString(DotAdapter.DOT_SHAPE);
035 Shape result;
036
037 // TODO: implement diamond and other shapes
038 if (shapeName != null) {
039 if (shapeName.equals("box")) {
040 result = getBoxShape(x, y, w, h);
041 } else if (shapeName.equals("circle")) {
042 result = getCircleShape(x, y, w, h);
043 } else if (shapeName.equals("ellipse")) {
044 result = getEllipseShape(x, y, w, h);
045 } else {
046 result = getBoxShape(x, y, w, h);
047 }
048 } else {
049 result = getBoxShape(x, y, w, h);
050 }
051
052 return result;
053 }
054
055 private Shape getBoxShape(double x, double y, double width, double height) {
056 box.setFrame(x, y, width, height);
057 return box;
058 }
059
060 private Shape getCircleShape(double x, double y, double width, double height) {
061 double radius = Math.max(width, height);
062 ellipse.setFrame(x, y, radius, radius);
063 return ellipse;
064 }
065
066 private Shape getEllipseShape(double x, double y, double width,
067 double height) {
068 ellipse.setFrame(x, y, width, height);
069 return ellipse;
070 }
071
072 }