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); } }
public void Add(IElementBase element) { Elements.Add(element); if (element is IActiveElement) { Direction = FindDirection(element); } }
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(); // Схема не замкнута? }
public Pin(IElementBase element) { Element = element; }
public void Disconnect(IElementBase element) { Pins.First(i => i.ConnectedPin.Element.Equals(element))?.Disconnect(); }