private void OnReset()
        {
            _timer.Stop();

            StartButton.IsChecked = false;
            PauseButton.IsChecked = false;
            ResetButton.IsChecked = true;

            using (sciChart.SuspendUpdates())
            {
                ScatterRenderableSeries3D.DataSeries = null;
                sciChart.InvalidateElement();

                ScatterRenderableSeries3D.GetSceneEntity().Update();
                ScatterRenderableSeries3D.GetSceneEntity().RootSceneEntity.Update();
            }
        }
        private void AddSeriesButton_OnClick(object sender, RoutedEventArgs e)
        {
            if (sciChart.RenderableSeries.Count >= MaxSeriesAmount)
            {
                return;
            }

            var renderSerias    = new ScatterRenderableSeries3D();
            var xyzDataSeries3D = new XyzDataSeries3D <double>()
            {
                SeriesName = "Series " + ++_currentSeries
            };

            int dataPointsCount = 15;
            var random          = new Random(0);

            for (int i = 0; i < dataPointsCount; i++)
            {
                double x = DataManager.Instance.GetGaussianRandomNumber(5, 1.5);
                double y = DataManager.Instance.GetGaussianRandomNumber(5, 1.5);
                double z = DataManager.Instance.GetGaussianRandomNumber(5, 1.5);

                // Scale is a multiplier used to increase/decrease ScatterRenderableSeries3D.ScatterPointSize
                float scale = (float)((random.NextDouble() + 0.5) * 3.0);

                // Color is applied to PointMetadata3D and overrides the default ScatterRenderableSeries.Stroke property
                Color?randomColor = Color.FromArgb(0xFF, (byte)random.Next(50, 255), (byte)random.Next(50, 255), (byte)random.Next(50, 255));

                // To declare scale and colour, add a VertextData class as the w (fourth) parameter.
                // The PointMetadata3D class also has other properties defining the behaviour of the XYZ point
                xyzDataSeries3D.Append(x, y, z, new PointMetadata3D(randomColor, scale));
            }

            var randomPicker = new Random();
            int randValue    = randomPicker.Next(0, 6);

            switch (randValue)
            {
            case 0:
                renderSerias.PointMarker = new CubePointMarker3D();
                break;

            case 1:
                renderSerias.PointMarker = new EllipsePointMarker3D();
                break;

            case 2:
                renderSerias.PointMarker = new PyramidPointMarker3D();
                break;

            case 3:
                renderSerias.PointMarker = new QuadPointMarker3D();
                break;

            case 4:
                renderSerias.PointMarker = new SpherePointMarker3D();
                break;

            case 5:
                renderSerias.PointMarker = new TrianglePointMarker3D();
                break;
            }

            renderSerias.DataSeries = xyzDataSeries3D;
            sciChart.RenderableSeries.Add(renderSerias);

            var index = sciChart.RenderableSeries.IndexOf(renderSerias);

            xyzDataSeries3D.SeriesName = String.Format("Series #{0}", index);

            OnPropertyChanged("CanAddSeries");
            OnPropertyChanged("CanRemoveSeries");

            sciChart.ZoomExtents();
        }
        private void Paint()
        {
            switch (_selectChart)
            {
            case (int)Chart.PointChart3D:

                var grath_3D = new XyzDataSeries3D <int>();

                for (int x = 0; x < CA.Length; x++)
                {
                    for (int y = 0; y < CA.Length; y++)
                    {
                        for (int z = 0; z < CA.Length; z++)
                        {
                            if (CA[x, y, z])
                            {
                                grath_3D.Append(x, y, z);
                            }
                        }
                    }
                }

                var scatterSeries3D = new ScatterRenderableSeries3D
                {
                    DataSeries  = grath_3D,
                    PointMarker = _selectPointMarker
                };

                scatterSeries3D.PointMarker.Fill = Color.FromArgb(_selectAlpha, _selectColor.R, _selectColor.G, _selectColor.B);

                SciChart3D.RenderableSeries.Clear();

                SciChart3D.RenderableSeries.Add(scatterSeries3D);

                SetName("Клеточный автомат; Итерация =" + CA.Iterator);

                break;

            case Chart.MeshChart:
                var meshGrath_3D = new UniformGridDataSeries3D <double>(CA.Length, CA.Length);



                double[,] pollution = CA.GetPollution(_selectIndex, _selectAxis);

                for (int i = 0; i < CA.Length; i++)
                {
                    for (int j = 0; j < CA.Length; j++)
                    {
                        meshGrath_3D[i, j] = pollution[i, j];
                    }
                }



                var meshRenderableSeries = new SurfaceMeshRenderableSeries3D()
                {
                    MeshColorPalette = _gradientColor,
                    DrawMeshAs       = DrawMeshAs.SolidWithContours,
                    DataSeries       = meshGrath_3D
                };



                SciChart3D.RenderableSeries.Clear();
                SciChart3D.RenderableSeries.Add(meshRenderableSeries);



                SetName("Осреднение по плоскости " + CA_Model.GetNameAxis(_selectAxis) + "; Слой = " + _selectIndex + "; Итерация =" + CA.Iterator);

                break;

            case Chart.PointChart2D:

                var dataGraph_2D = new XyDataSeries <int, int>();

                for (int i = 0; i < CA.Length; i++)
                {
                    for (int j = 0; j < CA.Length; j++)
                    {
                        if (CA.GetPointPollution(_selectAxis, _selectIndex, i, j))
                        {
                            dataGraph_2D.Append(i, j);
                        }
                    }
                }

                var xyScatter = new XyScatterRenderableSeries()
                {
                    DataSeries  = dataGraph_2D,
                    PointMarker = _selectPointMarker2D
                };

                xyScatter.PointMarker.Fill = Color.FromArgb(_selectAlpha, _selectColor.R, _selectColor.G, _selectColor.B);

                SciChart2D.RenderableSeries.Clear();
                SciChart2D.RenderableSeries.Add(xyScatter);

                SetName("Клеточный автомат; Плоскость " + CA_Model.GetNameAxis(_selectAxis) + "; Слой = " + _selectIndex + "; Итерация =" + CA.Iterator);

                break;
            }



            GetUpdating = false;
        }