public GraphLayout pullGraphLayout()

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;
  }