import gnu.trove.map.hash.THashMap;
+import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.io.PrintStream;
import java.io.Serializable;
private ILineEndStyle style;
private ILineEndStyle dynamicStyle;
private boolean routeToBounds;
+ private RouteTerminalPosition dynamicPosition;
RouteLine line;
- RouteTerminal(double x, double y, double minX, double minY,
+ public RouteTerminal(double x, double y, double minX, double minY,
double maxX, double maxY, int allowedDirections,
boolean routeToBounds,
- ILineEndStyle style) {
+ ILineEndStyle style, RouteTerminalPosition dynamicPosition) {
super(x, y);
this.minX = minX;
this.minY = minY;
this.allowedDirections = allowedDirections;
this.routeToBounds = routeToBounds;
this.style = style;
+ this.dynamicPosition = dynamicPosition;
}
-
+
@Override
public void setData(Object data) {
this.data = data;
* adding necessary transient route lines.
* @param cache
*/
- void route(ArrayList<RouteLine> lines, IntervalCache cache, boolean boundingBoxesIntersect) {
+ protected void route(ArrayList<RouteLine> lines, IntervalCache cache, boolean boundingBoxesIntersect) {
if(routeToBounds) {
int lineDir;
boolean routeLineDoesNotIntersectTerminal;
return;
}
else {
- line.addPoint(this);
+ if (!line.getPoints().contains(this))
+ line.addPoint(this);
Interval interval = cache.get(line);
if(line.isHorizontal) {
if(interval.min < minX)
}
}
- private RouteLine createLine0(int dir) {
+ protected RouteLine createLine0(int dir) {
RouteLine line0 = (dir&1) == 0
? new RouteLine(true, y)
: new RouteLine(false, x)
}
}
- RouteTerminal copy(THashMap<Object, Object> map) {
+ public RouteTerminal copy(THashMap<Object, Object> map) {
RouteTerminal copy = (RouteTerminal)map.get(this);
if(copy == null) {
copy = new RouteTerminal(x, y, minX, minY, maxX, maxY,
- allowedDirections, routeToBounds, style);
+ allowedDirections, routeToBounds, style, dynamicPosition);
copy.setDynamicStyle(dynamicStyle);
map.put(this, copy);
copy.data = data;
return line;
}
+ public void setLine(RouteLine line) {
+ this.line = line;
+ }
+
public void setMinX(double minX) {
this.minX = minX;
}
public void setDynamicStyle(ILineEndStyle dynamicStyle) {
this.dynamicStyle = dynamicStyle;
}
+
+ public RouteTerminalPosition getDynamicPosition() {
+ return dynamicPosition;
+ }
+
+
+
+ public boolean updateDynamicPosition() {
+ boolean changed = false;
+ if (dynamicPosition != null) {
+ AffineTransform tr = dynamicPosition.getTransform();
+ if (tr != null) {
+ double nx = tr.getTranslateX();
+ changed |= x != nx;
+ x = nx;
+ double ny = tr.getTranslateY();
+ changed |= y != ny;
+ y = ny;
+ }
+ }
+ return changed;
+ }
+
}