/// <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> /// Compute part of animation. /// </summary> private void ComputeAnimationPart(int from, int to, int steps, ParameterHistory animationHistory, int historyIndex) { lblAnimationProgress.Text = "compute: " + from.ToString() + " " + to.ToString(); for (int i = 0; i < steps && !_animationAbort; i++) { lblAnimationProgress.Text = "compute: " + from.ToString() + " " + to.ToString() + " Step " + i.ToString() + " (from " + steps.ToString() + ")"; double r = 1.0 / steps * (double)i; Application.DoEvents(); if (_animationSmooth) { animationHistory.LoadSmoothed(r + historyIndex); } else { animationHistory.Load(r + historyIndex); } int updateSteps = ParameterDict.Current.GetInt("View.UpdateSteps"); if (updateSteps <= 0) { updateSteps = 0; } if (updateSteps > 1) { ParameterDict.Current.SetInt("View.UpdateSteps", updateSteps - 1); } ResultImageView.PublicForm.SetPictureBoxSize(); Fractrace.Scheduler.PaintJob paintJob = new Scheduler.PaintJob(ResultImageView.PublicForm, ResultImageView.PublicForm.GestaltPicture); _currentPaintJob = paintJob; paintJob.Run(updateSteps); ResultImageView.PublicForm.CallDrawImage(); if (_stepPreviewControls.ContainsKey(from)) { _stepPreviewControls[from].UpdateComputedStep(i); } } }
/// <summary> /// Compute part of animation. /// </summary> private void ComputeAnimationPart(int from, int to, int steps, ParameterHistory animationHistory, int historyIndex) { lblAnimationProgress.Text = "compute: " + from.ToString() + " " + to.ToString(); for (int i = 0; i < steps && !_animationAbort; i++) { lblAnimationProgress.Text = "compute: " + from.ToString() + " " + to.ToString() + " Step " + i.ToString() + " (from " + steps.ToString() + ")"; double r = 1.0 / steps * (double)i; Application.DoEvents(); if (_animationSmooth) animationHistory.LoadSmoothed(r + historyIndex); else animationHistory.Load(r + historyIndex); int updateSteps = ParameterDict.Current.GetInt("View.UpdateSteps"); if (updateSteps <= 0) updateSteps = 0; if (updateSteps > 1) ParameterDict.Current.SetInt("View.UpdateSteps", updateSteps - 1); ResultImageView.PublicForm.SetPictureBoxSize(); Fractrace.Scheduler.PaintJob paintJob = new Scheduler.PaintJob(ResultImageView.PublicForm, ResultImageView.PublicForm.GestaltPicture); _currentPaintJob = paintJob; paintJob.Run(updateSteps); ResultImageView.PublicForm.CallDrawImage(); if (_stepPreviewControls.ContainsKey(from)) _stepPreviewControls[from].UpdateComputedStep(i); } }