public static void DrawAnnotations(Chart chart1, int signalLength, bool addBeatType = true)
        {
            chart1.Annotations.Clear();
            List <int>    RPeaks          = LoadRPeaksInds("R_Peaks.txt");
            List <string> classifications = new List <string>();

            if (addBeatType)
            {
                classifications = LoadClassifications("beats_Classes.txt");
            }
            //MessageBox.Show(RPeaks.Count.ToString());
            //MessageBox.Show(classifications.Count.ToString());

            for (int i = 0; i < RPeaks.Count; i++)
            {
                if (RPeaks[i] >= signalLength)
                {
                    break;
                }
                if (addBeatType)
                {
                    TextAnnotation ann = new TextAnnotation();
                    ann.Text = classifications[i];
                    ann.SetAnchor(chart1.Series[0].Points[RPeaks[i]]);
                    chart1.Annotations.Add(ann);
                }

                chart1.Series[0].Points[RPeaks[i]].MarkerStyle = MarkerStyle.Cross;
                chart1.Series[0].Points[RPeaks[i]].MarkerColor = Color.Red;
            }
        }
Example #2
0
        public static void DrawAnnotations(Chart chart1, int signalLength)
        {
            List <int>    RPeaks          = HelperMethods.LoadRPeaksInds("R_Peaks.txt");
            List <string> classifications = HelperMethods.LoadClassifications("beats_Classes.txt");

            MessageBox.Show(RPeaks.Count.ToString());
            MessageBox.Show(classifications.Count.ToString());

            for (int i = 0; i < RPeaks.Count; i++)
            {
                if (RPeaks[i] >= signalLength)
                {
                    break;
                }
                TextAnnotation ann = new TextAnnotation();
                ann.Text = classifications[i];
                ann.SetAnchor(chart1.Series[0].Points[RPeaks[i]]);
                chart1.Annotations.Add(ann);
                chart1.Series[0].Points[RPeaks[i]].MarkerStyle = MarkerStyle.Cross;
                chart1.Series[0].Points[RPeaks[i]].MarkerColor = Color.Red;
            }
        }
