public override void RunVertexAnimation() { //custom event signal preparations _vMaxCount = VertexStorage.Count; _vCounter = 0; var defaultValues = IsDefaultCoordinates(); foreach (var item in VertexStorage) { if (item.Key is EdgeControl) { throw new GX_InvalidDataException("AnimateVertex() -> Got edge control instead vertex control!"); } var control = item.Key as Control; if (defaultValues) { GraphAreaBase.SetX(control, GraphAreaBase.GetFinalX(control)); GraphAreaBase.SetY(control, GraphAreaBase.GetFinalY(control)); CreateStory(control, 0, 1, (o2, e2) => { _vCounter++; if (_vCounter == _vMaxCount) { OnCompleted(); } }).Begin(); } else { CreateStory(control, 1, 0, (o, e) => { if (!VertexStorage.ContainsKey(item.Key)) { return; //just in case of... who knows what? } GraphAreaBase.SetX(control, GraphAreaBase.GetFinalX(control)); GraphAreaBase.SetY(control, GraphAreaBase.GetFinalY(control)); CreateStory(control, 0, 1, (o2, e2) => { _vCounter++; if (_vCounter == _vMaxCount) { OnCompleted(); } }).Begin(); }).Begin(); } } }
/// <summary> /// Animates the control of a vertex to a given position. /// </summary> /// <param name="control">Vertex control which should be animated to its new position</param> /// <param name="coord">New vertex position coordinates</param> public void AddVertexData(IGraphControl control, Measure.Point coord) { if (double.IsNaN(coord.X) || double.IsNaN(coord.Y)) { throw new GX_InvalidDataException("AddVertexData() -> NaN coordinated has been supplied! Correct coordinates was expected."); } if (!VertexStorage.ContainsKey(control)) { VertexStorage.Add(control, coord); } else { throw new GX_GeneralException("AddVertexData() -> Same control can't be loaded in animation list twice!"); } }
void VertexAnimation_Completed(object sender, EventArgs e) { if (sender is ClockGroup) { return; } var control = (IGraphControl)Storyboard.GetTarget((sender as AnimationClock).Timeline); if (!VertexStorage.ContainsKey(control)) { return; //just in case of... who knows what? } control.SetPosition(VertexStorage[control], false); VertexStorage.Remove(control); var story = CreateStory(control, 0, 1, null); story.Completed += story_Completed; story.Begin(control as Control, HandoffBehavior.Compose); }