Esempio n. 1
0
        private void DrawGraph()
        {
            // Получим панель для рисования
            GraphPane pane = zedGraph.GraphPane;

            // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
            pane.CurveList.Clear();

            // Списки точек для трех графиков
            PointPairList list1 = new PointPairList();
            PointPairList list2 = new PointPairList();
            PointPairList list3 = new PointPairList();

            double xmin = -50;
            double xmax = 50;

            // Заполняем списки точек
            for (double x = xmin; x <= xmax; x += 0.01)
            {
                list1.Add(x, f1(x));
                list2.Add(x, f2(x));
                list3.Add(x, f3(x));
            }

            // Удалим существующие оси Y
            pane.YAxisList.Clear();

            // Создадим три новых оси Y
            // Метод AddYAxis() возвращает индекс новой оси в списке осей (YAxisList)
            int axis1 = pane.AddYAxis("Axis 1");
            int axis2 = pane.AddYAxis("Axis 2");
            int axis3 = pane.AddYAxis("Axis 3");

            // Создадим три кривые
            LineItem myCurve1 = pane.AddCurve("Curve 1", list1, Color.Blue, SymbolType.None);
            LineItem myCurve2 = pane.AddCurve("Curve 2", list2, Color.Black, SymbolType.None);
            LineItem myCurve3 = pane.AddCurve("Curve 3", list3, Color.Red, SymbolType.None);

            // Для каждой кривой установим свои оси
            myCurve1.YAxisIndex = axis1;
            myCurve2.YAxisIndex = axis2;
            myCurve3.YAxisIndex = axis3;

            // Для наглядности раскрасим надписи на оси Y в цвета графика,
            // который рисуется с этой осью
            pane.YAxisList[axis1].Title.FontSpec.FontColor = Color.Blue;
            pane.YAxisList[axis2].Title.FontSpec.FontColor = Color.Black;
            pane.YAxisList[axis3].Title.FontSpec.FontColor = Color.Red;

            // Вызываем метод AxisChange (), чтобы обновить данные об осях.
            // В противном случае на рисунке будет показана только часть графика,
            // которая умещается в интервалы по осям, установленные по умолчанию
            zedGraph.AxisChange();

            // Обновляем график
            zedGraph.Invalidate();
        }
Esempio n. 2
0
        public void DrawGraph(List <XDate> x, List <double> y, string name, Color color)
        {
            GraphPane pane = control.GraphPane;

            PointPairList list1 = new PointPairList();

            for (int i = 0; i < x.Count; i++)
            {
                var point = new PointPair()
                {
                    X = x[i],
                    Y = y[i]
                };
                list1.Add(point);
            }

            int      yAxis   = pane.AddYAxis(name);
            LineItem myCurve = pane.AddCurve(name, list1, color, SymbolType.None);

            myCurve.YAxisIndex    = yAxis;
            myCurve.Line.Width    = 1.0F;
            myCurve.Line.StepType = StepType.ForwardStep;

            pane.XAxis.Scale.Min                       = x.First();
            pane.XAxis.Scale.Max                       = x.Last();
            pane.YAxisList[yAxis].Scale.Min            = 0;
            pane.YAxisList[yAxis].MajorGrid.IsVisible  = true;
            pane.YAxisList[yAxis].MajorGrid.DashOn     = 10;
            pane.YAxisList[yAxis].MajorGrid.DashOff    = 5;
            pane.YAxisList[yAxis].MajorGrid.Color      = Color.LightGray;
            pane.YAxisList[yAxis].MajorGrid.IsZeroLine = false;
            pane.YAxisList[yAxis].IsVisible            = false;
            control.GraphPane.Title.IsVisible          = false;
            control.GraphPane.Legend.IsVisible         = false;
        }
Esempio n. 3
0
        /// <summary>
        /// Построить график сатурации
        /// </summary>
        /// <param name="Saturation_t"></param>
        /// <param name="Saturation_y1"></param>
        /// <param name="Saturation_y2"></param>
        /// <param name="ew"></param>
        public void Make_Graph_Saturation(double[] Saturation_t, double[] Saturation_y1, double[] Saturation_y2, int ew)
        {
            PointPairList f_saturation = new PointPairList();

            //  PointPairList f_saturation2 = new PointPairList();

            for (int y = 3; y < ew - 1; y++)
            {
                f_saturation.Add(Saturation_t[y], Saturation_y1[y] * 100);
                //    f_saturation2.Add(Saturation_t[y], Saturation_y2[y] * 100);
            }

            int axis2 = pane.AddYAxis("Степень оксигенации, %");

            LineItem f_satur = pane.AddCurve("Степень оксигенации %", f_saturation, Color.DarkGoldenrod, SymbolType.Circle);

            //   LineItem f_satur2 = pane.AddCurve("Степень оксигенации %", f_saturation2, Color.Green, SymbolType.Diamond);

            f_satur.YAxisIndex = axis2;

            f_satur.Symbol.Fill.Type = FillType.Solid;
            f_satur.Symbol.Size      = 8;

            //   f_satur2.Symbol.Fill.Type = FillType.Solid;
            //    f_satur2.Symbol.Size = 8;

            // pane.YAxisList[axis2].Title.FontSpec.FontColor = Color.Black;

            pane.YAxis.MajorGrid.IsZeroLine = false;
        }
