介绍
我正在开发一个项目,该项目以不同大小(根据它们的相对工作量)呈现图中的顶点。
问题
我期望它如何工作
当我关闭顶点的动态调整大小时会发生这种情况:
所以这里一切都是正确的。连接圆正好放置在圆形的边界上。
这个结果是通过清单 1中的代码实现的。
动态调整大小的实际情况
在这里您可以看到,连接圆位于边界附近的某处,但始终缺少正确的位置。
这个结果是通过清单 2中的代码实现的。
清单 1 - 不调整大小
viewer.getRenderContext().setVertexShapeTransformer(vertex -> {
return vertex.getShape();
});
清单 2 - 调整大小
viewer.getRenderContext().setVertexShapeTransformer(vertex -> {
double localWorkload = vertex.getLocalWorkload();
double globalWorkload = graph.getGlobalWorkload();
double relation = local / global;
return AffineTransform.getScaledInstance(relation, relation).createTransformedShape(vertex.getShape());
});
实际上,我懒惰地预先计算了顶点内 10 种不同大小的顶点形状。但是这个代码片段更清晰并且达到了相同的结果(虽然没有那么高性能)。
我已经尝试过并查看过的内容
这一切都发生在edu.uci.ics.jung.visualization.renderers
包中。
- 检查
BasicEdgeArrowRenderingSupport
班级是否有任何我可以用来纠正这个问题的东西 - 检查它是否
PathIterator
是BasicEdgeArrowRenderingSupport
- 检查它是否是
arrowPlacementTollerance
参数
问题
如何实现清单 1产生的预期结果,但要像清单 2中那样动态调整形状大小?
我想这个问题的答案将导致:
- 我做了一些基本的失败(逻辑上或程序上)
- 或者是边缘箭头渲染支持的基本问题