перекрывающиеся края в DirectedWeightedGraph в JGraphT с использованием mxCircleLayout

Выполнение приведенного ниже кода на уже построенном графе (с использованием ArbEdge.class в качестве ребер)

    Graph<String, ArbEdge> graph = new DefaultDirectedWeightedGraph<>(ArbEdge.class);

    public void pngGraph() {

        JGraphXAdapter<String, ArbEdge> graphAdapter =
                new JGraphXAdapter<String, ArbEdge>(this.getGraph());

        mxIGraphLayout layout = new mxCircleLayout(graphAdapter);
        // mxParallelEdgeLayout layout = new mxParallelEdgeLayout(graphAdapter);
        layout.execute(graphAdapter.getDefaultParent());

        BufferedImage image =
                mxCellRenderer.createBufferedImage(graphAdapter, null, 2.5, Color.WHITE, true, null);
        try {
            ImageIO.write(image, "PNG", imgFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

дает мне этот график: DirectedWeightedGraph с mxCircleLayout

Чтобы сделать перекрывающийся текст на краях читаемым, я попробовал mxParallelEdgeLayout layout = new mxParallelEdgeLayout(graphAdapter);, как это было предложено в Перекрытие краев с JGraphx

но это навело меня на подозрение

java.lang.IllegalArgumentException: image == null!
    at java.desktop/javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925) ~[na:na]
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ⇢ HTTP GET "/png" [ExceptionHandlingWebHandler]

который указывает на строку ImageIO.write(image, "PNG", imgFile); .. которая отлично работает с использованием mxCircleLayout.

Как сделать края удобочитаемыми для человека?

Почему ParallelEdgeLayout нарушает работу ImageIO.write?


person Gewure    schedule 03.12.2020    source источник
comment
Проблема, по-видимому, вызвана компонентом рисования, который обрабатывается JGraphX, который является библиотекой, отличной от JGraphT (JGraphT предоставляет структуры данных и алгоритмы, но не возможности рисования). Я бы рекомендовал пометить это как проблему JGraphX, что повысит вероятность того, что кто-то сможет вам помочь.   -  person Joris Kinable    schedule 04.12.2020