using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Shapes; namespace Serein.Workbench.Node.View { #region Model,不科学的全局变量 public class MyLine { public MyLine(Canvas canvas, BezierLine line) { Canvas = canvas; VirtualLine = line; canvas?.Children.Add(line); } public Canvas Canvas { get; set; } public BezierLine VirtualLine { get; set; } public void Remove() { Canvas?.Children.Remove(VirtualLine); } } public class ConnectingData { public JunctionControlBase StartJunction { get; set; } public JunctionControlBase CurrentJunction { get; set; } public Point StartPoint { get; set; } public MyLine VirtualLine { get; set; } /// /// 是否允许连接 /// public bool IsCanConnected { get { if(StartJunction is null || CurrentJunction is null ) { return false; } if (!StartPoint.Equals(CurrentJunction)) { return true; } else { // 自己连接自己的情况下,只能是从arg控制点连接到execute控制点。 if (CurrentJunction.JunctionType == Library.JunctionType.Execute && StartJunction.JunctionType == Library.JunctionType.ArgData) { return true; } if (CurrentJunction.JunctionType == Library.JunctionType.ArgData && StartJunction.JunctionType == Library.JunctionType.Execute) { // 需要是自己连接自己,且只能是从arg控制点连接到execute控制点。 return true; } return false; } } } /// /// 更新临时的连接线 /// /// public void UpdatePoint(Point point) { if (StartJunction is null || CurrentJunction is null ) { return; } if (StartJunction.JunctionType == Library.JunctionType.Execute || StartJunction.JunctionType == Library.JunctionType.ArgData) { VirtualLine.VirtualLine.UpdateStartPoints(point); } else { VirtualLine.VirtualLine.UpdateEndPoints(point); } } } public static class GlobalJunctionData { private static ConnectingData? myGlobalData; private static object _lockObj = new object(); /// /// 创建节点之间控制点的连接行为 /// public static ConnectingData? MyGlobalConnectingData { get => myGlobalData; set { lock (_lockObj) { myGlobalData ??= value; } } } /// /// 删除连接视觉效果 /// public static void OK() { myGlobalData?.VirtualLine.Remove(); myGlobalData = null; } } #endregion }