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);
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 }