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); } }