in graphLayout/jetbrains.mps.graphLayout.planarization/source_gen/jetbrains/mps/graphLayout/planarGraph/EmbeddedGraph.java [124:181]
public List<Face> splitFace(Face face, List<Edge> path, Node start, Node end) {
Graph originalGraph = this.getGraph();
Face faceSToE = new Face(originalGraph);
Face faceEToS = new Face(originalGraph);
List<Dart> darts = face.getDarts();
int posStart = -1;
int posEnd = -1;
for (int i = 0; i < ListSequence.fromList(darts).count(); i++) {
Dart cur = ListSequence.fromList(darts).getElement(i);
if (cur.getSource() == start) {
posStart = i;
}
if (cur.getSource() == end) {
posEnd = i;
}
}
Face succ;
Face split;
int begSucc;
int endSucc;
if (posEnd > posStart) {
succ = faceEToS;
split = faceSToE;
begSucc = posStart;
endSucc = posEnd;
} else {
succ = faceSToE;
split = faceEToS;
begSucc = posEnd;
endSucc = posStart;
}
for (int i = begSucc; i < endSucc; i++) {
succ.addLast(ListSequence.fromList(darts).getElement(i));
}
for (int i = endSucc; i < ListSequence.fromList(darts).count(); i++) {
split.addLast(ListSequence.fromList(darts).getElement(i));
}
for (int i = 0; i < begSucc; i++) {
split.addLast(ListSequence.fromList(darts).getElement(i));
}
Node cur = start;
for (Edge edge : ListSequence.fromList(path)) {
faceSToE.addLast(new Dart(edge, cur));
cur = edge.getOpposite(cur);
}
cur = end;
for (Edge edge : ListSequence.fromList(path).reversedList()) {
faceEToS.addLast(new Dart(edge, cur));
cur = edge.getOpposite(cur);
}
this.removeFace(face);
addFace(faceEToS);
addFace(faceSToE);
if (this.isOuterFace(face)) {
this.setOuterFace(split);
}
return ListSequence.fromListAndArray(new ArrayList<Face>(), faceSToE, faceEToS);
}