1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-11-22 21:15:09 +00:00

Fix broken switch/case arrows when using kill/detach

This commit is contained in:
Arnaud Roques 2021-09-20 18:38:08 +02:00
parent 5ed7094e1f
commit d0fe54026d

View File

@ -280,27 +280,36 @@ public class FtileSwitchWithManyLinks extends FtileSwitchWithDiamonds {
public Ftile addLinks(StringBounder stringBounder) { public Ftile addLinks(StringBounder stringBounder) {
final List<Connection> conns = new ArrayList<>(); final List<Connection> conns = new ArrayList<>();
addIngoingArrows(conns);
addOutgoingArrows(stringBounder, conns);
return FtileUtils.addConnection(this, conns);
}
private void addIngoingArrows(final List<Connection> conns) {
conns.add(new ConnectionHorizontalThenVertical(tiles.get(0), branches.get(0))); conns.add(new ConnectionHorizontalThenVertical(tiles.get(0), branches.get(0)));
conns.add(new ConnectionHorizontalThenVertical(tiles.get(tiles.size() - 1), branches.get(tiles.size() - 1))); conns.add(new ConnectionHorizontalThenVertical(tiles.get(tiles.size() - 1), branches.get(tiles.size() - 1)));
for (int i = 1; i < tiles.size() - 1; i++) {
final int first = getFirst(stringBounder);
final int last = getLast(stringBounder);
if (first < tiles.size())
conns.add(new ConnectionVerticalThenHorizontal(tiles.get(first)));
if (last > 0)
conns.add(new ConnectionVerticalThenHorizontal(tiles.get(last)));
for (int i = first + 1; i < last; i++) {
final Ftile tile = tiles.get(i); final Ftile tile = tiles.get(i);
conns.add(new ConnectionVerticalTop(tile, branches.get(i))); conns.add(new ConnectionVerticalTop(tile, branches.get(i)));
}
}
private void addOutgoingArrows(StringBounder stringBounder, final List<Connection> conns) {
final int firstOutgoingArrow = getFirstOutgoingArrow(stringBounder);
final int lastOutgoingArrow = getLastOutgoingArrow(stringBounder);
if (firstOutgoingArrow < tiles.size())
conns.add(new ConnectionVerticalThenHorizontal(tiles.get(firstOutgoingArrow)));
if (lastOutgoingArrow > 0)
conns.add(new ConnectionVerticalThenHorizontal(tiles.get(lastOutgoingArrow)));
for (int i = firstOutgoingArrow + 1; i < lastOutgoingArrow; i++) {
final Ftile tile = tiles.get(i);
if (tile.calculateDimension(stringBounder).hasPointOut()) { if (tile.calculateDimension(stringBounder).hasPointOut()) {
conns.add(new ConnectionVerticalBottom(tile)); conns.add(new ConnectionVerticalBottom(tile));
} }
} }
return FtileUtils.addConnection(this, conns);
} }
private int getFirst(StringBounder stringBounder) { private int getFirstOutgoingArrow(StringBounder stringBounder) {
for (int i = 0; i < tiles.size() - 1; i++) { for (int i = 0; i < tiles.size() - 1; i++) {
final Ftile tile = tiles.get(i); final Ftile tile = tiles.get(i);
if (tile.calculateDimension(stringBounder).hasPointOut()) { if (tile.calculateDimension(stringBounder).hasPointOut()) {
@ -310,7 +319,7 @@ public class FtileSwitchWithManyLinks extends FtileSwitchWithDiamonds {
return tiles.size(); return tiles.size();
} }
private int getLast(StringBounder stringBounder) { private int getLastOutgoingArrow(StringBounder stringBounder) {
for (int i = tiles.size() - 1; i >= 0; i--) { for (int i = tiles.size() - 1; i >= 0; i--) {
final Ftile tile = tiles.get(i); final Ftile tile = tiles.get(i);
if (tile.calculateDimension(stringBounder).hasPointOut()) { if (tile.calculateDimension(stringBounder).hasPointOut()) {