in graphLayout/jetbrains.mps.graphLayout.orthogonalLayout/source_gen/jetbrains/mps/graphLayout/flowOrthogonalLayout/EmbeddedGraphModifier.java [377:429]
public void makeFaceRectangle(Face face) {
Dart badDart = null;
List<Dart> darts = face.getDarts();
Iterator<Dart> dartItr = ListSequence.fromList(darts).iterator();
Dart prev = ListSequence.fromList(darts).last();
int sum = 0;
while (dartItr.hasNext() && badDart == null) {
Dart cur = dartItr.next();
int turn = MapSequence.fromMap(myDartDirections).get(prev).getTurn(MapSequence.fromMap(myDartDirections).get(cur));
if (turn < 0) {
badDart = prev;
sum = turn;
}
prev = cur;
}
while (sum != 1) {
if (!(dartItr.hasNext())) {
dartItr = ListSequence.fromList(darts).iterator();
}
Dart cur = dartItr.next();
sum += MapSequence.fromMap(myDartDirections).get(prev).getTurn(MapSequence.fromMap(myDartDirections).get(cur));
prev = cur;
}
if (badDart != null) {
List<Edge> newEdges = ListSequence.fromList(new ArrayList<Edge>());
Dart prevOpposite = myEmbeddedGraph.getOpposite(prev);
Node newNode = myEmbeddedGraph.splitEdge(prev.getEdge(), newEdges);
for (Edge newEdge : ListSequence.fromList(newEdges)) {
for (Dart newDart : ListSequence.fromList(myEmbeddedGraph.getDarts(newEdge))) {
if (myEmbeddedGraph.getFace(newDart) == face) {
MapSequence.fromMap(myDartDirections).put(newDart, MapSequence.fromMap(myDartDirections).get(prev));
} else {
MapSequence.fromMap(myDartDirections).put(newDart, MapSequence.fromMap(myDartDirections).get(prev).opposite());
}
}
}
MapSequence.fromMap(myDartDirections).removeKey(prev);
MapSequence.fromMap(myDartDirections).removeKey(prevOpposite);
Node badCorner = badDart.getTarget();
Edge splitEdge = myGraph.connect(badCorner, newNode);
List<Face> newFaces = myEmbeddedGraph.splitFace(face, ListSequence.fromListAndArray(new ArrayList<Edge>(), splitEdge), badCorner, newNode);
for (Dart dart : ListSequence.fromList(myEmbeddedGraph.getDarts(splitEdge))) {
if (dart.getSource() == badCorner) {
MapSequence.fromMap(myDartDirections).put(dart, MapSequence.fromMap(myDartDirections).get(badDart));
} else {
MapSequence.fromMap(myDartDirections).put(dart, MapSequence.fromMap(myDartDirections).get(badDart).opposite());
}
}
for (Face newFace : ListSequence.fromList(newFaces)) {
makeFaceRectangle(newFace);
}
}
}