gpt4 book ai didi

java - JGraphX:在顶点上重新定位边缘终端

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:03 24 4
gpt4 key购买 nike

我有一个有 18 个顶点和很多边的图。由于涉及的元素数量及其结构,可用的内置算法(即用于所示图像的 mxHierarchicalLayout )无法按预期工作,导致大多数带有描述的边缘重叠,如图所示 Current status sample .

在源代码中进行一些测试和检查后,我成功地通过 mxCell 的几何形状仅更改了边缘上的一些内容:

  • 边缘标签
  • 控制点

但是我没有找到任何方法来操纵源终端和目标终端的点。任何人都可以建议我使用正确的类/方法来控制终端的连接位置。

任何帮助/信息将不胜感激。

我设法测试操作边缘的代码如下:

..
Arrays.asList(edges).stream().map(edge -> (mxCell) edge).forEach(edge -> {
mxGeometry newGeo = (mxGeometry) edge.getGeometry().clone();
// TODO calculate condition
// This code actually move the label from the default
// position
mxPoint offset = new mxPoint(edge.getGeometry().getPoint().getX() + EDGE_OFFSET,
edge.getGeometry().getPoint().getY() + EDGE_OFFSET);
newGeo.setOffset(offset);
newGeo.setX(newGeo.getX() + 1);
if (newGeo.getPoints() != null) {
newGeo.getPoints().forEach(point -> {
point.setX(point.getX() + 200);
point.setY(point.getY() + 200);
});
}
model.setGeometry(edge,newGeo);
});

感谢和问候

最佳答案

根据小区的形状及其边界确定源终端和目标终端的位置。这可以通过使用 mxGraphView.getPerimeterPoint(cellState, point...) 来获取,其中使用 mxGraphView.getPerimeterFunctionmxGraphView.getPerimeterBounds

这对于边缘标签的初始放置效果很好(我用它来放置多个边缘标签——例如 UML 类图中的基数)。

但是,此方法使用 mxCellState,由于某种原因,我还不知道在移动事件上使用 mxEventListener 重新定位时不能使用它。当事件触发时,单元格状态仍然设​​置在单元格的先前位置。

关于java - JGraphX:在顶点上重新定位边缘终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43473507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com