Beispiel #1
0
 public ModuleDiffEff(Chart chart, File_Acts FA, DataGrid datagrid)
 {
     InitializeComponent();
     Chart_ref    = chart;
     fileacts_ref = FA;
     datagrid_ref = datagrid;
     MyCalc       = new Calculations(FA, Chart_ref);
 }
Beispiel #2
0
        public void DoCurrTok_2(CancellationToken token, int milisecond, File_Acts file_Acts)
        {
            int       i  = 0;
            Parameter J2 = file_Acts.Find_Parametr("J2");

            while (!token.IsCancellationRequested)
            {
                //currentTok = (Single) Math.Sin(argument);
                currentTok2 = (Single)((1e+10) * J2.Time_and_Value_List[i].Value) * 25000;
                i          += 1;
                int delTime = (int)J2.Time_and_Value_List[i].Time.Subtract(J2.Time_and_Value_List[i - 1].Time).TotalMilliseconds;
                Thread.Sleep(delTime);
            }
        }
Beispiel #3
0
        public ModuleValues(File_Acts FA, Chart chart, ListView listVgiven)
        {
            InitializeComponent();
            //График, с которым работаем и прочее, ссылаемся тут.
            Mychart    = chart;
            MyCalc     = new Calculations(FA, chart);
            MylistV    = listVgiven;
            MyFileActs = FA;



            chart.CursorPositionChanged += chart_CursorPositionChanged;
            //Values_List.ItemsSource =   File_Acts_One.Find_Parametr(tempKKS).Time_and_Value_List;
        }
Beispiel #4
0
        public Calculations(File_Acts FA, Chart chart)
        {
            InitializeComponent();
            Fileacts_ref = FA;
            chart_ref    = chart;

            //Считать состояние
            try
            {
                StreamReader FileRead = new StreamReader("Options.txt");
                //Считать 1 линию из файла.
                GroupKKSMainPart = FileRead.ReadLine();
                //Считать 2 линию из файла.
                ReactKKSMainPart = FileRead.ReadLine();
                //Считать 3 линию из файла.
                Step_h = Convert.ToDouble(FileRead.ReadLine());
                //Считать 4 линию из файла.
                B_eff = Convert.ToDouble(FileRead.ReadLine());
                //Считать 5 линию из файла.
                Min_TimeReg = Convert.ToInt32(FileRead.ReadLine());

                FileRead.Close();
            }
            catch (Exception)
            {}
            GroupTexBox.Text      = GroupKKSMainPart;
            ReactivitiTexBox.Text = ReactKKSMainPart;
            ShagTexBox.Text       = Step_h.ToString();
            BetaTexBox.Text       = B_eff.ToString();

            //Бушер
            if (GroupKKSMainPart == "YVM")
            {
                GroupKKSMainPart12 = "--------";
                GroupKKSMainPart11 = "------";
                GroupKKSMainPart10 = "YVM10FG900";
                GroupKKSMainPart9  = "YVM10FG909";
                GroupKKSMainPart8  = "YVM10FG908";
            }
            //НВАЭС-2
            if (GroupKKSMainPart == "JDA")
            {
                GroupKKSMainPart12 = "JDA00FG912";
                GroupKKSMainPart11 = "JDA00FG911";
                GroupKKSMainPart10 = "JDA00FG910";
                GroupKKSMainPart9  = "JDA00FG909";
                GroupKKSMainPart8  = "JDA00FG908";
            }
        }
