private void RecalculateScale()
        {
            MyPoint[] plot1        = new MyPoint[0];
            double    actualWidth  = 0;
            double    actualHeight = 0;

            try
            {
                Dispatcher.Invoke(() =>
                {
                    plot1        = Generations.SelectMany(n => n.Points).ToArray();
                    actualWidth  = Plots.ActualWidth;
                    actualHeight = Plots.ActualHeight;
                });
            }
            catch { }

            ValueToSet valueToSet = RecalculateScale(plot1, actualWidth, actualHeight, X1, Y1);

            try
            {
                if (!valueToSet.setXY && !valueToSet.setScale)
                {
                    return;
                }

                Dispatcher.Invoke(() =>
                {
                    if (valueToSet.setXY)
                    {
                        X0 = valueToSet.x0;
                        Y0 = valueToSet.y0;
                        X1 = valueToSet.x1;
                        Y1 = valueToSet.y1;
                    }

                    if (valueToSet.setScale)
                    {
                        ScaleX = valueToSet.scaleX;
                        ScaleY = valueToSet.scaleY;
                    }
                });
            }
            catch { }
        }