Example #3
0
        public void OneCurveChart(int index, int dataNumPercent, int posPercent)
        {
            int      i, j; // index;
            int      flag;
            int      interval;
            float    f;
            float    delta, tmpMax, tmpMin;
            DateTime dateTime;
            string   xString;
            float    maxV, minV, USL, LSL;
            int      totalDataNumInBuffer; //total number of data need to be dislayed, only part of totalDataNumWanted because of the limitation of oneCurveScreenSize
            int      initialDatPointNum;   //initial point number for a curve

            initialDatPointNum = gVariable.minDataForOneScreen;

            maxV = gVariable.maxDataValue[index];
            minV = gVariable.minDataValue[index];

//            USL = gVariable.curveSTDValue[index] + gVariable.curveDeltaValue[index];
//            LSL = gVariable.curveSTDValue[index] - gVariable.curveDeltaValue[index];
            USL = gVariable.curveUpperLimit[index];
            LSL = gVariable.curveLowerLimit[index];

            totalDataNumInBuffer = mySQLClass.readAllDataToArrayByPercent(gVariable.currentCurveDatabaseName, index, dataNumPercent, posPercent);

            if (totalDataNumInBuffer < initialDatPointNum)
            {
                oneCurveScreenSize = initialDatPointNum;
            }
            else
            {
                oneCurveScreenSize = totalDataNumInBuffer;
            }

            chart1.ChartAreas[0].AxisX.ScaleView.Size = oneCurveScreenSize;

            try
            {
//                if (totalDataNumInBuffer > gVariable.totalPointNumForSChart)
//                {
//                    getSPCValues(index, USL, LSL);
//                    chart1.ChartAreas[0].AxisX.Title = "Cp: " + gVariable.cp[index].ToString("f4") + "     Cpk: " + gVariable.cpk[index].ToString("f4") + "     Ppk: " + gVariable.ppk[index].ToString("f4");
//                }

                foreach (var series in chart1.Series)
                {
                    series.Points.Clear();
                }

                for (i = 0; i < totalDataNumInBuffer; i++)
                {
                    j        = gVariable.oneCurveIndexInPoint[i];
                    dateTime = toolClass.GetTime((gVariable.oneCurveTimeInPoint[i] - 3600 * 7).ToString());
                    xString  = j + "\n" + dateTime.ToString("MM-dd HH:mm:ss");
                    f        = gVariable.oneCurveDataInPoint[i];
                    chart1.Series[0].Points.AddXY(xString, f);

                    if (f > maxV)
                    {
                        maxV = f;
                    }

                    if (f < minV)
                    {
                        minV = f;
                    }
                }
                tmpMax = USL;
                tmpMin = LSL;

                if (maxV > USL)
                {
                    tmpMax = maxV;
                }

                if (minV < LSL)
                {
                    tmpMin = minV;
                }


                delta   = tmpMax - tmpMin;
                tmpMax += delta / 7;
                tmpMin -= delta / 7;

                if (tmpMax == tmpMin)
                {
                    tmpMax += 1;
                }

                chart1.ChartAreas[0].AxisY.Maximum = tmpMax;
                chart1.ChartAreas[0].AxisY.Minimum = tmpMin;

                StripLine sprUsl = new StripLine();
                sprUsl.IntervalOffset  = USL;
                sprUsl.BorderColor     = Color.Blue;
                sprUsl.BorderDashStyle = ChartDashStyle.Dash;
                sprUsl.BorderWidth     = 1;
                chart1.ChartAreas[0].AxisY.StripLines.Add(sprUsl);

                StripLine sprlsl = new StripLine();
                sprlsl.IntervalOffset  = LSL;
                sprlsl.BorderColor     = Color.Blue;
                sprlsl.BorderDashStyle = ChartDashStyle.Dash;
                sprlsl.BorderWidth     = 1;
                chart1.ChartAreas[0].AxisY.StripLines.Add(sprlsl);

                interval = totalDataNumInBuffer / 15;

                i = 0;

                flag = 0;
                chart1.Annotations.Clear();
                foreach (var point in chart1.Series[0].Points)
                {
                    float tmp = (float)point.YValues[0];

                    if (flag == 1 || tmp > USL || tmp < LSL)
                    {
                        point.Color = Color.Red;
                        if (flag == 0)
                        {
                            flag = 1;
                        }
                        else
                        {
                            flag = 0;
                        }
                    }
                    else
                    {
                        point.Color = Color.Green;
                    }
                    if (i == interval)
                    {
                        var annotation = new TextAnnotation {
                            Text = point.YValues[0].ToString("F3")
                        };
                        annotation.SetAnchor(point);
                        annotation.AnchorY = point.YValues[0];

                        chart1.Annotations.Add(annotation);
                        i = 0;
                    }
                    i++;
                }

                hScrollBar1.Minimum = 0;
                hScrollBar2.Minimum = 0;
                hScrollBar1.Maximum = 1009;
                hScrollBar2.Maximum = 1009;

                if (totalDataNumInBuffer < oneCurveScreenSize)
                {
//                    if (totalDataNumInBuffer < oneCurveScreenSize * 2)
                    hScrollBar1.Enabled = false;
                    hScrollBar2.Enabled = false;
                }

                chart1.ChartAreas[0].AxisX.ScaleView.Position = 1; //we have put many points to chart by Points.AddXY(), then from which point we start our display
            }
            catch (Exception ex)
            {
                Console.Write("draw curve error" + ex);
            }
        }
