//кнопка - удалить элемент private void deleteButton_Click(object sender, EventArgs e) { mouseNow = buttonOption.deleteButton; Timer.Stop(); G.drawALLGraph(V, E); drawSheet.Image = G.GetBitmap(); }
private void showAlgorithm_Click(object sender, EventArgs e) { mouseNow = buttonOption.timer; foreach (var edge in E) { edge.Capacity = edge.maxCapacity; } Timer.Start(); }
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(); }
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; } }