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