caitsithware wrote: ↑2024/10/18 07:34
谢谢您的建议。
如果您能详细描述一下,我们会更容易考虑。
例如,请提供以下详细信息:
- 为什么要选择这种方式? (选择后你想对节点做什么?)
- “子节点”是指“节点的所有OutputPort都连接到的节点”吗?
- “所有子节点”是否包括“孙子节点及以下”?
- 如果存在循环连接,是否还包括“循环目的地的父节点”?
等等。
- 2.png (145.71 KiB) Viewed 6476 times
- 1.png (142.41 KiB) Viewed 6476 times
如图例,将图1调整为图2,用拖选的方式比较不容易快速选择需要移动的一组节点。
除了移动,还有删除、复制、对齐等其他对一组节点的操作需求。
- 3.png (80.5 KiB) Viewed 6476 times
如果想快速选择"ForInt"节点及其子节点,应该包含如图3所示的所有节点。
- 5.png (79.31 KiB) Viewed 6476 times
循环连接我从未在项目中使用过,我一般是使用Restart节点或ForInt节点的方式进行循环。
关于是否包括“循环目的地的父节点”,如图4,我认为要判断是否为“循环目的地的父节点”在代码实现上是可能不容易的。
目前我思考的方案是,将节点看成FlowNode和ComputeNode两类,起始节点只可以为FlowNode,起始节点往后FlowLine相连的FlowNode都定为子节点,将起始节点和子FlowNode都保存到FlowNode HashSet,再遍历FlowNode HashSet,如果HashSet中的FlowNode连接的ComputeNode没有连接非FlowNode Hashset中的FlowNode,则这个ComputeNode也属于子节点,保存到ComputeNode HashSet。ComputeNode连接的ComputeNode也需要递归判断,如果ComputeNode在ComputeNode HashSet中或连接了非FlowNode Hashset中的FlowNode则排除。最终两个HashSet中的节点就是要选中的所有节点。
- 4.png (91.86 KiB) Viewed 6476 times
如图5,是以Log"A"为起始节点及其所有子节点。