Example #1
0
        public static XmlSerializableVertexBag GenereteVertex(string Name)
        {
            // Генерируем графическое представление для вершины
            Border b = new Border();

            b.Width           = 40;
            b.Height          = 40;
            b.CornerRadius    = new CornerRadius(50);
            b.Background      = Brushes.BlueViolet;
            b.BorderBrush     = Brushes.Black;
            b.BorderThickness = new Thickness(1);
            Label l = new Label();

            l.Width      = 22;
            l.Height     = 22;
            l.Margin     = new Thickness(8);
            l.Content    = Name;
            l.Foreground = Brushes.White;
            b.Child      = l;
            Canvas.SetZIndex(b, VertexIterator + 300);
            // Генерирум данные вершины для алгоритма
            Vertex v = new Vertex(99999, false, l.Content.ToString());

            // Создаем пакет с графическим представлением вершины и данными для алгоритма
            XmlSerializableVertexBag Bag = new XmlSerializableVertexBag(b, v);

            return(Bag);
        }
Example #2
0
        public static XmlSerializableVertexBag GenereteVertex()
        {
            if (VertexIterator == alphabet.Length)
            {
                throw new ArgumentOutOfRangeException("alphabet.Length", "The Maximum number of vertexes is reached");
            }

            // Генерируем графическое представление для вершины
            Border b = new Border();

            b.Width           = 40;
            b.Height          = 40;
            b.CornerRadius    = new CornerRadius(50);
            b.Background      = Brushes.BlueViolet;
            b.BorderBrush     = Brushes.Black;
            b.BorderThickness = new Thickness(1);
            Label l = new Label();

            l.Width      = 22;
            l.Height     = 22;
            l.Margin     = new Thickness(8);
            l.Content    = alphabet[VertexIterator];
            l.Foreground = Brushes.White;
            b.Child      = l;
            Canvas.SetZIndex(b, 300);
            VertexIterator++;
            // Генерирум данные вершины для алгоритма
            Vertex v = new Vertex(99999, false, l.Content.ToString());

            // Создаем пакет с графическим представлением вершины и данными для алгоритма
            XmlSerializableVertexBag Bag = new XmlSerializableVertexBag(b, v);

            return(Bag);
        }
        public static void AddNewVertex()
        {
            try
            {
                // Привязываем графическое представлением вершины и данные для алгоритма
                XmlSerializableVertexBag NewVertexData = VertexBag.GenereteVertex();
                CurrentStorage.BindingVertexWithAlgoVertex.Add(NewVertexData);
                // Добавляем вершину для алгоритма
                CurrentStorage.VertexList.Add(NewVertexData.DataVertex);

                // Добавляем графическое представление
                Border NewVertex = NewVertexData.GraphicVertex;
                NewVertex.MouseEnter += Border_MouseEnter;
                NewVertex.MouseLeave += Border_MouseLeave;
                NewVertex.MouseDown  += Border_MouseLeftButtonDown;
                NewVertex.MouseUp    += Border_MouseLeftButtonUp;

                Canvas.SetLeft(NewVertex, DrawAreaCanvas.Width / 2);
                Canvas.SetTop(NewVertex, DrawAreaCanvas.Height / 2);
                CurrentStorage.BindingVertexWithLinesStart.Add(NewVertex, new List <Line>());
                CurrentStorage.BindingVertexWithLinesEnd.Add(NewVertex, new List <Line>());
                DrawAreaCanvas.Children.Add(NewVertex);
                if (StorageChanged != null)
                {
                    StorageChanged(new StorageChangeEventArgs(Backup()));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        public static void CopyVertex(VertexBag x)
        {
            try
            {
                // Привязываем графическое представлением вершины и данные для алгоритма
                XmlSerializableVertexBag NewVertexData = VertexBag.GenereteVertex(x.DataVertex.Name);
                StorageForCopy.BindingVertexWithAlgoVertex.Add(NewVertexData);
                // Добавляем вершину для алгоритма
                StorageForCopy.VertexList.Add(NewVertexData.DataVertex);

                // Добавляем графическое представление
                Border NewVertex = NewVertexData.GraphicVertex;
                NewVertex.MouseEnter += Border_MouseEnter;
                NewVertex.MouseLeave += Border_MouseLeave;
                NewVertex.MouseDown  += Border_MouseLeftButtonDown;
                NewVertex.MouseUp    += Border_MouseLeftButtonUp;

                Canvas.SetLeft(NewVertexData.GraphicVertex, Canvas.GetLeft(x.GraphicVertex));
                Canvas.SetTop(NewVertexData.GraphicVertex, Canvas.GetTop(x.GraphicVertex));
                StorageForCopy.BindingVertexWithLinesStart.Add(NewVertex, new List <Line>());
                StorageForCopy.BindingVertexWithLinesEnd.Add(NewVertex, new List <Line>());
                StorageForCopy.DrawAreaChildrens.Add(NewVertex);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private static void DeleteVertex(object sender)
        {
            StartVertex = (from vertex in CurrentStorage.BindingVertexWithAlgoVertex
                           where vertex.GraphicVertex == ((Border)sender)
                           select vertex).ToList()[0];

            var EdgesToDelete = (from edge in CurrentStorage.BindingBridgeWithAlgoEdge
                                 where edge.DataEdge.FirstPoint == StartVertex.DataVertex ||
                                 edge.DataEdge.SecondPoint == StartVertex.DataVertex
                                 select edge).ToList();

            // Удаление вершины
            CurrentStorage.VertexList.Remove(StartVertex.DataVertex);

            // Удаление ребер связаных с ней
            foreach (XmlSerializableEdgeBag x in EdgesToDelete)
            {
                CurrentStorage.EdgeList.Remove(x.DataEdge);
            }
            // Удаление графических составляющих

            XmlSerializableEdgeBag RememberEdgeBag = null;

            foreach (KeyValuePair <Border, List <Line> > x in CurrentStorage.BindingVertexWithLinesStart)
            {
                if (x.Key == ((Border)sender))
                {
                    foreach (Line l in x.Value)
                    {
                        DrawAreaCanvas.Children.Remove(l);
                        CurrentStorage.BridgesList.Remove(l);
                        foreach (XmlSerializableEdgeBag eb in CurrentStorage.BindingBridgeWithAlgoEdge)
                        {
                            if (eb.GraphicEdge == l)
                            {
                                RememberEdgeBag = eb;
                            }
                        }
                        CurrentStorage.BindingBridgeWithAlgoEdge.Remove(RememberEdgeBag);
                    }
                    DrawAreaCanvas.Children.Remove(x.Key);
                }
            }

            CurrentStorage.BindingVertexWithLinesStart.Remove((Border)sender);
            foreach (KeyValuePair <Border, List <Line> > x in CurrentStorage.BindingVertexWithLinesEnd)
            {
                if (x.Key == ((Border)sender))
                {
                    foreach (Line l in x.Value)
                    {
                        DrawAreaCanvas.Children.Remove(l);
                        CurrentStorage.BridgesList.Remove(l);
                        foreach (XmlSerializableEdgeBag eb in CurrentStorage.BindingBridgeWithAlgoEdge)
                        {
                            if (eb.GraphicEdge == l)
                            {
                                RememberEdgeBag = eb;
                            }
                        }
                        CurrentStorage.BindingBridgeWithAlgoEdge.Remove(RememberEdgeBag);
                    }
                    DrawAreaCanvas.Children.Remove(x.Key);
                }
            }
            CurrentStorage.BindingVertexWithLinesEnd.Remove((Border)sender);
            // Удаление связей в коде
            XmlSerializableVertexBag RememberVertex = null;

            foreach (VertexBag x in CurrentStorage.BindingVertexWithAlgoVertex)
            {
                if (x.GraphicVertex == ((Border)sender))
                {
                    RememberVertex = new XmlSerializableVertexBag(x.GraphicVertex, x.DataVertex);
                }
            }
            CurrentStorage.BindingVertexWithAlgoVertex.Remove(RememberVertex);

            if (StorageChanged != null)
            {
                StorageChanged(new StorageChangeEventArgs(Backup()));
            }
        }