0

介绍

我正在开发一个项目,该项目以不同大小(根据它们的相对工作量)呈现图中的顶点。

问题

我期望它如何工作

当我关闭顶点的动态调整大小时会发生这种情况:

在此处输入图像描述

所以这里一切都是正确的。连接圆正好放置在圆形的边界上。

这个结果是通过清单 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班级是否有任何我可以用来纠正这个问题的东西
  • 检查它是否PathIteratorBasicEdgeArrowRenderingSupport
  • 检查它是否是arrowPlacementTollerance参数

问题

如何实现清单 1产生的预期结果,但要像清单 2中那样动态调整形状大小?

我想这个问题的答案将导致:

  • 我做了一些基本的失败(逻辑上或程序上)
  • 或者是边缘箭头渲染支持的基本问题
4

0 回答 0