Esempio n. 4
0
        public void DrawGraph(double[] ArrayArray, double[] ArrayArray2, bool isAxisAdded)
        {
            int       i    = 0;
            GraphPane Pane = zedGraph.GraphPane;

            Pane.CurveList.Clear();
            int axis2;

            axis2 = Pane.AddYAxis("Ось графика Х");
            PointPairList PairList1 = new PointPairList();
            PointPairList PairList2 = new PointPairList();
            double        xmin      = 0;
            double        xmax      = 3;

            for (double x = xmin; x <= xmax; x += 0.01)
            {
                PairList1.Add(x, ArrayArray[Convert.ToInt32(100 * x)]);
                PairList2.Add(x, ArrayArray2[Convert.ToInt32(100 * x)]);
            }
            i++;
            LineItem myCurve   = Pane.AddCurve("Factor = 0.2", PairList1, Color.Black, SymbolType.None);
            LineItem myCurve_2 = Pane.AddCurve("Factor = 0.5", PairList2, Color.Blue, SymbolType.None);

            if (!isAxisAdded)
            {
                Pane.YAxisList[axis2].IsVisible = true;
            }
            else
            {
                Pane.YAxisList[axis2].IsVisible = false;
            }
            zedGraph.AxisChange();
            zedGraph.Refresh();
        }
Esempio n. 5
0
        private void GetCoordinates(string[] lines, int rows, int cols)
        {
            GraphPane pane = zedGraphControl1.GraphPane;


            // Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
            pane.CurveList.Clear();

            List <PointPairList> lists    = new List <PointPairList>();
            List <LineItem>      myCurves = new List <LineItem>();

            for (int j = 1; j < cols; ++j)    // создание Y-кривых
            {
                lists.Add(new PointPairList());
            }

            // заполняем список точек
            for (int i = 0; i < rows; ++i)
            {
                string   thisline = lines[i];
                string[] values   = thisline.Split(';');
                if (values.Count() != cols)
                {
                    throw new FileLoadException(String.Format("Data line {0} has {1} items instead of {2}", i + 1, values.Count(), cols));
                }
                double depth = double.Parse(values[0], CultureInfo.InvariantCulture);// Глубина текущей строки
                for (int j = 1; j < cols; ++j)
                {
                    double y = double.Parse(values[j], CultureInfo.InvariantCulture);
                    lists[j - 1].Add(depth, y);
                }
            }

            pane.YAxisList.Clear(); // Удалим существующие оси Y

            int[] axis = new int[cols - 1];

            for (int j = 0; j < cols - 1; ++j)    // Создадим N новых оси Y
            {
                axis[j] = pane.AddYAxis("Curve " + (j + 1));
                myCurves.Add(pane.AddCurve("Curve " + (j + 1), lists[j], ColorTranslator.FromHtml(ColourValues[j]), SymbolType.None));
                myCurves[j].YAxisIndex = axis[j];
                pane.YAxisList[axis[j]].Title.FontSpec.FontColor = ColorTranslator.FromHtml(ColourValues[j]);
                pane.YAxisList[axis[j]].MajorGrid.IsZeroLine     = false;
            }

            pane.Legend.IsVisible = false;
            pane.Title.IsVisible  = false;

            zedGraphControl1.AxisChange();
            zedGraphControl1.Invalidate();
            CurveNum_tb.Enabled = true;
            DotCount_tb.Enabled = true;
        }
Esempio n. 6
0
        public GraphPane plotPieChart(ZedGraphControl zgc, HRMObjectClass hrmObject)
        {
            GraphPane pane = zgc.GraphPane;

            clearPane(pane);
            pane.AddYAxis("");
            pane.Title.Text = "Power Balance";

            // Left Right Balance % distribution
            PieItem segment1 = pane.AddPieSlice(hrmObject.calcAvg(), Color.LightBlue, 0F, "Left Leg");
            PieItem segment2 = pane.AddPieSlice(100 - hrmObject.calcAvg(), Color.LightGreen, 0F, "Right Leg");

            // Segment Label Type (Name and %)
            segment1.LabelType = PieLabelType.Percent;
            segment2.LabelType = PieLabelType.Percent;

            ZGraphControl(zgc);

            return(pane);
        }
Esempio n. 7
0
        public void DrawGraph(double[,] ArrayArray1, double[,] ArrayArray2, int LineNumber, bool isAxisAdded)
        {
            int       i    = 0;
            GraphPane Pane = zedGraph.GraphPane;

            Pane.CurveList.Clear();
            int axis2;

            axis2 = Pane.AddYAxis("Ось графика Х");
            PointPairList PairList   = new PointPairList();
            PointPairList PairList_2 = new PointPairList();
            double        xmin       = 0;
            double        xmax       = 49;

            for (double x = xmin; x <= xmax; x += 0.01)
            {
                PairList.Add(x, ArrayArray1[LineNumber, Convert.ToInt32(100 * x)]);
                PairList_2.Add(x, ArrayArray2[LineNumber, Convert.ToInt32(100 * x)]);
            }
            i++;
            LineItem myCurve   = Pane.AddCurve("Y1", PairList, Color.Black, SymbolType.None);
            LineItem myCurve_2 = Pane.AddCurve("X", PairList_2, Color.Blue, SymbolType.None);

            myCurve_2.YAxisIndex = axis2;
            Pane.YAxis.IsVisible = false;
            Pane.YAxisList[axis2].Title.FontSpec.FontColor = Color.Blue;
            if (!isAxisAdded)
            {
                Pane.YAxisList[axis2].IsVisible = true;
            }
            else
            {
                Pane.YAxisList[axis2].IsVisible = false;
            }
            zedGraph.AxisChange();
            zedGraph.Refresh();
        }
