Избегайте перекрытия краев разных конечных ячеек в JGraphX - PullRequest
0 голосов
/ 17 июня 2020

Я хотел бы знать, существует ли в JGraphX ​​макет, который избегает перекрытия двух ребер, которые начинаются в одной и той же ячейке вершины, но заканчиваются в разных ячейках? Я нашел этот пост- Перекрытие рёбер с помощью JGraphx , который рекомендует использовать mxParallelEdgeLayout, но этот макет работает только для рёбер, имеющих одинаковую начальную и конечную вершины. Я пробовал другой макет, например mxOrthogonalLayout, но он тоже не работает. Кто-нибудь знает способ трассировки ребер, которые не перекрываются с другими вершинами и ребрами? Кроме того, мне нужны ячейки вершин в фиксированном месте, поэтому я не могу использовать макет, который изменяет местоположение вершин. Заранее спасибо. Это пример кода с перекрытием:


import com.mxgraph.layout.mxParallelEdgeLayout;
import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;

import javax.swing.*;

public class HelloWorld extends JFrame
{

    /**
     * 
     */
    private static final long serialVersionUID = -2707712944901661771L;

    public HelloWorld()
    {
        super("Hello Earth Planet!");

        mxGraph graph = new mxGraph();
        Object parent = graph.getDefaultParent();

        graph.getModel().beginUpdate();
        try
        {
            Object v1 = graph.insertVertex(parent, null, "Hello", 20, 20, 80,
                    30);
            Object v2 = graph.insertVertex(parent, null, "Earth", 240, 20,
                    80, 30);
            Object v3 = graph.insertVertex(parent, null, "Planet!", 480, 20,
                    80, 30);

            Object ed1 = graph.insertEdge(parent, "a", "Edge1", v1, v2);
            Object ed2 = graph.insertEdge(parent, "b", "Edge2", v1, v3);

            mxParallelEdgeLayout layout = new mxParallelEdgeLayout(graph, 30);
            layout.execute(parent);

        }
        finally
        {
            graph.setCellsMovable(false);
            graph.setCellsEditable(false);
            graph.setCellsResizable(false);
            graph.setVertexLabelsMovable(false);
            graph.setGridEnabled(false);
            graph.setCellsCloneable(false);
            graph.setCellsDeletable(false);
            graph.setCellsResizable(false);
            graph.setCellsBendable(false);

            graph.setConnectableEdges(false);
            graph.setEdgeLabelsMovable(false);
            graph.setAllowDanglingEdges(false);

            graph.setCellsSelectable(true);
            graph.setCellsLocked(true);

            graph.setCellsDisconnectable(true);

            graph.getModel().endUpdate();
        }

        mxGraphComponent graphComponent = new mxGraphComponent(graph);

        getContentPane().add(graphComponent);
    }

    public static void main(String[] args)
    {
        HelloWorld frame = new HelloWorld();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 320);
        frame.setVisible(true);
    }
}```
...