Example #1
0
        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);
            }
        }
Example #2
0
        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"));
                }
            }
        }
Example #3
0
        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);
            }
        }