Example #4
0
        private void CargarDatos()
        {
            try
            {
                if (_lbLoadFile)
                {
                    DailyProcessing();
                }

                DataTable datos = new DataTable();

                string sMetaGlobal = string.Empty;
                string sRealGlobal = string.Empty;
                string sCumpTotal  = string.Empty;



                chtBarras1.Series[0].Points.Clear();
                chtBarras1.Palette = ChartColorPalette.SeaGreen;
                chtBarras1.Annotations.Clear();

                chtPastel.Series[0].Points.Clear();

                datos = ImportarDatos(_lsPlanta, _lsArea, _lsGlobal);
                if (datos.Rows.Count != 0)
                {
                    if (string.IsNullOrEmpty(_lsHora))
                    {
                        chtBarras1.Series[0].LegendText = _lsPlanta;
                    }
                    else
                    {
                        chtBarras1.Series[0].LegendText = _lsHora;
                    }

                    //chtBarras1.Series[0].Legend

                    /*
                     * chtBarras1.Palette = ChartColorPalette.SeaGreen;
                     * chtBarras1.Annotations.Clear();
                     */
                    chtBarras1.ChartAreas["ChartArea1"].AxisX.Title     = "HORA POR HORA";
                    chtBarras1.ChartAreas["ChartArea1"].AxisX.TitleFont = new Font("Calibri", 14, FontStyle.Bold);
                    chtBarras1.ChartAreas["ChartArea1"].AxisY.Title     = "PORCENTAJE DE PRODUCCION";
                    //chtBarras1.ChartAreas["ChartArea1"].AxisY.Maximum = 100;
                    chtBarras1.ChartAreas["ChartArea1"].AxisY.TitleFont = new Font("Calibri", 14, FontStyle.Bold);

                    double dMetaGlobal = 0;
                    double dRealGlobal = 0;


                    ///////////////////////////////////////////////////
                    int cont = 0;
                    for (int x = 0; x < datos.Rows.Count; x++)
                    {
                        int band = 0;

                        for (int y = _rangoInicial; y <= _rangoFinal; y++)
                        {
                            string linea = "";
                            if (y < 10)
                            {
                                linea = "0" + y;
                            }
                            else
                            {
                                linea = y.ToString();
                            }

                            if (datos.Rows[x][0].ToString().EndsWith(linea))
                            {
                                band = 1;
                                break;
                            }
                        }

                        if (band == 0)
                        {
                            continue;
                        }

                        string sCump = datos.Rows[x][3].ToString().Trim();
                        double dCump = 0;
                        if (!double.TryParse(sCump, out dCump))
                        {
                            continue;
                        }

                        //BARRAS
                        chtBarras1.Series[0].Points.AddXY(datos.Rows[x][0].ToString(), datos.Rows[x][3].ToString());
                        chtBarras1.Series[0].Points[cont].Label = sCump + "%";
                        chtBarras1.Series[0].Font = new Font("Arial Narrow", 12F, FontStyle.Bold);
                        chtBarras1.ChartAreas[0].AxisX.LabelStyle.Font     = new Font("Calibri", 14F, FontStyle.Bold);
                        chtBarras1.ChartAreas[0].AxisX.LabelStyle.Interval = 1;
                        chtBarras1.ChartAreas[0].AxisY.LabelStyle.Font     = new Font("Caliri", 12F, FontStyle.Bold);
                        //chtBarras1.ChartAreas[0].AxisX.LabelStyle.Angle = new AxisScrollBar

                        TextAnnotation tA = new TextAnnotation();
                        tA.Font = new Font("Arial Narrow", 12F, FontStyle.Bold);
                        double dPorcj = double.Parse(datos.Rows[x][2].ToString());
                        tA.Text = (String.Format("{0:0,0}", dPorcj));
                        tA.SetAnchor(chtBarras1.Series[0].Points[cont]);
                        chtBarras1.Annotations.Add(tA);

                        if (dCump > _ldPorcStd)
                        {
                            chtBarras1.Series[0].Points[cont].Color = Color.LightGreen;
                        }
                        else
                        {
                            chtBarras1.Series[0].Points[cont].Color = Color.PaleVioletRed;
                            //chtBarras1.ChartAreas["ChartArea1"].AxisX.LabelStyle.ForeColor = Color.PaleVioletRed;
                            //chtBarras1.ChartAreas[0].AxisX[x].LabelStyle.ForeColor = Color.PaleVioletRed;
                        }


                        chtBarras1.Series[0].SmartLabelStyle.Enabled = true;
                        chtBarras1.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;
                        chtBarras1.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false;
                        chtBarras1.ChartAreas["ChartArea1"].AxisX.IsLabelAutoFit    = true;
                        chtBarras1.ChartAreas["ChartArea1"].AxisX.LabelAutoFitStyle = LabelAutoFitStyles.LabelsAngleStep45;

                        double dMeta = 0;
                        double dReal = 0;
                        if (double.TryParse(datos.Rows[x][1].ToString(), out dMeta))
                        {
                            dMetaGlobal += dMeta;
                        }
                        if (double.TryParse(datos.Rows[x][2].ToString(), out dReal))
                        {
                            dRealGlobal += dReal;
                        }

                        cont++;
                    }



                    ///////////////////////////////////////////////////

                    sMetaGlobal = String.Format("{0:0,0}", dMetaGlobal);
                    chtBarras1.Titles.Clear();
                    chtBarras1.Titles.Add("META: " + sMetaGlobal);
                    chtBarras1.Titles[0].ForeColor = Color.White;
                    chtBarras1.Titles[0].Font      = new Font("Microsoft Sans Serif", 14F, FontStyle.Bold);

                    //PASTEL
                    chtPastel.Series[0].Points.Clear();
                    double dFalt      = 0;
                    double dCumpTotal = 0;
                    dCumpTotal = dRealGlobal / dMetaGlobal;
                    dCumpTotal = Math.Round(dCumpTotal, 2);
                    dCumpTotal = dCumpTotal * 100;

                    if (dRealGlobal < dMetaGlobal)
                    {
                        dFalt = dMetaGlobal - dRealGlobal;
                    }
                    else
                    {
                        dFalt = 0;
                    }

                    chtPastel.Series[0].Points.AddXY("REAL", dCumpTotal);
                    chtPastel.Series[0].Points[0].Label      = "REAL HORA X HORA" + Environment.NewLine + dCumpTotal.ToString() + "%" + Environment.NewLine + String.Format("{0:0,0}", dRealGlobal);
                    chtPastel.Series[0].Points[0].LegendText = "REAL";
                    double dPorc = 0;
                    if (dFalt > 0)
                    {
                        dPorc = dFalt / dMetaGlobal;
                        dPorc = dPorc * 100;
                        dPorc = Math.Round(dPorc, 2);
                    }
                    string sPorc = dPorc.ToString();
                    string sFalt = String.Format("{0:0,0}", dFalt);
                    chtPastel.Series[0].Points.AddXY("FALTANTE", sPorc);
                    chtPastel.Series[0].Points[1].Label      = "FALTANTE" + Environment.NewLine + sPorc + "%" + Environment.NewLine + sFalt;
                    chtPastel.Series[0].Points[1].LegendText = "FALTANTE";


                    if (dCumpTotal >= _ldPorcStd)
                    {
                        chtPastel.Series[0].Points[1].Color = Color.LightGreen;
                    }
                    else
                    {
                        chtPastel.Series[0].Points[1].Color = Color.OrangeRed;
                    }

                    chtPastel.Titles.Clear();
                    chtPastel.Titles.Add("META: " + sMetaGlobal);
                    chtPastel.Titles[0].ForeColor = Color.White;
                    chtPastel.Titles[0].Font      = new Font("Microsoft Sans Serif", 14F, FontStyle.Bold);

                    chtPastel.Series[0].SmartLabelStyle.Enabled = true;
                    chtPastel.ChartAreas["ChartArea1"].AxisX.MajorGrid.Enabled = false;
                    chtPastel.ChartAreas["ChartArea1"].AxisY.MajorGrid.Enabled = false;
                }
                else
                {
                    chtBarras1.Series[0].Points.Clear();
                    //MessageBox.Show("No se encontro informacion para mostrar", "CloverCES Notification", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    //Close();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Favor de Notificar al Administrador" + Environment.NewLine + "Dashboard" + Environment.NewLine + "LoadChart.." + ex.ToString(), "ERROR " + Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
Example #5
0
        public static void readPointDataToChart(int index, Chart chart)
        {
            int      i, j, start, num;
            int      flag;
            int      interval;
            int      startRecordIndex;
            int      currentdataNumForCurve;
            string   xString;
            float    delta, UCL, LCL, tmpMax, tmpMin;
            DateTime dateTime;

            try
            {
                chart.Series[0].Color = Color.Green;

                i   = 0;
                UCL = gVariable.curveUpperLimit[index];
                LCL = gVariable.curveLowerLimit[index];

                currentdataNumForCurve = gVariable.dataNumForCurve[index];

                foreach (var series in chart.Series)
                {
                    series.Points.Clear();
                }

                //startRecordIndex is used as index displayed in x axis
                if (gVariable.dataNumForCurve[index] > gVariable.totalPointNumForNoSPCChart)
                {
                    //We will read totalPointNumForNoSPCChart(125) pieces of data for SPC every time, the last numOfRecordsInChart(25) of data
                    // will be used for curve display, so here we only get the last numOfRecordsInChart(25) of data
                    startRecordIndex = gVariable.dataNumForCurve[index] - gVariable.totalPointNumForNoSPCChart; //start index in database
                    start            = gVariable.totalPointNumForNoSPCChart - gVariable.numOfRecordsInChart;    //start index in dataInPint array
                    num = gVariable.numOfRecordsInChart + start;                                                //end point in curve
                }
                else if (gVariable.dataNumForCurve[index] > gVariable.numOfRecordsInChart)
                {
                    startRecordIndex = 0;
                    start            = gVariable.dataNumForCurve[index] - gVariable.numOfRecordsInChart;
                    num = gVariable.numOfRecordsInChart + start; //end point in curve
                }
                else //if (gVariable.dataNumForCurve[index] < numOfRecordsInChart)
                {
                    startRecordIndex = 0;
                    start            = 0;
                    num = gVariable.dataNumForCurve[index];
                }

                if (num == 0)
                {
                    xString = "1\n" + DateTime.Now.ToString("MM-dd HH:mm:ss");

                    chart.Series[0].Points.AddXY(xString, 0);
                    gVariable.minDataValue[index] = 0;
                    gVariable.maxDataValue[index] = 0;
                }
                else
                {
                    for (i = start; i < num; i++)
                    {
                        dateTime = toolClass.GetTime((gVariable.timeInPoint[index, i] - 3600 * 7).ToString());

                        j       = i + startRecordIndex;
                        xString = j + "\n" + dateTime.ToString("MM-dd HH:mm:ss");

                        chart.Series[0].Points.AddXY(xString, gVariable.dataInPoint[index, i]);

                        if (i == start)
                        {
                            gVariable.minDataValue[index] = gVariable.dataInPoint[index, 0];
                            gVariable.maxDataValue[index] = gVariable.dataInPoint[index, 0];
                        }
                        else
                        {
                            if (gVariable.dataInPoint[index, i] > gVariable.maxDataValue[index])
                            {
                                gVariable.maxDataValue[index] = gVariable.dataInPoint[index, i];
                            }
                            if (gVariable.dataInPoint[index, i] < gVariable.minDataValue[index])
                            {
                                gVariable.minDataValue[index] = gVariable.dataInPoint[index, i];
                            }
                        }
                    }
                }

                if (UCL == 0 && LCL == 0)
                {
                    tmpMax = 1;
                    tmpMin = 0;
                }
                else
                {
                    tmpMax = UCL;
                    tmpMin = LCL;
                }

                if (gVariable.maxDataValue[index] > UCL)
                {
                    tmpMax = gVariable.maxDataValue[index];
                }

                if (gVariable.minDataValue[index] < LCL)
                {
                    tmpMin = gVariable.minDataValue[index];
                }

                delta   = tmpMax - tmpMin;
                tmpMax += delta / 7;

//                if (tmpMin >= 0)
//                    tmpMin = 0;
//                else
                tmpMin -= delta / 7;

                if (tmpMax == tmpMin)
                {
                    tmpMax += 1;
                }

                chart.ChartAreas[0].AxisY.Maximum = tmpMax;
                chart.ChartAreas[0].AxisY.Minimum = tmpMin;

                chart.Annotations.Clear();

                flag     = 0;
                interval = 5;
                i        = 0;
                foreach (DataPoint point in chart.Series[0].Points)    //遍历数据点
                {
                    float tmp = (float)point.YValues[0];

                    if (flag == 1 || tmp > UCL || tmp < LCL)
                    {
                        point.Color = Color.Red;
                        if (flag == 0)
                        {
                            flag = 1;
                        }
                        else
                        {
                            flag = 0;
                        }
                    }
                    else
                    {
                        point.Color = Color.Green;
                    }

                    if (i == interval)
                    {
                        var annotation = new TextAnnotation {
                            Text = point.YValues[0].ToString("F3")
                        };
                        annotation.SetAnchor(point);
                        annotation.AnchorY = point.YValues[0];

                        chart.Annotations.Add(annotation);
                        i = 0;
                    }
                    i++;
                }

                if (UCL != 0 || LCL != 0)                                                        //for beat data, since there is no limit value, no SPC
                {
                    if (gVariable.dataNumForCurve[index] > gVariable.totalPointNumForNoSPCChart) //范本太少则不作SPC计算
                    {
                        getSPCValues(index, UCL, LCL);
                        chart.ChartAreas[0].AxisX.Title = "Cp:" + cp[index].ToString("f3") + "   Cpk:" + cpk[index].ToString("f3") + "   Ppk:" + ppk[index].ToString("f3");
                    }
                    else
                    {
                        chart.ChartAreas[0].AxisX.Title = "Cp:          Cpk:          Ppk:          ";
                    }
                }
            }

            catch (Exception ex)
            {
                Console.Write("draw curve error :" + ex);
            }
        }