in graphLayout/jetbrains.mps.graphLayout.orthogonalLayout/source_gen/jetbrains/mps/graphLayout/internal/flowOrthogonalLayout/OrthogonalRectFlowLayouter.java [118:181]
public GraphLayout getFlowLayout(EmbeddedGraph embeddedGraph, Set<Edge> edgesToBeStraight, Map<Node, List<Node>> nodeMap, Map<Node, Dimension> nodeSizes, EdgesHistoryManager historyManager) {
EmbeddedGraphModifier modifier = new EmbeddedGraphModifier(embeddedGraph);
Graph graph = embeddedGraph.getGraph();
List<Edge> oldEdges = ListSequence.fromList(new ArrayList<Edge>());
ListSequence.fromList(oldEdges).addSequence(ListSequence.fromList(graph.getEdges()));
Map<Dart, Integer> bends = MapSequence.fromMap(new HashMap<Dart, Integer>());
Map<Dart, Integer> angles = MapSequence.fromMap(new HashMap<Dart, Integer>());
OrthogonalRepresentation.getRepresentation(embeddedGraph, edgesToBeStraight, bends, angles);
if (OrthogonalRectFlowLayouter.SHOW_lOG > 0) {
System.out.println("bends:");
System.out.println(bends);
}
OrthogonalRepresentation.replaceBendsByNodes(embeddedGraph, bends, angles);
Map<Dart, Direction2D> directions = OrthogonalRepresentation.getDirections(embeddedGraph, angles);
modifier.setDartDirections(directions);
Map<Edge, Edge> modifiedEdges = modifier.makeRectanglesForNodes(nodeMap);
for (Edge edge : SetSequence.fromSet(MapSequence.fromMap(modifiedEdges).keySet())) {
Edge newEdge = MapSequence.fromMap(modifiedEdges).get(edge);
if (MapSequence.fromMap(modifiedEdges).containsKey(newEdge)) {
MapSequence.fromMap(modifiedEdges).put(edge, MapSequence.fromMap(modifiedEdges).get(newEdge));
}
}
modifier.makeRectangularFaces();
modifier.makerInnerFaces();
Map<Edge, Integer> nodeBorderLengths = MapSequence.fromMap(new HashMap<Edge, Integer>());
for (Node node : SetSequence.fromSet(MapSequence.fromMap(nodeMap).keySet())) {
for (Dart dart : ListSequence.fromList(modifier.getNodeFace(node).getDarts())) {
Edge edge = dart.getEdge();
if (MapSequence.fromMap(directions).get(dart).isHorizontal()) {
MapSequence.fromMap(nodeBorderLengths).put(edge, MapSequence.fromMap(nodeSizes).get(node).width);
} else {
MapSequence.fromMap(nodeBorderLengths).put(edge, MapSequence.fromMap(nodeSizes).get(node).height);
}
}
}
Map<Edge, Integer> lengths = new EdgeLengthComputer().compute(embeddedGraph, directions, nodeBorderLengths);
Map<Node, Point> coordinates = new CoordinatePlacer(embeddedGraph, lengths, directions).getCoordinates();
GraphLayout nodesLayout = GraphLayoutFactory.createGraphLayout(graph);
for (Node node : SetSequence.fromSet(MapSequence.fromMap(nodeMap).keySet())) {
Node[] corners = modifier.getCornerNodes(node);
Rectangle rect = GeomUtil.getRectangle(MapSequence.fromMap(coordinates).get(corners[0]), MapSequence.fromMap(coordinates).get(corners[2]));
nodesLayout.setLayoutFor(node, rect);
}
for (Edge edge : ListSequence.fromList(oldEdges)) {
List<Edge> history = ListSequence.fromList(new LinkedList<Edge>());
for (Edge historyEdge : ListSequence.fromList(historyManager.getHistory(edge))) {
if (MapSequence.fromMap(modifiedEdges).containsKey(historyEdge)) {
ListSequence.fromList(history).addElement(MapSequence.fromMap(modifiedEdges).get(historyEdge));
} else {
ListSequence.fromList(history).addElement(historyEdge);
}
}
List<Point> edgeLayout = ListSequence.fromList(new ArrayList<Point>());
Node cur = ListSequence.fromList(history).first().getSource();
ListSequence.fromList(edgeLayout).addElement(MapSequence.fromMap(coordinates).get(cur));
for (Edge historyEdge : ListSequence.fromList(history)) {
Node next = historyEdge.getOpposite(cur);
ListSequence.fromList(edgeLayout).addElement(MapSequence.fromMap(coordinates).get(next));
cur = next;
}
nodesLayout.setLayoutFor(edge, edgeLayout);
}
return nodesLayout;
}