private int VerticalComparer(BaseConnection x, BaseConnection y) { // 若需要重新排序的是input接口,则根据FromNode排序 // 若需要重新排序的是output接口,则根据ToNode排序 var nodeX = direction == Direction.Input ? x.FromNode : x.ToNode; var nodeY = direction == Direction.Input ? y.FromNode : y.ToNode; // 则使用x坐标比较排序 // 遵循从左到右 if (nodeX.Position.x < nodeY.Position.x) { return(-1); } if (nodeX.Position.x > nodeY.Position.x) { return(1); } // 若节点的x坐标相同,则使用y坐标比较排序 // 遵循从上到下 if (nodeX.Position.y < nodeY.Position.y) { return(-1); } if (nodeX.Position.y > nodeY.Position.y) { return(1); } return(0); }
public void Do() { replacedConnections.Clear(); if (from.Ports[fromPortName].capacity == BasePort.Capacity.Single) { foreach (var connection in from.Ports[fromPortName].Connections) { replacedConnections.Add(connection); } } if (to.Ports[toPortName].capacity == BasePort.Capacity.Single) { foreach (var connection in to.Ports[toPortName].Connections) { replacedConnections.Add(connection); } } if (connection == null) { connection = graph.Connect(from, fromPortName, to, toPortName); } else { graph.Connect(connection); } }
public ConnectCommand(BaseGraph graph, BaseConnection connection) { this.graph = graph; this.connection = connection; this.from = connection.FromNode; this.fromPortName = connection.FromPortName; this.to = connection.ToNode; this.toPortName = connection.ToPortName; }
public ConnectionRedirectCommand(BaseGraph graph, BaseConnection connection, BaseNode from, string fromPortName, BaseNode to, string toPortName) { this.graph = graph; this.connection = connection; newFrom = from; newFromPortName = fromPortName; newTo = to; newToPortName = toPortName; }
//断开连接 public void Disconnect(BaseConnection connection) { if (!connections.Contains(connection)) { return; } connection.FromNode.Ports.TryGetValue(connection.FromPortName, out BasePort fromPort); fromPort.DisconnectTo(connection); connection.ToNode.Ports.TryGetValue(connection.ToPortName, out BasePort toPort); toPort.DisconnectTo(connection); connections.Remove(connection); onDisconnected?.Invoke(connection); }
//连接 public bool Connect(BaseConnection connection) { if (!Nodes.TryGetValue(connection.FromNodeGUID, out var fromNode)) { return(false); } if (!fromNode.Ports.TryGetValue(connection.FromPortName, out var fromPort)) { return(false); } if (!Nodes.TryGetValue(connection.ToNodeGUID, out var toNode)) { return(false); } if (!toNode.Ports.TryGetValue(connection.ToPortName, out var toPort)) { return(false); } var tmpConnection = fromPort.Connections.FirstOrDefault(tmp => tmp.ToNodeGUID == connection.ToNodeGUID && tmp.ToPortName == connection.ToPortName); if (tmpConnection != null) { return(false); } if (fromPort.capacity == BasePort.Capacity.Single) { Disconnect(fromPort); } if (toPort.capacity == BasePort.Capacity.Single) { Disconnect(toPort); } connection.Enable(this); connections.Add(connection); fromPort.ConnectTo(connection); toPort.ConnectTo(connection); onConnected?.Invoke(connection); return(true); }
public void DisconnectTo(BaseConnection connection) { connections.Remove(connection); Resort(); onDisconnected?.Invoke(connection); }
public void ConnectTo(BaseConnection connection) { connections.Add(connection); Resort(); onConnected?.Invoke(connection); }
public DisconnectCommand(BaseGraph graph, BaseConnection connection) { this.graph = graph; this.connection = connection; }
public virtual BaseConnection NewConnection(BaseNode from, string fromPortName, BaseNode to, string toPortName) { return(BaseConnection.CreateNew <BaseConnection>(from, fromPortName, to, toPortName)); }