public static void getRepresentation()

in graphLayout/jetbrains.mps.graphLayout.orthogonalLayout/source_gen/jetbrains/mps/graphLayout/internal/flowOrthogonalLayout/OrthogonalRepresentationWithNodesProcessing.java [30:116]


  public static void getRepresentation(EmbeddedGraph embeddedGraph, Iterable<Face> nodeFaces, Map<Dart, Integer> bends, Map<Dart, Integer> angles) {
    Graph graph = embeddedGraph.getGraph();
    Graph network = new Graph();
    Node center = network.createNode();
    Map<Edge, Integer> low = MapSequence.fromMap(new HashMap<Edge, Integer>());
    Map<Edge, Integer> capacity = MapSequence.fromMap(new HashMap<Edge, Integer>());
    Map<Edge, Integer> cost = MapSequence.fromMap(new HashMap<Edge, Integer>());
    Map<Node, Node> nodeMap = MapSequence.fromMap(new HashMap<Node, Node>());
    for (Node node : ListSequence.fromList(graph.getNodes())) {
      Node networkNode = network.createNode();
      MapSequence.fromMap(nodeMap).put(node, networkNode);
      Edge edge;
      edge = network.connect(center, networkNode);
      MapSequence.fromMap(low).put(edge, 4);
      MapSequence.fromMap(capacity).put(edge, MapSequence.fromMap(low).get(edge));
      MapSequence.fromMap(cost).put(edge, 0);
    }
    Map<Face, Node> faceMap = MapSequence.fromMap(new HashMap<Face, Node>());
    for (Face face : ListSequence.fromList(embeddedGraph.getFaces())) {
      Node node = network.createNode();
      MapSequence.fromMap(faceMap).put(face, node);
      Edge edge;
      edge = network.connect(node, center);
      if (embeddedGraph.isOuterFace(face)) {
        MapSequence.fromMap(low).put(edge, 2 * ListSequence.fromList(face.getDarts()).count() + 4);
      } else {
        MapSequence.fromMap(low).put(edge, 2 * ListSequence.fromList(face.getDarts()).count() - 4);
      }
      MapSequence.fromMap(capacity).put(edge, MapSequence.fromMap(low).get(edge));
      MapSequence.fromMap(cost).put(edge, 0);
    }
    Map<Dart, Edge> dartBendMap = MapSequence.fromMap(new HashMap<Dart, Edge>());
    Map<Dart, Edge> dartAngleMap = MapSequence.fromMap(new HashMap<Dart, Edge>());
    for (Face face : ListSequence.fromList(embeddedGraph.getFaces())) {
      Node faceNode = MapSequence.fromMap(faceMap).get(face);
      boolean isNodeFace = Sequence.fromIterable(nodeFaces).contains(face);
      for (Dart dart : ListSequence.fromList(face.getDarts())) {
        Edge edge;
        edge = network.connect(MapSequence.fromMap(nodeMap).get(dart.getSource()), faceNode);
        MapSequence.fromMap(dartAngleMap).put(dart, edge);
        MapSequence.fromMap(low).put(edge, 1);
        if (isNodeFace) {
          MapSequence.fromMap(capacity).put(edge, 2);
        } else {
          MapSequence.fromMap(capacity).put(edge, 4);
        }
        MapSequence.fromMap(cost).put(edge, 0);
        List<Face> faces = embeddedGraph.getAdjacentFaces(dart.getEdge());
        Face oppositeFace;
        if (ListSequence.fromList(faces).getElement(0) == face) {
          oppositeFace = ListSequence.fromList(faces).getElement(1);
        } else {
          oppositeFace = ListSequence.fromList(faces).getElement(0);
        }
        if (Sequence.fromIterable(nodeFaces).contains(oppositeFace)) {
          continue;
        }
        Node oppositeFaceNode = MapSequence.fromMap(faceMap).get(oppositeFace);
        edge = network.connect(faceNode, oppositeFaceNode);
        MapSequence.fromMap(dartBendMap).put(dart, edge);
        MapSequence.fromMap(low).put(edge, 0);
        MapSequence.fromMap(capacity).put(edge, Integer.MAX_VALUE / 2);
        if (isNodeFace) {
          MapSequence.fromMap(cost).put(edge, 1);
        } else {
          MapSequence.fromMap(cost).put(edge, 10);
        }
      }
    }
    if (OrthogonalRepresentationWithNodesProcessing.SHOW_INFO > 0) {
      System.out.println("Constructed network:");
      for (Node node : ListSequence.fromList(graph.getNodes())) {
        System.out.println("for node " + node + ": " + MapSequence.fromMap(nodeMap).get(node));
      }
      for (Face face : ListSequence.fromList(embeddedGraph.getFaces())) {
        System.out.println("for face " + face + ": " + MapSequence.fromMap(faceMap).get(face));
      }
      for (Edge edge : ListSequence.fromList(network.getEdges())) {
        System.out.println("edge " + edge + ": low = " + MapSequence.fromMap(low).get(edge) + ", cap = " + MapSequence.fromMap(capacity).get(edge) + ", cost = " + MapSequence.fromMap(cost).get(edge));
      }
    }
    Map<Edge, Integer> circulation = MinCostCirculation.getCirculation(network, low, capacity, cost);
    for (Dart dart : SetSequence.fromSet(MapSequence.fromMap(dartBendMap).keySet())) {
      MapSequence.fromMap(bends).put(dart, MapSequence.fromMap(circulation).get(MapSequence.fromMap(dartBendMap).get(dart)));
      MapSequence.fromMap(angles).put(dart, MapSequence.fromMap(circulation).get(MapSequence.fromMap(dartAngleMap).get(dart)));
    }
  }