/// <summary>
        /// Start rendering full Animation.
        /// </summary>
        private void btnStart_Click(object sender, EventArgs e)
        {
            _pictureSize     = ParameterDict.Current.GetDouble("Animation.Size");
            _animationSmooth = ParameterDict.Current.GetBool("Animation.Smooth");
            _inAnimation     = true;
            ParameterInput.MainParameterInput.SetButtonsToStart();
            CreateAnimationSteps(tbAnimationDescription.Text);
            if (_animationSteps.Steps.Count == 0)
            {
                return;
            }
            btnStart.Enabled          = false;
            btnStop.Enabled           = true;
            btnStop.Visible           = true;
            _animationAbort           = false;
            lblAnimationProgress.Text = "run ...";
            // Prepare AnimationHistory
            ParameterHistory animationHistory = new ParameterHistory();

            for (int i = 0; i < _animationSteps.Steps.Count; i++)
            {
                AnimationPoint ap = _animationSteps.Steps[i];
                _dataPerTime.Load(ap.Time);
                ParameterDict.Current.SetDouble("View.Size", _pictureSize);
                animationHistory.Save();
            }
            // Compute each Animation frame.
            for (int i = 1; i < _animationSteps.Steps.Count; i++)
            {
                AnimationPoint ap1 = _animationSteps.Steps[i - 1];
                AnimationPoint ap2 = _animationSteps.Steps[i];
                ComputeAnimationPart(ap1.Time, ap2.Time, ap2.Steps, animationHistory, i - 1);
                if (_animationAbort)
                {
                    break;
                }
            }
            if (_animationSteps.Steps.Count > 0)
            {
                ComputeAnimationPart(_animationSteps.Steps[_animationSteps.Steps.Count - 1].Time, _animationSteps.Steps[_animationSteps.Steps.Count - 1].Time, 1, animationHistory, _animationSteps.Steps.Count - 1);
            }
            btnStop.Visible           = false;
            btnStart.Enabled          = true;
            lblAnimationProgress.Text = "ready";
            _animationAbort           = false;
            _inAnimation = false;
            ParameterInput.MainParameterInput.SetButtonsToStop();
        }
        /// <summary>
        /// Rendering of one preview image is ready.
        /// </summary>

        void mPreview1_RenderingEnds()
        {
            if (_currentPreviewStep >= _animationSteps.Steps.Count)
            {
                _inRenderingPreview = false;
                _currentPreviewStep = 0;
                btnPreview.Enabled  = true;
                return;
            }
            if (!_inRenderingPreview)
            {
                return;
            }
            // Load data of currentPreviewStep:
            AnimationPoint   ap = _animationSteps.Steps[_currentPreviewStep];
            ParameterHistory animationHistory = new ParameterHistory();

            _dataPerTime.Load(ap.Time);
            animationHistory.Save();

            PreviewControl mPreview1 = new Fractrace.PreviewControl(0);

            mPreview1.Width    = _previewWidth;
            mPreview1.Height   = _previewHeight;
            mPreview1.Location = new System.Drawing.Point(_previewWidth * _currentPreviewStep, 0);
            pnlPreview.Controls.Add(mPreview1);
            mPreview1.ShowProgressBar = false;
            mPreview1.RenderOnClick   = false;

            AnimationStepPreview stepInfo = new AnimationStepPreview();

            stepInfo.Width    = _previewWidth;
            stepInfo.Height   = 30; // _previewHeight;
            stepInfo.Location = new System.Drawing.Point(_previewWidth * _currentPreviewStep, _previewHeight);
            pnlPreview.Controls.Add(stepInfo);
            int steps = 0;

            if (_animationSteps.Steps.Count > _currentPreviewStep + 1)
            {
                steps = _animationSteps.Steps[_currentPreviewStep + 1].Steps;
            }
            stepInfo.Init(ap.Time, steps);
            _stepPreviewControls[ap.Time] = stepInfo;
            _currentPreviewStep++;
            mPreview1.RenderingEnds += new PictureRenderingIsReady(mPreview1_RenderingEnds);
            mPreview1.Draw();
        }
        /// <summary>
        /// Rendering of one preview image is ready.
        /// </summary>
        void mPreview1_RenderingEnds()
        {
            if (_currentPreviewStep >= _animationSteps.Steps.Count)
            {
                _inRenderingPreview = false;
                _currentPreviewStep = 0;
                btnPreview.Enabled = true;
                return;
            }
            if (!_inRenderingPreview)
                return;
            // Load data of currentPreviewStep:
            AnimationPoint ap = _animationSteps.Steps[_currentPreviewStep];
            ParameterHistory animationHistory = new ParameterHistory();
            _dataPerTime.Load(ap.Time);
            animationHistory.Save();

            PreviewControl mPreview1 = new Fractrace.PreviewControl(0);
            mPreview1.Width = _previewWidth ;
            mPreview1.Height = _previewHeight;
            mPreview1.Location = new System.Drawing.Point(_previewWidth * _currentPreviewStep, 0);
            pnlPreview.Controls.Add(mPreview1);
            mPreview1.ShowProgressBar = false;
            mPreview1.RenderOnClick = false;

            AnimationStepPreview stepInfo = new AnimationStepPreview();
            stepInfo.Width = _previewWidth;
            stepInfo.Height = _previewHeight;
            stepInfo.Location = new System.Drawing.Point(_previewWidth * _currentPreviewStep, _previewHeight);
            pnlPreview.Controls.Add(stepInfo);
            int steps=0;
            if ( _animationSteps.Steps.Count>_currentPreviewStep+1 )
              steps = _animationSteps.Steps[_currentPreviewStep+1].Steps;
            stepInfo.Init(ap.Time, steps);
            _stepPreviewControls[ap.Time] = stepInfo;
            _currentPreviewStep++;
            mPreview1.RenderingEnds += new PictureRenderingIsReady(mPreview1_RenderingEnds);
            mPreview1.Draw();
        }
 /// <summary>
 /// Start rendering full Animation.
 /// </summary>
 private void btnStart_Click(object sender, EventArgs e)
 {
     _pictureSize = ParameterDict.Current.GetDouble("Animation.Size");
     _animationSmooth = ParameterDict.Current.GetBool("Animation.Smooth");
     _inAnimation = true;
     ParameterInput.MainParameterInput.SetButtonsToStart();
     CreateAnimationSteps(tbAnimationDescription.Text);
     if (_animationSteps.Steps.Count == 0)
         return;
     btnStart.Enabled = false;
     btnStop.Enabled = true;
     btnStop.Visible = true;
     _animationAbort = false;
     lblAnimationProgress.Text = "run ...";
     // Prepare AnimationHistory
     ParameterHistory animationHistory = new ParameterHistory();
     for (int i = 0; i < _animationSteps.Steps.Count; i++)
     {
         AnimationPoint ap = _animationSteps.Steps[i];
         _dataPerTime.Load(ap.Time);
         ParameterDict.Current.SetDouble("View.Size", _pictureSize);
         animationHistory.Save();
     }
     // Compute each Animation frame.
     for (int i = 1; i < _animationSteps.Steps.Count; i++)
     {
         AnimationPoint ap1 = _animationSteps.Steps[i - 1];
         AnimationPoint ap2 = _animationSteps.Steps[i];
         ComputeAnimationPart(ap1.Time, ap2.Time, ap2.Steps, animationHistory,i-1);
         if (_animationAbort)
             break;
     }
     if (_animationSteps.Steps.Count > 0)
     {
         ComputeAnimationPart(_animationSteps.Steps[_animationSteps.Steps.Count - 1].Time, _animationSteps.Steps[_animationSteps.Steps.Count - 1].Time, 1, animationHistory, _animationSteps.Steps.Count-1);
     }
     btnStop.Visible = false;
     btnStart.Enabled = true;
     lblAnimationProgress.Text = "ready";
     _animationAbort = false;
     _inAnimation = false;
     ParameterInput.MainParameterInput.SetButtonsToStop();
 }