Java JUNG Grafico: Alcuni bordi perdere frecce
Domanda
Ho fatto un grafico con StaticLayout e forme \ colori di vertici modificati. Non mi trasformo tutto ciò che riguarda i bordi. Tutti i bordi sono diretti, ma alcuni di essi mancano le frecce! Come è potuto accadere?
Grafico codice di visualizzazione:
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();
Grafici è
graph = new DirectedSparseGraph<Object, String>();
ed i bordi sono creati così
graph.addEdge(bundle.getGood()+"->"+transformation,bundle.getGood(),transformation);
graph.addEdge(transformation+"->"+bundle.getGood(),transformation,bundle.getGood());
Grazie
Soluzione
Il posizionamento freccia è fatto suddividendo il bordo fino a quando il segmento di gran lunga è racchiuso nella forma vertice, poi si spostano indietro di una. Se l'endpoint lontano non è all'interno della forma vertice quando inizia funzionamento, ci dovrebbe essere un eccezione generata. Hai scelto la soluzione corretta, che è quello di centrare le forme di vertice sull'origine prima di essere tradotti in luogo. Tom Nelson
Altri suggerimenti
Il problema è causato da EdgeRenderer. Si confonde se i bordi sono collegati all'angolo superiore sinistro del vertice. Quando ho cambiato le mie forme da
CIRCLE(new Ellipse2D.Double(0,0,40,40)),
BOX(new Rectangle2D.Double(0,0,40,40));
a
CIRCLE(new Ellipse2D.Double(-20,-20,40,40)),
BOX(new Rectangle2D.Double(-20,-20,40,40));
I punti di collegamento spostato al centro dei vertici e da lì EdgeRenderer fa la sua magia senza problemi. Tuttavia, non capisco perché cambiando la posizione del telaio di una forma rende questa differenza. Sarebbe contento se qualcuno potesse spiegare questo.