//-------

        // автомасштабирование по оси У
        private void ScaleChart_Y(ChangeMinMax _changeMinMax, double _countValueChart, CollectionGraphicElementsChart _collectionGraphicElementsChart, InitialDataChartList _initialDataChartList, ExtremumValue _extremumValue, ScaleValue _scaleValue, Action <Rectangle, InitialValue, double, double> _scaleYTypeAction)
        {
            if (_changeMinMax.ChangeMin | _changeMinMax.ChangeMax)
            {
                dispatcher.Invoke(() =>
                {
                    for (int i = 0; i < _countValueChart; i++)
                    {
                        _scaleYTypeAction(_collectionGraphicElementsChart[i], _initialDataChartList[i], _extremumValue.Min, _scaleValue.Y_scale);
                    }
                });
            }
        }
        /// <summary>
        /// Рисует график
        /// </summary>
        /// <param name="_initialeValue">исходное значение</param>
        private void ChartsDraw(InitialValue _initialeValue, Func <Point, Brush, Size, Rectangle> _generateElementChartAction, Action <Rectangle, InitialValue, double, double> _scaleYTypeAction, Action <Rectangle, double> _setBottomAction)
        {
            Size         sizeChart = new Size();
            ChangeMinMax changeMinMax;
            Point        coordinates = new Point();

            double countElement = ElementsChart.Count;

            sizeChart    = new Size(sizePanel.size.Width, sizePanel.size.Height);
            changeMinMax = new ChangeMinMax(MinCalc(_initialeValue, ref extremumInitialeValue), MaxCalc(_initialeValue, ref extremumInitialeValue));

            scaleValue.X_scale = X_ScaleValueCalc(SettingsCharts.maxCountValueCharts.Count, sizeChart.Width);
            scaleValue.Y_scale = Y_ScaleValueCalc(extremumInitialeValue, sizeChart);
            YScale             = scaleValue.Y_scale;
            MinValue           = extremumInitialeValue.Min;

            coordinates.Y   = Y_Set(_initialeValue, extremumInitialeValue.Min, scaleValue.Y_scale);
            YCoordinateLine = sizePanel.size.Height - coordinates.Y; // для линии начало системы координат находится в верхнем левом углу, мой график сделан для начала координат в нижнем левом углу.
            CurrentValue    = _initialeValue.Value;

            // масштабирование по У если изменился макс/мин
            ScaleChart_Y(changeMinMax, countElement, ElementsChart, initialDataList, extremumInitialeValue, scaleValue, _scaleYTypeAction);

            // масштабируем по Х
            TrimmingData_X(ElementsChart, initialDataList, sizeChart, _setBottomAction, ref scaleValue, ref extremumInitialeValue, ref countElement);

            coordinates.X = X_Set(countElement, scaleValue.X_scale);

            dispatcher.Invoke(() =>
            {
                ElementsChart.Add(_generateElementChartAction(coordinates, colorElemChart.BrushAll, sizeAllPoint));
            }, DispatcherPriority.Background);

            initialDataList.Add(_initialeValue);

            // обновляем данные для дополнительных панелей
            foreach (var item in FullyDependentPanelList)
            {
                item.FullyDependentPanel.CoordinatesPanel = new Point(coordinates.X, coordinates.Y);
            }
            foreach (var item in PartiallyDependentPanelList)
            {
                item.UpdateDependentValue(new ValuesPartiallyDependentPanel(extremumInitialeValue.Min, scaleValue.Y_scale, coordinates.X));
            }
            //--------------------------------------------
        }