private Node AddNode(ExpertSystem.Node.Node node)
        {
            var name = node.ToString();
            var nodeInfoVisualise = DefaultNodeInfo;

            if (_nodeInfoVisualises.ContainsKey(node.GetType()))
            {
                nodeInfoVisualise = _nodeInfoVisualises[node.GetType()];
            }
            switch (node.State)
            {
            case true:
                nodeInfoVisualise.FillColor = TrueStateColor;
                break;

            case false:
                nodeInfoVisualise.FillColor = FalseStateColor;
                break;

            case null:
                nodeInfoVisualise.FillColor = NullStateColor;
                break;
            }

            var isFact = node.GetType() == typeof(AtomNode) && _parser.Facts.Contains(((AtomNode)node).Name);

            return(AddNode(name, nodeInfoVisualise, isFact));
        }
 private void AddNodes(ExpertSystem.Node.Node currentNode, List <ExpertSystem.Node.Node> nodes)
 {
     foreach (var node in nodes)
     {
         var source = AddNode(currentNode);
         var target = AddNode(node);
         AddEdge(source, target);
         AddToGraph(node);
     }
 }
 private void AddToGraph(ExpertSystem.Node.Node atom)
 {
     if (atom.Visited)
     {
         return;
     }
     atom.Visited = true;
     foreach (var atomParent in atom.OperandParents)
     {
         AddToGraph(atomParent);
     }
     AddNodes(atom, atom.Children);
     if (atom.GetType() == typeof(ConnectorNode))
     {
         AddNodes(atom, ((ConnectorNode)atom).Operands);
     }
     atom.Visited = false;
 }