Java Reference

In-Depth Information

How It Works

The circle is generated by the button down point defining the center and the cursor position while drag-

ging as a point on the circumference. A circle is a special case of an ellipse, and a shape that is an el-

lipse is defined by the top-left corner and the width and height of the rectangle that encloses it. The

distance()
method that is defined in the
Point2D
class calculates the radius, and this value is used to

calculate the coordinates of the top-left corner of the enclosing rectangle, which is stored in
position
.

The width and height of the rectangle enclosing the circle are just twice the radius value, so the circle is

stored as an
Ellipse2D.Double
object at
origin
with a width and height as twice the radius.

Because of the way a circle is drawn, the
modify()
method has to recalculate the
position
coordinates

as well as the width and height. The other methods in the
Element.Circle
class are much the same as

you have seen previously.

Drawing Curves

Curves are a bit trickier to deal with than the other shapes. You want to be able to create a freehand curve

by dragging the mouse, so that as the cursor moves the curve extends. This needs to be reflected in how you

define the
Element.Curve
class. Let's first consider how the process of drawing a curve is going to work

and define the
Element.Curve
class based on that.

The
QuadCurve2D
and
CubicCurve2D
classes are not very convenient or easy to use here. These are ap-

plicable when you have curves that you define by a series of points together with control points that define

tangents to the curve. A curve in Sketcher is going to be entered freehand, and the data that you get is a

series of points that are relatively close together, but you don't know ahead of time how many there are go-

ing to be; as long as the mouse is being dragged you collect more points. You won't have any control points

either. This gives us a hint as to an approach you could adopt for creating a curve that keeps it as simple as

possible.
Figure 19-28
illustrates the approach you could take.

Successive points that define the freehand curve are quite close together, so you could create a visual

representation of the curve by joining the points to form a series of connected line segments. Because the

lengths of the line segments are short, it should look like a reasonable curve.