// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.elevation.gui; import java.awt.Graphics; import java.awt.Point; import java.awt.Polygon; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.AffineTransform; import java.awt.geom.PathIterator; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; /** * @author Oliver Wieland <oliver.wieland@online.de> * Class to represent a triangle shape. {@see java.awt.Shape}. */ public class Triangle implements Shape { private final Polygon poly; /** * Copy constructor. */ public Triangle(Polygon p) { if (p == null || p.npoints != 3) throw new RuntimeException("Given polygon was null or had invalid number of points"); poly = p; } /** * Creates a triangle from 3 given points. The points are used without any sanity check, so it is up to * the user that the points form a triangle. */ public Triangle(Point p1, Point p2, Point p3) { poly = new Polygon(); poly.addPoint(p1.x, p1.y); poly.addPoint(p2.x, p2.y); poly.addPoint(p3.x, p3.y); } /** * Draws an outlined triangle. */ public void draw(Graphics g) { g.drawPolygon(poly); } /** * Draws a filled triangle. */ public void fill(Graphics g) { g.fillPolygon(poly); } @Override public Rectangle getBounds() { return poly.getBounds(); } @Override public Rectangle2D getBounds2D() { return poly.getBounds2D(); } @Override public boolean contains(double x, double y) { return poly.contains(x, y); } @Override public boolean contains(Point2D p) { return poly.contains(p); } @Override public boolean intersects(double x, double y, double w, double h) { return poly.intersects(x, y, w, h); } @Override public boolean intersects(Rectangle2D r) { return poly.intersects(r); } @Override public boolean contains(double x, double y, double w, double h) { return poly.contains(x, y, w, h); } @Override public boolean contains(Rectangle2D r) { return poly.intersects(r); } @Override public PathIterator getPathIterator(AffineTransform at) { return poly.getPathIterator(at); } @Override public PathIterator getPathIterator(AffineTransform at, double flatness) { return poly.getPathIterator(at, flatness); } }