/*
* @(#)ChopEllipseConnector.java
*
* Copyright (c) 1996-2010 The authors and contributors of JHotDraw.
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.draw.connector;
import org.jhotdraw.geom.Geom;
import org.jhotdraw.draw.*;
import java.awt.*;
import java.awt.geom.*;
import static org.jhotdraw.draw.AttributeKeys.*;
/**
* A {@link Connector} which locates a connection point at the bounds
* of any figure which has an elliptic shape, such as {@link org.jhotdraw.draw.EllipseFigure}.
* <p>
*
* @author Werner Randelshofer
* @version $Id$
*/
public class ChopEllipseConnector extends ChopRectangleConnector {
private static final long serialVersionUID = 1L;
/**
* Only used for DOMStorable input.
*/
public ChopEllipseConnector() {
}
public ChopEllipseConnector(Figure owner) {
super(owner);
}
private Color getStrokeColor(Figure f) {
return f.get(STROKE_COLOR);
}
private float getStrokeWidth(Figure f) {
Double w = f.get(STROKE_WIDTH);
return (w == null) ? 1f : w.floatValue();
}
@Override
protected Point2D.Double chop(Figure target, Point2D.Double from) {
target = getConnectorTarget(target);
Rectangle2D.Double r = target.getBounds();
if (getStrokeColor(target) != null) {
double grow;
switch (target.get(STROKE_PLACEMENT)) {
case CENTER:
default :
grow = getStrokeTotalWidth(target,1.0) / 2d;
break;
case OUTSIDE :
grow = getStrokeTotalWidth(target, 1.0);
break;
case INSIDE :
grow = 0f;
break;
}
Geom.grow(r, grow, grow);
}
double angle = Geom.pointToAngle(r, from);
return Geom.ovalAngleToPoint(r, angle);
}
}