();
+ queue.Enqueue(startNode);
+
+ while (queue.Count > 0)
+ {
+ var currentNode = queue.Dequeue();
+ if (currentNode == endNode)
+ {
+ return true;
+ }
+
+ visited.Add(currentNode);
+
+ var children = GetChildren(currentNode);
+ foreach (var child in children)
+ {
+ if (!visited.Contains(child))
+ {
+ queue.Enqueue(child);
+ }
+ }
+ }
+
+ return false;
+ }
+ #endregion
+ }
+}
diff --git a/WpfNodeEdittorDemo/STNodeHub.cs b/WpfNodeEdittorDemo/STNodeHub.cs
new file mode 100644
index 0000000..70ff160
--- /dev/null
+++ b/WpfNodeEdittorDemo/STNodeHub.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using ST.Library.UI.NodeEditor;
+
+namespace WinNodeEditorDemo
+{
+ ///
+ /// 类库自带的STNodeHub并未被STNodeAttribute标记 无法被STNodeTreeView显示 所以需要扩展
+ ///
+ [STNode("/", "Crystal_lz", "2212233137@qq.com", "st233.com", "This is single Hub")]
+ public class STNodeHubSingle : STNodeHub
+ {
+ public STNodeHubSingle()
+ : base(true) {
+ this.Title = "S_HUB";
+ }
+ }
+ ///
+ /// 类库自带的STNodeHub并未被STNodeAttribute标记 无法被STNodeTreeView显示 所以需要扩展
+ ///
+ [STNode("/", "Crystal_lz", "2212233137@qq.com", "st233.com", "This multi is Hub")]
+ public class STNodeHubMulti : STNodeHub
+ {
+ public STNodeHubMulti()
+ : base(false) {
+ this.Title = "M_HUB";
+ }
+ }
+}
diff --git a/WpfNodeEdittorDemo/WpfNodeEdittorDemo.csproj b/WpfNodeEdittorDemo/WpfNodeEdittorDemo.csproj
new file mode 100644
index 0000000..39c7fa8
--- /dev/null
+++ b/WpfNodeEdittorDemo/WpfNodeEdittorDemo.csproj
@@ -0,0 +1,23 @@
+
+
+
+ WinExe
+ net8.0-windows
+ enable
+ disable
+ true
+ True
+
+
+
+
+
+
+
+
+
+ Form
+
+
+
+
diff --git a/docs/css/stdoc.css b/docs/css/stdoc.css
index 3e60ba2..77125b3 100644
--- a/docs/css/stdoc.css
+++ b/docs/css/stdoc.css
@@ -23,7 +23,8 @@ hr{
body{
margin:0px;
position:relative;
- font-size:14px;
+ font-size:0.85rem;
+ line-height:1rem;
background-color:#343434;
}
a{
@@ -196,12 +197,16 @@ td{
color:white;
font-size: 12px;
border-radius: 2px;
- background-color: gray;
+ background-color: rgba(125,125,125,.5);
padding: 1px 4px;
margin:0px 4px;
}
.p_hightlight{
- color:hotpink;
+ color: dimgray;
+ background-color: goldenrod;
+ padding: 5px;
+ border-radius: 5px;
+}
}
.div_table{
overflow:auto;
@@ -215,6 +220,7 @@ td{
display:inline-block;
max-width:100%;
margin-bottom:10px;
+ line-height:0px;
}
.span_code_title{
display: inline-block;
@@ -224,13 +230,14 @@ td{
}
.pre_code{
background-color: #1a1a1a;
- font-size: 12px;
+ font-size: 0.75rem;
overflow: auto;
padding:10px 10px 10px 35px;
display:inline-block;
margin:0px;
min-width:680px;
position:relative;
+ line-height:1rem;
}
.pre_code:before{
content: ' ';
diff --git a/docs/index.html b/docs/index.html
index 61719d3..14439f7 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -64,10 +64,10 @@
STNodeEditor
-
STNodeEditor 是一个轻量且功能强大的节点编辑器 使用方式非常简洁 提供了丰富的属性以及事件可以非常方便的完成节点之间数据的交互及通知 大量的重载函数供开发者使用具有很高的自由性
+
STNodeEditor 是一个轻量且功能强大的节点编辑器 使用方式非常简洁 提供了丰富的属性以及事件可以非常方便的完成节点之间数据的交互及通知 大量的虚函数可供开发者重写具有很高的自由性
下载 STNodeEditor
-
+
@@ -215,4 +215,4 @@

STNodeEditor
-
STNodeEditor is a lightweight and powerful node editor, very simple to use. Provides a wealth of properties and events, which can easily complete the data interaction and notification between nodes. A large number of overloaded functions are available for developers to use. It is very free.
+
STNodeEditor is a lightweight and powerful node editor, very simple to use. Provides a wealth of properties and events, which can easily complete the data interaction and notification between nodes. A large number of vitual functions are available for developers to use. It is very free.
Download STNodeEditor
-
+
@@ -176,4 +176,4 @@
-
It was a spring season, and I don"t know why the whole world has changed after the Chinese New Year. Everyone was forced to stay at home. The extremely boring author learned Blender. That was the second time the author used the node editor.
+
-> What? Excuse me... What's this?.. What the hell is this?...
+
It was a spring season, and I don't know why the whole world has changed after the Chinese New Year. Everyone was forced to stay at home. The extremely boring author learned Blender. That was the second time the author used the node editor.
-> Wo...It turns out that this one is really convenient to use.
-
So some ideas gradually emerged in the author"s mind, making the author want to make one.
+
So some ideas gradually emerged in the author's mind, making the author want to make one.
It was a summer, I don’t know why the author started to learn Davinci again. That was the third time the author used the node editor. The use of this time has doubled the author"s favor with the node editor. The author instantly felt that as long as it is a program that can be modularized and streamlined, everything can be nodeized.
So STNodeEditor appeared.

@@ -196,8 +196,8 @@
[Basic]STNode
}
-In multi-connection mode, an option can be connected by multiple options of the same data type (rectangle)
-In single-connection mode, an option can only be connected by one option of the same data type (circle)
+In multi-connection mode, an option can be connected by multiple options of the same data type (rectangle)
+In single-connection mode, an option can only be connected by one option of the same data type (circle)
STNodeOption.Empty
@@ -534,8 +534,8 @@ [basic]STNodeControl
}
-clickthe Open Image button, you can select an image and display it in the node. After the ImageSizeNode is connected, the size of the image will be display.
-The code of the ImageChannel node is not given here. The code is used in the WinNodeEditorDemo project to extract the RGB channel of an image. For ImageShowNode, it just provides the data source and displays it. For the ImageSizeNode and ImageChannel nodes, they don"t know what node will be connected. They just complete their functions and package the results to the output option, waiting to be connected by the next node
+click the Open Image button, you can select an image and display it in the node. After the ImageSizeNode is connected, the size of the image will be display.
+The code of the ImageChannel node is not given here. The code is used in the WinNodeEditorDemo project to extract the RGB channel of an image. For ImageShowNode, it just provides the data source and displays it. For the ImageSizeNode and ImageChannel nodes, they don't know what node will be connected. They just complete their functions and package the results to the output option, waiting to be connected by the next node
The execution logic is completely connected by the user to connect their functions together. During the development, there is no interaction between nodes and nodes. The only thing that ties them together is an Image data type, so that nodes and nodes There is no coupling relationship between them. High class poly low coupling.
[basic]STNodeEditor
STNodeEditor as a container of STNode also provides a large number of properties and events for developers to use. For more detailed API list of STNodeEditor, please refer to API document