X6 icon indicating copy to clipboard operation
X6 copied to clipboard

使用X6如何实现流程编排中的分支情况

Open Hideer opened this issue 1 year ago • 8 comments

Describe the feature you'd like to request

在实现流程编排过程中,分支情况较为常见,目前的分支常见形态见下图 image

针对此类场景 边 需要具备聚合能力,如多条件的入口和出口需要聚合合并,并针对 边 上的标签或按钮进行处理

Describe the solution you'd like

如底层已支持此类场景期望提供出场景案例,供参考

Describe alternatives you've considered

目前可想到的解决方案如下

方案一(不合适):利用 边 的路径点(vertices)能力做到分支处理,但推演存在以下问题

  • 画布节点存在拖拽并存场景,vertices 需要随拖拽动态变化并且需要参照起始锚点坐标(目前好像还没有起始锚点的坐标回调)
  • 边上自定义Label或自定义按钮随着拖拽等情况会出现分布在 路径点(vertices) 的前段或后段,但实际理想场景期望分别在边的头部或结束尾部

方案二(繁琐且边界多):见下图将边按期望场景分割为多段,按 Lable 或自定义按钮切割,两节点之间窜在多个边,多个边之间用空白节点连接

image

Your Example Website or App

No response

Screenshots or Videos

No response

Hideer avatar May 22 '23 16:05 Hideer

👋 @Hideer

Thanks for opening your first issue here! If you're reporting a 🐞 bug, please make sure you include steps to reproduce it. To help make it easier for us to investigate your issue, please follow the contributing guidelines. We get a lot of issues on this repo, so please be patient and we will get back to you as soon as we can.

x6-bot[bot] avatar May 22 '23 16:05 x6-bot[bot]

暂时还没有好的思路,容我思考一下。

NewByVector avatar May 30 '23 13:05 NewByVector

对于确定布局方向(从上到下,从左到右)的情况: 从节点的流出的边需要分开感觉可以使用方案一,分开场景在收集到确定需要合并的边后在规定分离点的边界条件的约束下是可以确定分离点的位置的;但是对于流入节点的边需要汇合的话感觉需要使用方案二,这个实例中汇合其实还有一个语意,是且的关系还是或的关系,对于不同业务会有不同的含义,因此实际上在流入的情况下,应该是多边流入一个汇合节点,然后节点输出数据。

站在数据信号的角度上看,假设节点的流入流出模型是多输入单输出的:y ← f(x1,x2,x3),流入节点的多条边上的数据可能是不一样的,是需要进行数据处理的,但是流出节点的多条边上的节点的数据是一致,可以不需要节点进行额外处理?

HuColin avatar Jul 17 '23 03:07 HuColin

可以参考这个 demo

NewByVector avatar Aug 07 '23 14:08 NewByVector

image 我这边需求很相似,目前实现了一个不完美版,实现方式很曲线,目前还有性能问题。同问官方有没有推荐的实现方式

csgajcr avatar Jan 25 '24 01:01 csgajcr

image 我这边需求很相似,目前实现了一个不完美版,实现方式很曲线,目前还有性能问题。同问官方有没有推荐的实现方式

你这个节点支持任意布局排版么,还是通过工具方法直接计算排布后重绘?我这里外观和你很像,但是也遇到了性能问题

Hideer avatar Feb 05 '24 08:02 Hideer

image 我这边需求很相似,目前实现了一个不完美版,实现方式很曲线,目前还有性能问题。同问官方有没有推荐的实现方式

你这个节点支持任意布局排版么,还是通过工具方法直接计算排布后重绘?我这里外观和你很像,但是也遇到了性能问题

主干逻辑是通过节点大小计算出的位置。也支持拖动,支持把主干逻辑上的节点拖动到画布的任意位置。 我这个实现比较复杂,流程大致如下:渲染节点 -> 后序递归测量节点大小 -> 递归设置节点位置 -> 设置端口和连线。

因为节点大小不确定,可能会变,所以在把节点添加画布后,还要自己写逻辑监听节点完全渲染完成,才能得到真实宽高。

csgajcr avatar Feb 05 '24 08:02 csgajcr