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); }
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); } }