public class DrawingUtilities
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
static java.awt.Stroke |
THICK_LINE |
static java.awt.Stroke |
THIN_LINE |
static double |
TWOPI |
Constructor and Description |
---|
DrawingUtilities() |
Modifier and Type | Method and Description |
---|---|
static double |
angle(double p1x,
double p1y,
double p2x,
double p2y,
double p3x,
double p3y)
Uses the Math.atan2 to calculate the angle created by the three points, where p1 is the vertex near the angle
to be determined.
|
static double |
angle(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2)
Returns the angle off horizontal created by the line connecting p1 and p2
|
static double |
angle(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2,
java.awt.geom.Point2D p3)
Uses the Math.atan2 to calculate the angle created by the three points, where p1 is the vertex near the angle
to be determined.
|
static java.awt.geom.Point2D |
asPercentage(java.awt.geom.Point2D pt,
java.awt.geom.Rectangle2D container,
java.awt.geom.Point2D rv) |
static java.awt.geom.Rectangle2D |
asPercentage(java.awt.geom.Rectangle2D rect,
java.awt.geom.Rectangle2D container,
java.awt.geom.Rectangle2D rv)
Calculates the position of rect inside container, returning the result as a rectangle where
each value is a percentage of the container's size.
|
static double |
bottom(java.awt.geom.Rectangle2D rect) |
static double |
bottom(java.awt.geom.Rectangle2D rect,
double dY)
Returns the y-position of the bottom side of the rectangle after translating it by dY
|
static java.awt.geom.Point2D |
centerPoint(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2)
Find the center point on the line segment connecting the two points
|
static java.awt.Point |
centerPoint(java.awt.Rectangle rect) |
static java.awt.geom.Point2D |
centerPoint(java.awt.geom.Rectangle2D rect) |
static java.awt.geom.Rectangle2D |
copy(java.awt.geom.Rectangle2D rect) |
static double |
dist(double x1,
double y1,
double x2,
double y2)
Returns the distance between two points
|
static float |
dist(float x1,
float y1,
float x2,
float y2)
Returns the distance between two points
|
static double |
dist(java.awt.geom.Point2D a,
java.awt.geom.Point2D b)
Returns the distance between two points
|
static double |
distSquared(double x1,
double y1,
double x2,
double y2) |
static double |
distSquared(java.awt.geom.Point2D a,
java.awt.geom.Point2D b) |
static double |
dot(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2)
The dot-product of two vectors.
|
static java.awt.Color |
fade(java.awt.Color color,
float alpha) |
static java.awt.image.BufferedImage |
getScaledInstance(java.awt.image.BufferedImage img,
int targetWidth,
int targetHeight,
java.lang.Object hint,
boolean higherQuality)
Convenience method that returns a scaled instance of the
provided
BufferedImage . |
static java.awt.geom.Rectangle2D |
inset(java.awt.geom.Rectangle2D rect,
double d)
Insets a rectangle by the given amount.
|
static java.awt.Insets |
insets(java.awt.Rectangle rect,
java.awt.Insets insets)
Converts a rectangle (x,y,w,h) into an insets that represents the coordinates of the rectangles
edges (top=y, bottom=y+h, left=x, right=x+h)
|
static Insets2D |
insets2D(java.awt.geom.Rectangle2D rect,
Insets2D insets) |
static java.awt.geom.Point2D.Double |
location(java.awt.geom.Rectangle2D rect)
The location of the rectangle's x,y coords.
|
static void |
makeRelative(java.awt.geom.Rectangle2D child,
java.awt.geom.Rectangle2D parent)
For two rectangles in the same coordinate space, make the child relative to the parent.
|
static void |
moveRect(java.awt.geom.Rectangle2D rect,
double dx,
double dy)
Moves a rectangle by an offset, like rect.x += dx; rect.y += dy;
|
static boolean |
near(double value,
double nearTo)
Detects double proximity within 1 millionth, since double equality is not reliable.
|
static boolean |
near(double value,
double nearTo,
double tolerance)
Just like the other implementation of near, but with a custom specified tolerance.
|
static boolean |
near(float value,
float nearTo)
Detects double proximity within 1 millionth, since float equality is not reliable.
|
static boolean |
near(float value,
float nearTo,
float tolerance)
Just like the other implementation of near, but with a custom specified tolerance.
|
static boolean |
near(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2,
double tolerance)
Returns whether or not the two points' x and y coords are near each other within the specified tolerance.
|
static boolean |
near(java.awt.geom.Rectangle2D r1,
java.awt.geom.Rectangle2D r2,
double tolerance)
Returns whether or not the rectangle's are near each other within the specified tolerance.
|
static java.awt.geom.Point2D |
nearestPointInShape(java.awt.Shape shape,
java.awt.geom.Point2D pt)
Finds the nearest point on or inside the given shape.
|
static java.awt.geom.Point2D |
nearestPointOnLine(double ax,
double ay,
double bx,
double by,
double px,
double py,
boolean clampToSegment,
java.awt.geom.Point2D dest)
Finds a point on the line that passes through A (ax,ay) and B(bx,by) that is nearest to the point P (px,py).
|
static java.awt.geom.Point2D |
nearestPointOnLine(java.awt.geom.Point2D a,
java.awt.geom.Point2D b,
java.awt.geom.Point2D p) |
static java.awt.geom.Point2D |
nearestPointOnLine(java.awt.geom.Point2D a,
java.awt.geom.Point2D b,
java.awt.geom.Point2D p,
boolean clampToSegment) |
static java.awt.geom.Point2D |
nearestPointOnLine(java.awt.geom.Point2D a,
java.awt.geom.Point2D b,
java.awt.geom.Point2D p,
java.awt.geom.Point2D dest) |
static java.awt.geom.Point2D |
nearestPointOnLine(java.awt.geom.Point2D a,
java.awt.geom.Point2D b,
java.awt.geom.Point2D p,
java.awt.geom.Point2D dest,
boolean clampToSegment) |
static java.awt.geom.Rectangle2D |
outset(java.awt.geom.Rectangle2D rect,
double d) |
static boolean |
pathsIntersect(java.awt.Shape path1,
java.awt.Shape path2)
Detects if the outlines of two shapes intersect or not.
|
static java.awt.geom.Point2D |
project(java.awt.geom.Point2D pcts,
java.awt.geom.Rectangle2D container,
java.awt.geom.Point2D rv) |
static java.awt.geom.Rectangle2D |
project(java.awt.geom.Rectangle2D pcts,
java.awt.geom.Rectangle2D container,
java.awt.geom.Rectangle2D rv)
Projects the rectangle of percentages into the container rectangle, storing the results in the rv
|
static java.awt.geom.Rectangle2D |
rectangle(Insets2D insets,
java.awt.geom.Rectangle2D r) |
static java.awt.Rectangle |
rectangle(java.awt.Insets insets,
java.awt.Rectangle r)
Performs the inverse operation of
insets(Rectangle, Insets) . |
static boolean |
rectangleContains(java.awt.geom.Rectangle2D rectangle,
java.awt.Shape shape) |
static boolean |
rectangleIntersects(java.awt.geom.Rectangle2D rectangle,
java.awt.Shape shape) |
static java.awt.geom.Point2D |
reflect(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2,
double mult)
Consider the line segment p1,p2.
|
static double |
right(java.awt.geom.Rectangle2D rect) |
static double |
right(java.awt.geom.Rectangle2D rect,
double dX)
Returns the x-position of the right-hand side of the rectangle after translating it by dX
|
static void |
rotate(double angle,
double anchorX,
double anchorY,
java.awt.geom.Point2D point) |
static void |
rotate(double angle,
double anchorX,
double anchorY,
java.awt.geom.Point2D point,
java.awt.geom.Point2D dest) |
static void |
rotate(double angle,
java.awt.geom.Point2D anchor,
java.awt.geom.Point2D point)
Rotates the point around the anchor, storing the results by altering the point
|
static void |
rotate(double angle,
java.awt.geom.Point2D anchor,
java.awt.geom.Point2D point,
java.awt.geom.Point2D dest) |
static int |
round(double d)
Shortcut for (int)Math.round(d);
|
static java.awt.Point |
round(java.awt.geom.Point2D pt) |
static java.awt.Rectangle |
round(java.awt.geom.Rectangle2D rect) |
static java.awt.Rectangle |
round(java.awt.geom.Rectangle2D rect,
java.awt.Rectangle rv) |
static java.awt.Dimension |
roundSize(java.awt.geom.Rectangle2D rect) |
static void |
scale(java.awt.geom.Point2D p,
double d)
Scales a point by a value.
|
static java.awt.geom.Point2D |
scaleOnLine(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2,
double value)
Returns a point on the line that joins p1 and p2.
|
static void |
setHeight(java.awt.geom.Rectangle2D rect,
double newHeight) |
static void |
setLocation(java.awt.geom.Rectangle2D rect,
double x,
double y) |
static void |
setWidth(java.awt.geom.Rectangle2D rect,
double newWidth) |
static void |
setX(java.awt.geom.Rectangle2D rect,
double newX) |
static void |
setY(java.awt.geom.Rectangle2D rect,
double newY) |
static java.util.List<java.awt.geom.Point2D> |
simplifyPath(java.util.List<java.awt.geom.Point2D> points,
float tolerance)
Simplifies a basic poly-line to use fewer points
|
static java.awt.geom.GeneralPath |
smoothPath(java.util.List<java.awt.geom.Point2D> points,
double smoothness)
Turns a list of points representing a poly-line into a GeneralPath consisting of bezier curves.
|
static java.awt.geom.GeneralPath |
smoothPath(java.util.List<java.awt.geom.Point2D> points,
double smoothness,
boolean close) |
static java.awt.geom.Point2D |
snapPointToAngle(java.awt.geom.Point2D center,
double angle,
java.awt.geom.Point2D desired)
Snaps a point to a nearby point that is on a line aligned to a multiple of the given angle from the centerpoint.
|
static java.awt.geom.Point2D |
snapPointToAngle(java.awt.geom.Point2D center,
java.awt.geom.Point2D horizontalReference,
double angle,
java.awt.geom.Point2D desired)
Snaps a point to a nearby point that is on a line aligned to a multiple of the given angle from the centerpoint.
|
static double |
sq(double d)
Square (d^2)
|
static java.awt.geom.Point2D |
subtract(java.awt.geom.Point2D p1,
java.awt.geom.Point2D p2) |
static java.awt.image.BufferedImage |
toBufferedImage(java.awt.Image img) |
static java.lang.String |
toString(java.awt.geom.Rectangle2D rect) |
static void |
union(java.awt.Rectangle r1,
java.awt.Rectangle r2,
java.awt.Rectangle rv)
Unions two rectangles, storing the result in rv, rather than creating a new rectangle
|
public static final java.awt.Stroke THIN_LINE
public static final java.awt.Stroke THICK_LINE
public static final double TWOPI
public static java.awt.image.BufferedImage getScaledInstance(java.awt.image.BufferedImage img, int targetWidth, int targetHeight, java.lang.Object hint, boolean higherQuality)
BufferedImage
. Implementation thanks to
http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.htmlimg
- the original image to be scaledtargetWidth
- the desired width of the scaled instance,
in pixelstargetHeight
- the desired height of the scaled instance,
in pixelshint
- one of the rendering hints that corresponds to RenderingHints.KEY_INTERPOLATION
(e.g.
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR
,
RenderingHints.VALUE_INTERPOLATION_BILINEAR
,
RenderingHints.VALUE_INTERPOLATION_BICUBIC
)higherQuality
- if true, this method will use a multi-step
scaling technique that provides higher quality than the usual
one-step technique (only useful in downscaling cases, where targetWidth
or
targetHeight
is
smaller than the original dimensions, and generally only when
the BILINEAR
hint is specified)BufferedImage
public static java.awt.image.BufferedImage toBufferedImage(java.awt.Image img)
public static double dist(java.awt.geom.Point2D a, java.awt.geom.Point2D b)
a
- b
- public static java.awt.Color fade(java.awt.Color color, float alpha)
public static double dist(double x1, double y1, double x2, double y2)
public static float dist(float x1, float y1, float x2, float y2)
public static double distSquared(java.awt.geom.Point2D a, java.awt.geom.Point2D b)
public static double distSquared(double x1, double y1, double x2, double y2)
public static java.awt.geom.Point2D nearestPointOnLine(java.awt.geom.Point2D a, java.awt.geom.Point2D b, java.awt.geom.Point2D p)
public static java.awt.geom.Point2D nearestPointOnLine(java.awt.geom.Point2D a, java.awt.geom.Point2D b, java.awt.geom.Point2D p, boolean clampToSegment)
public static java.awt.geom.Point2D nearestPointOnLine(java.awt.geom.Point2D a, java.awt.geom.Point2D b, java.awt.geom.Point2D p, java.awt.geom.Point2D dest)
public static java.awt.geom.Point2D nearestPointOnLine(java.awt.geom.Point2D a, java.awt.geom.Point2D b, java.awt.geom.Point2D p, java.awt.geom.Point2D dest, boolean clampToSegment)
public static java.awt.geom.Point2D nearestPointInShape(java.awt.Shape shape, java.awt.geom.Point2D pt)
public static java.awt.geom.Point2D nearestPointOnLine(double ax, double ay, double bx, double by, double px, double py, boolean clampToSegment, java.awt.geom.Point2D dest)
ax
- ay
- bx
- by
- px
- py
- clampToSegment
- true if you want the point to be on the segment between points A and Bdest
- public static double sq(double d)
public static java.awt.geom.Rectangle2D inset(java.awt.geom.Rectangle2D rect, double d)
public static java.awt.geom.Rectangle2D outset(java.awt.geom.Rectangle2D rect, double d)
public static double right(java.awt.geom.Rectangle2D rect)
public static double right(java.awt.geom.Rectangle2D rect, double dX)
public static double bottom(java.awt.geom.Rectangle2D rect)
public static double bottom(java.awt.geom.Rectangle2D rect, double dY)
public static java.awt.Point centerPoint(java.awt.Rectangle rect)
public static java.awt.geom.Point2D centerPoint(java.awt.geom.Rectangle2D rect)
public static java.awt.geom.Point2D centerPoint(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2)
public static double angle(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2)
public static double angle(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2, java.awt.geom.Point2D p3)
public static double angle(double p1x, double p1y, double p2x, double p2y, double p3x, double p3y)
public static java.awt.geom.Point2D subtract(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2)
public static double dot(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2)
public static void scale(java.awt.geom.Point2D p, double d)
public static java.awt.geom.Point2D scaleOnLine(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2, double value)
public static java.awt.Insets insets(java.awt.Rectangle rect, java.awt.Insets insets)
rect
- Must not be null.insets
- May be null, in which case a new Insets wil be instantiated and returned.public static java.awt.Rectangle rectangle(java.awt.Insets insets, java.awt.Rectangle r)
insets(Rectangle, Insets)
. Converts an insets representing rectangle
edges into a Rectangle. If the insets has been turned "inside out" (e.g. top > bottom) it will be corrected
automatically.public static java.awt.geom.Rectangle2D rectangle(Insets2D insets, java.awt.geom.Rectangle2D r)
public static java.awt.geom.Rectangle2D copy(java.awt.geom.Rectangle2D rect)
public static void makeRelative(java.awt.geom.Rectangle2D child, java.awt.geom.Rectangle2D parent)
child.x -= parent.x; child.y -= parent.y;
public static void setX(java.awt.geom.Rectangle2D rect, double newX)
public static void setY(java.awt.geom.Rectangle2D rect, double newY)
public static void setWidth(java.awt.geom.Rectangle2D rect, double newWidth)
public static void setHeight(java.awt.geom.Rectangle2D rect, double newHeight)
public static java.lang.String toString(java.awt.geom.Rectangle2D rect)
public static void moveRect(java.awt.geom.Rectangle2D rect, double dx, double dy)
public static java.awt.geom.Point2D.Double location(java.awt.geom.Rectangle2D rect)
public static void setLocation(java.awt.geom.Rectangle2D rect, double x, double y)
public static boolean pathsIntersect(java.awt.Shape path1, java.awt.Shape path2)
path1
- path2
- public static boolean rectangleContains(java.awt.geom.Rectangle2D rectangle, java.awt.Shape shape)
public static boolean rectangleIntersects(java.awt.geom.Rectangle2D rectangle, java.awt.Shape shape)
public static void union(java.awt.Rectangle r1, java.awt.Rectangle r2, java.awt.Rectangle rv)
public static java.awt.geom.Point2D snapPointToAngle(java.awt.geom.Point2D center, double angle, java.awt.geom.Point2D desired)
public static java.awt.geom.Point2D snapPointToAngle(java.awt.geom.Point2D center, java.awt.geom.Point2D horizontalReference, double angle, java.awt.geom.Point2D desired)
public static boolean near(double value, double nearTo)
Math.abs(nearTo - value) < 0.000001d
public static boolean near(double value, double nearTo, double tolerance)
public static boolean near(float value, float nearTo)
Math.abs(nearTo - value) < 0.000001f
public static boolean near(float value, float nearTo, float tolerance)
public static boolean near(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2, double tolerance)
public static boolean near(java.awt.geom.Rectangle2D r1, java.awt.geom.Rectangle2D r2, double tolerance)
public static java.awt.Rectangle round(java.awt.geom.Rectangle2D rect)
public static java.awt.Rectangle round(java.awt.geom.Rectangle2D rect, java.awt.Rectangle rv)
public static int round(double d)
public static java.awt.Dimension roundSize(java.awt.geom.Rectangle2D rect)
public static java.awt.Point round(java.awt.geom.Point2D pt)
public static java.awt.geom.Rectangle2D asPercentage(java.awt.geom.Rectangle2D rect, java.awt.geom.Rectangle2D container, java.awt.geom.Rectangle2D rv)
#project(Rectangle2D, Rectangle2D, Rectangle)
with the return value of this function.rect
- The rectangle in questioncontainer
- The reference rectangle containing rectrv
- The return value in which to store the result. May be null.public static java.awt.geom.Point2D asPercentage(java.awt.geom.Point2D pt, java.awt.geom.Rectangle2D container, java.awt.geom.Point2D rv)
public static java.awt.geom.Rectangle2D project(java.awt.geom.Rectangle2D pcts, java.awt.geom.Rectangle2D container, java.awt.geom.Rectangle2D rv)
pcts
- container
- rv
- public static java.awt.geom.Point2D project(java.awt.geom.Point2D pcts, java.awt.geom.Rectangle2D container, java.awt.geom.Point2D rv)
public static void rotate(double angle, double anchorX, double anchorY, java.awt.geom.Point2D point)
public static void rotate(double angle, java.awt.geom.Point2D anchor, java.awt.geom.Point2D point)
public static void rotate(double angle, java.awt.geom.Point2D anchor, java.awt.geom.Point2D point, java.awt.geom.Point2D dest)
public static void rotate(double angle, double anchorX, double anchorY, java.awt.geom.Point2D point, java.awt.geom.Point2D dest)
public static java.util.List<java.awt.geom.Point2D> simplifyPath(java.util.List<java.awt.geom.Point2D> points, float tolerance)
points
- The list of points that make up the linetolerance
- The tolerance of how "simple" to make the line. Zero means no simplification. A value in the high tens
will simplify quite a bit.public static java.awt.geom.Point2D reflect(java.awt.geom.Point2D p1, java.awt.geom.Point2D p2, double mult)
public static java.awt.geom.GeneralPath smoothPath(java.util.List<java.awt.geom.Point2D> points, double smoothness)
points
- smoothness
- A double from zero to 1.5. Zero will make straight segments, higher numbers will make a curvier path.public static java.awt.geom.GeneralPath smoothPath(java.util.List<java.awt.geom.Point2D> points, double smoothness, boolean close)