When drawing Rogue Wave® JViews
graphic objects you often need to validate the presence of a point
inside the object. The ShadowEllipse
example
implements the contains
method. It returns true
if the specified point is located within the main
ellipse. All the coordinates are specified relative to the coordinate
system of the view.
/**
* Tests whether a point lies within the shape of the object.
* This method will be called when you click the object.
* @param p The point where user clicks in the object’s coordinate system.
* @param tp Same point as ’p’ but transformed by transformer ’t’
* @param t The transformer used to draw the object.
*/
public boolean contains(IlvPoint p, IlvPoint tp,
IlvTransformer t)
{
// Allow the user to click the main ellipse
// but not on the shadow ellipse.
// This method will return true when the clicked point is
// on the main ellipse.
// First compute the bounding rectangle of the main
// ellipse in the view coordinate system, just like in the
// method draw.
IlvRect r = new IlvRect(drawrect);
if (t != null)
t.apply(r);
int thick = thickness;
if ((r.width <= thick) || (r.height <= thick))
thick = (int)Math.min(r.width, r.height);
r.width -= thick;
r.height -= thick;
// Then call PointInFilledArc that will return true
// if the point is in the ellipse. ’r’ and ’tp’ are both
// in the view coordinate system.
return IlvArcUtil.PointInFilledArc(tp, r, (float)0, (float)360);
}