Esempio n. 8
0
        public void Redraw()
        {
            if (GraphControl == null)
            {
                return;
            }
            GraphControl.GraphPane.CurveList.Clear();
            GraphPane pane = GraphControl.GraphPane;

            pane.YAxisList.Clear();
            if (Graphs.Count == 0)
            {
                pane.XAxis.Title.Text = "";
                return;
            }

            var yAxises = new Dictionary <string, int>();

            for (int k = 0; k < Graphs.Count; k++)
            {
                Graph    graph = Graphs[k];
                LineItem line  = k < GraphSettings.CurveLines.Count
                    ? graph.GetLineItem(GraphSettings.CurveLines[k].LineColor, SymbolType.None, 2.0f)
                    : graph.GetLineItem();
                if (GraphSettings.Smooth)
                {
                    var curList = (IPointList)line.Points.Clone();
                    var average = new MovingAverage(GraphSettings.SmoothPeriod);

                    switch (GraphSettings.SmoothType)
                    {
                    case SmoothModel.Average:
                        for (int i = 0; i < curList.Count; i++)
                        {
                            average.Push(curList[i].Y);
                            curList[i].Y = average.Average;
                        }
                        break;

                    case SmoothModel.Median:
                        for (int i = 0; i < curList.Count; i++)
                        {
                            average.Push(curList[i].Y);
                            curList[i].Y = average.Median;
                        }
                        break;

                    default:
                        break;
                    }

                    line.Points = curList;
                }
                var yAxisLabel = graph.YAxis + (string.IsNullOrEmpty(graph.Y_Unit) ? "" : (", " + graph.Y_Unit));
                if (!yAxises.ContainsKey(yAxisLabel))
                {
                    yAxises.Add(yAxisLabel, pane.AddYAxis(yAxisLabel));
                }
                line.YAxisIndex = yAxises[yAxisLabel];
                pane.CurveList.Add(line);
            }

            pane.XAxis.Title.Text = Graphs.Last().XAxis
                                    + (string.IsNullOrEmpty(Graphs.Last().X_Unit) ? "" : (", " + Graphs.Last().X_Unit));
            pane.Title.Text = "";

            GraphControl.AxisChange();

            LegendRedraw(GraphSettings.LegendVisible);
            AxisTitleRedraw(GraphSettings.AxisLabelVisible);

            #region AxisGrids
            pane.XAxis.MajorGrid.IsVisible = GraphSettings.MajorGrid;
            pane.YAxis.MajorGrid.IsVisible = GraphSettings.MajorGrid;
            pane.XAxis.MinorGrid.IsVisible = GraphSettings.MinorGrid;
            pane.YAxis.MinorGrid.IsVisible = GraphSettings.MinorGrid;
            pane.YAxis.MajorGrid.DashOn    = 10;
            pane.YAxis.MajorGrid.DashOff   = 5;
            pane.XAxis.MajorGrid.DashOn    = 10;
            pane.XAxis.MajorGrid.DashOff   = 5;
            pane.YAxis.MajorGrid.DashOn    = 10;
            pane.YAxis.MajorGrid.DashOff   = 5;
            pane.XAxis.MinorGrid.DashOn    = 1;
            pane.XAxis.MinorGrid.DashOff   = 2;
            pane.YAxis.MinorGrid.DashOn    = 1;
            pane.YAxis.MinorGrid.DashOff   = 2;
            #endregion DashOnOff

            GraphControl.Invalidate();
            GraphControl.Refresh();
        }
