コード例 #1
0
        internal void Clear()
        {
            Element toDel;

            while ((toDel = ConnectorsToDraw.FirstOrDefault(i => i is Element) as Element) != null)
            {
                RemoveElement(toDel);
            }
        }
コード例 #2
0
        public void RemoveConnector(Connector connector)
        {
            Node nodea = connector.NodeA;
            Node nodeb = connector.NodeB;

            Connectors.Remove(connector);                                               //удаление из отрисовки
            ConnectorsToDraw.Remove(connector);
            nodea.Connections.Remove(nodeb);                                            //отвязка соединителя
            nodeb.Connections.Remove(nodea);
        }
コード例 #3
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);
        }
コード例 #4
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);
            }
        }
コード例 #5
0
        public void RemoveElement(Element element)
        {
            Node nodea = element.NodeA;
            Node nodeb = element.NodeB;

            if (element is Reohord)
            {
                Reohord reohord = element as Reohord;
                Node    nodec   = reohord.NodeC;
                RemoveConnector(reohord.ResistorAC);
                RemoveConnector(reohord.ResistorBC);
                Connectors.Remove(reohord);
                ConnectorsToDraw.Remove(reohord);
                Nodes.Remove(nodec);
                while (nodec.Connections.Count > 0)
                {
                    RemoveConnector(nodec.Connections.Values.First());
                }
            }
            else
            {
                RemoveConnector(element);
            }

            Nodes.Remove(nodea);                                                        //удаление пинов из отрисовки
            Nodes.Remove(nodeb);

            while (nodea.Connections.Count > 0)                                         //удаление соединителей, связанных с нодами
            {
                RemoveConnector(nodea.Connections.Values.First());
            }
            while (nodeb.Connections.Count > 0)
            {
                RemoveConnector(nodeb.Connections.Values.First());
            }
        }