in diagram/src/main/java/jetbrains/jetpad/projectional/diagram/algorithm/orthogonal/OrthogonalRouteWithObstacles.java [178:206]
private void removeForbiddenSegment(Segment fs) {
for (MyLine line: mySegmentsMap.keySet()) {
if (isVertical(fs) && line.ver && fitsMinDist(fs.start.x, line.coord)) {
List<Segment> newSegments = new ArrayList<>();
for (Segment s: mySegmentsMap.get(line)) {
Vector vs = getYVector(s);
ArrayList<Vector> list = new ArrayList<>();
list.add(vs);
Vector vfs = getYVector(fs);
for (Vector v: FreeSegmentsUtil.removeSegment(list, vfs)) {
newSegments.add(new Segment(new Vector(s.start.x, v.x), new Vector(s.start.x, v.y)));
}
}
mySegmentsMap.put(line, newSegments);
} else if (!isVertical(fs) && !line.ver && fitsMinDist(fs.start.y, line.coord)) {
List<Segment> newSegments = new ArrayList<>();
for (Segment s: mySegmentsMap.get(line)) {
Vector vs = getXVector(s);
ArrayList<Vector> list = new ArrayList<>();
list.add(vs);
Vector vfs = getXVector(fs);
for (Vector v: FreeSegmentsUtil.removeSegment(list, vfs)) {
newSegments.add(new Segment(new Vector(v.x, s.start.y), new Vector(v.y, s.start.y)));
}
}
mySegmentsMap.put(line, newSegments);
}
}
}