public IList <VisualUnit> GetAllDescendantsOfUnit(VisualUnit unit) { var descendants = new List <VisualUnit>(); // descendants.Add(unit); var visited = new Dictionary <VisualUnit, bool>(); descendants.AddRange(GetDescendantsOfUnit(unit, visited)); return(descendants); }
public void Connect(VisualUnit source, string sourcePort, VisualUnit sink, string sinkPort) { if (source != null && source != null) { var sourceConnector = source.Connectors.FirstOrDefault(c => c.Name == sourcePort); var sinkConnector = sink.Connectors.FirstOrDefault(c => c.Name == sinkPort); if (sourceConnector != null && sinkConnector != null) { var newCon = new Connection() { Source = sourceConnector, Sink = sinkConnector }; sourceConnector.IsConnected = true; sinkConnector.IsConnected = true; newCon.UpdatePathGeometry(); Connections.Add(newCon); } } }
IList <VisualUnit> GetDescendantsOfUnit(VisualUnit unit, Dictionary <VisualUnit, bool> visited) { var descendants = new List <VisualUnit>(); foreach (var outgoing in GetAllOutputStreams(unit)) { if (!visited.ContainsKey(outgoing.Sink.Owner)) { descendants.Add(outgoing.Sink.Owner); visited.Add(outgoing.Sink.Owner, true); } } foreach (var descendant in descendants.ToArray()) { var otherNodes = GetDescendantsOfUnit(descendant, visited); descendants.AddRange(otherNodes); } return(descendants); }
public IList <Connection> GetAllOutputStreams(VisualUnit unit) { return(Connections.Where(c => c.Source.Owner == unit).ToList()); }