C# 学习笔记(五)----- 绘制曲线图坐标系

 //Initialization 初始化
        #region

        private void InitData()//初始化所有数据
        {
            count = 0;
            countCH1 = countCH2 = countCH3 = countCH4 = 0;
            label_Time_Count.Text = option.config.AppSettings.Settings["isTrigger"].Value.Equals("1") ? "触发次数" : "总时间";
            panel_mV.Visible = option.config.AppSettings.Settings["SelectY"].Value.Equals("1") ? true : false;
            panel_mA.Visible = option.config.AppSettings.Settings["SelectY"].Value.Equals("1") ? false : true;
            endTime = 3600 * Convert.ToDouble(option.config.AppSettings.Settings["Hour"].Value);
            endCount = Convert.ToDouble(option.config.AppSettings.Settings["Count"].Value);
            stopValue = limitCurrent = int.Parse(option.config.AppSettings.Settings["StopValue"].Value);
            minValue = int.Parse(option.config.AppSettings.Settings["minY"].Value);
            maxCH1Current = maxCH2Current = maxCH3Current = maxCH4Current= int.Parse(option.config.AppSettings.Settings["minY"].Value);
            minCH1Current = minCH2Current = minCH3Current = minCH4Current = int.Parse(option.config.AppSettings.Settings["maxY"].Value);
            samplingTime = int.Parse(option.config.AppSettings.Settings["Second"].Value);
            testType = GetTestType(option.config.AppSettings.Settings["SelectY"].Value, option.config.AppSettings.Settings["isTrigger"].Value, option.config.AppSettings.Settings["TriggerMode"].Value);
            onTime = Convert.ToByte(string.Format("{0:X}", int.Parse(option.config.AppSettings.Settings["ON_Time"].Value)), 16);
            offTime = Convert.ToByte(string.Format("{0:X}", int.Parse(option.config.AppSettings.Settings["OFF_Time"].Value)), 16);
            dataValue[0] = dataValue[1] = dataValue[2] = dataValue[3] = dataValue[4] = 0;
            runTimeTemp = dataValueTemp1 = dataValueTemp2 = dataValueTemp3 = dataValueTemp4 = 0;
            columnCh1 = columnCh2 = columnCh3 = columnCh4 = "null";
            //清空所有事件
            SetValue = null;
            PointArrived = null;
            StopPoint = null;
            StartValue = null;
            EndValue = null;
            CaptureEvent = null;
            ReachStopValue = null;
            MaxValue = null;
            MinValue = null;

            if (graphics != null)
                graphics.Dispose();
            if (gCH1 != null)
                gCH1.Dispose();
            if (gCH2 != null)
                gCH2.Dispose();
            if (gCH3 != null)
                gCH3.Dispose();
            if (gCH4 != null)
                gCH4.Dispose();
            if (image != null)
                image.Dispose();
            if (imgCH1 != null)
                imgCH1.Dispose();
            if (imgCH2 != null)
                imgCH2.Dispose();
            if (imgCH3 != null)
                imgCH3.Dispose();
            if (imgCH4 != null)
                imgCH4.Dispose();
    
            fileName = "";
            productStr = "";
            tbxStartTime.Text = tbxEndTime.Text = tbxTotalTime.Text = tbxMouseX.Text = tbxMouseY.Text = "";
            tbxCH1Model.Text = tbxStartValue1.Text = tbxEndValue1.Text = tbxCurrentValue1.Text = tbxMAXValue1.Text = tbxMINValue1.Text = tbxCH1OutLimit. Text ="";
            tbxCH2Model.Text = tbxStartValue2.Text = tbxEndValue2.Text = tbxCurrentValue2.Text = tbxMAXValue2.Text = tbxMINValue2.Text = tbxCH2OutLimit.Text = "";
            tbxCH3Model.Text = tbxStartValue3.Text = tbxEndValue3.Text = tbxCurrentValue3.Text = tbxMAXValue3.Text = tbxMINValue3.Text = tbxCH3OutLimit.Text = "";
            tbxCH4Model.Text = tbxStartValue4.Text = tbxEndValue4.Text = tbxCurrentValue4.Text = tbxMAXValue4.Text = tbxMINValue4.Text = tbxCH4OutLimit.Text = "";
            tbxCH1EndTime.Text = tbxCH2EndTime.Text = tbxCH3EndTime.Text = tbxCH4EndTime.Text = "";
            labelCHEnd.Text = "达到 " + option.config.AppSettings.Settings["StopValue"].Value+" "
                + (option.config.AppSettings.Settings["SelectY"].Value == "1" ? "mV" : (option.config.AppSettings.Settings["SelectY"].Value == "2" ? "mA" : "uA"))
                + " 用时";
            labelLimitCurrent.Text = "超过 " + option.config.AppSettings.Settings["StopValue"].Value + " "
                + (option.config.AppSettings.Settings["SelectY"].Value == "1" ? "mV" : (option.config.AppSettings.Settings["SelectY"].Value == "2" ? "mA" : "uA"))
                + " 次数";
            CaptureEvent += SnipAll; //订阅截图

            if (option.config.AppSettings.Settings["CH1"].Value == "1")
            {
                tbxCH1Model.Text = option.config.AppSettings.Settings["CH1Model"].Value;
                columnCh1 = option.config.AppSettings.Settings["CH1Model"].Value;
                productStr += "  CH1:" + option.config.AppSettings.Settings["CH1Model"].Value;
                fileName += option.config.AppSettings.Settings["CH1Model"].Value + "_";
                StartValue += CH1_StartValue;
                SetValue += CH1_SetValue;
                PointArrived += CH1_PointArrived;
                CaptureEvent += SnipCH1;
                if (testType == TestType.mV)
                {
                    StopPoint += CH1_StopPoint;
                    ReachStopValue += CH1_ReachStopValue;

                }
                else
                {
                    
                    EndValue += CH1_EndValue;
                    ReachStopValue += CH1_OverLimitValue;
                    MaxValue += CH1_maxValue;
                    MinValue += CH1_minValue;
                }
            }
            if (option.config.AppSettings.Settings["CH2"].Value == "1")
            {
                tbxCH2Model.Text = option.config.AppSettings.Settings["CH2Model"].Value;
                columnCh2 = option.config.AppSettings.Settings["CH2Model"].Value;
                productStr += "  CH2:" + option.config.AppSettings.Settings["CH2Model"].Value;
                fileName += option.config.AppSettings.Settings["CH2Model"].Value + "_";
                StartValue += CH2_StartValue;
                SetValue += CH2_SetValue;
                PointArrived += CH2_PointArrived;
                CaptureEvent += SnipCH2;
                if (testType == TestType.mV)
                {
                    StopPoint += CH2_StopPoint;
                    ReachStopValue += CH2_ReachStopValue;
                }
                else
                {
                    
                    EndValue += CH2_EndValue;
                    ReachStopValue += CH2_OverLimitValue;
                    MaxValue += CH2_maxValue;
                    MinValue += CH2_minValue;
                }
            }
            if (option.config.AppSettings.Settings["CH3"].Value == "1")
            {
                tbxCH3Model.Text = option.config.AppSettings.Settings["CH3Model"].Value;
                columnCh3 = option.config.AppSettings.Settings["CH3Model"].Value;
                productStr += "  CH3:" + option.config.AppSettings.Settings["CH3Model"].Value;
                fileName += option.config.AppSettings.Settings["CH3Model"].Value + "_";
                StartValue += CH3_StartValue;
                SetValue += CH3_SetValue;
                PointArrived += CH3_PointArrived;
                CaptureEvent += SnipCH3;
                if (testType == TestType.mV)
                {
                    StopPoint += CH3_StopPoint;
                    ReachStopValue += CH3_ReachStopValue;
                }
                else
                {
                   
                    EndValue += CH3_EndValue;
                    ReachStopValue += CH3_OverLimitValue;
                    MaxValue += CH3_maxValue;
                    MinValue += CH3_minValue;
                }
            }
            if (option.config.AppSettings.Settings["CH4"].Value == "1")
            {
                tbxCH4Model.Text = option.config.AppSettings.Settings["CH4Model"].Value;
                columnCh4 = option.config.AppSettings.Settings["CH4Model"].Value;
                productStr += "  CH4:" + option.config.AppSettings.Settings["CH4Model"].Value;
                fileName += option.config.AppSettings.Settings["CH4Model"].Value + "_";
                StartValue += CH4_StartValue;
                SetValue += CH4_SetValue;
                PointArrived += CH4_PointArrived;
                CaptureEvent += SnipCH4;
                if (testType == TestType.mV)
                {
                    StopPoint += CH4_StopPoint;
                    ReachStopValue += CH4_ReachStopValue;
                }
                else
                {
                    
                    EndValue += CH4_EndValue;
                    ReachStopValue += CH4_OverLimitValue;
                    MaxValue += CH4_maxValue;
                    MinValue += CH4_minValue;
                }
            }
           // InitDataTable();
            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;//最大化窗体以作图表
            //InitChart(pictureBox.Width, pictureBox.Height);
            imgWidth = pictureBox.Width;
            imgHeight = pictureBox.Height;
            panelWidth = panelBottom.Width;
            panelHeight = panelBottom.Height;
            image = new Bitmap(imgWidth, imgHeight);
            imgCH1 = new Bitmap(imgWidth, imgHeight);
            imgCH2 = new Bitmap(imgWidth, imgHeight);
            imgCH3 = new Bitmap(imgWidth, imgHeight);
            imgCH4 = new Bitmap(imgWidth, imgHeight);
            graphics = Graphics.FromImage(image);
            gCH1 = Graphics.FromImage(imgCH1);
            gCH2 = Graphics.FromImage(imgCH2);
            gCH3 = Graphics.FromImage(imgCH3);
            gCH4 = Graphics.FromImage(imgCH4);
            InitChart(graphics);
            InitChart(gCH1);
            InitChart(gCH2);
            InitChart(gCH3);
            InitChart(gCH4);
            DrawLegends();
            pictureBox.BackgroundImage = image;
            pictureBox.Refresh();

            isInit = true;
        }
        private void InitChart(Graphics g)//初始化表格
        {

            float yLength;
            float xLength;
            
            //int pointXOffset = 1;
            //int pointYOffset = 1;
            //

           // imgWidth = width;
          //  imgHeight = height;

            // Graphics g = e.Graphics;//--------------------------------------------------------------
           // Bitmap img = new Bitmap(imgWidth, imgHeight);


           // Graphics g = Graphics.FromImage(img);
            g.SmoothingMode = SmoothingMode.HighQuality;//抗锯齿
            g.FillRectangle(Brushes.LightBlue, 0, 0, imgWidth, imgHeight);
            

            //Border
            // g.DrawLine(borderLineTopLeft, 0, 0, imgWidth, 0);
            //  g.DrawLine(borderLineTopLeft, 0, 0, 0, imgHeight);
            // g.DrawLine(borderLineBottomRight, 0, imgHeight, imgWidth, imgHeight);
            // g.DrawLine(borderLineBottomRight, imgWidth, 0, imgWidth, imgHeight);
            //轴
            yLength = imgHeight - blankWidthBottom - blankWidthTop - Top;
            xLength = imgWidth - blankWidthLeft - blankWidthRight;

            //Y轴
            Point yPoint1 = new Point(blankWidthLeft + pointXYOffset, Top + pointXYOffset);
            Point yPoint2 = new Point(blankWidthLeft + pointXYOffset, imgHeight - blankWidthBottom + pointXYOffset);
            g.DrawLine(yAxiesLine, yPoint1, yPoint2);//Y-Axies
            g.DrawLine(yAxiesLine, blankWidthLeft + pointXYOffset, Top + pointXYOffset, blankWidthLeft - 5 + pointXYOffset, 10 + Top + pointXYOffset);//Y轴箭头
            g.DrawLine(yAxiesLine, blankWidthLeft + pointXYOffset, Top + pointXYOffset, blankWidthLeft + 5 + pointXYOffset, 10 + Top + pointXYOffset);//Y轴箭头
            //yLength = imgHeight - blankWidth - 50;
            yMajorGrid.DashStyle = DashStyle.Dot;
          //  string[] yLabel = new string[10];
            string[] yLabel = GetYlabel(Convert.ToDouble(option.config.AppSettings.Settings["maxY"].Value), Convert.ToDouble(option.config.AppSettings.Settings["minY"].Value), 10);
          //  if(option.config.AppSettings.Settings["SelectY"].Value == "1")
         //       yLabel = GetYlabelForV(Convert.ToDouble(option.config.AppSettings.Settings["maxY"].Value), Convert.ToDouble(option.config.AppSettings.Settings["minY"].Value), 10);
         //   else
          //      yLabel = GetYlabel(Convert.ToDouble(option.config.AppSettings.Settings["maxY"].Value), Convert.ToDouble(option.config.AppSettings.Settings["minY"].Value), 10);

            for (int i = 0; i <= 10; i++)
            {
                //Y轴 MajorTickMark
                g.DrawLine(yMajorTickMark, blankWidthLeft - 10 + pointXYOffset, imgHeight - blankWidthBottom - (float)yLength / 10 * i + pointXYOffset, blankWidthLeft + pointXYOffset, imgHeight - blankWidthBottom - (float)yLength / 10 * i + pointXYOffset);
                if (i % 2 == 0)
                    //Y轴 MajorGrid
                    g.DrawLine(yMajorGrid, blankWidthLeft + pointXYOffset, imgHeight - blankWidthBottom - (float)yLength / 10 * i + pointXYOffset, blankWidthLeft + xLength + pointXYOffset, imgHeight - blankWidthBottom - (float)yLength / 10 * i + pointXYOffset);
                g.DrawString(string.Format("{0,5}", yLabel[i]), labelFont, fontBrush, blankWidthLeft - 55 + pointXYOffset, imgHeight - blankWidthBottom - (float)yLength / 10 * i - 8 + pointXYOffset);
            }
            for (int i = 0; i <= 100; i++)
            {
                //Y轴 MinorTickMark
                g.DrawLine(yMinorTickMark, blankWidthLeft - 6 + pointXYOffset, imgHeight - blankWidthBottom - (float)yLength / 100 * i + pointXYOffset, blankWidthLeft + pointXYOffset, imgHeight - blankWidthBottom - (float)yLength / 100 * i + pointXYOffset);
            }   
            yInterval = ((float)yLength) / (int.Parse(option.config.AppSettings.Settings["maxY"].Value) - int.Parse(option.config.AppSettings.Settings["minY"].Value));
            string yName = option.config.AppSettings.Settings["SelectY"].Value == "1" ? "电压:mV" : (option.config.AppSettings.Settings["SelectY"].Value == "2" ? "电流:mA" : "电流:uA");
            g.DrawString(yName, labelNameFont, fontBrush, blankWidthLeft + 20 + pointXYOffset, 5 + Top + pointXYOffset);

            //截止线(电压), 限定线(电流)
            yEndGrid.DashStyle = DashStyle.Dot;
            g.DrawLine(yEndGrid, blankWidthLeft + pointXYOffset, imgHeight - blankWidthBottom - (stopValue - minValue) * yInterval + pointXYOffset, blankWidthLeft + xLength + pointXYOffset, imgHeight - blankWidthBottom - (stopValue - minValue) * yInterval + pointXYOffset);
            g.DrawString(option.config.AppSettings.Settings["StopValue"].Value + (option.config.AppSettings.Settings["SelectY"].Value == "1" ? " mV" : (option.config.AppSettings.Settings["SelectY"].Value == "2" ? " mA" : " uA"))
                , labelendValueFont, endValueBrush, imgWidth - blankWidthRight + 5 + pointXYOffset, imgHeight - blankWidthBottom - (stopValue - minValue) * yInterval - 6 + pointXYOffset);
            
            //X轴
            Point xPoint1 = new Point(blankWidthLeft + pointXYOffset, imgHeight - blankWidthBottom + pointXYOffset);
            Point xPoint2 = new Point(imgWidth -blankWidthRight + 10, imgHeight - blankWidthBottom + pointXYOffset);
            g.DrawLine(xAxiesLine, xPoint1, xPoint2);
            xMajorGrid.DashStyle = DashStyle.Dot;
            // xLength = imgWidth - 2 * blankWidth - 50;
            if (testType == TestType.mA_Trigger || testType == TestType.uA_Trigger
                || testType == TestType.mA_Trigger_Software || testType == TestType.uA_Trigger_Software)//触发模式
            {
                string[] xLabel = GetXLabel(Convert.ToDouble(option.config.AppSettings.Settings["Count"].Value), 10);
                for (int j = 0; j <= 10; j++)
                {
                    g.DrawLine(xMajorTickMark, blankWidthLeft + (float)xLength / 10 * j + pointXYOffset, imgHeight - blankWidthBottom + pointXYOffset, blankWidthLeft + (float)xLength / 10 * j + pointXYOffset, imgHeight - blankWidthBottom + 10 + pointXYOffset);
                    g.DrawLine(xMajorGrid, blankWidthLeft + (float)xLength / 10 * j + pointXYOffset, imgHeight - blankWidthBottom + pointXYOffset, blankWidthLeft + (float)xLength / 10 * j + pointXYOffset, imgHeight - blankWidthBottom - yLength + pointXYOffset);
                    g.DrawString(xLabel[j], labelFont, fontBrush, blankWidthLeft + (float)xLength / 10 * j - 12 + pointXYOffset, imgHeight - blankWidthBottom + 15 + pointXYOffset);
                }
                g.DrawString("触发次数", labelNameFont, fontBrush, blankWidthLeft + xLength / 2 + pointXYOffset - 28, imgHeight - blankWidthBottom + 40 + pointXYOffset);
                xInterval = ((float)xLength) / ((float)Convert.ToDouble(option.config.AppSettings.Settings["Count"].Value));
            }
            else
            {
                string[] xLabel = GetXLabel_Time(Convert.ToDouble(option.config.AppSettings.Settings["Hour"].Value), 12);
                for (int j = 0; j <= 12; j++)
                {
                    g.DrawLine(xMajorTickMark, blankWidthLeft + (float)xLength / 12 * j + pointXYOffset, imgHeight - blankWidthBottom + pointXYOffset, blankWidthLeft + (float)xLength / 12 * j + pointXYOffset, imgHeight - blankWidthBottom + 10 + pointXYOffset);
                    g.DrawLine(xMajorGrid, blankWidthLeft + (float)xLength / 12 * j + pointXYOffset, imgHeight - blankWidthBottom + pointXYOffset, blankWidthLeft + (float)xLength / 12 * j + pointXYOffset, imgHeight - blankWidthBottom - yLength + pointXYOffset);
                    g.DrawString(xLabel[j], labelFont, fontBrush, blankWidthLeft + (float)xLength / 12 * j - 30 + pointXYOffset, imgHeight - blankWidthBottom + 15 + pointXYOffset);
                }
                g.DrawString("时间", labelNameFont, fontBrush, blankWidthLeft + xLength / 2 + pointXYOffset - 15, imgHeight - blankWidthBottom + 40 + pointXYOffset);
                xInterval = ((float)xLength) / ((float)Convert.ToDouble(option.config.AppSettings.Settings["Hour"].Value) * 3600);
            }
           // g.FillEllipse(Brushes.Red, 100 + (float)600 * xInterval, imgHeight - 100 - (float)6000 * yInterval, 20, 20);//for check 点偏移量
          // DrawLegends();
          // pictureBox.BackgroundImage = img;
           //return img;
           //g.Dispose();

        }
        private void DrawLegends()//自定义表格Legends
        {
            int middle = (imgWidth - blankWidthLeft - 50) / 2;
            if (option.config.AppSettings.Settings["CH1"].Value == "1")
            {
                ch1Brush = new SolidBrush(GetColor(option.config.AppSettings.Settings["CH1Color"].Value));
                graphics.FillEllipse(ch1Brush, blankWidthLeft + middle - 150 - 15, Top + 2, 8, 8);
                graphics.DrawString(option.config.AppSettings.Settings["CH1Model"].Value, labelNameFont, Brushes.Black, blankWidthLeft + middle - 150, Top);
                gCH1.FillEllipse(ch1Brush, blankWidthLeft + middle - 15, Top + 2, 8, 8);
                gCH1.DrawString(option.config.AppSettings.Settings["CH1Model"].Value, labelNameFont, Brushes.Black, blankWidthLeft + middle, Top);
            }
            if (option.config.AppSettings.Settings["CH2"].Value == "1")
            {
                ch2Brush = new SolidBrush(GetColor(option.config.AppSettings.Settings["CH2Color"].Value));
                graphics.FillEllipse(ch2Brush, blankWidthLeft + middle - 50 - 15, Top + 2, 8, 8);
                graphics.DrawString(option.config.AppSettings.Settings["CH2Model"].Value, labelNameFont, Brushes.Black, blankWidthLeft + middle - 50, Top);
                gCH2.FillEllipse(ch2Brush, blankWidthLeft + middle - 15, Top + 2, 8, 8);
                gCH2.DrawString(option.config.AppSettings.Settings["CH2Model"].Value, labelNameFont, Brushes.Black, blankWidthLeft + middle, Top);
                
            }
            if (option.config.AppSettings.Settings["CH3"].Value == "1")
            {
                ch3Brush = new SolidBrush(GetColor(option.config.AppSettings.Settings["CH3Color"].Value));
                graphics.FillEllipse(ch3Brush, blankWidthLeft + middle + 50 - 15, Top + 2, 8, 8);
                graphics.DrawString(option.config.AppSettings.Settings["CH3Model"].Value, labelNameFont, Brushes.Black, blankWidthLeft + middle + 50, Top);
                gCH3.FillEllipse(ch3Brush, blankWidthLeft + middle - 15, Top + 2, 8, 8);
                gCH3.DrawString(option.config.AppSettings.Settings["CH3Model"].Value, labelNameFont, Brushes.Black, blankWidthLeft + middle, Top);
           
            }
            if (option.config.AppSettings.Settings["CH4"].Value == "1")
            {
                ch4Brush = new SolidBrush(GetColor(option.config.AppSettings.Settings["CH4Color"].Value));
                graphics.FillEllipse(ch4Brush, blankWidthLeft + middle + 150 - 15, Top + 2, 8, 8);
                graphics.DrawString(option.config.AppSettings.Settings["CH4Model"].Value, labelNameFont, Brushes.Black, blankWidthLeft + middle + 150, Top);
                gCH4.FillEllipse(ch4Brush, blankWidthLeft + middle - 15, Top + 2, 8, 8);
                gCH4.DrawString(option.config.AppSettings.Settings["CH4Model"].Value, labelNameFont, Brushes.Black, blankWidthLeft + middle, Top);
            }
        }

你可能感兴趣的:(C#)