Gráfico Java Jung: algunos bordes Miss Arrows
Pregunta
He hecho un gráfico con staticLayout y cambiado de forma colores de vértices. No transformé nada relacionado con los bordes. Todos los bordes están dirigidos, ¡pero algunos de ellos extrañan flechas! ¿Cómo podría suceder eso?
Código de visualización de gráficos:
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();
Gráficos es
graph = new DirectedSparseGraph<Object, String>();
y los bordes se crean así
graph.addEdge(bundle.getGood()+"->"+transformation,bundle.getGood(),transformation);
graph.addEdge(transformation+"->"+bundle.getGood(),transformation,bundle.getGood());
Gracias
Solución
La colocación de la flecha se realiza subdividiendo el borde hasta que el segmento lejano esté encerrado en forma de vértice, luego retrocediendo uno. Si el punto final lejano no está dentro de la forma del vértice cuando se inicia la operación, debe haber una excepción lanzada. Eligió la solución correcta, que es centrar sus formas de vértice en el origen antes de que se traduzcan en su lugar. Tom Nelson
Otros consejos
El problema es causado por Edgerenderer. Se confunde si los bordes están conectados a la esquina superior izquierda del vértice. Cuando cambié mis formas de
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));
Los puntos de conexión se trasladaron al centro de los vértices y desde allí Edgerenderer hace su magia sin problemas. Sin embargo, no entiendo por qué cambiar la posición de marco de una forma hace esta diferencia. Me alegraría si alguien pudiera explicar esto.