Java JUNG:如何通过动态调整顶点形状的大小来正确放置箭头? 简介
我正在做一个项目,它以不同的大小(根据它们的相对工作量)渲染图形中的顶点 问题 我多么希望它能起作用 这就是关闭顶点动态调整大小时发生的情况: 所以这里一切都是正确的。连接圆正好位于圆环形状的边界上 这个结果是由清单1中的代码实现的 动态调整大小时实际会发生什么 在这里您可以看到,连接圆位于边界附近的某个位置,但始终缺少正确的位置 清单2中的代码实现了这个结果 清单1-无需调整大小 清单2-调整大小 事实上,我只是懒洋洋地预先计算了10种不同大小的顶点形状。但是这个代码片段更清晰,并且实现了相同的结果(尽管没有那么好的性能) 我已经试过看的东西 这一切都发生在Java JUNG:如何通过动态调整顶点形状的大小来正确放置箭头? 简介,java,graphics,jung,jung2,Java,Graphics,Jung,Jung2,我正在做一个项目,它以不同的大小(根据它们的相对工作量)渲染图形中的顶点 问题 我多么希望它能起作用 这就是关闭顶点动态调整大小时发生的情况: 所以这里一切都是正确的。连接圆正好位于圆环形状的边界上 这个结果是由清单1中的代码实现的 动态调整大小时实际会发生什么 在这里您可以看到,连接圆位于边界附近的某个位置,但始终缺少正确的位置 清单2中的代码实现了这个结果 清单1-无需调整大小 清单2-调整大小 事实上,我只是懒洋洋地预先计算了10种不同大小的顶点形状。但是这个代码片段更清晰,并且实现了
edu.uci.ics.jung.visualization.renders
包中
- 检查了
类,了解我可以用来纠正此问题的任何内容BasicEdgeArrowRenderingSupport
- 检查它是否是
基本GearRowRenderingSupport中
路径迭代器的“平坦度”
- 检查它是否为
参数箭头位置Tolerance
- 我做了一些基本的失败(逻辑上或程序上)
- 或者,这是边箭头渲染支持的一个基本问题
图
,并将一个方法getWorkLoad()
添加到MyNode
类中。在此之后,我将从JUNG创建一个VisualizationViewer
实例,并添加我在Listing1和Listing2中描述的变形金刚。顺便说一句:它们在JUNG中执行此操作,从我在代码中读取的内容开始:在Edgeshapes的路径上删除,直到迭代器的坐标点位于destinationvertex形状内(将此点命名为P2)。之后,他们从迭代的最后一点到P2创建一条线2D,并将该线传递给另一个变换器,该变换器将找到实际边上的位置。。。在此阶段,arrowPlacementTolerance
开始发挥作用。。。因此,该值越小,箭头正好位于边缘的结果越准确。但这一切都只适用于静态大小,我不知道为什么。”这是JUNG支持的“当然,这没有什么错(它的目的是这样使用的)——但很难找出边缘端点的计算在哪里(以及为什么)可能会被特定的转换器
搞砸。这主要是关于隔离不受欢迎行为的根本原因。好的,感谢您提出的创建MVCE的明显建议。我创造了一个,这是完美的工作。。。我不知道为什么它在我所说的应用程序中不起作用。。。可能是因为我使用javafx,可能是因为有几个后台线程在做大量的工作,而且有些东西正在干扰。。。将不得不尝试和错误。无论如何,连接到MVCE的链接:
viewer.getRenderContext().setVertexShapeTransformer(vertex -> {
return vertex.getShape();
});
viewer.getRenderContext().setVertexShapeTransformer(vertex -> {
double localWorkload = vertex.getLocalWorkload();
double globalWorkload = graph.getGlobalWorkload();
double relation = local / global;
return AffineTransform.getScaledInstance(relation, relation).createTransformedShape(vertex.getShape());
});