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); } }
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]; }
static DrawingController() { StartVertex = new VertexBag(); CurrentStorage = new DataStorage(); MoveStartPoint = new Point(); BridgeStartPoint = new Point(); BridgeEndPoint = new Point(); Mode = States.Relocate; }
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())); } }