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.
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.