private Direction FindDirection(IElementBase element) { if (element is Node) { if (element.Equals(Node_1)) { return(Direction.N1toN2); } else { return(Direction.N2toN1); } } var e = element; var passedE = new List <IElementBase>(); do { passedE.Add(e); e = element.Pins.First(i => !passedE.Exists(j => j.Equals(i.ConnectedPin.Element))).ConnectedPin.Element; } while (e is Node); if (element.Equals(Node_1)) { return(Direction.N1toN2); } else { return(Direction.N2toN1); } }
private Node FillBranches(Branch branch, IElementBase previousElement, IElementBase element, List <IElementBase> passedElements) { branch.Add(element); passedElements.Add(element); // мб сократить кол во вызовов add foreach (var pin in element.Pins) { if (!previousElement.Equals(pin.ConnectedPin.Element)) { if (pin.ConnectedPin.Element is Node) { branch.Node_2 = pin.ConnectedPin.Element as Node; return(pin.ConnectedPin.Element as Node); } else { return(FillBranches(branch, element, pin.ConnectedPin.Element, passedElements)); } } } throw new InvalidOperationException(); // Схема не замкнута? }