Beispiel #5
0
        /// <summary>
        /// Добавить линию на основной арене. ПРи этом, один и тот же параметр можно несколько раз рисовать. Сделано, чтобы иметь возможность сшивать графики по времени.
        /// </summary>
        /// <param name="chart1">График, с которым работаем</param>
        /// <param name="selectedKKSs">Выбранная пользователем группа параметров</param>
        /// <param name="chartareaName"> Выбранное пользователем имя главной арены, на которой рисуем.</param>
        /// <param name="myFileActs">Передает данные</param>
        /// <param name="r_L">Сообщает сторону оси</param>
        public void AddMainLine(Chart myChart, System.Collections.IList selectedKKSs, string chartareaName, File_Acts myFileActs, string r_L)
        {
            //Сейчас обрабатываемый KKS из списка переданного.
            string serName = "";

            //Цикл по выдленным параметрам.
            foreach (Parameter selectedKKS_i in selectedKKSs)
            {
                //Была ли построена серия с таким именем. (Если сшивали по времени.) Тогда, в имя номер повторно добавленной серии. Или не меняем KKS.
                bool isNameIn = false; // ПРисутствует ли добавляемое имя линии
                foreach (var Seria_i in myChart.Series)
                {
                    if (Seria_i.Name == selectedKKS_i.KKS)
                    {
                        isNameIn = true;
                    }
                }
                if (isNameIn)
                {
                    slisesCounter++;
                    serName = selectedKKS_i.KKS + "_" + slisesCounter;
                }
                else
                {
                    serName = selectedKKS_i.KKS;
                }

                //Добавляем серию на график
                myChart.Series.Add(new Series(serName));
                //Выбор стороны
                if (r_L == "left")
                {
                    myChart.Series[serName].YAxisType = AxisType.Primary;
                }
                else
                {
                    myChart.Series[serName].YAxisType = AxisType.Secondary;
                }

                //Легенда видимая будет.
                myChart.Series[serName].IsVisibleInLegend = true;


                //Тип линии
                myChart.Series[serName].ChartType       = SeriesChartType.Line;
                myChart.Series[serName].BorderDashStyle = ChartDashStyle.Solid;
                //Арена линии соответствующая
                myChart.Series[serName].ChartArea = chartareaName;
                //Пополнение серии.
                foreach (Time_and_Value item1 in myFileActs.Find_Parametr(serName).Time_and_Value_List)
                {
                    myChart.Series[serName].Points.AddXY(item1.Time, item1.Value);
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// Добавить линию на дополнительной оси.
        /// Для построения 1 доп. оси создается 2 дополнительные арены: 1-ая содержит график; 2-ая содержит ось.
        /// Насчет положения арены: есть положение самой арены. Есть положение пространства для рисования графиков. Оно внутри арены. Таким образом, надо и то и то задать. Схема, как это работает -- в описании. Кода много, но все просто. Самое сложное -- с положением дополнительных арен, арен для рисования внутри них.
        /// </summary>
        /// <param name="myChart">График, с которым работаем</param>
        /// <param name="chartareaName"> Выбранное пользователем имя главной арены, на которой рисуем. Здесь для привязки к этой арене</param>
        /// <param name="selectedKKSs">Выбранная пользователем группа параметров</param>
        /// <param name="myFileActs">Передает данные</param>
        /// <param name="r_L">Сообщает сторону оси</param>
        public List <ChartArea> AddAdditional_AxisAndlLine(Chart myChart, string chartareaName, System.Collections.IList selectedKKSs, File_Acts myFileActs, string r_L)
        {
            //Что возвращать будем. Это лист арен с видимым графиком линий строящихся.
            List <ChartArea> ListAreas = new List <ChartArea>();

            //Цикл по выделенным параметрам пользователем.
            foreach (Parameter selectedParameters_i in selectedKKSs)
            {
                //1) Создаем незаметную арену для видимой серии на графике. Она точно совпадает с основной ареной. В том и смысл, что начало графика будет таким образом совпадать с началом всех других и начинаться от основной оси.
                ChartArea areaSeria = CreateArenaSeria(myChart, chartareaName);
                //Добавляем на главную арену серию, переносим ее на эту невидимую арену. Так нам проще, ибо метод добавления на глав. арену уже есть.
                List <Parameter> itemAsCollection = new List <Parameter>();
                itemAsCollection.Add(selectedParameters_i);
                AddMainLine(myChart, itemAsCollection, chartareaName, myFileActs, r_L);
                myChart.Series[selectedParameters_i.KKS].ChartArea = areaSeria.Name;//сам перенос на невидимую арену.
                //Определение слева/справа строить
                if (r_L == "left")
                {
                    myChart.Series[selectedParameters_i.KKS].YAxisType = AxisType.Primary;
                }
                else
                {
                    myChart.Series[selectedParameters_i.KKS].YAxisType = AxisType.Secondary;
                }

                // 2) Теперь создаем арену для оси. (Кроме оси дополнительной, на ней все остальное незаметное.)
                ChartArea areaAxis = CreateArenaAxis(myChart, chartareaName);
                // Создаем копию видимой серии. (Копия невидима.) Служит для масштабирования оси.
                Series seriesCopy = myChart.Series.Add(myChart.Series[selectedParameters_i.KKS].Name + "_invisibleCopy");
                seriesCopy.ChartType = myChart.Series[selectedParameters_i.KKS].ChartType;
                // Скрываем копию серии
                seriesCopy.IsVisibleInLegend = false;
                seriesCopy.Color             = Color.Transparent;
                seriesCopy.BorderColor       = Color.Transparent;
                //ПОполняем серию
                foreach (DataPoint point in myChart.Series[selectedParameters_i.KKS].Points)
                {
                    seriesCopy.Points.AddXY(point.XValue, point.YValues[0]);
                }
                seriesCopy.ChartArea = areaAxis.Name;
                //Определение слева/справа строить
                if (r_L == "left")
                {
                    seriesCopy.YAxisType = AxisType.Primary;
                }
                else
                {
                    seriesCopy.YAxisType = AxisType.Secondary;
                }

                //3)ПОзиции арен задаем: 2 новых арены совпадают с начальной позицеей. Задается позиция арены с серией, чтобы не была авто (тогда её нельзя уменьшить, если она ноль. И эта ошибка выскакивает реально)
                areaSeria.Position.FromRectangleF(myChart.ChartAreas[chartareaName].Position.ToRectangleF());
                areaSeria.InnerPlotPosition.FromRectangleF(myChart.ChartAreas[chartareaName].InnerPlotPosition.ToRectangleF());

                areaAxis.Position.FromRectangleF(myChart.ChartAreas[chartareaName].Position.ToRectangleF());
                areaAxis.InnerPlotPosition.FromRectangleF(myChart.ChartAreas[chartareaName].InnerPlotPosition.ToRectangleF());

                // 4) Задаем позицию оси. Смотрится сложно, поскольку предполагается неоднократное добавление дополнительнхы осей.
                //switch выбирает сторону
                switch (r_L)
                {
                case "left":
                    //Cжимаем все арены, кроме нашей с осью, последней, на axisOffset. И передвигаем их вперед (расстояние между осями создаем).
                    for (int i = 0; i < myChart.ChartAreas.Count; i++)
                    {
                        myChart.ChartAreas[i].Position.Width -= axisOffset;
                        myChart.ChartAreas[i].Position.X     += axisOffset;
                    }
                    //Последнюю (с осью) сдвинем влево.
                    areaAxis.Position.X -= axisOffset;
                    //Если уже еще добавлли арены, сдвинуть надо больше
                    int countArenasLeftHere = CountArenas(myChart, chartareaName).Item1;
                    areaAxis.Position.X -= (axisOffset) * countArenasLeftHere;//отодвинуть на число построенных дополнительных осей
                    //Имена зададим: 10 символов 1 часть. + 7 + 2 + 1 + 1. Итого, 17-ый означает номер главной арены. (Рядом с которой рисуем.)
                    areaSeria.Name = "invisible_" + chartareaName + "_#" + (countArenasLeftHere + 1) + "L";
                    areaAxis.Name  = "axisYin___" + chartareaName + "_#" + (countArenasLeftHere + 1) + "L";

                    break;

                //Сдвигаем в другую сторону
                case "right":

                    //Cжимаем все арены, кроме нашей с осью, последней, на axisOffset. А позицию -- без изменений.
                    for (int i = 0; i < myChart.ChartAreas.Count; i++)
                    {
                        myChart.ChartAreas[i].Position.Width -= axisOffset;
                    }
                    //Последнюю (с осью) сдвинем вправо.
                    areaAxis.Position.X += axisOffset;
                    areaAxis.Position.X += (axisOffset) * CountArenas(myChart, chartareaName).Item2;//отодвинуть, учитывая число уже построенных дополнительных осей
                    //Имена зададим: 10 символов 1 часть. + 7 + 2 + 1 + 1. Итого, 17-ый означает номер главной арены. (Рядом с которой рисуем.)
                    areaSeria.Name = "invisible_" + chartareaName + "_#" + (CountArenas(myChart, chartareaName).Item2 + 1) + "R";
                    areaAxis.Name  = "axisYin___" + chartareaName + "_#" + (CountArenas(myChart, chartareaName).Item2 + 1) + "R";
                    break;
                } //Конец switch
                ListAreas.Add(areaSeria);
            }     //Закрыли обход по списку выделенных KKS.
            return(ListAreas);
        }         //Закрыли тело метода