Page 1 of 1

新增快速选中节点自身及其所有子节点功能

Posted: 2024/10/18 07:00
by kvfreedom
在节点的右键菜单中新增一个选项,或是按住键盘的某个键并点击节点,可选中节点自身及其所有子节点。

Re: 新增快速选中节点自身及其所有子节点功能

Posted: 2024/10/18 07:34
by caitsithware
谢谢您的建议。

如果您能详细描述一下,我们会更容易考虑。
例如,请提供以下详细信息:
  • 为什么要选择这种方式? (选择后你想对节点做什么?)
  • “子节点”是指“节点的所有OutputPort都连接到的节点”吗?
  • “所有子节点”是否包括“孙子节点及以下”?
  • 如果存在循环连接,是否还包括“循环目的地的父节点”?
等等。

Re: 新增快速选中节点自身及其所有子节点功能

Posted: 2024/10/18 12:49
by kvfreedom
caitsithware wrote: 2024/10/18 07:34 谢谢您的建议。

如果您能详细描述一下,我们会更容易考虑。
例如,请提供以下详细信息:
  • 为什么要选择这种方式? (选择后你想对节点做什么?)
  • “子节点”是指“节点的所有OutputPort都连接到的节点”吗?
  • “所有子节点”是否包括“孙子节点及以下”?
  • 如果存在循环连接,是否还包括“循环目的地的父节点”?
等等。
1.png
1.png (142.41 KiB) Viewed 7086 times
2.png
2.png (145.71 KiB) Viewed 7086 times
如图例,将图1调整为图2,用拖选的方式比较不容易快速选择需要移动的一组节点。
除了移动,还有删除、复制、对齐等其他对一组节点的操作需求。
3.png
3.png (80.5 KiB) Viewed 7086 times
如果想快速选择"ForInt"节点及其子节点,应该包含如图3所示的所有节点。
4.png
4.png (91.86 KiB) Viewed 7086 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中的节点就是要选中的所有节点。
5.png
5.png (79.31 KiB) Viewed 7086 times
如图5,是以Log"A"为起始节点及其所有子节点。

Re: 新增快速选中节点自身及其所有子节点功能

Posted: 2024/10/18 13:31
by caitsithware
明白了。
节点移动已经实现了类似的功能。
  • 按住 Alt (Windows) / Option (Mac) 并用鼠标左键拖动节点:一次移动所有子节点(包括旋转的父节点)
  • 按住 shift 并用鼠标左键拖动节点:将父节点全部移动(包括旋转后的子节点)
只要条件相同,实施起来并不困难。
目前,我们将考虑在相同条件下实施。

Re: 新增快速选中节点自身及其所有子节点功能

Posted: 2024/10/18 13:52
by caitsithware
我们还将考虑包括一个从子节点的InputDataPort 连接的“独立ComputeNode”。