我用StaticLayout创建了一个图形并更改了顶点的形状\颜色。我没有改变任何与边缘相关的东西。所有边缘都是定向的,但有些边缘错过了箭头!怎么会发生这种情况?
screenshot 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());
由于
答案 0 :(得分:2)
箭头放置是通过细分边缘直到远段包围在顶点形状中,然后向后移动一个来完成的。如果在操作开始时远端点不在顶点形状内,则应该抛出异常。您选择了正确的解决方案,即在将顶点形状转换到原位之前将它们居中放置在原点上。 汤姆尼尔森
答案 1 :(得分:0)
问题是由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可以毫无问题地完成它的魔力。 但是,我不明白为什么改变形状的框架位置会产生差异。如果有人能够解释这一点会很高兴。