private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { try { FormObjectsResize(); Point point = e.Location;//место клика мыши bool imposition = false;//наложение вершины на другую вершину bool uniqueEdge = true;//уникальность дуги (true - дуга уникальна , false - дуга не уникальна) //выбор вершины if (radioButton1.Checked == true) { foreach (Vertex ve in vertices) { if ((int)Math.Pow((double)((ve.point.X - point.X) * (ve.point.X - point.X) + (ve.point.Y - point.Y) * (ve.point.Y - point.Y)), 0.5) <= 6) { currentVertex = new Vertex(ve.vertexID, ve.point.X, ve.point.Y, ve.duration, ve.period, ve.supply); richTextBox1.Text = "Вершина выбрана:\n"; currentVertex.WriteFromVertexToRichTextBox(richTextBox1); break; } } } //добавление вершины if (radioButton2.Checked == true) { foreach (Vertex ve in vertices) { if ((int)Math.Pow((double)((ve.point.X - point.X) * (ve.point.X - point.X) + (ve.point.Y - point.Y) * (ve.point.Y - point.Y)), 0.5) <= 10) { imposition = true; richTextBox1.Text = "Наложение вершин."; break; } } if (imposition == false) { Random random = new Random(); if (numbVertex == 0) { currentVertex = new Vertex(0, point.X, point.Y, 0, 0, 0); } else { currentVertex = new Vertex(numbVertex, point.X, point.Y, 20, 7, random.Next(0, 7)); } vertices.Add(currentVertex); numbVertex += 1; richTextBox1.Text = "Вершина добавлена:\n"; currentVertex.WriteFromVertexToRichTextBox(richTextBox1); } } //добавление дуги if (radioButton3.Checked == true) { foreach (Vertex ve in vertices) { if ((int)Math.Pow((double)((ve.point.X - point.X) * (ve.point.X - point.X) + (ve.point.Y - point.Y) * (ve.point.Y - point.Y)), 0.5) <= 6) { if (vertexSelection == false) { richTextBox1.Text = ve.vertexID.ToString(); currentVertex = new Vertex(ve.vertexID, ve.point.X, ve.point.Y, ve.duration, ve.period, ve.supply); vertexSelection = true; } else { //проверка на наличие дуги в списке дуг foreach (Edge ed in edges) { if ((ed.pointA.X == currentVertex.point.X) && (ed.pointA.Y == currentVertex.point.Y) && (ed.pointB.X == ve.point.X) && (ed.pointB.Y == ve.point.Y)) { uniqueEdge = false; richTextBox1.Text = "Совпадение дуг.\n"; richTextBox1.Text += "Всего дуг: " + edges.Count.ToString(); break; } if ((ed.pointA.X == ve.point.X) && (ed.pointA.Y == ve.point.Y) && (ed.pointB.X == currentVertex.point.X) && (ed.pointB.Y == currentVertex.point.Y)) { uniqueEdge = false; richTextBox1.Text = "Совпадение дуг.\n"; richTextBox1.Text += "Всего дуг: " + edges.Count.ToString(); break; } } //добавление дуги if ((ve.vertexID != currentVertex.vertexID) && (uniqueEdge == true)) { Random random = new Random(); currentEdge = new Edge(numbEdge, currentVertex.vertexID, ve.vertexID, currentVertex.point, ve.point, 5 * random.Next(2, 5)); edges.Add(currentEdge); numbEdge += 1; richTextBox1.Text = "Дуга добавлена.\n"; richTextBox1.Text += "Всего дуг: " + edges.Count.ToString(); } vertexSelection = false; } break; } } } GraphVisualization(); } catch { MessageBox.Show("Ошибка при клике по pictureBox.", "Сообщение"); } }
List<Vertex> vertices; //список вершин #endregion Fields #region Constructors public Form1() { InitializeComponent(); try { vertices = new List<Vertex>() { }; edges = new List<Edge>() { }; timeTables = new List<TimeTable>() { }; currentVertex = new Vertex(0); currentEdge = new Edge(0); currentTimeTable = new TimeTable(0); vertexSelection = false; numbVertex = 0; numbEdge = 0; numbTimeTable = 0; FormObjectsResize(); GraphVisualization(); } catch { } }