Example #1
0
        public Element CreateElement(Type type, int x, int y)
        {
            if (type.BaseType.Name == "Element")
            {
                if (type.Name == "ResistorX" && Connectors.Count(i => i is ResistorX) > 0)
                {
                    throw new ResistorXPlacedException();
                }

                var element = Activator.CreateInstance(type) as Element;                //создание элемента

                Node pina = new Node();                                                 //создание пинов
                Node pinb = new Node();

                if (type.Name == "Reohord")                                             //реохорд
                {
                    Node pinc = new Node();

                    Reohord reohord = element as Reohord;
                    reohord.ResistorAC = new NoDrawConnector()
                    {
                        Resistance = 100
                    };                                                                  //создание соединителей
                    reohord.ResistorBC = new NoDrawConnector();
                    ConnectNodes(pina, pinc, reohord.ResistorAC);                       //соединение пинов при помощи коннекторов
                    ConnectNodes(pinb, pinc, reohord.ResistorBC);

                    reohord.LengthAC = 50;

                    reohord.NodeA = pina;                                               //привязка ножек к нодам
                    reohord.NodeB = pinb;
                    reohord.NodeC = pinc;
                    Nodes.Add(reohord.NodeC);                                           //отрисовка нода C
                    ConnectorsToDraw.Add(element);                                      //отрисовка реохорда
                }
                else
                {
                    ConnectNodes(pina, pinb, element);                                  //соединение пинов при помощи элемента
                }
                Nodes.Add(element.NodeA);                                               //отрисовка нодов
                Nodes.Add(element.NodeB);

                element.X = x;                                                          //перемещение по координатам (учитывая обновление свойств X и Y у пинов)
                element.Y = y;
                return(element);
            }
            return(null);
        }
Example #2
0
        public void ConnectNodes(Node nodea, Node nodeb, Connector connector)
        {
            if ((nodea.Connections.Keys.Count(i => i == nodeb) > 0) || (nodeb.Connections.Keys.Count(i => i == nodea) > 0))
            {
                return;
            }

            nodea.Connections.Add(nodeb, connector);
            nodeb.Connections.Add(nodea, connector);
            connector.NodeA = nodea;
            connector.NodeB = nodeb;

            Connectors.Add(connector);
            if (!(connector is NoDrawConnector))
            {
                ConnectorsToDraw.Add(connector);
            }
        }