예제 #1
0
        private void DeleteNode(FSMNodeView node)
        {
            var transitionViews = ports.ToList().SelectMany(p => p.connections).OfType <FSMEdgeView>().Distinct();

            var transitionsToDelete = _stateMachineGraph.Connections(node.StateNode);

            foreach (var toDelete in transitionViews.Where(tv => transitionsToDelete.Contains(tv.Transition)).ToArray())
            {
                DeleteEdge(toDelete);
            }

            RemoveElement(node);
            _stateMachineGraph.RemoveNode(node.StateNode);
        }
예제 #2
0
        public void LoadGraph(FSMGraph stateMachineGraph)
        {
            // Clear
            edges.ToList().ForEach(e => RemoveElement(e));
            nodes.ToList().ForEach(n => RemoveElement(n));

            _stateMachineGraph = stateMachineGraph;

            // Load nodes
            foreach (var node in stateMachineGraph.Nodes)
            {
                var nodeView = new FSMNodeView(node);
                AddElement(nodeView);
            }

            // Restore connections
            foreach (var transition in stateMachineGraph.Transitions)
            {
                var viewFrom = ViewFor(transition.From);
                var viewTo   = ViewFor(transition.To);

                Port outputPort = viewFrom.outputContainer.Query <Port>().First();
                Port inputPort  = viewTo.inputContainer.Query <Port>().First();

                var edge = new FSMEdgeView(transition)
                {
                    input  = inputPort,
                    output = outputPort,
                };

                outputPort.Connect(edge);
                inputPort.Connect(edge);

                AddElement(edge);
            }
        }