in graphLayout/jetbrains.mps.graphLayout.orthogonalLayout/source_gen/jetbrains/mps/graphLayout/internal/flowOrthogonalLayout/TestPullingLabels.java [129:184]
public GraphLayout pullGraphLayout(GraphLayout layout, Direction2D direction, int shift, Point center, Map<Edge, Integer> labeledSegments, boolean alongEdge) {
GraphLayout pulledLayout = GraphLayoutFactory.createGraphLayout(layout.getGraph());
Set<Node> unpulledNodes = SetSequence.fromSet(new HashSet<Node>());
for (INode node : SetSequence.fromSet(MapSequence.fromMap(layout.getNodeLayout()).keySet())) {
Node myNode = ((Node) node);
Rectangle nodeRect = layout.getNodeLayout(myNode);
Rectangle pulledRect = pullRectangle(nodeRect, center, direction, shift, alongEdge);
if (pulledRect.equals(nodeRect)) {
SetSequence.fromSet(unpulledNodes).addElement(myNode);
}
pulledLayout.setLayoutFor(node, pulledRect);
}
for (IEdge edge : SetSequence.fromSet(MapSequence.fromMap(layout.getEdgeLayout()).keySet())) {
Edge myEdge = ((Edge) edge);
List<Point> path = layout.getEdgeLayout(edge);
List<Point> pulledPath = ListSequence.fromList(new LinkedList<Point>());
Set<Integer> pulled = SetSequence.fromSet(new HashSet<Integer>());
int index = 0;
for (Point point : ListSequence.fromList(path)) {
if (point == ListSequence.fromList(path).first() || point == ListSequence.fromList(path).last()) {
Node node = myEdge.getSource();
if (point == ListSequence.fromList(path).last()) {
node = myEdge.getTarget();
}
if (SetSequence.fromSet(unpulledNodes).contains(node)) {
ListSequence.fromList(pulledPath).addElement(new Point(point));
} else {
SetSequence.fromSet(pulled).addElement(index);
int dx = direction.dx() * shift;
int dy = direction.dy() * shift;
ListSequence.fromList(pulledPath).addElement(new Point(point.x + dx, point.y + dy));
}
} else {
Point newPoint = pullPoint(point, center, direction, shift);
if (!(newPoint.equals(point))) {
SetSequence.fromSet(pulled).addElement(index);
}
ListSequence.fromList(pulledPath).addElement(newPoint);
}
index++;
}
if (MapSequence.fromMap(labeledSegments).containsKey(myEdge)) {
Rectangle rect = layout.getLabelLayout(edge);
int seg = MapSequence.fromMap(labeledSegments).get(myEdge);
if (SetSequence.fromSet(pulled).contains(seg) || SetSequence.fromSet(pulled).contains(seg + 1)) {
int dx = direction.dx() * shift;
int dy = direction.dy() * shift;
pulledLayout.setLabelLayout(myEdge, new Rectangle(rect.x + dx, rect.y + dy, rect.width, rect.height));
} else {
pulledLayout.setLabelLayout(myEdge, new Rectangle(rect));
}
}
pulledLayout.setLayoutFor(edge, pulledPath);
}
return pulledLayout;
}