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);
        }
Exemple #2
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);
            }
        }
Exemple #3
0
 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;
 }
Exemple #4
0
        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;
        }
Exemple #5
0
        //断开连接
        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);
        }
Exemple #6
0
        //连接
        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);
 }
Exemple #9
0
 public DisconnectCommand(BaseGraph graph, BaseConnection connection)
 {
     this.graph      = graph;
     this.connection = connection;
 }
Exemple #10
0
 public virtual BaseConnection NewConnection(BaseNode from, string fromPortName, BaseNode to, string toPortName)
 {
     return(BaseConnection.CreateNew <BaseConnection>(from, fromPortName, to, toPortName));
 }