gpt4 book ai didi

java - JGraphX - 如何实时预览和应用更复杂的图形更改

转载 作者:行者123 更新时间:2023-11-30 09:18:37 25 4
gpt4 key购买 nike

我有一个包含两种顶点的图:

  • 代表图节点的主要顶点
  • 作为主顶点和边的 child 的端口顶点与它们相连。

(边不能直接连接到节点,因为端口顶点正在建模必须显式可视化的真实对象。)每个端口顶点的位置使其在连接到它的边的相反节点的方向上紧密邻接其父节点。这是通过布局算法完成的。看图:

+------+  port             +------+
| +-+ +-+ |
| node | |---------------| | |
| +-+ edge +-+ |
+------+ +------+

然而,当一个节点随后被拖动时,它的端口仍然有其相对于父节点的旧相对位置。根据节点的新坐标刷新端口位置怎么办?至少在删除节点之后,理想情况下也在实时预览期间 (mxGraphHandler.isLivePreview() == true)。

当前错误图:

+------+  port
| +-+
| node | |
| +-+
+------+ \
\
\ +------+
+-+ |
| | |
+-+ |
+------+

预期正确图:

+------+
| |
| node |
| | port
+------+-+
| |
+-+
\
\
\
+-+
| |
+-+------+
| |
| |
| |
+------+

我深入研究了实时预览过程并获得了一些线索和一些未分类的不清楚之处:

  • 似乎我将不得不实现自己的 mxMovePreview 扩展并覆盖 start/getPreviewStates 方法,因为它们当前的实现对受影响的节点集进行了硬编码,例如不包括拖动节点的相对端口
  • 似乎我无法完全重用端口定位策略,因为在布局中它应用于单元格的几何形状,在预览中它应用于 mxCellStates 和 mxCellStatePreview
  • 接收 dx,dy 的方法应用线性变换(按常数 vector 移动),复杂的几何重新计算将需要重建坐标?
  • 端口的定位类似于更新 mxCellStatePreview.revalidateState 中的边缘终端点 - 也许我应该实现自己的 mxCellStatePreview 扩展并重写此方法?
  • 删除节点后如何实现刷新?似乎与实时预览不同。 mxEvent.STOP 上的监听器就足够了,还是还需要一些重载?

如果能帮助我设定正确的方向,我将不胜感激。谢谢。

最佳答案

您是否将端口几何设置为相对于父级?

geo.setParent(<>); geo.setRelative(true);

关于java - JGraphX - 如何实时预览和应用更复杂的图形更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423522/

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