Esempio n. 9
0
        /// <summary>
        /// Draws the Graph
        /// </summary>
        private void drawGraph()
        {
            // Displaying heart rate in yaxis in red color
            var YAxis = myPane.AddYAxis("Heart Rate");

            myPane.YAxis.Color     = System.Drawing.Color.Red;
            myPane.YAxis.Scale.Max = int.Parse(MaxHR);

            // Displaying speed in yaxis in green color
            var Y2Axis = myPane.AddYAxis("Speed");

            myPane.Y2Axis.Color     = System.Drawing.Color.Green;
            myPane.Y2Axis.Scale.Max = speedRateMax;

            // Displaying cadence in yaxis in blue color
            var Y3Axis = myPane.AddYAxis("Cadence");

            myPane.YAxisList[Y3Axis].Color = System.Drawing.Color.Blue;
            //myPane.YAxisList[Y3Axis].Scale.Max = int.Parse(lbl.Text);

            // Displaying altitude in yaxis gray color
            var Y4Axis = myPane.AddYAxis("Altitude");

            myPane.YAxisList[Y4Axis].Color = System.Drawing.Color.Gray;

            // Displaying power in yaxis in magenta color
            var Y5Axis = myPane.AddYAxis("Power");

            myPane.YAxisList[Y5Axis].Color = System.Drawing.Color.Magenta;

            // Setting starttime and end time
            DateTime startDate = myDateTime1;

            startDate = Convert.ToDateTime(StartTime);
            DateTime endDate = startDate.AddSeconds(seconds * metroGrid1.Rows.Count);

            // Console.WriteLine("startDate");
            // Console.WriteLine(startDate);
            // Console.WriteLine(metroGrid1.Rows.Count);
            // Console.WriteLine("endDate");
            // Console.WriteLine(endDate);

            /*
             * //Console.WriteLine("Checking MetroGrid Working?");
             * //Console.WriteLine(metroGrid1.Rows.Count);
             */

            // Setting min scale of xaxis to starttime and max scale to endtime
            myPane.XAxis.Scale.Min       = new XDate(startDate);
            myPane.XAxis.Scale.Max       = new XDate(endDate);
            myPane.XAxis.Scale.MinorUnit = DateUnit.Second;
            myPane.XAxis.Scale.MajorUnit = DateUnit.Minute;

            // Scroll min to start time and scroll max to endtime
            zedGraphControl1.ScrollMinX = new XDate(startDate);
            zedGraphControl1.ScrollMaxX = new XDate(endDate);

            myPane.XAxis.Type                = AxisType.Date;
            myPane.XAxis.Scale.Format        = "HH:mm:ss";
            myPane.XAxis.MinorGrid.IsVisible = true;
            myPane.XAxis.MajorGrid.IsVisible = true;

            double xCoord = 0;

            // Point pair list for graph
            hrList       = new PointPairList();
            speedList    = new PointPairList();
            cadenceList  = new PointPairList();
            altitudeList = new PointPairList();
            powerList    = new PointPairList();

            int dataCount = (metroGrid1.Rows.Count - 1);
            int counter   = 0;

            // Graph setup for version to 106 and 107
            if (Version == "106" || Version == "107")
            {
                foreach (DataGridViewRow rowData in metroGrid1.Rows)
                {
                    if (counter == dataCount)
                    {
                        break;
                    }
                    // Adding interval as seconds
                    xCoord = (double)new XDate(startDate.AddSeconds(seconds * counter));
                    //Console.WriteLine("rowData[1].Value.ToString");
                    //Console.WriteLine(rowData.Cells[1].Value.ToString());

                    hrList.Add(xCoord, double.Parse(rowData.Cells[1].Value.ToString()));
                    // Ploting graph according to smode when bits value is 1
                    if (SMode0 == "1")
                    {
                        // Ploting graph value of speed
                        speedList.Add(xCoord, double.Parse(rowData.Cells[2].Value.ToString()));
                    }
                    if (SMode1 == "1")
                    {
                        // Ploting graph value of cadence
                        cadenceList.Add(xCoord, double.Parse(rowData.Cells[3].Value.ToString()));
                    }
                    if (SMode2 == "1")
                    {
                        Console.WriteLine("Debug Here");
                        Console.WriteLine(rowData.Cells[4].Value.ToString());
                        // Ploting graph value of altitude
                        altitudeList.Add(xCoord, double.Parse(rowData.Cells[4].Value.ToString()));
                    }
                    if (SMode3 == "1")
                    {
                        // Ploting graph value of power
                        powerList.Add(xCoord, double.Parse(rowData.Cells[5].Value.ToString()));
                    }
                    counter++;
                }

                Console.WriteLine("Checking Actual Data Here");
                Console.WriteLine(hrList);
                Console.WriteLine(speedList);
                Console.WriteLine(cadenceList);
                Console.WriteLine(altitudeList);
                Console.WriteLine(powerList);

                // Setting each graph title, color and symbol
                hrCurve = myPane.AddCurve("Heart Rate", hrList, System.Drawing.Color.Red, SymbolType.None);
                if (SMode0 == "1")
                {
                    // Setting speed as graph title, color as blue and symbol as none
                    speedCurve            = myPane.AddCurve("Speed", speedList, System.Drawing.Color.Blue, SymbolType.None);
                    speedCurve.YAxisIndex = Y2Axis;
                }
                if (SMode1 == "1")
                {
                    // Setting cadence as graph title, color as green and symbol as none
                    cadenceCurve            = myPane.AddCurve("Cadence", cadenceList, System.Drawing.Color.Green, SymbolType.None);
                    cadenceCurve.YAxisIndex = Y3Axis;
                }
                if (SMode2 == "1")
                {
                    // Setting altitude as graph title, color as yellow and symbol as none
                    altitudeCurve            = myPane.AddCurve("Altitude", altitudeList, System.Drawing.Color.Yellow, SymbolType.None);
                    altitudeCurve.YAxisIndex = Y4Axis;
                }
                if (SMode3 == "1")
                {
                    // Setting power as graph title, color as purple and symbol as none
                    powerCurve            = myPane.AddCurve("Power Watt", powerList, System.Drawing.Color.Purple, SymbolType.None);
                    powerCurve.YAxisIndex = Y5Axis;
                }
                hrCurve.YAxisIndex = YAxis;

                // Refreshing graph
                zedGraphControl1.AxisChange();
                zedGraphControl1.Invalidate();
            }
            // Setting up graph for version 105
            else if (Version == "105")
            {
                foreach (DataGridViewRow rowData in metroGrid1.Rows)
                {
                    if (counter == dataCount)
                    {
                        break;
                    }

                    hrList.Add(xCoord, double.Parse(rowData.Cells[1].Value.ToString()));
                    speedList.Add(xCoord, double.Parse(rowData.Cells[2].Value.ToString()));
                    // cadenceList.Add(xCoord, double.Parse(rowData.Cells[3].Value.ToString()));

                    /*
                     * lblMaxPower.Text = "0 Watts";
                     * lblMaxAltitude.Text = "0 Meter";
                     */
                    counter++;
                }

                hrCurve      = myPane.AddCurve("Heart Rate", hrList, System.Drawing.Color.Red, SymbolType.None);
                speedCurve   = myPane.AddCurve("Speed", speedList, System.Drawing.Color.Blue, SymbolType.None);
                cadenceCurve = myPane.AddCurve("Cadence", cadenceList, System.Drawing.Color.Green, SymbolType.None);

                hrCurve.YAxisIndex      = YAxis;
                speedCurve.YAxisIndex   = Y2Axis;
                cadenceCurve.YAxisIndex = Y3Axis;

                zedGraphControl1.AxisChange();
                zedGraphControl1.Invalidate();
            }
        }   // Draw Graph
