Java jung graph: некоторые края пропускают стрелы

StackOverflow https://stackoverflow.com/questions/7824024

  •  27-10-2019
  •  | 
  •  

Вопрос

Я сделал график со StaticLayout и изменил формы Colors вершин. Я ничего не изменил, связанный с краями. Все края направлены, но некоторые из них пропускают стрелы! Как это могло случиться?

screenshot

Код визуализации графика:

    Layout<Object, String> layout = new StaticLayout<Object, String>(graphProvider.graphFor(market),new MarketVertexLayoutTransformer(market,panel.getMarketGraphPane().getSize() )) ;
    layout.setSize(panel.getMarketGraphPane().getSize());
    VisualizationViewer<Object,String> graphPanel = new VisualizationViewer<Object,String>(layout);
    graphPanel.getRenderContext().setVertexShapeTransformer(new MarketVertexShapeTransformer());
    graphPanel.getRenderContext().setVertexFillPaintTransformer(new MarketVertexColorTransformer());
    panel.getMarketGraphPane().add(graphPanel, BorderLayout.CENTER);
    panel.getMarketGraphPane().revalidate();

Графики есть

graph = new DirectedSparseGraph<Object, String>();

и края созданы так

   graph.addEdge(bundle.getGood()+"->"+transformation,bundle.getGood(),transformation);
   graph.addEdge(transformation+"->"+bundle.getGood(),transformation,bundle.getGood());

Спасибо

Это было полезно?

Решение

Размещение стрелки выполняется путем подразделения края до тех пор, пока в форме вершины не будет закрыт дальний сегмент, а затем перемещаясь назад. Если дальний конечная точка не находится внутри формы вершины при начале работы, должно быть брошено исключение. Вы выбрали правильное решение, которое состоит в том, чтобы сосредоточить свои вершины на исходном происхождении, прежде чем они будут переведены на место. Том Нельсон

Другие советы

Проблема вызвана Edgerenderer. Он запутался, если края соединены с верхним левым углом вершины. Когда я изменил свои формы с

CIRCLE(new Ellipse2D.Double(0,0,40,40)),
BOX(new Rectangle2D.Double(0,0,40,40));

к

CIRCLE(new Ellipse2D.Double(-20,-20,40,40)),
BOX(new Rectangle2D.Double(-20,-20,40,40));

Точки соединения перенесены в центр вершин, а оттуда Edgerenderer делает свою магию без проблем. Тем не менее, я не понимаю, почему изменение положения кадры формы делает эту разницу. Был бы рад, если кто -то может это объяснить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top