Exemplo n.º 1
0
        public XInputControllerAnalogNode() : base(XInputControllerAnalogNodeFactory.TYPESTRING)
        {
            // Prepare Execution Connection
            conExecuted = new ExecutionConnectorViewModel();
            conExecute  = new ExecutionConnectorViewModel();

            this.InputExecutionConnectors.Add(conExecuted);
            this.OutputExecutionConnectors.Add(conExecute);

            // Prepare Connections
            conLeftThumbX   = new ConnectorViewModel("LeftThumbX", typeof(NodeDataNumeric));
            conLeftThumbY   = new ConnectorViewModel("LeftThumbY", typeof(NodeDataNumeric));
            conLeftTrigger  = new ConnectorViewModel("LeftTrigger", typeof(NodeDataNumeric));
            conRightThumbX  = new ConnectorViewModel("RightThumbX", typeof(NodeDataNumeric));
            conRightThumbY  = new ConnectorViewModel("RightThumbY", typeof(NodeDataNumeric));
            conRightTrigger = new ConnectorViewModel("RightTrigger", typeof(NodeDataNumeric));
            //conButtons = new ConnectorViewModel("Buttons", typeof(NodeDataXInputButtons));

            this.OutputConnectors.Add(conLeftThumbX);
            this.OutputConnectors.Add(conLeftThumbY);
            this.OutputConnectors.Add(conLeftTrigger);
            this.OutputConnectors.Add(conRightThumbX);
            this.OutputConnectors.Add(conRightThumbY);
            this.OutputConnectors.Add(conRightTrigger);
            //this.OutputConnectors.Add(conButtons);

            // State Values
            currentUser = UserIndex.One;
            controller  = new SharpDX.XInput.Controller(currentUser);

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Called when the user has started to drag out a connector, thus creating a new connection.
        /// </summary>
        public ExecutionConnectionViewModel ExecutionConnectionDragStarted(ExecutionConnectorViewModel draggedOutConnector, Point curDragPoint)
        {
            //
            // Create a new connection to add to the view-model.
            //
            var connection = new ExecutionConnectionViewModel();

            if (draggedOutConnector.Type == ConnectorType.Output)
            {
                //
                // The user is dragging out a source connector (an output) and will connect it to a destination connector (an input).
                //
                connection.SourceConnector      = draggedOutConnector;
                connection.DestConnectorHotspot = curDragPoint;
            }
            else
            {
                //
                // The user is dragging out a destination connector (an input) and will connect it to a source connector (an output).
                //
                connection.DestConnector          = draggedOutConnector;
                connection.SourceConnectorHotspot = curDragPoint;
            }

            //
            // Add the new connection to the view-model.
            //
            this.Network.ExecutionConnections.Add(connection);

            return(connection);
        }
Exemplo n.º 3
0
        //public override string Note { get { } }

        public ExecuteRoutingNode() : base(ExecuteRoutingNodeFactory.TYPESTRING)
        {
            // Prepare Execution Connection
            conExecuted = new ExecutionConnectorViewModel();
            conExecute  = new ExecutionConnectorViewModel();

            this.InputExecutionConnectors.Add(conExecuted);
            this.OutputExecutionConnectors.Add(conExecute);
        }
Exemplo n.º 4
0
        public ExecuteRoutingNode(JObject data, Guid[] executeIn, Guid[] executeOut, Guid[] dataIn, Guid[] dataOut) : base(ExecuteRoutingNodeFactory.TYPESTRING)
        {
            // Prepare Execution Connection
            conExecuted = new ExecutionConnectorViewModel(executeIn[0]);
            conExecute  = new ExecutionConnectorViewModel(executeOut[0]);

            this.InputExecutionConnectors.Add(conExecuted);
            this.OutputExecutionConnectors.Add(conExecute);

            // Set Name
            //Name = (string)data["name"];
        }
Exemplo n.º 5
0
        public XInputControllerDigitalNode(JObject data, Guid[] executeIn, Guid[] executeOut, Guid[] dataIn, Guid[] dataOut) : base(XInputControllerDigitalNodeFactory.TYPESTRING)
        {
            // Prepare Execution Connection
            conExecuted = new ExecutionConnectorViewModel(executeIn[0]);
            conExecute  = new ExecutionConnectorViewModel(executeOut[0]);

            this.InputExecutionConnectors.Add(conExecuted);
            this.OutputExecutionConnectors.Add(conExecute);

            // Prepare Connections
            conDPadUp        = new ConnectorViewModel("DPadUp", typeof(NodeDataBoolean), dataOut[0]);
            conDPadDown      = new ConnectorViewModel("DPadDown", typeof(NodeDataBoolean), dataOut[1]);
            conDPadLeft      = new ConnectorViewModel("DPadLeft", typeof(NodeDataBoolean), dataOut[2]);
            conDPadRight     = new ConnectorViewModel("DPadRight", typeof(NodeDataBoolean), dataOut[3]);
            conStart         = new ConnectorViewModel("Start", typeof(NodeDataBoolean), dataOut[4]);
            conBack          = new ConnectorViewModel("Back", typeof(NodeDataBoolean), dataOut[5]);
            conLeftThumb     = new ConnectorViewModel("LeftThumb", typeof(NodeDataBoolean), dataOut[6]);
            conRightThumb    = new ConnectorViewModel("RightThumb", typeof(NodeDataBoolean), dataOut[7]);
            conLeftShoulder  = new ConnectorViewModel("LeftShoulder", typeof(NodeDataBoolean), dataOut[8]);
            conRightShoulder = new ConnectorViewModel("RightShoulder", typeof(NodeDataBoolean), dataOut[9]);
            conA             = new ConnectorViewModel("A", typeof(NodeDataBoolean), dataOut[10]);
            conB             = new ConnectorViewModel("B", typeof(NodeDataBoolean), dataOut[11]);
            conX             = new ConnectorViewModel("X", typeof(NodeDataBoolean), dataOut[12]);
            conY             = new ConnectorViewModel("Y", typeof(NodeDataBoolean), dataOut[13]);

            this.OutputConnectors.Add(conDPadUp);
            this.OutputConnectors.Add(conDPadDown);
            this.OutputConnectors.Add(conDPadLeft);
            this.OutputConnectors.Add(conDPadRight);
            this.OutputConnectors.Add(conStart);
            this.OutputConnectors.Add(conBack);
            this.OutputConnectors.Add(conLeftThumb);
            this.OutputConnectors.Add(conRightThumb);
            this.OutputConnectors.Add(conLeftShoulder);
            this.OutputConnectors.Add(conRightShoulder);
            this.OutputConnectors.Add(conA);
            this.OutputConnectors.Add(conB);
            this.OutputConnectors.Add(conX);
            this.OutputConnectors.Add(conY);

            // Set Name
            Name = (string)data["name"];

            // State Values
            if (!Enum.TryParse <UserIndex>((string)data["currentUser"], out currentUser))
            {
                currentUser = UserIndex.One;
            }
            controller = new SharpDX.XInput.Controller(currentUser);

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 6
0
        public IntervalTriggerNode() : base(IntervalTriggerNodeFactory.TYPESTRING)
        {
            // Prepare Connections
            conExecute = new ExecutionConnectorViewModel();
            this.OutputExecutionConnectors.Add(conExecute);

            //diposeInterlock = new Semaphore(0, 1);

            // State Value
            this.period = 100;
            worker      = new Thread(DoWork);

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 7
0
        public XInputControllerAnalogNode(JObject data, Guid[] executeIn, Guid[] executeOut, Guid[] dataIn, Guid[] dataOut) : base(XInputControllerAnalogNodeFactory.TYPESTRING)
        {
            // Prepare Execution Connection
            conExecuted = new ExecutionConnectorViewModel(executeIn[0]);
            conExecute  = new ExecutionConnectorViewModel(executeOut[0]);

            this.InputExecutionConnectors.Add(conExecuted);
            this.OutputExecutionConnectors.Add(conExecute);

            // Prepare Connections
            conLeftThumbX   = new ConnectorViewModel("LeftThumbX", typeof(NodeDataNumeric), dataOut[0]);
            conLeftThumbY   = new ConnectorViewModel("LeftThumbY", typeof(NodeDataNumeric), dataOut[1]);
            conLeftTrigger  = new ConnectorViewModel("LeftTrigger", typeof(NodeDataNumeric), dataOut[2]);
            conRightThumbX  = new ConnectorViewModel("RightThumbX", typeof(NodeDataNumeric), dataOut[3]);
            conRightThumbY  = new ConnectorViewModel("RightThumbY", typeof(NodeDataNumeric), dataOut[4]);
            conRightTrigger = new ConnectorViewModel("RightTrigger", typeof(NodeDataNumeric), dataOut[5]);

            //if (dataIn.Length > 5)
            //{
            //    conButtons = new ConnectorViewModel("Buttons", typeof(NodeDataXInputButtons), dataOut[6]);
            //}
            //else
            //{
            //    conButtons = new ConnectorViewModel("Buttons", typeof(NodeDataXInputButtons));
            //}


            this.OutputConnectors.Add(conLeftThumbX);
            this.OutputConnectors.Add(conLeftThumbY);
            this.OutputConnectors.Add(conLeftTrigger);
            this.OutputConnectors.Add(conRightThumbX);
            this.OutputConnectors.Add(conRightThumbY);
            this.OutputConnectors.Add(conRightTrigger);
            //this.OutputConnectors.Add(conButtons);

            // Set Name
            Name = (string)data["name"];

            // State Values
            if (!Enum.TryParse <UserIndex>((string)data["currentUser"], out currentUser))
            {
                currentUser = UserIndex.One;
            }
            controller = new SharpDX.XInput.Controller(currentUser);

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 8
0
        public SetVariableNode() : base(SetVariableNodeFactory.TYPESTRING)
        {
            // Prepare Connections
            conExecute = new ExecutionConnectorViewModel();
            conIn      = new ConnectorViewModel("Set", typeof(INodeData));

            this.InputExecutionConnectors.Add(conExecute);
            this.InputConnectors.Add(conIn);

            // State Values
            VarName = null;
            Value   = null;

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 9
0
        public XInputControllerDigitalNode() : base(XInputControllerDigitalNodeFactory.TYPESTRING)
        {
            // Prepare Execution Connection
            conExecuted = new ExecutionConnectorViewModel();
            conExecute  = new ExecutionConnectorViewModel();

            this.InputExecutionConnectors.Add(conExecuted);
            this.OutputExecutionConnectors.Add(conExecute);

            // Prepare Connections
            conDPadUp        = new ConnectorViewModel("DPadUp", typeof(NodeDataBoolean));
            conDPadDown      = new ConnectorViewModel("DPadDown", typeof(NodeDataBoolean));
            conDPadLeft      = new ConnectorViewModel("DPadLeft", typeof(NodeDataBoolean));
            conDPadRight     = new ConnectorViewModel("DPadRight", typeof(NodeDataBoolean));
            conStart         = new ConnectorViewModel("Start", typeof(NodeDataBoolean));
            conBack          = new ConnectorViewModel("Back", typeof(NodeDataBoolean));
            conLeftThumb     = new ConnectorViewModel("LeftThumb", typeof(NodeDataBoolean));
            conRightThumb    = new ConnectorViewModel("RightThumb", typeof(NodeDataBoolean));
            conLeftShoulder  = new ConnectorViewModel("LeftShoulder", typeof(NodeDataBoolean));
            conRightShoulder = new ConnectorViewModel("RightShoulder", typeof(NodeDataBoolean));
            conA             = new ConnectorViewModel("A", typeof(NodeDataBoolean));
            conB             = new ConnectorViewModel("B", typeof(NodeDataBoolean));
            conX             = new ConnectorViewModel("X", typeof(NodeDataBoolean));
            conY             = new ConnectorViewModel("Y", typeof(NodeDataBoolean));

            this.OutputConnectors.Add(conDPadUp);
            this.OutputConnectors.Add(conDPadDown);
            this.OutputConnectors.Add(conDPadLeft);
            this.OutputConnectors.Add(conDPadRight);
            this.OutputConnectors.Add(conStart);
            this.OutputConnectors.Add(conBack);
            this.OutputConnectors.Add(conLeftThumb);
            this.OutputConnectors.Add(conRightThumb);
            this.OutputConnectors.Add(conLeftShoulder);
            this.OutputConnectors.Add(conRightShoulder);
            this.OutputConnectors.Add(conA);
            this.OutputConnectors.Add(conB);
            this.OutputConnectors.Add(conX);
            this.OutputConnectors.Add(conY);

            // State Values
            currentUser = UserIndex.One;
            controller  = new SharpDX.XInput.Controller(currentUser);

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 10
0
        public ForkNode() : base(ForkNodeFactory.TYPESTRING)
        {
            // Prepare Connections
            conExecuteIn  = new ExecutionConnectorViewModel();
            conExecuteOut = new ExecutionConnectorViewModel();
            conIn         = new ConnectorViewModel("Set", typeof(NodeDataBoolean));

            this.InputExecutionConnectors.Add(conExecuteIn);
            this.OutputExecutionConnectors.Add(conExecuteOut);
            this.InputConnectors.Add(conIn);

            // State Values
            Value = null;

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 11
0
        public SetVariableNode(JObject data, Guid[] executeIn, Guid[] executeOut, Guid[] dataIn, Guid[] dataOut) : base(SetVariableNodeFactory.TYPESTRING)
        {
            // Prepare Connections
            conExecute = new ExecutionConnectorViewModel(executeIn[0]);
            conIn      = new ConnectorViewModel("Set", typeof(INodeData), dataIn[0]);

            this.InputExecutionConnectors.Add(conExecute);
            this.InputConnectors.Add(conIn);

            // Set Name
            Name = (string)data["name"];

            // State Values
            VarName = (string)data["varname"];

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 12
0
        public IntervalTriggerNode(JObject data, Guid[] executeIn, Guid[] executeOut, Guid[] dataIn, Guid[] dataOut)
        {
            // Prepare Connections
            conExecute = new ExecutionConnectorViewModel(executeOut[0]);
            this.OutputExecutionConnectors.Add(conExecute);

            //diposeInterlock = new Semaphore(0, 1);

            // Set Name
            Name = (string)data["name"];

            // State Value
            this.period = (int)data["period"];
            worker      = new Thread(DoWork);

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 13
0
        /// <summary>
        /// Called to query the application for feedback while the user is dragging the connection.
        /// </summary>
        public void QueryExecutionConnnectionFeedback(ExecutionConnectorViewModel draggedOutConnector, ExecutionConnectorViewModel draggedOverConnector, out object feedbackIndicator, out bool connectionOk)
        {
            if (draggedOutConnector == draggedOverConnector)
            {
                //
                // Can't connect to self!
                // Provide feedback to indicate that this connection is not valid!
                //
                feedbackIndicator = new ConnectionBadIndicator();
                connectionOk      = false;
            }
            else
            {
                var sourceConnector = draggedOutConnector;
                var destConnector   = draggedOverConnector;

                //
                // Only allow connections from output connector to input connector (ie each
                // connector must have a different type).
                // Also only allocation from one node to another, never one node back to the same node.
                //
                connectionOk = sourceConnector.ParentNode != destConnector.ParentNode &&
                               sourceConnector.Type != destConnector.Type;

                if (connectionOk)
                {
                    //
                    // Yay, this is a valid connection!
                    // Provide feedback to indicate that this connection is ok!
                    //
                    feedbackIndicator = new ConnectionOkIndicator();
                }
                else
                {
                    //
                    // Connectors with the same connector type (eg input & input, or output & output)
                    // can't be connected.
                    // Only connectors with separate connector type (eg input & output).
                    // Provide feedback to indicate that this connection is not valid!
                    //
                    feedbackIndicator = new ConnectionBadIndicator();
                }
            }
        }
Exemplo n.º 14
0
        public ValueBufferNode(JObject data, Guid[] executeIn, Guid[] executeOut, Guid[] dataIn, Guid[] dataOut) : base(ValueBufferNodeFactory.TYPESTRING)
        {
            // Prepare Connections
            conExecute = new ExecutionConnectorViewModel(executeIn[0]);
            conIn      = new ConnectorViewModel("Set", typeof(INodeData), dataIn[0]);
            conOut     = new ConnectorViewModel("Value", typeof(INodeData), dataOut[0]);

            this.InputExecutionConnectors.Add(conExecute);
            this.InputConnectors.Add(conIn);
            this.OutputConnectors.Add(conOut);

            // Set Name
            Name = (string)data["name"];

            // State Values
            //Value = (Double)data["value"]; // no way to serilize generic values yet

            // Create Dialog
            dlgEdit = new PropertyDialog();
        }
Exemplo n.º 15
0
        // Load Data Constructor
        public EmoteSetVariableNode(JObject data, Guid[] executeIn, Guid[] executeOut, Guid[] dataIn, Guid[] dataOut)
        {
            // Prepare Connections
            conExecute = new ExecutionConnectorViewModel(executeIn[0]);
            inputValue = new ConnectorViewModel("Value", typeof(NodeDataNumeric), dataIn[0]);
            if (dataIn.Length > 1) // allow loading older node graph saves
            {
                inputFrameCount = new ConnectorViewModel("FrameCount", typeof(NodeDataNumeric), dataIn[1]);
                inputEasing     = new ConnectorViewModel("Easing", typeof(NodeDataNumeric), dataIn[2]);
            }
            else
            {
                inputFrameCount = new ConnectorViewModel("FrameCount", typeof(NodeDataNumeric));
                inputEasing     = new ConnectorViewModel("Easing", typeof(NodeDataNumeric));
            }

            this.InputExecutionConnectors.Add(conExecute);
            this.InputConnectors.Add(inputValue);
            this.InputConnectors.Add(inputFrameCount);
            this.InputConnectors.Add(inputEasing);

            // Set Name
            Name = (string)data["name"];

            // State Values
            value      = (float)data["value"];
            frameCount = (float)data["frameCount"];
            easing     = (float)data["easing"];
            varName    = (string)data["varName"];

            // Create Dialog
            dlgEdit = new PropertyDialog();

            // Get Character Context
            charContext = CharacterContext.GetCharacterContext();
        }
Exemplo n.º 16
0
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Dictionary <Guid, Guid> Remap = new Dictionary <Guid, Guid>();

            Func <Guid, Guid> convertGuid = ((input) =>
            {
                if (Remap.ContainsKey(input))
                {
                    return(Remap[input]);
                }
                Remap[input] = Guid.NewGuid();
                return(Remap[input]);
            });

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                // Take a copy of the selected nodes list so we can delete nodes while iterating.
                var nodesCopy = this.nodeGraph1.ViewModel.Network.Nodes.ToArray();
                foreach (var node in nodesCopy)
                {
                    //if (node.IsSelected)
                    {
                        nodeGraph1.ViewModel.DeleteNode(node);
                        node.Dispose();
                    }
                }

                {
                    JObject obj = JObject.Parse(File.ReadAllText(openFileDialog1.FileName));

                    if (obj["nodes"] != null && obj["nodes"].Type == JTokenType.Array)
                    {
                        List <NodeViewModel> nodeList = new List <NodeViewModel>();

                        JArray arr = (JArray)obj["nodes"];
                        arr.ToList().ForEach(dr =>
                        {
                            if (dr["type"] != null && dr["type"].Type == JTokenType.String)
                            {
                                string type = (string)dr["type"];
                                if (TypeToFactory.ContainsKey(type))
                                {
                                    Guid[] _ei = dr["ei"] != null && dr["ei"].Type == JTokenType.Array ? ((JArray)dr["ei"]).Select(dx => convertGuid(new Guid((string)dx))).ToArray() : new Guid[0];
                                    Guid[] _eo = dr["eo"] != null && dr["eo"].Type == JTokenType.Array ? ((JArray)dr["eo"]).Select(dx => convertGuid(new Guid((string)dx))).ToArray() : new Guid[0];
                                    Guid[] _di = dr["di"] != null && dr["di"].Type == JTokenType.Array ? ((JArray)dr["di"]).Select(dx => convertGuid(new Guid((string)dx))).ToArray() : new Guid[0];
                                    Guid[] _do = dr["do"] != null && dr["do"].Type == JTokenType.Array ? ((JArray)dr["do"]).Select(dx => convertGuid(new Guid((string)dx))).ToArray() : new Guid[0];

                                    NodeViewModel model = TypeToFactory[type].CreateNode((JObject)dr["data"], _ei, _eo, _di, _do);
                                    if (model != null)
                                    {
                                        nodeList.Add(model);

                                        model.X = dr["x"] != null && dr["x"].Type == JTokenType.Float ? (float)dr["x"] : 0f;
                                        model.Y = dr["y"] != null && dr["y"].Type == JTokenType.Float ? (float)dr["y"] : 0f;
                                        NodeViewModel created = nodeGraph1.ViewModel.CreateNode(model, /*position,*/ false);
                                    }
                                }
                            }
                        });

                        if (obj["dcons"] != null && obj["dcons"].Type == JTokenType.Array)
                        {
                            ((JArray)obj["dcons"]).ToList().ForEach(dr =>
                            {
                                if (dr != null && dr.Type == JTokenType.Object)
                                {
                                    Guid conSource = convertGuid(new Guid((string)(((JObject)dr)["s"])));
                                    Guid conDest   = convertGuid(new Guid((string)(((JObject)dr)["d"])));

                                    ConnectorViewModel conSource2 = nodeList.SelectMany(dx => dx.OutputConnectors).Where(dx => dx.Guid == conSource).FirstOrDefault();
                                    ConnectorViewModel conDest2   = nodeList.SelectMany(dx => dx.InputConnectors).Where(dx => dx.Guid == conDest).FirstOrDefault();

                                    if (conSource2 != null && conDest2 != null)
                                    {
                                        nodeGraph1.ViewModel.Network.Connections.Add(new ConnectionViewModel()
                                        {
                                            DestConnector   = conDest2,
                                            SourceConnector = conSource2
                                        });
                                    }
                                }
                            });
                        }

                        if (obj["econs"] != null && obj["econs"].Type == JTokenType.Array)
                        {
                            ((JArray)obj["econs"]).ToList().ForEach(dr =>
                            {
                                if (dr != null && dr.Type == JTokenType.Object)
                                {
                                    Guid conSource = convertGuid(new Guid((string)(((JObject)dr)["s"])));
                                    Guid conDest   = convertGuid(new Guid((string)(((JObject)dr)["d"])));

                                    ExecutionConnectorViewModel conSource2 = nodeList.SelectMany(dx => dx.OutputExecutionConnectors).Where(dx => dx.Guid == conSource).FirstOrDefault();
                                    ExecutionConnectorViewModel conDest2   = nodeList.SelectMany(dx => dx.InputExecutionConnectors).Where(dx => dx.Guid == conDest).FirstOrDefault();

                                    if (conSource2 != null && conDest2 != null)
                                    {
                                        nodeGraph1.ViewModel.Network.ExecutionConnections.Add(new ExecutionConnectionViewModel()
                                        {
                                            DestConnector   = conDest2,
                                            SourceConnector = conSource2
                                        });
                                    }
                                }
                            });
                        }

                        nodeList.ForEach(dr => dr.Start());
                    }
                }
            }
        }
Exemplo n.º 17
0
        private void appendToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                JObject obj = JObject.Parse(File.ReadAllText(openFileDialog1.FileName));

                if (obj["nodes"] != null && obj["nodes"].Type == JTokenType.Array)
                {
                    List <NodeViewModel> nodeList = new List <NodeViewModel>();

                    JArray arr = (JArray)obj["nodes"];
                    arr.ToList().ForEach(dr =>
                    {
                        if (dr["type"] != null && dr["type"].Type == JTokenType.String)
                        {
                            string type = (string)dr["type"];
                            if (TypeToFactory.ContainsKey(type))
                            {
                                Guid[] _ei = dr["ei"] != null && dr["ei"].Type == JTokenType.Array ? ((JArray)dr["ei"]).Select(dx => new Guid((string)dx)).ToArray() : new Guid[0];
                                Guid[] _eo = dr["eo"] != null && dr["eo"].Type == JTokenType.Array ? ((JArray)dr["eo"]).Select(dx => new Guid((string)dx)).ToArray() : new Guid[0];
                                Guid[] _di = dr["di"] != null && dr["di"].Type == JTokenType.Array ? ((JArray)dr["di"]).Select(dx => new Guid((string)dx)).ToArray() : new Guid[0];
                                Guid[] _do = dr["do"] != null && dr["do"].Type == JTokenType.Array ? ((JArray)dr["do"]).Select(dx => new Guid((string)dx)).ToArray() : new Guid[0];

                                NodeViewModel model = TypeToFactory[type].CreateNode((JObject)dr["data"], _ei, _eo, _di, _do);
                                if (model != null)
                                {
                                    nodeList.Add(model);

                                    model.X = dr["x"] != null && dr["x"].Type == JTokenType.Float ? (float)dr["x"] : 0f;
                                    model.Y = dr["y"] != null && dr["y"].Type == JTokenType.Float ? (float)dr["y"] : 0f;
                                    NodeViewModel created = nodeGraph1.ViewModel.CreateNode(model, /*position,*/ false);
                                }
                            }
                        }
                    });

                    if (obj["dcons"] != null && obj["dcons"].Type == JTokenType.Array)
                    {
                        ((JArray)obj["dcons"]).ToList().ForEach(dr =>
                        {
                            if (dr != null && dr.Type == JTokenType.Object)
                            {
                                Guid conSource = new Guid((string)(((JObject)dr)["s"]));
                                Guid conDest   = new Guid((string)(((JObject)dr)["d"]));

                                ConnectorViewModel conSource2 = nodeList.SelectMany(dx => dx.OutputConnectors).Where(dx => dx.Guid == conSource).FirstOrDefault();
                                ConnectorViewModel conDest2   = nodeList.SelectMany(dx => dx.InputConnectors).Where(dx => dx.Guid == conDest).FirstOrDefault();

                                if (conSource2 != null && conDest2 != null)
                                {
                                    nodeGraph1.ViewModel.Network.Connections.Add(new ConnectionViewModel()
                                    {
                                        DestConnector   = conDest2,
                                        SourceConnector = conSource2
                                    });
                                }
                            }
                        });
                    }

                    if (obj["econs"] != null && obj["econs"].Type == JTokenType.Array)
                    {
                        ((JArray)obj["econs"]).ToList().ForEach(dr =>
                        {
                            if (dr != null && dr.Type == JTokenType.Object)
                            {
                                Guid conSource = new Guid((string)(((JObject)dr)["s"]));
                                Guid conDest   = new Guid((string)(((JObject)dr)["d"]));

                                ExecutionConnectorViewModel conSource2 = nodeList.SelectMany(dx => dx.OutputExecutionConnectors).Where(dx => dx.Guid == conSource).FirstOrDefault();
                                ExecutionConnectorViewModel conDest2   = nodeList.SelectMany(dx => dx.InputExecutionConnectors).Where(dx => dx.Guid == conDest).FirstOrDefault();

                                if (conSource2 != null && conDest2 != null)
                                {
                                    nodeGraph1.ViewModel.Network.ExecutionConnections.Add(new ExecutionConnectionViewModel()
                                    {
                                        DestConnector   = conDest2,
                                        SourceConnector = conSource2
                                    });
                                }
                            }
                        });
                    }

                    nodeList.ForEach(dr => dr.Start());
                }
            }
        }
Exemplo n.º 18
0
        /// <summary>
        /// Retrieve a connection between the two connectors.
        /// Returns null if there is no connection between the connectors.
        /// </summary>
        public ExecutionConnectionViewModel FindExecutionConnection(ExecutionConnectorViewModel connector1, ExecutionConnectorViewModel connector2)
        {
            Trace.Assert(connector1.Type != connector2.Type);

            //
            // Figure out which one is the source connector and which one is the
            // destination connector based on their connector types.
            //
            var sourceConnector = connector1.Type == ConnectorType.Output ? connector1 : connector2;
            var destConnector   = connector1.Type == ConnectorType.Output ? connector2 : connector1;

            //
            // Now we can just iterate attached connections of the source
            // and see if it each one is attached to the destination connector.
            //

            foreach (var connection in sourceConnector.AttachedExecutionConnections)
            {
                if (connection.DestConnector == destConnector)
                {
                    //
                    // Found a connection that is outgoing from the source connector
                    // and incoming to the destination connector.
                    //
                    return(connection);
                }
            }

            return(null);
        }
Exemplo n.º 19
0
        /// <summary>
        /// Called when the user has finished dragging out the new connection.
        /// </summary>
        public void ExecutionConnectionDragCompleted(ExecutionConnectionViewModel newConnection, ExecutionConnectorViewModel connectorDraggedOut, ExecutionConnectorViewModel connectorDraggedOver)
        {
            if (connectorDraggedOver == null)
            {
                //
                // The connection was unsuccessful.
                // Maybe the user dragged it out and dropped it in empty space.
                //
                this.Network.ExecutionConnections.Remove(newConnection);
                return;
            }

            //
            // Only allow connections from output connector to input connector (ie each
            // connector must have a different type).
            // Also only allocation from one node to another, never one node back to the same node.
            //
            bool connectionOk = connectorDraggedOut.ParentNode != connectorDraggedOver.ParentNode &&
                                connectorDraggedOut.Type != connectorDraggedOver.Type;

            if (!connectionOk)
            {
                //
                // Connections between connectors that have the same type,
                // eg input -> input or output -> output, are not allowed,
                // Remove the connection.
                //
                this.Network.ExecutionConnections.Remove(newConnection);
                return;
            }

            //
            // The user has dragged the connection on top of another valid connector.
            //

            //
            // Remove any existing connection between the same two connectors.
            //
            var existingConnection = FindExecutionConnection(connectorDraggedOut, connectorDraggedOver);

            if (existingConnection != null)
            {
                this.Network.ExecutionConnections.Remove(existingConnection);
            }

            //
            // Finalize the connection by attaching it to the connector
            // that the user dragged the mouse over.
            //
            if (newConnection.DestConnector == null)
            {
                newConnection.DestConnector = connectorDraggedOver;
            }
            else
            {
                newConnection.SourceConnector = connectorDraggedOver;
            }
        }
Exemplo n.º 20
0
        private void duplicateNodesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string dmpCache = string.Empty;
            {
                List <FunctionalNetworkModel.NodeViewModel>                nodes                = this.nodeGraph1.ViewModel.Network.Nodes.Where(dr => dr.IsSelected).ToList();
                List <FunctionalNetworkModel.ConnectionViewModel>          connections          = nodes.SelectMany(dr => dr.AttachedConnections).Distinct().Where(dr => nodes.Contains(dr.DestConnector.ParentNode)).ToList();
                List <FunctionalNetworkModel.ExecutionConnectionViewModel> executionConnections = nodes.SelectMany(dr => dr.AttachedExecutionConnections).Distinct().Where(dr => nodes.Contains(dr.DestConnector.ParentNode)).ToList();

                JObject SaveData = new JObject();
                SaveData["nodes"] = JArray.FromObject(nodes
                                                      .Select(dr =>
                {
                    JObject tmp = new JObject();
                    tmp["type"] = dr.Type;
                    tmp["data"] = dr.Serialize();
                    tmp["x"]    = dr.X;
                    tmp["y"]    = dr.Y;
                    tmp["ei"]   = JArray.FromObject(dr.InputExecutionConnectors.Select(dx => dx.Guid));
                    tmp["eo"]   = JArray.FromObject(dr.OutputExecutionConnectors.Select(dx => dx.Guid));
                    tmp["di"]   = JArray.FromObject(dr.InputConnectors.Select(dx => dx.Guid));
                    tmp["do"]   = JArray.FromObject(dr.OutputConnectors.Select(dx => dx.Guid));
                    return(tmp);
                })
                                                      .ToList());
                SaveData["dcons"] = JArray.FromObject(connections
                                                      .Select(dr =>
                {
                    JObject tmp = new JObject();
                    tmp["s"]    = dr.SourceConnector.Guid;
                    tmp["d"]    = dr.DestConnector.Guid;
                    return(tmp);
                })
                                                      .Where(dr => dr != null)
                                                      .ToList());
                SaveData["econs"] = JArray.FromObject(executionConnections
                                                      .Select(dr =>
                {
                    JObject tmp = new JObject();
                    tmp["s"]    = dr.SourceConnector.Guid;
                    tmp["d"]    = dr.DestConnector.Guid;
                    return(tmp);
                })
                                                      .Where(dr => dr != null)
                                                      .ToList());

                dmpCache = SaveData.ToString();
            }
            {
                JObject obj = JObject.Parse(dmpCache);

                if (obj["nodes"] != null && obj["nodes"].Type == JTokenType.Array)
                {
                    List <NodeViewModel> nodeList = new List <NodeViewModel>();

                    JArray arr = (JArray)obj["nodes"];
                    arr.ToList().ForEach(dr =>
                    {
                        if (dr["type"] != null && dr["type"].Type == JTokenType.String)
                        {
                            string type = (string)dr["type"];
                            if (TypeToFactory.ContainsKey(type))
                            {
                                Guid[] _ei = dr["ei"] != null && dr["ei"].Type == JTokenType.Array ? ((JArray)dr["ei"]).Select(dx => new Guid((string)dx)).ToArray() : new Guid[0];
                                Guid[] _eo = dr["eo"] != null && dr["eo"].Type == JTokenType.Array ? ((JArray)dr["eo"]).Select(dx => new Guid((string)dx)).ToArray() : new Guid[0];
                                Guid[] _di = dr["di"] != null && dr["di"].Type == JTokenType.Array ? ((JArray)dr["di"]).Select(dx => new Guid((string)dx)).ToArray() : new Guid[0];
                                Guid[] _do = dr["do"] != null && dr["do"].Type == JTokenType.Array ? ((JArray)dr["do"]).Select(dx => new Guid((string)dx)).ToArray() : new Guid[0];

                                NodeViewModel model = TypeToFactory[type].CreateNode((JObject)dr["data"], _ei, _eo, _di, _do);
                                if (model != null)
                                {
                                    nodeList.Add(model);

                                    model.X = dr["x"] != null && dr["x"].Type == JTokenType.Float ? (float)dr["x"] : 0f;
                                    model.Y = dr["y"] != null && dr["y"].Type == JTokenType.Float ? (float)dr["y"] : 0f;
                                    NodeViewModel created = nodeGraph1.ViewModel.CreateNode(model, /*position,*/ false);
                                }
                            }
                        }
                    });

                    if (obj["dcons"] != null && obj["dcons"].Type == JTokenType.Array)
                    {
                        ((JArray)obj["dcons"]).ToList().ForEach(dr =>
                        {
                            if (dr != null && dr.Type == JTokenType.Object)
                            {
                                Guid conSource = new Guid((string)(((JObject)dr)["s"]));
                                Guid conDest   = new Guid((string)(((JObject)dr)["d"]));

                                ConnectorViewModel conSource2 = nodeList.SelectMany(dx => dx.OutputConnectors).Where(dx => dx.Guid == conSource).FirstOrDefault();
                                ConnectorViewModel conDest2   = nodeList.SelectMany(dx => dx.InputConnectors).Where(dx => dx.Guid == conDest).FirstOrDefault();

                                if (conSource2 != null && conDest2 != null)
                                {
                                    nodeGraph1.ViewModel.Network.Connections.Add(new ConnectionViewModel()
                                    {
                                        DestConnector   = conDest2,
                                        SourceConnector = conSource2
                                    });
                                }
                            }
                        });
                    }

                    if (obj["econs"] != null && obj["econs"].Type == JTokenType.Array)
                    {
                        ((JArray)obj["econs"]).ToList().ForEach(dr =>
                        {
                            if (dr != null && dr.Type == JTokenType.Object)
                            {
                                Guid conSource = new Guid((string)(((JObject)dr)["s"]));
                                Guid conDest   = new Guid((string)(((JObject)dr)["d"]));

                                ExecutionConnectorViewModel conSource2 = nodeList.SelectMany(dx => dx.OutputExecutionConnectors).Where(dx => dx.Guid == conSource).FirstOrDefault();
                                ExecutionConnectorViewModel conDest2   = nodeList.SelectMany(dx => dx.InputExecutionConnectors).Where(dx => dx.Guid == conDest).FirstOrDefault();

                                if (conSource2 != null && conDest2 != null)
                                {
                                    nodeGraph1.ViewModel.Network.ExecutionConnections.Add(new ExecutionConnectionViewModel()
                                    {
                                        DestConnector   = conDest2,
                                        SourceConnector = conSource2
                                    });
                                }
                            }
                        });
                    }

                    nodeList.ForEach(dr => dr.Start());
                }
            }
        }