PolygonRenderer.java

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                 // draw the polygon with these attributes
00054                 g2d.setStroke(stroke);
00055                 g2d.setColor(strokeColor);
00056 
00057                 // get the polygon's parameters
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                 // convert the graphis transform to the Java2D standard (72 pts per inch)
00065                 final double conv = u.getConversionTo(Points.ONE);
00066                 final AffineTransform transform = new AffineTransform();
00067                 // this has to be first, so we are operating in Java2D points
00068                 transform.scale(conv, conv);
00069 
00070                 // System.out.println("Conversion: " + conv);
00071 
00072                 // scale the width and height of the polygon, and also the offsets =(
00073                 transform.scale(sX, sY);
00074 
00075                 // System.out.println("ScaleX: " + sX + " ScaleY: " + sY);
00076 
00077                 final double tX = x / sX - x;
00078                 final double tY = y / sY - y;
00079 
00080                 // System.out.println("Original Offsets: " + x + " " + y);
00081                 // System.out.println("Translations: " + tX + " " + tY);
00082 
00083                 // this line's tricky
00084                 // since we scaled everything (including the polygon's offsets)
00085                 // we now need to compensate for the shrunken (or larger) offsets
00086                 transform.translate(tX, tY);
00087 
00088                 // get a scaled and translated shape and draw it here.
00089                 final GeneralPath gp = new GeneralPath();
00090                 gp.append(polyRegion.getShape().getPathIterator(transform), false);
00091                 g2d.draw(gp);
00092 
00093                 // System.out.println(g2d.getTransform());
00094         }
00095 
00099         public void setStroke(Stroke s) {
00100                 stroke = s;
00101         }
00102 }

Generated on Sat Apr 14 18:21:37 2007 for R3 Paper Toolkit by  doxygen 1.4.7