Esempio n. 10
0
        private void zedGraph()
        {
            GraphPane graphValue = zedGraphControl1.GraphPane;

            graphValue.CurveList.Clear();
            graphValue.GraphObjList.Clear();
            graphValue.YAxisList.Clear();

            // Set the Titles
            graphValue.Title.Text       = "Data Analysis Software";
            graphValue.XAxis.Title.Text = "Time (HH:mm:ss)";

            graphValue.AddYAxis("Heart Rate");
            graphValue.AddYAxis("Speed");
            graphValue.AddYAxis("Altitude");
            graphValue.AddYAxis("Power");
            graphValue.AddYAxis("Cadence");

            // Heart Rate Y AXIS
            graphValue.YAxisList[0].Scale.Min = minHeartRate;
            graphValue.YAxisList[0].Scale.Max = maxHeartRate;

            // Speed Y AXIS
            graphValue.YAxisList[1].Scale.Min = 0;
            graphValue.YAxisList[1].Scale.Max = maxSpeed;

            // Altitude Y AXIS
            graphValue.YAxisList[2].Scale.Min = 0;
            graphValue.YAxisList[2].Scale.Max = maxAltitude;

            // Power Y AXIS
            graphValue.YAxisList[3].Scale.Min = 0;
            graphValue.YAxisList[3].Scale.Max = maxPower;

            // Cadence Y AXIS
            graphValue.YAxisList[4].Scale.Min = 0;
            graphValue.YAxisList[4].Scale.Max = 5000;


            graphValue.Title.FontSpec.FontColor = Color.Crimson;

            // Add gridlines to the plot, and make them gray
            double x, y1, y2, y3, y4, y5;

            // Move the legend location
            graphValue.Legend.Position = ZedGraph.LegendPos.Top;
            PointPairList teamAPairList = new PointPairList();
            PointPairList teamBPairList = new PointPairList();
            PointPairList teamCPairList = new PointPairList();
            PointPairList teamDPairList = new PointPairList();
            PointPairList teamEPairList = new PointPairList();

            graphValue.XAxis.Type         = AxisType.Date;
            graphValue.XAxis.Scale.Format = "HH:mm:ss";


            graphValue.XAxis.Scale.Min       = 0;
            graphValue.XAxis.Scale.Max       = endTime.TotalSeconds - startTime.TotalSeconds;
            graphValue.XAxis.Scale.MinorUnit = DateUnit.Second;
            graphValue.XAxis.Scale.MajorUnit = DateUnit.Minute;


            double[] heartRate = graphHeartRate;
            double[] speed     = graphSpeed;
            double[] cadence   = graphCadence;
            double[] altitude  = graphAltitude;
            double[] power     = graphPower;
            for (int i = 0; i < heartRate.Length; i++)
            {
                teamAPairList.Add(i, heartRate[i]);
            }
            for (int i = 0; i < speed.Length; i++)
            {
                teamBPairList.Add(i, speed[i]);
            }
            for (int i = 0; i < cadence.Length; i++)
            {
                teamCPairList.Add(i, cadence[i]);
            }
            for (int i = 0; i < power.Length; i++)
            {
                teamDPairList.Add(i, power[i]);
            }
            for (int i = 0; i < altitude.Length; i++)
            {
                teamEPairList.Add(i, altitude[i]);
            }

            // Heart Rate
            teamACurve = graphValue.AddCurve("Heart Rate", teamAPairList, Color.Red, SymbolType.None);

            // Speed
            teamBCurve = graphValue.AddCurve("Speed ", teamBPairList, Color.Blue, SymbolType.None);

            // Power
            teamCCurve = graphValue.AddCurve("Power", teamCPairList, Color.Green, SymbolType.None);

            // Cadence
            teamDCurve = graphValue.AddCurve("Cadence", teamDPairList, Color.Yellow, SymbolType.None);

            // Altitude
            teamECurve = graphValue.AddCurve("Altitude ", teamEPairList, Color.Orange, SymbolType.None);

            axisChangeZedGraph(zedGraphControl1);

            SetSize();

            // end
        }
