This change addresses the trivial cases. If multiple bends are required
we still get degenerated lines if the terminal is at the corner of the
bounds.
gitlab #495
Change-Id: Iac5d139ba805955c38d4b4e4906eda4795871a66
(cherry picked from commit
1aedad590d55facc132e458a578064300bac833c)
transientLines.clear();
}
transientLines.clear();
}
+ protected void removeRouteTerminalsFromRouteLines() {
+ for(RouteLine line : lines) {
+ line.removeRouteTerminals();
+ }
+ }
+
/**
* Rotates given terminal clockwise by given amount
* (also negative numbers are allowed).
/**
* Rotates given terminal clockwise by given amount
* (also negative numbers are allowed).
public void update() {
needsUpdate = false;
removeTransientRouteLines();
public void update() {
needsUpdate = false;
removeTransientRouteLines();
+ removeRouteTerminalsFromRouteLines();
+ public void removeRouteTerminals() {
+ points.removeIf(p -> p instanceof RouteTerminal);
+ }
+
public RouteTerminal getTerminal() {
return terminal;
}
public RouteTerminal getTerminal() {
return terminal;
}
boolean routeLineDoesNotIntersectTerminal;
double linePosition = line.position;
if(line.isHorizontal) {
boolean routeLineDoesNotIntersectTerminal;
double linePosition = line.position;
if(line.isHorizontal) {
+ if (linePosition == y) {
+ // direct route to terminal
+ line.addPoint(this);
+ return;
+ }
lineDir = linePosition < y ? 3 : 1;
routeLineDoesNotIntersectTerminal = linePosition <= minY || linePosition >= maxY
|| boundingBoxesIntersect /* we ignore intersection in this case */;
}
else {
lineDir = linePosition < y ? 3 : 1;
routeLineDoesNotIntersectTerminal = linePosition <= minY || linePosition >= maxY
|| boundingBoxesIntersect /* we ignore intersection in this case */;
}
else {
+ if (linePosition == x) {
+ // direct route to terminal
+ line.addPoint(this);
+ return;
+ }
lineDir = linePosition < x ? 2 : 0;
routeLineDoesNotIntersectTerminal = linePosition <= minX || linePosition >= maxX
|| boundingBoxesIntersect /* we ignore intersection in this case */;
}
// We can route the connection directly to the right direction
lineDir = linePosition < x ? 2 : 0;
routeLineDoesNotIntersectTerminal = linePosition <= minX || linePosition >= maxX
|| boundingBoxesIntersect /* we ignore intersection in this case */;
}
// We can route the connection directly to the right direction
- if(routeLineDoesNotIntersectTerminal &&
+ if((routeLineDoesNotIntersectTerminal ||
+ (line.isHorizontal && (x == minX || x == maxX)) || // already on the top/bottom edge
+ (!line.isHorizontal && (y == minY || y == maxY)) // already on the left/right edge
+ ) &&
Directions.isAllowed(allowedDirections, lineDir)) {
RouteLine line0 = createLine0(lineDir);
new RouteLink(line0, line);
Directions.isAllowed(allowedDirections, lineDir)) {
RouteLine line0 = createLine0(lineDir);
new RouteLink(line0, line);