优化了Workbench画布节点创建相关的代码逻辑

This commit is contained in:
fengjiayi
2025-06-01 12:21:38 +08:00
parent 84390b574f
commit 401c0e42d9
13 changed files with 119 additions and 114 deletions

View File

@@ -35,11 +35,6 @@ namespace Serein.Workbench.Services
/// </summary>
public Action<FlowCanvasView> OnRemoveFlowCanvasView { get; set; }
/// <summary>
/// 添加了节点
/// </summary>
public Action<NodeControlBase> OnCreateNode { get; set; }
/// <summary>
/// 查看的画布发生改变
/// </summary>
@@ -356,7 +351,11 @@ namespace Serein.Workbench.Services
nodeMVVM.ViewModelType, // 控件VIewModel类型
nodeModel, // 控件数据实体
nodeCanvas); // 所在画布
OnCreateNode.Invoke(nodeControl); // 创建节点
if(nodeCanvas is IFlowCanvas flowCanvas)
{
flowCanvas.Add(nodeControl); // 创建节点
}
}
catch (Exception ex)
{

View File

@@ -173,7 +173,6 @@ namespace Serein.Workbench.Views
private void InitEvent()
{
flowNodeService.OnCreateNode += OnCreateNode;
keyEventService.OnKeyDown += KeyEventService_OnKeyDown;
flowEEForwardingService.OnNodeLocated += FlowEEForwardingService_OnNodeLocated;
}
@@ -273,7 +272,7 @@ namespace Serein.Workbench.Views
/// 当前画布创建了节点
/// </summary>
/// <param name="nodeControl"></param>
private void OnCreateNode(NodeControlBase nodeControl)
/* private void OnCreateNode(NodeControlBase nodeControl)
{
if (!nodeControl.FlowCanvas.Guid.Equals(Guid)) // 防止事件传播到其它画布
{
@@ -295,7 +294,7 @@ namespace Serein.Workbench.Views
}
}
}*/
/// <summary>
/// 尝试判断是否为区域,如果是,将节点放置在区域中
@@ -367,6 +366,18 @@ namespace Serein.Workbench.Views
}
void IFlowCanvas.Add(NodeControlBase nodeControl)
{
var p = nodeControl.ViewModel.NodeModel.Position;
PositionOfUI position = new PositionOfUI(p.X, p.Y);
if (TryPlaceNodeInRegion(nodeControl, position, out var regionControl)) // 判断添加到区域容器
{
// 通知运行环境调用加载节点子项的方法
_ = flowEnvironment.PlaceNodeToContainerAsync(Guid,
nodeControl.ViewModel.NodeModel.Guid, // 待移动的节点
regionControl.ViewModel.NodeModel.Guid); // 目标的容器节点
return;
}
// 并非添加在容器中,直接放置节点
ViewModel.NodeControls.TryAdd(nodeControl.ViewModel.NodeModel.Guid, nodeControl);