public bool FindChainTo(NodeModel n, List <int> find, HashSet <int> traversed = null) { if (traversed == null) { traversed = new HashSet <int>(); } if (traversed.Contains(n.ID)) { return(false); } traversed.Add(n.ID); bool pathFound = false; if (n.XNode.Dependencies == null) { return(false); } foreach (var d in n.XNode.Dependencies) { var sub = Model.NodeModels[d]; bool addLink = false; if (find.Contains(d)) { addLink = true; find.Remove(d); } if (find.Count > 0 && FindChainTo(sub, find, traversed)) { addLink = true; } if (addLink) { PositionMap[sub.ID] = sub; n.AddIntermediateDependency(sub); pathFound = true; } } return(pathFound); }
public bool FindChainTo(NodeModel n, List<int> find, HashSet<int> traversed = null) { if (traversed == null) traversed = new HashSet<int>(); if (traversed.Contains(n.ID)) return false; traversed.Add(n.ID); bool pathFound = false; if (n.XNode.Dependencies == null) return false; foreach (var d in n.XNode.Dependencies) { var sub = Model.NodeModels[d]; bool addLink = false; if (find.Contains(d)) { addLink = true; find.Remove(d); } if (find.Count > 0 && FindChainTo(sub, find, traversed)) addLink = true; if (addLink) { PositionMap[sub.ID] = sub; n.AddIntermediateDependency(sub); pathFound = true; } } return pathFound; }