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!");
     }
 }
Beispiel #3
0
        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);
        }