Esempio n. 11
0
        public void readData(string fn, GraphPane graph)
        {
            SqlConnection con = DBSettings.getConnection();

            con.Open();
            Int64 timeStart = EPADB.GetIntDate(DateStart);
            Int64 timeEnd   = EPADB.GetIntDate(DateEnd);
            Dictionary <Int64, Dictionary <string, double> > Data = new Dictionary <long, Dictionary <string, double> >();

            Int64 time = timeStart;

            while (time <= timeEnd)
            {
                Data.Add(time, new Dictionary <string, double>());
                foreach (SignalInfo si in epa.SelectedAnalogSignals)
                {
                    Data[time].Add(si.KKS, double.NaN);
                }
                time += Step;
            }

            List <string>         kksQList     = new List <string>();
            List <int>            numSignQList = new List <int>();
            List <int>            timesQList   = new List <int>();
            Dictionary <int, int> timesDict    = new Dictionary <int, int>();
            List <int>            timesList    = new List <int>();

            foreach (int ss in SignalsBySubSys.Keys)
            {
                foreach (string table in tables)
                {
                    if (subSystemsByTables[table] != ss)
                    {
                        continue;
                    }
                    Status.Text = "Обработка таблицы " + table;
                    SqlCommand com = con.CreateCommand();
                    com.CommandText = String.Format("Select * from {0} where time_page>={1} and time_page<={2}", table.Replace("state", "time"), timeStart, timeEnd);
                    List <Int32> times = new List <int>();

                    try {
                        Status.Text += "---|";
                        SqlDataReader reader = com.ExecuteReader();
                        while (reader.Read())
                        {
                            try {
                                int tm = reader.GetInt32(0);
                                times.Add(tm);
                            }
                            catch { }
                        }
                        times.Sort();
                        reader.Close();

                        foreach (SignalInfo si in SignalsBySubSys[ss])
                        {
                            kksQList.Add("'" + si.KKS + "'");
                            numSignQList.Add(si.numSign);
                            if (kksQList.Count() <= 10 && si != SignalsBySubSys[ss].Last())
                            {
                                continue;
                            }
                            string kksQ = String.Join(",", kksQList);
                            string numQ = String.Join(",", numSignQList);
                            kksQList.Clear();
                            timesDict.Clear();
                            numSignQList.Clear();
                            timesQList.Clear();

                            foreach (int t in Data.Keys)
                            {
                                if (t >= times.First() && t <= times.Last())
                                {
                                    int valT = times.First(tempT => { return(tempT >= t); });
                                    if (valT - t < Step)
                                    {
                                        timesQList.Add(valT);
                                        timesDict.Add(valT, t);
                                    }
                                }
                                if (timesQList.Count < 100 && t != Data.Keys.Last())
                                {
                                    continue;
                                }
                                string timesQ = String.Join(",", timesQList);
                                timesQList.Clear();

                                try {
                                    com = con.CreateCommand();
                                    //com.CommandText = String.Format("Select kks_id_signal,time_page,data from {0} where time_page in ({2}) and kks_id_signal in ({1})", table, kksQ, timesQ);
                                    //com.CommandText = String.Format("Select kks_id_signal,time_page,data from {0} where time_page={2} and kks_id_signal = '{1}'", table, kks, valT);
                                    if (!epa.UseNumSignals)
                                    {
                                        com.CommandText = String.Format("Select kks_id_signal,time_page,data from {0} where time_page in ({2}) and kks_id_signal in ({1})", table, kksQ, timesQ);
                                    }
                                    else
                                    {
                                        com.CommandText = String.Format("Select kks_id_signal,time_page,data from {0} where time_page in ({2}) and num_sign in ({1})", table, numQ, timesQ);
                                    }

                                    Status.Text += "---|";
                                    reader       = com.ExecuteReader();
                                    while (reader.Read())
                                    {
                                        try {
                                            int    timeRes = reader.GetInt32(1);
                                            string kksAsu  = reader.GetString(0);
                                            double val     = reader.GetFloat(2);

                                            long resultTime = timesDict[timeRes];
                                            Data[resultTime][kksAsu] = val;
                                        }
                                        catch (Exception e) { Logger.Info(e.ToString()); }
                                    }
                                    reader.Close();
                                }
                                catch (Exception e) { Logger.Info(e.ToString()); }
                            }
                        }
                    }
                    catch (Exception e) { Logger.Info(e.ToString()); }
                }
            }
            con.Close();

            Status.Text = "Чтение завершено";
            List <string> thAsuList  = new List <string>();
            List <string> thTechList = new List <string>();

            foreach (SignalInfo si in epa.SelectedAnalogSignals)
            {
                thAsuList.Add(String.Format("<th>{0}</th>", si.ShortName));
                try {
                    string     kksTech = epa.ASUTechDict[si.KKS];
                    SignalInfo tech    = epa.FindSignal(epa.TechRoot, kksTech, null);
                    thTechList.Add(String.Format("<th>{0}</th>", tech.ShortName));
                }
                catch {
                    thTechList.Add("<th>-</th>");
                }
            }
            OutputData.writeToOutput(fn, String.Format("<table border='1'><tr><th rowspan='2'>Дата</th>{0}</tr><tr>{1}</tr>", string.Join(" ", thAsuList), string.Join(" ", thTechList)));
            foreach (int tm in Data.Keys)
            {
                OutputData.writeToOutput(fn, String.Format("<tr><th>{0}</th><td>{1}</td></tr>", EPADB.GetDate(tm), String.Join("</td><td>", Data[tm].Values)));
            }
            OutputData.writeToOutput(fn, "</table>");

            graph.CurveList.Clear();
            graph.XAxis.Scale.Min           = Data.Keys.First();
            graph.XAxis.Scale.Max           = Data.Keys.Last();
            graph.XAxis.Scale.MinAuto       = false;
            graph.XAxis.Scale.MaxAuto       = false;
            graph.XAxis.Title.IsVisible     = false;
            graph.YAxis.IsVisible           = false;
            graph.YAxis.Title.IsVisible     = false;
            graph.Legend.FontSpec.Size      = 6;
            graph.Legend.Location.X         = 0;
            graph.Legend.Location.Y         = 0;
            graph.Title.IsVisible           = false;
            graph.YAxis.Scale.FontSpec.Size = 6;
            graph.YAxis.IsVisible           = false;
            graph.XAxis.Scale.FontSpec.Size = 6;
            int index = 0;

            foreach (SignalInfo si in epa.SelectedAnalogSignals)
            {
                try {
                    string name  = si.ShortName;
                    int    axInd = graph.AddYAxis("");
                    graph.YAxisList[axInd].Color = Colors[index % 8];
                    graph.YAxisList[axInd].Scale.FontSpec.Size      = 6;
                    graph.YAxisList[axInd].Scale.FontSpec.FontColor = Colors[index % 8];

                    try {
                        string     kksTech = epa.ASUTechDict[si.KKS];
                        SignalInfo tech    = epa.FindSignal(epa.TechRoot, kksTech, null);
                        name = name + " (" + tech.ShortName + ")";
                    }
                    catch { }
                    PointPairList list = new PointPairList();
                    foreach (int tm in Data.Keys)
                    {
                        list.Add(new PointPair(tm, Data[tm][si.KKS]));
                    }
                    graph.AddCurve(name, list, Colors[index % 8], SymbolType.None);
                    graph.CurveList[index].YAxisIndex = axInd;
                }
                catch (Exception e) {
                    Logger.Info(e.ToString());
                }
                graph.AxisChange();
                index++;
            }
        }
