/// <summary> /// Скрываем метод "Удалить ребро", чтобы переименовать его в "Удалить дугу" /// </summary> /// <param name="u"></param> /// <param name="v"></param> void IGraph.RemoveEdge(object u, object v) { Arc arc = Arcs.Find(a => a.Tail.Value == u && a.Head.Value == v); ModificationStatus status = arc != null ? ModificationStatus.Successful : ModificationStatus.NotExist; EdgesModifiedEventArgs eArgs = new EdgesModifiedEventArgs(status, arc); if (OnRemoveEdge != null) OnRemoveEdge(this, eArgs); if (eArgs.Status == ModificationStatus.Successful) Arcs.Remove(arc); }
void tree_OnRemoveEdge(object sender, EdgesModifiedEventArgs e) { if (e.Status == ModificationStatus.Successful) { this.RemoveVertex((e.Edge as Arc).Head.Value); } }
/// <summary> /// Скрываем метод "Добавить ребро", чтобы переименовать его в "Добавить дугу" /// </summary> /// <param name="u"></param> /// <param name="v"></param> void IGraph.AddEdge(object u, object v) { ModificationStatus status = !Arcs.Exists(a => a.Tail == u && a.Head == v) ? ModificationStatus.Successful : ModificationStatus.AlreadyExist; Arc arc = new Arc(this, u, v); EdgesModifiedEventArgs e = new EdgesModifiedEventArgs(status, arc); if (OnAddEdge != null) OnAddEdge(this, e); if (e.Status == ModificationStatus.Successful) Arcs.Add(arc); }
void tree_OnAddEdge(object sender, EdgesModifiedEventArgs e) { if (e.Status == ModificationStatus.Successful) { TreeGraphNode head = (e.Edge as Arc).Head as TreeGraphNode; TreeGraphNode tail = (e.Edge as Arc).Tail as TreeGraphNode; if (head.IsRoot() || ! (head.Parent.Equals(tail) && tail.IsChild(head)) ) { e.Status = ModificationStatus.Error; } } }