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); }
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())); } }