1. 重新设计了Generate项目及相关特性的命名,避免与其他类型混淆。

2. 补充了部分注释。
3. 修改了删除容器节点时,容器内子节点未正确删除的问题。
This commit is contained in:
fengjiayi
2025-07-30 21:15:07 +08:00
parent 93148b11a5
commit 152077e9b5
188 changed files with 2713 additions and 1406 deletions

View File

@@ -2,6 +2,7 @@
using Serein.Library.Api;
using Serein.NodeFlow.Model;
using Serein.NodeFlow.Model.Nodes;
using System.Diagnostics.CodeAnalysis;
namespace Serein.NodeFlow.Services
{
@@ -13,6 +14,11 @@ namespace Serein.NodeFlow.Services
private readonly IFlowEnvironment environment;
private readonly FlowLibraryService flowLibraryService;
/// <summary>
/// 流程模型服务构造函数
/// </summary>
/// <param name="environment"></param>
/// <param name="flowLibraryService"></param>
public FlowModelService(IFlowEnvironment environment, FlowLibraryService flowLibraryService)
{
this.environment = environment;
@@ -35,72 +41,156 @@ namespace Serein.NodeFlow.Services
/// </summary>
private List<SingleFlipflopNode> FlipflopNodes { get; } = [];
/// <summary>
/// 获取节点模型
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
public IFlowNode? GetNodeModel(string guid)
{
NodeModels.TryGetValue(guid, out var nodeModel);
return nodeModel;
}
/// <summary>
/// 获取画布模型
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
public FlowCanvasDetails? GetCanvasModel(string guid)
{
FlowCanvass.TryGetValue(guid, out var nodeModel);
return nodeModel;
}
public bool TryGetNodeModel(string guid, out IFlowNode flowNode)
/// <summary>
/// 尝试获取节点模型
/// </summary>
/// <param name="guid"></param>
/// <param name="flowNode"></param>
/// <returns></returns>
public bool TryGetNodeModel(string guid, [NotNullWhen(true)] out IFlowNode? flowNode)
{
return NodeModels.TryGetValue(guid, out flowNode!);
}
public bool TryGetCanvasModel(string guid, out FlowCanvasDetails flowCanvas)
/// <summary>
/// 尝试获取画布模型
/// </summary>
/// <param name="guid"></param>
/// <param name="flowCanvas"></param>
/// <returns></returns>
public bool TryGetCanvasModel(string guid, [NotNullWhen(true)] out FlowCanvasDetails? flowCanvas)
{
return FlowCanvass.TryGetValue(guid, out flowCanvas!); ;
if(FlowCanvass.TryGetValue(guid, out var details))
{
flowCanvas = details;
return true;
}
flowCanvas = details;
return false;
}
/// <summary>
/// 检查是否包含节点模型
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
public bool ContainsNodeModel(string guid)
{
return NodeModels.ContainsKey(guid);
}
/// <summary>
/// 检查是否包含画布模型
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
public bool ContainsCanvasModel(string guid)
{
return FlowCanvass.ContainsKey(guid);
}
/// <summary>
/// 添加节点模型
/// </summary>
/// <param name="flowNode"></param>
/// <returns></returns>
public bool AddNodeModel(IFlowNode flowNode)
{
ArgumentNullException.ThrowIfNull(flowNode);
ArgumentNullException.ThrowIfNull(flowNode.Guid);
return NodeModels.TryAdd(flowNode.Guid, flowNode);
}
/// <summary>
/// 添加画布模型
/// </summary>
/// <param name="flowCanvasDetails"></param>
/// <returns></returns>
public bool AddCanvasModel(FlowCanvasDetails flowCanvasDetails)
{
ArgumentNullException.ThrowIfNull(flowCanvasDetails);
ArgumentNullException.ThrowIfNull(flowCanvasDetails.Guid);
return FlowCanvass.TryAdd(flowCanvasDetails.Guid, flowCanvasDetails);
}
/// <summary>
/// 移除节点模型
/// </summary>
/// <param name="flowNode"></param>
/// <returns></returns>
public bool RemoveNodeModel(IFlowNode flowNode)
{
ArgumentNullException.ThrowIfNull(flowNode.Guid);
return NodeModels.Remove(flowNode.Guid);
}
/// <summary>
/// 移除画布模型
/// </summary>
/// <param name="flowCanvasDetails"></param>
/// <returns></returns>
public bool RemoveCanvasModel(FlowCanvasDetails flowCanvasDetails)
{
ArgumentNullException.ThrowIfNull(flowCanvasDetails.Guid);
return FlowCanvass.Remove(flowCanvasDetails.Guid);
}
/// <summary>
/// 获取所有节点模型
/// </summary>
/// <returns></returns>
public List<IFlowNode> GetAllNodeModel() => [.. NodeModels.Values];
/// <summary>
/// 获取指定画布上的所有节点模型
/// </summary>
/// <param name="canvasGuid"></param>
/// <returns></returns>
public List<IFlowNode> GetAllNodeModel(string canvasGuid) =>
NodeModels.Values.Where(x => x.CanvasDetails.Guid == canvasGuid).ToList();
/// <summary>
/// 获取所有画布模型
/// </summary>
/// <returns></returns>
public List<FlowCanvasDetails> GetAllCanvasModel() => [.. FlowCanvass.Values];
/// <summary>
/// 检查是否存在画布模型
/// </summary>
/// <returns></returns>
public bool IsExsitCanvas()
{
return FlowCanvass.Count > 0;
}
/// <summary>
/// 检查指定画布上是否存在节点模型
/// </summary>
/// <param name="canvasGuid"></param>
/// <returns></returns>
public bool IsExsitNodeOnCanvas(string canvasGuid)
{
if (!FlowCanvass.TryGetValue(canvasGuid, out var flowCanvasDetails))