重写了节点的view、viewmodel关系,实现了对画布元素的选取功能,重构了底层依赖,添加了对net .Framework4.6.1以上的Framework类库支持

This commit is contained in:
fengjiayi
2024-09-12 20:32:54 +08:00
parent ec6e09ced1
commit f286fc644a
120 changed files with 91218 additions and 761 deletions

View File

@@ -1,5 +1,9 @@
namespace Serein.NodeFlow
using Serein.Library.Enums;
namespace Serein.NodeFlow
{
/// <summary>
/// 显式参数
/// </summary>
@@ -63,6 +67,10 @@
public class MethodDetails
{
/// <summary>
/// 拷贝
/// </summary>
/// <returns></returns>
public MethodDetails Clone()
{
return new MethodDetails
@@ -76,7 +84,7 @@
ReturnType = ReturnType,
MethodName = MethodName,
MethodLockName = MethodLockName,
IsNetFramework = IsNetFramework,
ExplicitDatas = ExplicitDatas.Select(it => it.Clone()).ToArray(),
};
}
@@ -114,7 +122,7 @@
/// <summary>
/// 节点类型
/// </summary>
public DynamicNodeType MethodDynamicType { get; set; }
public NodeType MethodDynamicType { get; set; }
/// <summary>
/// 锁名称
/// </summary>
@@ -135,98 +143,97 @@
public ExplicitData[] ExplicitDatas { get; set; }
/// <summary>
/// 出参类型
/// </summary>
public Type ReturnType { get; set; }
public bool IsNetFramework { get; set; }
public bool IsCanConnect(Type returnType)
{
if (ExplicitDatas.Length == 0)
{
// 目标不需要传参,可以舍弃结果?
return true;
}
var types = ExplicitDatas.Select(it => it.DataType).ToArray();
// 检查返回类型是否是元组类型
if (returnType.IsGenericType && IsValueTuple(returnType))
{
//public bool IsCanConnect(Type returnType)
//{
// if (ExplicitDatas.Length == 0)
// {
// // 目标不需要传参,可以舍弃结果?
// return true;
// }
// var types = ExplicitDatas.Select(it => it.DataType).ToArray();
// // 检查返回类型是否是元组类型
// if (returnType.IsGenericType && IsValueTuple(returnType))
// {
return CompareGenericArguments(returnType, types);
}
else
{
int index = 0;
if (types[index] == typeof(DynamicContext))
{
index++;
if (types.Length == 1)
{
return true;
}
}
// 被连接节点检查自己需要的参数类型,与发起连接的节点比较返回值类型
if (returnType == types[index])
{
return true;
}
}
return false;
}
// return CompareGenericArguments(returnType, types);
// }
// else
// {
// int index = 0;
// if (types[index] == typeof(DynamicContext))
// {
// index++;
// if (types.Length == 1)
// {
// return true;
// }
// }
// // 被连接节点检查自己需要的参数类型,与发起连接的节点比较返回值类型
// if (returnType == types[index])
// {
// return true;
// }
// }
// return false;
//}
/// <summary>
/// 检查元组类型
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private bool IsValueTuple(Type type)
{
if (!type.IsGenericType) return false;
///// <summary>
///// 检查元组类型
///// </summary>
///// <param name="type"></param>
///// <returns></returns>
//private bool IsValueTuple(Type type)
//{
// if (!type.IsGenericType) return false;
var genericTypeDef = type.GetGenericTypeDefinition();
return genericTypeDef == typeof(ValueTuple<>) ||
genericTypeDef == typeof(ValueTuple<,>) ||
genericTypeDef == typeof(ValueTuple<,,>) ||
genericTypeDef == typeof(ValueTuple<,,,>) ||
genericTypeDef == typeof(ValueTuple<,,,,>) ||
genericTypeDef == typeof(ValueTuple<,,,,,>) ||
genericTypeDef == typeof(ValueTuple<,,,,,,>) ||
genericTypeDef == typeof(ValueTuple<,,,,,,,>);
}
// var genericTypeDef = type.GetGenericTypeDefinition();
// return genericTypeDef == typeof(ValueTuple<>) ||
// genericTypeDef == typeof(ValueTuple<,>) ||
// genericTypeDef == typeof(ValueTuple<,,>) ||
// genericTypeDef == typeof(ValueTuple<,,,>) ||
// genericTypeDef == typeof(ValueTuple<,,,,>) ||
// genericTypeDef == typeof(ValueTuple<,,,,,>) ||
// genericTypeDef == typeof(ValueTuple<,,,,,,>) ||
// genericTypeDef == typeof(ValueTuple<,,,,,,,>);
//}
private bool CompareGenericArguments(Type returnType, Type[] parameterTypes)
{
var genericArguments = returnType.GetGenericArguments();
var length = parameterTypes.Length;
//private bool CompareGenericArguments(Type returnType, Type[] parameterTypes)
//{
// var genericArguments = returnType.GetGenericArguments();
// var length = parameterTypes.Length;
for (int i = 0; i < genericArguments.Length; i++)
{
if (i >= length) return false;
// for (int i = 0; i < genericArguments.Length; i++)
// {
// if (i >= length) return false;
if (IsValueTuple(genericArguments[i]))
{
// 如果当前参数也是 ValueTuple递归检查嵌套的泛型参数
if (!CompareGenericArguments(genericArguments[i], parameterTypes.Skip(i).ToArray()))
{
return false;
}
}
else if (genericArguments[i] != parameterTypes[i])
{
return false;
}
}
// if (IsValueTuple(genericArguments[i]))
// {
// // 如果当前参数也是 ValueTuple递归检查嵌套的泛型参数
// if (!CompareGenericArguments(genericArguments[i], parameterTypes.Skip(i).ToArray()))
// {
// return false;
// }
// }
// else if (genericArguments[i] != parameterTypes[i])
// {
// return false;
// }
// }
return true;
}
// return true;
//}
}