internal void Clear() { Element toDel; while ((toDel = ConnectorsToDraw.FirstOrDefault(i => i is Element) as Element) != null) { RemoveElement(toDel); } }
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); }
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); }
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); } }
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()); } }