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?

screenshot

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top