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:
parent
5ed7094e1f
commit
d0fe54026d
@ -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()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user