Java jung graph: некоторые края пропускают стрелы
Вопрос
Я сделал график со StaticLayout и изменил формы Colors вершин. Я ничего не изменил, связанный с краями. Все края направлены, но некоторые из них пропускают стрелы! Как это могло случиться?
Код визуализации графика:
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 делает свою магию без проблем. Тем не менее, я не понимаю, почему изменение положения кадры формы делает эту разницу. Был бы рад, если кто -то может это объяснить.