Esempio n. 1
0
 //кнопка - удалить элемент
 private void deleteButton_Click(object sender, EventArgs e)
 {
     mouseNow = buttonOption.deleteButton;
     Timer.Stop();
     G.drawALLGraph(V, E);
     drawSheet.Image = G.GetBitmap();
 }
Esempio n. 2
0
        private void showAlgorithm_Click(object sender, EventArgs e)
        {
            mouseNow = buttonOption.timer;

            foreach (var edge in E)
            {
                edge.Capacity = edge.maxCapacity;
            }

            Timer.Start();
        }
Esempio n. 3
0
 public MainForm()
 {
     InitializeComponent();
     G = new DrawGraph(drawSheet.Width, drawSheet.Height);
     V = new List <Node>();
     E = new List <Edge>();
     lineColor.EndCap = LineCap.ArrowAnchor;
     mouseNow         = buttonOption.none;
     defaultGraph();
     G.drawALLGraph(V, E);
     drawSheet.Image = G.GetBitmap();
 }
Esempio n. 4
0
        private void drawSheet_MouseClick(object sender, MouseEventArgs e)
        {
            bool somethingDelete = false;

            switch (mouseNow)
            {
            case buttonOption.none:     //не нажата никакая кнопка
                matrixBox.Clear();
                G.drawALLGraph(V, E);
                drawSheet.Image = G.GetBitmap();
                break;

            case buttonOption.newVertex:     //нажата кнопка "рисовать вершину"
                V.Add(new Node(e.Location));
                G.drawVertex(e.Location, V.Count.ToString());
                drawSheet.Image = G.GetBitmap();
                mouseNow        = buttonOption.none;
                break;

            case buttonOption.newEdge:     //нажата кнопка "рисовать ребро"
                if (e.Button == MouseButtons.Left)
                {
                    for (int i = 0; i < V.Count; i++)
                    {
                        if (Math.Pow((V[i].position.X - e.X), 2) + Math.Pow((V[i].position.Y - e.Y), 2) <= G.R * G.R)
                        {
                            if (selectNode == null)
                            {
                                selectNode = V[i];
                                G.drawSelectedVertex(V[i].position);
                                drawSheet.Image = G.GetBitmap();
                                break;
                            }

                            if (selectNode == V[i])
                            {
                                drawSheet.Image = G.GetBitmap();
                                G.drawALLGraph(V, E);
                                selectNode = null;
                                mouseNow   = buttonOption.none;
                                return;
                            }

                            if (selectNode != V[i])
                            {
                                G.drawSelectedVertex(V[i].position);

                                inputEdgeThroughput throughput = new inputEdgeThroughput();
                                throughput.ShowDialog();
                                float c = throughput.val();
                                throughput.Close();

                                if (c != 0)
                                {
                                    E.Add(new Edge(selectNode, V[i], c));
                                    G.drawEdge(selectNode, V[i], E.Last());
                                }

                                drawSheet.Image = G.GetBitmap();
                                G.drawALLGraph(V, E);
                                selectNode = null;
                                mouseNow   = buttonOption.none;
                                break;
                            }
                        }
                    }
                }
                if (e.Button == MouseButtons.Right)
                {
                    if (selectNode != null)
                    {
                        G.drawALLGraph(V, E);
                        drawSheet.Image = G.GetBitmap();
                        selectNode      = null;
                    }
                }
                break;

            case buttonOption.deleteButton: //нажата кнопка "удалить элемент"
                bool flag = false;          //удалили ли что-нибудь по ЭТОМУ клику
                //если удалена вершина
                for (int i = 0; i < V.Count; i++)
                {
                    if (Math.Pow((V[i].position.X - e.X), 2) + Math.Pow((V[i].position.Y - e.Y), 2) <= G.R * G.R)
                    {
                        for (int j = 0; j < E.Count; j++)
                        {
                            if ((E[j].NodeFrom == V[i]) || (E[j].NodeTo == V[i]))
                            {
                                E.RemoveAt(j);
                                j--;
                            }
                        }
                        V.RemoveAt(i);
                        flag = true;
                        break;
                    }
                }
                //если удалено ребро
                if (!flag)
                {
                    for (int i = 0; i < E.Count; i++)
                    {
                        if (((e.X - E[i].NodeFrom.position.X) * (E[i].NodeTo.position.Y - E[i].NodeFrom.position.Y) / (E[i].NodeTo.position.X - E[i].NodeFrom.position.X) + E[i].NodeFrom.position.Y) <= (e.Y + 6) &&
                            ((e.X - E[i].NodeFrom.position.X) * (E[i].NodeTo.position.Y - E[i].NodeFrom.position.Y) / (E[i].NodeTo.position.X - E[i].NodeFrom.position.X) + E[i].NodeFrom.position.Y) >= (e.Y - 6))
                        {
                            if ((E[i].NodeFrom.position.X <= E[i].NodeTo.position.X && E[i].NodeFrom.position.X <= e.X && e.X <= E[i].NodeTo.position.X) ||
                                (E[i].NodeFrom.position.X >= E[i].NodeTo.position.X && E[i].NodeFrom.position.X >= e.X && e.X >= E[i].NodeTo.position.X))
                            {
                                E.RemoveAt(i);
                                flag = true;
                                break;
                            }
                        }
                    }
                }
                //если что-то было удалено, то обновляем граф на экране
                if (flag)
                {
                    somethingDelete = true;
                    G.drawALLGraph(V, E);
                    drawSheet.Image = G.GetBitmap();
                    mouseNow        = buttonOption.none;
                }
                break;

            default:
                break;
            }
            Timer.Stop();
            G.drawALLGraph(V, E);
            drawSheet.Image = G.GetBitmap();
            if (somethingDelete)
            {
                showAlgorithm.Enabled = false;
            }
        }