Esempio n. 12
0
        private void Redraw()
        {
            if (GraphControl == null)
            {
                return;
            }
            GraphControl.GraphPane.CurveList.Clear();
            GraphPane pane = GraphControl.GraphPane;

            pane.YAxisList.Clear();
            pane.Title.Text = "";
            //var graphs = m_Graphs.SelectMany(g => g.Value).ToList();
            if (m_Graphs.SelectMany(g => g.Value).Count() == 0)
            {
                pane.XAxis.Title.Text = "";
                return;
            }

            var yAxises = new Dictionary <string, int>();

            int color = 0;

            foreach (var keyValue in m_Graphs)
            {
                var lineColor = GraphSettings.CurveLines[color++].LineColor;
                for (int i = 0; i < keyValue.Value.Count(); i++)
                {
                    Graph graph = keyValue.Value[i];
                    var   line  = graph.GetLineItem();
                    if (GraphSettings.Smooth)
                    {
                        var curList = (IPointList)line.Points.Clone();
                        var average = new MovingAverage(GraphSettings.SmoothPeriod);

                        switch (GraphSettings.SmoothType)
                        {
                        case SmoothModel.Average:
                            for (int j = 0; j < curList.Count; j++)
                            {
                                average.Push(curList[j].Y);
                                curList[j].Y = average.Average;
                            }
                            break;

                        case SmoothModel.Median:
                            for (int j = 0; j < curList.Count; j++)
                            {
                                average.Push(curList[i].Y);
                                curList[j].Y = average.Median;
                            }
                            break;

                        default:
                            break;
                        }

                        line.Points = curList;
                    }
                    var yAxisLabel = graph.YAxis + (string.IsNullOrEmpty(graph.Y_Unit) ? "" : (", " + graph.Y_Unit));
                    if (!yAxises.ContainsKey(yAxisLabel))
                    {
                        yAxises.Add(yAxisLabel, pane.AddYAxis(yAxisLabel));
                    }
                    line.YAxisIndex = yAxises[yAxisLabel];
                    line.Line.Style = (System.Drawing.Drawing2D.DashStyle)i;
                    line.Line.Color = lineColor;
                    pane.CurveList.Add(line);
                }
            }

            pane.XAxis.Title.Text = m_Graphs.First().Value.First().XAxis
                                    + (string.IsNullOrEmpty(m_Graphs.First().Value.First().X_Unit) ? "" : (", " + m_Graphs.First().Value.First().X_Unit));
            pane.Title.Text = "";

            GraphControl.AxisChange();

            LegendRedraw(GraphSettings.LegendVisible);
            AxisTitleRedraw(GraphSettings.AxisLabelVisible);

            #region AxisGrids
            pane.XAxis.MajorGrid.IsVisible = GraphSettings.MajorGrid;
            pane.YAxis.MajorGrid.IsVisible = GraphSettings.MajorGrid;
            pane.XAxis.MinorGrid.IsVisible = GraphSettings.MinorGrid;
            pane.YAxis.MinorGrid.IsVisible = GraphSettings.MinorGrid;
            pane.YAxis.MajorGrid.DashOn    = 10;
            pane.YAxis.MajorGrid.DashOff   = 5;
            pane.XAxis.MajorGrid.DashOn    = 10;
            pane.XAxis.MajorGrid.DashOff   = 5;
            pane.YAxis.MajorGrid.DashOn    = 10;
            pane.YAxis.MajorGrid.DashOff   = 5;
            pane.XAxis.MinorGrid.DashOn    = 1;
            pane.XAxis.MinorGrid.DashOff   = 2;
            pane.YAxis.MinorGrid.DashOn    = 1;
            pane.YAxis.MinorGrid.DashOff   = 2;
            #endregion DashOnOff

            GraphControl.Invalidate();
            GraphControl.Refresh();
        }
