Java JUNG Graph: некоторые ребра пропускают стрелки - PullRequest
1 голос
/ 19 октября 2011

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

снимок экрана http://i54.tinypic.com/2niqzon.jpg

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

    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());

Спасибо

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

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

0 голосов
/ 20 октября 2011

Проблема вызвана 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 делает свое волшебство без проблем. Тем не менее, я не понимаю, почему изменение положения рамки фигуры делает эту разницу. Был бы рад, если бы кто-то мог объяснить это.

...