GraphicsUtils.java

00001 package edu.stanford.hci.r3.util.graphics;
00002 
00003 import java.awt.Polygon;
00004 import java.awt.RenderingHints;
00005 import java.awt.geom.PathIterator;
00006 import java.awt.geom.Point2D;
00007 
00008 import edu.stanford.hci.r3.units.Units;
00009 
00020 public class GraphicsUtils {
00021 
00022         private static RenderingHints hintsBest;
00023 
00031         public static Polygon createPolygon(Point2D... points) {
00032                 final Polygon p = new Polygon();
00033                 for (Point2D pt : points) {
00034                         p.addPoint((int) Math.round(pt.getX()), (int) Math.round(pt.getY()));
00035                 }
00036                 return p;
00037         }
00038 
00043         public static RenderingHints getBestRenderingHints() {
00044                 if (hintsBest == null) {
00045                         hintsBest = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
00046                                         RenderingHints.VALUE_ANTIALIAS_ON);
00047                         hintsBest.add(new RenderingHints(RenderingHints.KEY_RENDERING,
00048                                         RenderingHints.VALUE_RENDER_QUALITY));
00049                         hintsBest.add(new RenderingHints(RenderingHints.KEY_INTERPOLATION,
00050                                         RenderingHints.VALUE_INTERPOLATION_BILINEAR));
00051                 }
00052                 return hintsBest;
00053         }
00054 
00059         public static String getPathAsString(PathIterator pathIterator) {
00060                 final StringBuilder sb = new StringBuilder();
00061                 final double[] points = new double[6];
00062                 while (!pathIterator.isDone()) {
00063                         int type = pathIterator.currentSegment(points);
00064                         switch (type) {
00065                         case PathIterator.SEG_CLOSE:
00066                                 sb.append("Close");
00067                                 break;
00068                         case PathIterator.SEG_CUBICTO:
00069                                 sb.append("CubicTo: (" + points[0] + "," + points[1] + ") (" + points[2] + ","
00070                                                 + points[3] + ") (" + points[4] + "," + points[5] + ")");
00071                                 break;
00072                         case PathIterator.SEG_LINETO:
00073                                 sb.append("LineTo: (" + points[0] + "," + points[1] + ")");
00074                                 break;
00075                         case PathIterator.SEG_MOVETO:
00076                                 sb.append("Move: (" + points[0] + "," + points[1] + ")");
00077                                 break;
00078                         case PathIterator.SEG_QUADTO:
00079                                 sb.append("QuadTo: (" + points[0] + "," + points[1] + ") (" + points[2] + ","
00080                                                 + points[3] + ")");
00081                                 break;
00082                         }
00083                         pathIterator.next();
00084                         if (!pathIterator.isDone()) {
00085                                 sb.append(", ");
00086                         }
00087                 }
00088                 return sb.toString();
00089         }
00090 
00101         public static Point2D[] getPointsRecentered(Point2D[] points, double originX, double originY) {
00102                 final int length = points.length;
00103                 final Point2D[] dest = new Point2D[length];
00104                 for (int i = 0; i < length; i++) {
00105                         dest[i] = new Point2D.Double(points[i].getX() - originX, points[i].getY() - originY);
00106                 }
00107                 return dest;
00108         }
00109 
00122         public static Point2D[] getPointsWithConvertedUnits(Units sourceUnit, Units destUnit,
00123                         Point2D... points) {
00124                 final int length = points.length;
00125                 final Point2D[] dest = new Point2D[length];
00126                 final double conversion = sourceUnit.getConversionTo(destUnit); // the multiplier
00127 
00128                 for (int i = 0; i < length; i++) {
00129                         dest[i] = new Point2D.Double(points[i].getX() * conversion, points[i].getY()
00130                                         * conversion);
00131                 }
00132                 return dest;
00133         }
00134 
00135 }

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