00001 package edu.stanford.hci.r3.render.regions;
00002
00003 import java.awt.BasicStroke;
00004 import java.awt.Color;
00005 import java.awt.Graphics2D;
00006 import java.awt.Stroke;
00007 import java.awt.geom.AffineTransform;
00008 import java.awt.geom.GeneralPath;
00009
00010 import edu.stanford.hci.r3.paper.regions.PolygonalRegion;
00011 import edu.stanford.hci.r3.render.RegionRenderer;
00012 import edu.stanford.hci.r3.units.Points;
00013 import edu.stanford.hci.r3.units.Units;
00014
00027 public class PolygonRenderer extends RegionRenderer {
00028
00029 private PolygonalRegion polyRegion;
00030
00031 private Stroke stroke;
00032
00033 private Color strokeColor;
00034
00038 public PolygonRenderer(PolygonalRegion r) {
00039 super(r);
00040 polyRegion = r;
00041 stroke = new BasicStroke(r.getStrokeThickness());
00042 strokeColor = r.getStrokeColor();
00043 }
00044
00048 public void renderToG2D(Graphics2D g2d) {
00049 if (RegionRenderer.DEBUG_REGIONS) {
00050 super.renderToG2D(g2d);
00051 }
00052
00053
00054 g2d.setStroke(stroke);
00055 g2d.setColor(strokeColor);
00056
00057
00058 final double sX = polyRegion.getScaleX();
00059 final double sY = polyRegion.getScaleY();
00060 final double x = polyRegion.getOffsetX().getValue();
00061 final double y = polyRegion.getOffsetY().getValue();
00062 final Units u = polyRegion.getUnits();
00063
00064
00065 final double conv = u.getConversionTo(Points.ONE);
00066 final AffineTransform transform = new AffineTransform();
00067
00068 transform.scale(conv, conv);
00069
00070
00071
00072
00073 transform.scale(sX, sY);
00074
00075
00076
00077 final double tX = x / sX - x;
00078 final double tY = y / sY - y;
00079
00080
00081
00082
00083
00084
00085
00086 transform.translate(tX, tY);
00087
00088
00089 final GeneralPath gp = new GeneralPath();
00090 gp.append(polyRegion.getShape().getPathIterator(transform), false);
00091 g2d.draw(gp);
00092
00093
00094 }
00095
00099 public void setStroke(Stroke s) {
00100 stroke = s;
00101 }
00102 }