Exemplo n.º 1
0
        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.", "Сообщение");
            }
        }
Exemplo n.º 2
0
        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 { }
        }