我有一个包含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);
});
谢谢和问候
答案 0 :(得分:0)
源端子和目标端子的位置根据电池的形状及其边界确定。这可以通过mxGraphView.getPerimeterPoint(cellState, point...)
获得,并使用mxGraphView.getPerimeterFunction
和mxGraphView.getPerimeterBounds
。
这适用于边标签的初始放置(我使用它来放置多个边标签 - 例如UML类图中的基数)。
但是,此方法使用mxCellState
,出于某种原因,我还不知道在移动事件中使用mxEventListener
重新定位时无法使用它。当事件被触发时,单元状态仍然设置在单元格的前一个位置。