# STNodeEditor

STNodeEditor 是一个轻量且功能强大的节点编辑器 使用方式非常简洁 提供了丰富的属性以及事件可以非常方便的完成节点之间数据的交互及通知 大量的虚函数可供开发者重写具有很高的自由性

下载 STNodeEditor

# STNodeEditor 2.0

本案例中只是提供了一个节点编辑器控件 并不包含节点列表 属性编辑器等 若后期有空再做一套完整的框架

上面是第一版本作者在文档中提到的 现在都已实现

STNodeEditorSTNodeTreeViewSTNodePropertyGridSTNodeEditorPannel

GIF

# STNodeEditor

STNodeEditor拥有非常强大的功能 支持画布的移动和缩放 可以对节点位置以及连线进行锁定 连线时候会自动检测数据类型是否兼容 以及连线是否重复或者构成环形线路等问题

- 拖动标题移动节点
- 右击标题弹出菜单 (需要设置ContextMenuStrip)
- 拖动连接点进行连线
- 右击连线断开连接
- 中键拖动移动画布 (若笔记本触摸板支持 可二指拖动)
- CTRL+鼠标滚轮 缩放画布

注:节点Body区域进行的操作编辑器不会响应 因为在节点客户区内部的操作将被转换为节点的事件

因为作者将一个节点视为一个Form 而编辑器容器则为Desktop 开发者可以像开发WinForm程序一样去开发一个节点

GIF

# STNodeHub

STNodeHub是一个内置的节点 其主要作用分线 可以将一个输出分散到多个输入或多个输出集中到一个输入点上以避免重复布线 也可在节点布线复杂时用于绕线

HUB的输入输出默认为object类型 当一个连接被连入时候将会自动更换数据类型并增加新行

注:仅STNodeHub可以修改连接点的数据类型 因为相应字段被internal标记 而作为第三方扩展的STNode中是无法修改已添加连接点的数据类型的

GIF

# STNodeTreeView

STNodeTreeView可与STNodeEditor结合使用 STNodeTreeView中的节点可直接拖拽进STNodeEditor中 并且提供预览和检索功能

STNodeTreeView的使用简单 无需像System.Windows.Forms.TreeView需要自行去构造树

通过使用STNodeAttribute标记继承的STNode可直接设置需要在STNodeTreeView中显示的路径 以及希望在STNodePropertyGrid中显示的信息

注:若希望节点能够在STNodeTreeView中显示 必须使用STNodeAttribute标记STNode子类

GIF

# STNodePropertyGrid

若STNode中的属性被STNodePropertyAttribute标记则会在STNodePropertyGrid中显示 默认情况下支持int,float,double,bool,string,enum以及上述数据类型的Array 若希望显示的属性数据类型不被支持 可以对DescriptorType进行扩展重写 详细请参考DEMO

可以看到在STNodePropertyGrid的面板中可以显示节点的一些信息 作者认为提供给大家的是一套框架 大家可以基于这套框架打造一套自己的框架 而为框架编写节点的Coder应该有权利选择是否留下个人信息

GIF

# STNodeEditorPannel

STNodeEditorPannel是STNodeEditorSTNodeTreeViewSTNodePropertyGrid的一套组合控件

可以通过拖动手柄控制布局

所以这东西有什么用

这东西可以做啥??? 拉流程图??? 自动编排???

这动画是作者能想到的最好解释方式了

当有很多应用程序(模块) 它们之间需要相互调用传递数据来完成一整套流程的工作
开发单一功能的应用程序(模块)相对比较容易 而实现一整套很多功能相互调用的应用程序相对比较繁琐
此套框架开发者只需要定义好传递的数据类型 然后分别实现单一节点功能 至于执行流程交给框架和用户布线即可

流程即程序 程序即流程 程序功能可视化

PNG

# 关于UI自定义

由图可见 节点UI定义非常自由

STNodeControl提供了与System.Windows.Forms.Control一样的常用函数与属性 所以开发者只需要像开发WinForm控件一样去开发STNode的控件即可

如图中AttrTestNode没有特殊的UI定义需求 则只需要向STNode提供需要输入输出的数据类型及显示文本STNode.AutoSize会自动计算大小并布局 STNode.AutoSize默认为true

更多详情请参考 DEMO

GIF

# 关于节点编辑器

或许你未曾接触过节点编辑 但节点编辑的影子越来越多 尤其是在设计相关的软件 Blender,C4D,Houdini,Davinci 等

节点编辑最大的好处就是可视化操作 将单一功能封装到节点中 让用户通过节点布线来组合需要的逻辑 让整个流程可视化 而不是将程序的整个执行流程固定程序中 当然在这之前需要定义好节点的数据类型 因为数据类型无法兼容是不允许连线的 通常情况下同颜色的连接点表示数据类型相同

让开发者只需要注重单一的功能点开发 使得功能与功能之间的耦合度降低 开发者在节点中开发完成需要的功能 无需知道如何去调用下一个环节的程序 只需要将结果数据打包给需要输出的选项点 无论节点布线多么的复杂 节点编辑器会自动完成数据的投递过程

# STNodeEditor 3.0

本案例中只是Demo中提供了几个节点控件编写示例 并不包含控件 若后期有空再做一些节点可用的常用控件

上面是这一版本发布时候作者提到的 是否期待实现 ???

Fork me on Github

.Net版本: | .Net Framework 3.5 |
VS版本: | Visual Studio 2010 | 2021-04-27

大家都说石头是世界上最帅的码农 好烦
简体中文 English