private void StartScene(PartBase[] parts, double offset)
        {
            ClearScene();

            _parts = parts;
            _debugOffset = offset;

            _tickCntr = 0;
            lblNumTicks.Text = _tickCntr.ToString();

            // Draw their initial positions off to the side
            DrawParts(parts, _initialVisuals, new Vector3D(0, _debugOffset, 0));

            // Create the solver
            if (radSolver1.IsChecked.Value)
            {
                PartSolver1 solver1 = new PartSolver1(_world, parts);
                solver1.MovePerStepPercent = .5d;
                _solver = solver1;
            }
            else if (radSolver2.IsChecked.Value)
            {
                PartSolver2 solver2 = new PartSolver2(_world, parts, false);
                solver2.MovePerStepPercent = 1d; //.75d;
                solver2.DoRotations = true;
                _solver = solver2;
            }
            else
            {
                throw new ApplicationException("Unknown solver type");
            }
        }
        private void ClearScene()
        {
            foreach (Visual3D visual in UtilityCore.Iterate(_initialVisuals, _currentVisuals, _debugVisuals))
            {
                _viewport.Children.Remove(visual);
            }

            _initialVisuals.Clear();
            _currentVisuals.Clear();
            _debugVisuals.Clear();

            //TODO: Dispose something?
            _solver = null;
            _parts = null;

            lblNumTicks.Text = "";
        }