1 /* File Shape2D.java
2 *
3 * Project : Java Geometry Library
4 *
5 * ===========================================
6 *
7 * This library is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 2.1 of the License, or (at
10 * your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE.
15 *
16 * See the GNU Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with this library. if not, write to :
20 * The Free Software Foundation, Inc., 59 Temple Place, Suite 330,
21 * Boston, MA 02111-1307, USA.
22 */
23
24 // package
25
26 package math.geom2d;
27
28 import java.awt.Graphics2D;
29 import java.io.Serializable;
30
31 // Imports
32
33 /**
34 * <p>
35 * Main interface for all geometric objects, including points, lines, curves,
36 * or planar regions... Instances of Shape2D can be either bounded
37 * (a point, a line segment, a square...) or unbounded (a parabola,
38 * a half-plane...).</p>
39 * <p>
40 * Shape2D implementations implements a more specialized interface depending
41 * on the shape inner dimension:
42 * {@link math.geom2d.curve.Curve2D Curve2D},
43 * {@link math.geom2d.domain.Domain2D Domain2D} or
44 * {@link math.geom2d.point.PointShape2D PointShape2D}.</p>
45 * <p>
46 * Shape2D interface provide convenient method to check if the shape
47 * {@link #isEmpty() is empty}, to {@link #transform(AffineTransform2D)
48 * transform} or to {@link #clip(Box2D) clip} the shape, get its
49 * {@link #getBoundingBox() bounding box}, or its
50 * {@link #getDistance(Point2D) distance} to a given point.</p>
51 */
52 public interface Shape2D extends Serializable {
53
54 // ===================================================================
55 // constants
56
57 /**
58 * The constant used for testing results.
59 */
60 public final static double ACCURACY = 1e-12;
61
62 /**
63 * Checks if the shape contains the planar point defined by (x,y).
64 */
65 public abstract boolean contains(double x, double y);
66
67 /**
68 * Checks if the shape contains the given point.
69 */
70 public abstract boolean contains(java.awt.geom.Point2D p);
71
72 /**
73 * get the distance of the shape to the given point, or the distance of
74 * point to the frontier of the shape in the case of a plain shape.
75 */
76 public abstract double getDistance(java.awt.geom.Point2D p);
77
78 /**
79 * get the distance of the shape to the given point, specified by x and y,
80 * or the distance of point to the frontier of the shape in the case of a
81 * plain (i.e. fillable) shape.
82 */
83 public abstract double getDistance(double x, double y);
84
85 /**
86 * Returns true if the shape is bounded, that is if we can draw a finite
87 * rectangle enclosing the shape. For example, a straight line or a parabola
88 * are not bounded.
89 */
90 public abstract boolean isBounded();
91
92 /**
93 * Returns true if the shape does not contain any point. This is the case
94 * for example for PointSet2D without any point.
95 *
96 * @return true if the shape does not contain any point.
97 */
98 public abstract boolean isEmpty();
99
100 /**
101 * Returns the bounding box of the shape.
102 *
103 * @return the bounding box of the shape.
104 */
105 public abstract Box2D getBoundingBox();
106
107 /**
108 * Clip the shape with the given box, and returns a new shape. The box must
109 * be bounded.
110 *
111 * @param box the clipping box
112 * @return the clipped shape
113 */
114 public abstract Shape2D clip(Box2D box);
115
116 /**
117 * Transforms the shape by an affine transform. Subclasses may override the
118 * type of returned shape.
119 *
120 * @param trans an affine transform
121 * @return the transformed shape
122 */
123 public abstract Shape2D transform(AffineTransform2D trans);
124
125 /**
126 * Draw the shape on the given graphics.
127 * If the shape is empty, nothing is drawn.
128 * If the shape is unbounded, an exception is thrown.
129 */
130 public abstract void draw(Graphics2D g2);
131
132 }