private void RewireBetweenElements(string deleteElement, string avoidElement) { string targetElementA = ""; string targetElementB = ""; string targetDotA = ""; string targetDotB = ""; Image img = null; foreach (SpecificElement se in lc.ec.GetAllElements()) { if (se.GetName() == deleteElement) { img = se.GetElement(); foreach (Polyline p in se.GetPolylineList()) { foreach (Wire w2 in lc.wList) { if (p.Name == w2.GetName()) { if (w2.elementA != avoidElement && w2.elementA != deleteElement && w2.elementA != targetElementA && w2.elementA != targetElementB) { if (targetElementA == "") { targetElementA = w2.elementA; } else if (targetElementB == "") { targetElementB = w2.elementA; } } else if (w2.elementB != avoidElement && w2.elementB != deleteElement && w2.elementB != targetElementA && w2.elementB != targetElementB) { if (targetElementA == "") { targetDotA = w2.dotA; targetElementA = w2.elementB; } else if (targetElementB == "") { targetDotB = w2.dotB; targetElementB = w2.elementB; } } } } } foreach (Polyline p in se.GetPolylineList()) { foreach (Wire w2 in lc.wList) { if (targetElementA == w2.elementA) { targetDotA = w2.dotA; } if (targetElementA == w2.elementB) { targetDotA = w2.dotB; } if (targetElementB == w2.elementA) { targetDotB = w2.dotA; } if (targetElementB == w2.elementB) { targetDotB = w2.dotB; } } } } } cogc.DeleteElement(img); if (targetElementA != "" && targetElementB != "") { Polyline newPl = CreatePolyline(); Panel.SetZIndex(newPl, 1); newPl.Name = targetElementA + targetElementB + queue; w = new Wire(targetElementA + targetElementB + queue); w.elementA = targetElementA; w.elementB = targetElementB; w.dotA = targetDotA; w.dotB = targetDotB; w.AddPolyline(newPl); lc.wList.Add(w); lc.ec.AddLineForElement(targetElementA, newPl); lc.ec.AddLineForElement(targetElementB, newPl); lc.ec.AddConnectionCountToSpecificElement(targetElementA); lc.ec.AddConnectionCountToSpecificElement(targetElementB); lc.ec.AddElementToParentElement(targetElementA, targetElementB); lc.ec.AddElementToParentElement(targetElementB, targetElementA); previousElementName = ""; UpdateWireLocation(targetDotA, targetDotB, newPl); } }
public void DrawWireBetweenElements(Image dot, string name, ElementControl ec, List <Dot> dList) { if (!ec.GetConnectionAvailability(name) && !isDotOccupied(dot, dList)) { dot.Source = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + "WireDots/dotRed.png")); if (!turn && previousElementName != name && previousDotName != dot.Tag.ToString()) { Polyline pl = CreatePolyline(); Panel.SetZIndex(pl, 0); //MessageBox.Show(Panel.GetZIndex(pl).ToString()); previousElementName = name; previousDotName = dot.Tag.ToString(); previousLine = pl; previousDot = dot; turn = true; BeginDrawing(); } else if (previousElementName != name && previousDotName != dot.Tag.ToString()) { Panel.SetZIndex(previousLine, 2); ec.AddConnectionCountToSpecificElement(previousElementName); ec.AddConnectionCountToSpecificElement(name); ec.EnableConnectionAvailability(previousElementName); ec.EnableConnectionAvailability(name); previousLine.Name = previousElementName + name + queue; w = new Wire(previousLine.Name); w.elementA = previousElementName; w.elementB = name; w.dotA = previousDotName; w.dotB = dot.Tag.ToString(); foreach (Dot d in dList) { if (d.GetName() == previousDot.Tag.ToString() || d.GetName() == dot.Tag.ToString()) { d.occupied = true; } } w.AddPolyline(previousLine); lc.wList.Add(w); ec.AddLineForElement(previousElementName, previousLine); ec.AddLineForElement(name, previousLine); ec.AddElementToParentElement(previousElementName, name); ec.AddElementToParentElement(name, previousElementName); foreach (Dot d in dList) { if (d.GetName() == w.dotA) { d.SetWireName(w.elementA); } if (d.GetName() == w.dotB) { d.SetWireName(w.elementB); } } UpdateWireLocation(previousDotName, dot.Tag.ToString(), previousLine); previousElementName = ""; turn = false; queue++; } else { turn = false; dot.Source = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + "WireDots/dotGreen.png")); if (dot.Tag.ToString() != previousDotName) { previousDot.Source = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + "WireDots/dotGreen.png")); } canvas.Children.Remove(previousLine); previousLine = null; previousDot = null; previousElementName = ""; previousDotName = ""; } } else { foreach (SpecificElement se in lc.ec.GetAllElements()) { if (se.GetName() == name) { if (ec.GetConnectionAvailability(name)) { mgc.ShowWarningMessage(se.GetElement(), "This element has max connections used"); } else if (isDotOccupied(dot, dList)) { mgc.ShowWarningMessage(se.GetElement(), "This dot is being used by another wire"); } } } //MessageBox.Show("This element has max connections used"); if (ec.GetConnectionAvailability(name) && previousDot != null) { previousDot.Source = new BitmapImage(new Uri(AppDomain.CurrentDomain.BaseDirectory + "WireDots/dotGreen.png")); } } }
public void ConnectWireToConnector(Polyline pl, bool singleLine) { int space = 3; if (singleLine) { space = 2; } string[] nameABC = new string[space]; string[] dotABC = new string[space]; string name; string dot; wgc.turn = false; if (!singleLine) { wgc.previousLine.Name = pl.Name.ToString(); } foreach (Wire w in lc.wList) { if (pl.Name == w.GetName()) { nameABC[0] = w.elementA; dotABC[0] = w.dotA; nameABC[1] = w.elementB; dotABC[1] = w.dotB; } } if (!singleLine) { nameABC[2] = wgc.previousElementName; dotABC[2] = wgc.previousDotName; } Image img = CreateConnector(); SnapToClosestCell(img); canvas.Children.Add(img); lc.ec.UpdatePostitionValues(img.Tag.ToString()); wgc.DeleteWires(pl); if (!singleLine) { canvas.Children.Remove(wgc.previousLine); } for (int i = 0; i < space; i++) { name = nameABC[i]; dot = dotABC[i]; Polyline newPl = wgc.CreatePolyline(); Panel.SetZIndex(newPl, 1); w = new Wire(dot + img.Tag.ToString() + queue); w.elementA = name; w.elementB = img.Tag.ToString(); newPl.Name = dot + img.Tag.ToString() + queue; w.dotA = dot; w.dotB = img.Tag.ToString(); w.AddPolyline(newPl); lc.wList.Add(w); lc.ec.AddLineForElement(name, newPl); lc.ec.AddLineForElement(img.Tag.ToString(), newPl); lc.ec.AddConnectionCountToSpecificElement(name); lc.ec.AddConnectionCountToSpecificElement(img.Tag.ToString()); lc.ec.AddElementToParentElement(img.Tag.ToString(), name); lc.ec.AddElementToParentElement(name, img.Tag.ToString()); wgc.previousElementName = ""; wgc.UpdateWireLocation(w.dotA, w.dotB, newPl); } }