Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        public static void GetStartPointForBrige(object sender, bool clone)
        {
            BridgeStartPoint = new Point(Canvas.GetLeft((Border)sender) + ((Border)sender).Width / 2, Canvas.GetTop((Border)sender) + ((Border)sender).Height / 2);

            StartVertex = (from vertex in (!clone ? CurrentStorage : StorageForCopy).BindingVertexWithAlgoVertex
                           where vertex.GraphicVertex == ((Border)sender)
                           select vertex).ToList()[0];
        }
Ejemplo n.º 4
0
 static DrawingController()
 {
     StartVertex      = new VertexBag();
     CurrentStorage   = new DataStorage();
     MoveStartPoint   = new Point();
     BridgeStartPoint = new Point();
     BridgeEndPoint   = new Point();
     Mode             = States.Relocate;
 }
Ejemplo n.º 5
0
        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()));
            }
        }