Esempio n. 13
0
        /* Plot ZedGraph Line Graph
         * @param ZedGraphControl zgc - the zedgraphcontrol (displays chart area)
         * @param HRMObjectCollection hrmobjectcollection - the collection of hrmobjects to display as plotted x,y data
         * @param int interval - the interval between each recorded line of data (polar cycle can be set to record data every x seconds)
         * @param List<int[]> intervals - a list of integer arrays of size 2, storing start and end x co-ordinates for each exercise interval
         */
        public GraphPane plotLineGraph(ZedGraphControl zgc, HRMObjectCollectionClass hrmObjectCollection, int frequency, List <int[]> intervals = null)
        {
            if (hrmObjectCollection.getCount() == 0 || hrmObjectCollection.getObject(0).data == null)
            {
                throw new ArgumentException("HRMObjectCollection is Empty");
            }


            // and labelled X-axis
            GraphPane pane = zgc.GraphPane;

            clearPane(pane);
            pane.AddYAxis("");
            pane.Title.Text       = "Polar Data Reader";
            pane.XAxis.Title.Text = "Time (HH:MM:SS)";
            pane.XAxis.IsVisible  = true;

            // Plot
            // Loop through HRMObject Collection plotting each one individually
            for (int i = 0; i < hrmObjectCollection.getCount(); i++)
            {
                PointPairList ppList = new PointPairList();

                for (int j = 0; j < duration; j++)
                {
                    // X-Value
                    double a = new XDate(startDateTime.AddSeconds(j * frequency).ToOADate());
                    // Note: this "frequency" is the polar cycle rate at which it records data by x seconds times

                    // HRMObject Y-Value
                    double b = hrmObjectCollection.getObject(i).data[j];

                    // Add to Point Pair List
                    ppList.Add(a, b);

                    // Intervals From HRMObjectPower
                    if (intervals != null && hrmObjectCollection.getObject(i) is HRMObjectPowerClass)
                    {
                        for (int k = 0; k < intervals.Count(); k++)
                        {
                            for (int l = 0; l < intervals[k].Length; l++)
                            {
                                if (intervals[k][l] == j)
                                {
                                    LineItem line = new LineItem(String.Empty, new[] { a, a },
                                                                 new[] { 0.0, hrmObjectCollection.getObject(i).calcMax() }, // Set height of interval lines to max of this HRMObject's y-value
                                                                 Color.Black, SymbolType.None);
                                    line.Line.Width = 1f;

                                    // Add Interval Line
                                    pane.CurveList.Add(line);
                                }
                            }
                        }
                    }

                    // Display the Y axis grid lines
                    pane.YAxis.MajorGrid.IsVisible = true;
                    pane.YAxis.MinorGrid.IsVisible = true;
                }

                // Add HRMObject Data Line
                LineItem myCurve = pane.AddCurve(hrmObjectCollection.getObject(i).legendText, ppList, hrmObjectCollection.getObject(i).color, SymbolType.Diamond);
                myCurve.Symbol.Fill = new Fill(Color.White);
            }

            // Format X-axis as Date
            pane.XAxis.MajorGrid.IsVisible = true;
            pane.XAxis.Type         = AxisType.Date;
            pane.XAxis.Scale.Format = "T";

            // Set X-axis scale to default
            pane.XAxis.Scale.Align         = AlignP.Inside;
            pane.XAxis.Scale.MinAuto       = true;
            pane.XAxis.Scale.MaxAuto       = true;
            pane.XAxis.Scale.MinorStepAuto = true;
            pane.XAxis.Scale.MajorStepAuto = true;

            // Set Y-axis scale to default
            pane.YAxis.Scale.Align         = AlignP.Inside;
            pane.YAxis.Scale.MinAuto       = true;
            pane.YAxis.Scale.MaxAuto       = true;
            pane.YAxis.Scale.MinorStepAuto = true;
            pane.YAxis.Scale.MajorStepAuto = true;

            pane.Chart.Fill = new Fill(Color.White, Color.LightGray, 45.0f);

            ZGraphControl(zgc);

            return(pane);
        }