电测听检测报告绘图


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using DevExpress.XtraReports.UI;
using System.Data;
using CYYFCheckupMgr.BLL;
using CYYFCheckupMgr.Model;
using CYYFCheckupMgr.Util;
using CYYFCheckupMgr.UC.UtilClass;
using System.Drawing.Drawing2D;

namespace CYYFCheckupMgr.OccupationalDisease.UC.Rpt.仪器检查报告.肺功能报告
{
    /// <summary>
    /// NoiseInducedDeafNessReport
    /// author CYTD Young
    /// 2016-12-08 20:11:34
    /// music: Status Quo - In the Army Now
    /// </summary>
    public partial class NoiseInducedDeafNessReport : DevExpress.XtraReports.UI.XtraReport
    {
        public NoiseInducedDeafNessReport()
        {
            InitializeComponent();
        }

        public void InitData(string sglcheckid, string checkDoctor, string checkDate, int[] Value_left, int[] Value_right, string jielun)
        {
            if (string.IsNullOrWhiteSpace(sglcheckid))
            {
                return;
            }
            #region  个人信息
            DataTable dtSglInfo = BLLUtil.GetTableData(TableFieldBase.T_SINGLE_CHECKINFO.T_NAME, TableFieldBase.T_SINGLE_CHECKINFO.SGLCHECKID, sglcheckid);
            if (dtSglInfo == null || dtSglInfo.Rows.Count < 1)
            {
                return;
            }
            DataRow drSglInfo = dtSglInfo.Rows[0];
            this.xrLabel_name.Text = drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.NAME].ToString();
            this.xrBarCode_sgl.Text = drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.SGLCHECKID].ToString();
            this.xrLabel_sex.Text = drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.SEX] == null ? "" : (drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.SEX].ToString().Equals("1") ? "男" : "女");
            this.xrLabel_age.Text = drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.AGE].ToString();
            this.xrLabel_telephone.Text = drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.MOBILEPHONE] == null ? "" : drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.MOBILEPHONE].ToString();
            this.xrLabel_idcard.Text = drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.IDCARD].ToString();
            this.xrLabel_enterprice.Text = drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.ENTERPRICE].ToString();
            DataTable dtSglInfoExtend = BLLUtil.GetTableData(TableFieldBase.T_SINGLE_CHECKINFO_EXTEND.T_NAME, TableFieldBase.T_SINGLE_CHECKINFO_EXTEND.SGLCHECKID, sglcheckid);
            if (dtSglInfoExtend == null || dtSglInfoExtend.Rows.Count < 1 || dtSglInfoExtend.Rows[0] != null)
            {
                DataRow drSglInfoExtend = dtSglInfoExtend.Rows[0];
                this.xrLabel_worktype.Text = drSglInfoExtend[TableFieldBase.T_SINGLE_CHECKINFO_EXTEND.PROFESSIONAL].ToString();
                this.xrLabel_ohsCheckType.Text = EnumUtil.GetEnumNameByValue(typeof(EnumJobStatus),
                    int.Parse(string.IsNullOrEmpty(drSglInfoExtend[TableField.T_SINGLE_CHECKINFO_EXTEND.JOBSTATUS].ToString()) ? "1" : drSglInfoExtend[TableField.T_SINGLE_CHECKINFO_EXTEND.JOBSTATUS].ToString()));
                string strFactor = string.Empty;
                string groupid = drSglInfo[TableFieldBase.T_SINGLE_CHECKINFO.GROUPID].ToString();
                if (string.IsNullOrWhiteSpace(groupid))
                {
                    strFactor = drSglInfoExtend[TableFieldBase.T_SINGLE_CHECKINFO_EXTEND.RISKFACTORS].ToString();
                }
                else
                {
                    strFactor = BLLOccupationalDisease.GetGroupRisks(groupid);
                }
                this.xrLabel_ohsWHYS.Text = strFactor;
            }
            #endregion

            #region 项目结果
            int age = Convert.ToInt32(this.xrLabel_age.Text);
            int sex = this.xrLabel_sex.Text.Equals("男性") ? 1 : 2;
            int z500 = Convert.ToInt32(Value_left[0]);
            int fix_l_500 = FixValue(EnumHz.Hz500, z500, age, (EnumSex4Input)sex);
            int z1000 = Convert.ToInt32(Value_left[1]);
            int fix_l_1000 = FixValue(EnumHz.Hz1000, z1000, age, (EnumSex4Input)sex);
            int z2000 = Convert.ToInt32(Value_left[2]);
            int fix_l_2000 = FixValue(EnumHz.Hz2000, z2000, age, (EnumSex4Input)sex);
            int z3000 = Convert.ToInt32(Value_left[3]);
            int fix_l_3000 = FixValue(EnumHz.Hz3000, z3000, age, (EnumSex4Input)sex);
            int z4000 = Convert.ToInt32(Value_left[4]);
            int fix_l_4000 = FixValue(EnumHz.Hz4000, z4000, age, (EnumSex4Input)sex);
            int z6000 = Convert.ToInt32(Value_left[5]);
            int fix_l_6000 = FixValue(EnumHz.Hz6000, z6000, age, (EnumSex4Input)sex);
            int z8000 = Convert.ToInt32(Value_left[6]);
            int fix_l_8000 = FixValue(EnumHz.Hz8000, z8000, age, (EnumSex4Input)sex);

            int y500 = Convert.ToInt32(Value_right[0]);
            int fix_r_500 = FixValue(EnumHz.Hz500, y500, age, (EnumSex4Input)sex);
            int y1000 = Convert.ToInt32(Value_right[1]);
            int fix_r_1000 = FixValue(EnumHz.Hz1000, y1000, age, (EnumSex4Input)sex);
            int y2000 = Convert.ToInt32(Value_right[2]);
            int fix_r_2000 = FixValue(EnumHz.Hz2000, y2000, age, (EnumSex4Input)sex);
            int y3000 = Convert.ToInt32(Value_right[3]);
            int fix_r_3000 = FixValue(EnumHz.Hz3000, y3000, age, (EnumSex4Input)sex);
            int y4000 = Convert.ToInt32(Value_right[4]);
            int fix_r_4000 = FixValue(EnumHz.Hz4000, y4000, age, (EnumSex4Input)sex);
            int y6000 = Convert.ToInt32(Value_right[5]);
            int fix_r_6000 = FixValue(EnumHz.Hz6000, y6000, age, (EnumSex4Input)sex);
            int y8000 = Convert.ToInt32(Value_right[6]);
            int fix_r_8000 = FixValue(EnumHz.Hz8000, y8000, age, (EnumSex4Input)sex);
            //int[] xy_ValueR = new int[] { y500, y1000, y2000, y3000, y4000, y6000, y8000 };
            //int[] xy_ValueL = new int[] { z500, z1000, z2000, z3000, z4000, z6000, z8000 };
            #region BHFTA
            int iBHFTA = (fix_l_3000 + fix_l_4000 + fix_l_6000 + fix_r_3000 + fix_r_4000 + fix_r_6000) / 6;
            #endregion
            #region MTMV
            string sMTMV_L = "", sMTMV_R = "";
            int iMTMV_L = Convert.ToInt32((fix_l_500 + fix_l_1000 + fix_l_2000) * 0.3 + fix_l_4000 * 0.1);
            int iMTMV_R = Convert.ToInt32((fix_r_500 + fix_r_1000 + fix_r_2000) * 0.3 + fix_r_4000 * 0.1);
            int iMTMV_Better;

            if (iMTMV_L > iMTMV_R)
            {
                sMTMV_R = "" + iMTMV_R + "(较好耳)";
                sMTMV_L = "" + iMTMV_L;
            }
            else if (iMTMV_R > iMTMV_L)
            {
                sMTMV_L = "" + iMTMV_L + "(较好耳)";
                sMTMV_R = "" + iMTMV_R;
            }
            else
            {
                iMTMV_Better = iMTMV_L;
            }
            #endregion
            #region SLGTA
            int iSLGTA_L = (fix_l_500 + fix_l_1000 + fix_l_2000) / 3;
            int iSLGTA_R = (fix_r_500 + fix_r_1000 + fix_r_2000) / 3;
            #endregion
            #region 双耳高频
            int iSHFTA_L = (fix_l_3000 + fix_l_4000 + fix_l_6000) / 3;
            int iSHFTA_R = (fix_r_3000 + fix_r_4000 + fix_r_6000) / 3;
            #endregion

            this.xrTableCell右耳500实.Text = "" + y500;
            this.xrTableCell右耳500修.Text = "" + fix_r_500;
            this.xrTableCell左耳500实.Text = "" + z500;
            this.xrTableCell左耳500修.Text = "" + fix_l_500;

            this.xrTableCell右耳1000实.Text = "" + y1000;
            this.xrTableCell右耳1000修.Text = "" + fix_r_1000;
            this.xrTableCell左耳1000实.Text = "" + z1000;
            this.xrTableCell左耳1000修.Text = "" + fix_l_1000;

            this.xrTableCell右耳2000实.Text = "" + y2000;
            this.xrTableCell右耳2000修.Text = "" + fix_r_2000;
            this.xrTableCell左耳2000实.Text = "" + z2000;
            this.xrTableCell左耳2000修.Text = "" + fix_l_2000;

            this.xrTableCell右耳3000实.Text = "" + y3000;
            this.xrTableCell右耳3000修.Text = "" + fix_r_3000;
            this.xrTableCell左耳3000实.Text = "" + z3000;
            this.xrTableCell左耳3000修.Text = "" + fix_r_3000;

            this.xrTableCell右耳4000实.Text = "" + y4000;
            this.xrTableCell右耳4000修.Text = "" + fix_r_4000;
            this.xrTableCell左耳4000实.Text = "" + z4000;
            this.xrTableCell左耳4000修.Text = "" + fix_l_4000;

            this.xrTableCell右耳6000实.Text = "" + y6000;
            this.xrTableCell右耳6000修.Text = "" + fix_r_6000;
            this.xrTableCell左耳6000实.Text = "" + z6000;
            this.xrTableCell左耳6000修.Text = "" + fix_l_6000;

            this.xrTableCell右耳8000实.Text = "" + y8000;
            this.xrTableCell右耳8000修.Text = "" + fix_r_8000;
            this.xrTableCell左耳8000实.Text = "" + z8000;
            this.xrTableCell左耳8000修.Text = "" + fix_l_8000;

            this.xrTableCell双耳高频平均听阈.Text = "" + iBHFTA;

            this.xrTableCell左耳听阈加权.Text = "" + sMTMV_L;
            this.xrTableCell左耳平均听损.Text = "" + iSLGTA_L;
            this.xrTableCell左耳高频听损.Text = "" + iSHFTA_L;

            this.xrTableCell右耳听阈加权.Text = "" + sMTMV_R;
            this.xrTableCell右耳平均听损.Text = "" + iSLGTA_R;
            this.xrTableCell右耳高频听损.Text = "" + iSHFTA_R;
            #endregion



            #region 签名
            Image imageSign = ReportSignPictureUtil.GetDoctorSignPictureByName(checkDoctor.Trim());
            if (imageSign == null)
            {
                this.xrLabel检查者姓名.Visible = true;
                this.xrPictureBox检查者签名.Visible = false;
                this.xrLabel检查者姓名.Text = checkDoctor;
            }
            else
            {
                this.xrLabel检查者姓名.Visible = false;
                this.xrPictureBox检查者签名.Visible = true;
                this.xrPictureBox检查者签名.Image = imageSign;
            }
            this.xrLabel检查日期.Text = checkDate;
            #endregion

            #region 画图
            EnumUpDown enumUpDown = LocalConfig.IniReadValueBool(TableField.DianCeTing, TableField.str电测听图形正向) ? EnumUpDown.正向 : EnumUpDown.反向;
            this.xrPictureBox右耳.Image = DrawPictures(Value_right, EnumAirBone.气导, EnumLeftRight.右耳, enumUpDown);
            this.xrPictureBox左耳.Image = DrawPictures(Value_left, EnumAirBone.气导, EnumLeftRight.左耳, enumUpDown);

            #endregion

            #region 项目结论

            this.xrLabel检查结果诊断.Text = jielun;
            #endregion
        }
        int iOPointX_up = 40;//圆点X
        int iOPointY_up = 450;//圆点Y
        int iOPointX_down = 40;//圆点X
        int iOPointY_down = 50;//圆点Y
        int iXSpan = 60;//X轴跨度——小格宽度
        int iYSpan = 30;//Y周跨度--小格高度
        int 骨导曲线大小 = 5;
        int 气导圆大小 = 6;
        int 气导叉大小 = 3;
        int 骨导曲线曲度 = 1;
        int iY = 3;//y轴值的换算倍数,一般是iYSpan/Y周刻度(y_dB)
        private Image DrawPictures(int[] xy_Value, EnumAirBone enumAirBone, EnumLeftRight enumLeftRight, EnumUpDown enumUpDown)
        {
            string[] x_Hz = { "250", "500", "1K", "2K", "3K", "4K", "6K", "8k" };
            string[] y_dB = { "-20", "-10", "0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100", "110", "120" };

            #region 初始化字体和画笔
            Font font_title_picture = new Font("宋体", 14);
            Font font_title_xy = new Font("宋体", 12);
            Font font_xy = new Font("宋体", 11);
            Pen pen_dash = new Pen(Color.LightGray);
            pen_dash.DashStyle = DashStyle.Dash;
            Pen pen_light = new Pen(Color.LightGray);
            pen_light.DashStyle = DashStyle.Solid;
            Pen pen_value_zuo = new Pen(Color.Blue, 2);
            pen_value_zuo.DashStyle = DashStyle.Solid;
            Pen pen_value_you = new Pen(Color.Red, 2);
            pen_value_you.DashStyle = DashStyle.Solid;
            #endregion
            //画图初始化  
            int iWidth = 500;//宽度
            int iHieght = 500;//高度
            Bitmap bmap = new Bitmap(iWidth, iHieght);
            Graphics gph = Graphics.FromImage(bmap);
            try
            {
                #region 正向
                if (enumUpDown == EnumUpDown.正向)
                {
                    gph.Clear(Color.White);
                    //设置中心点:在物理图的左下角,也就是Ymax和X0的位置附近
                    PointF theOPoint = new PointF(iOPointX_up, iOPointY_up);
                    //图表标题
                    gph.DrawString(enumLeftRight == EnumLeftRight.右耳 ? "右耳(R)" : "左耳(L)", font_title_picture, enumLeftRight == EnumLeftRight.右耳 ? Brushes.Red : Brushes.Blue, new PointF(theOPoint.X + 60, theOPoint.X));
                    //画x轴线和 X轴名称
                    gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y, iWidth, theOPoint.Y);
                    gph.DrawString("赫兹(Hz)", font_title_xy, Brushes.Black, new PointF(theOPoint.Y - 20, theOPoint.Y + 25));
                    //画y轴线和 Y轴名称
                    gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y, theOPoint.X, 0);
                    gph.DrawString("分贝", font_title_xy, Brushes.Black, new PointF(0, 7));
                    gph.DrawString("(dB)", font_title_xy, Brushes.Black, new PointF(0, 25));

                    //画y轴刻度和刻度线
                    for (int i = 0; i < y_dB.Length; i++)
                    {
                        //画Y轴刻度【与标题冲突,所以把120的隐藏】
                        gph.DrawString(y_dB[i], font_xy, enumLeftRight == EnumLeftRight.右耳 ? Brushes.Red : Brushes.Blue, new PointF(theOPoint.X - iYSpan, theOPoint.Y - i * iYSpan - 6));
                        //画网格线(圆点不画)
                        if (i > 0)
                        {
                            gph.DrawLine(pen_light, theOPoint.X, theOPoint.Y - i * iYSpan, iWidth, theOPoint.Y - i * iYSpan);
                        }
                        //半网格虚线
                        gph.DrawLine(pen_dash, theOPoint.X, theOPoint.Y - i * iYSpan - iYSpan / 2, iWidth, theOPoint.Y - i * iYSpan - iYSpan / 2);

                    }
                    //画x轴刻度和X轴线
                    for (int i = 0; i < x_Hz.Length; i++)
                    {
                        //画x轴刻度
                        gph.DrawString(x_Hz[i], font_xy, enumLeftRight == EnumLeftRight.右耳 ? Brushes.Red : Brushes.Blue, new PointF(theOPoint.X + i * iXSpan - 5, theOPoint.Y + 10));
                        if (i > 0)
                        {
                            gph.DrawLine(pen_light, theOPoint.X + i * iXSpan, 0, theOPoint.X + i * iXSpan, theOPoint.Y);
                        }
                    }
                    //画值点和连线
                    for (int i = 0; i < xy_Value.Length; i++)
                    {
                        //画点 气导左x右o
                        if (enumAirBone == EnumAirBone.气导)
                        {
                            if (enumLeftRight == EnumLeftRight.右耳)
                            {// Y坐标纠正:iYSpan*2 起点是-20, iYSpan起点是-10
                                gph.DrawEllipse(pen_value_you, theOPoint.X + i * iXSpan + iXSpan - 3, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY - 3, 气导圆大小, 气导圆大小);
                            }
                            else
                            {
                                gph.DrawLine(pen_value_zuo, theOPoint.X + i * iXSpan + iXSpan - 气导叉大小, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY - 气导叉大小, theOPoint.X + i * iXSpan + iXSpan + 气导叉大小, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY + 气导叉大小);
                                gph.DrawLine(pen_value_zuo, theOPoint.X + i * iXSpan + iXSpan - 气导叉大小, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY + 气导叉大小, theOPoint.X + i * iXSpan + iXSpan + 气导叉大小, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY - 气导叉大小);
                            }
                        }
                        else//骨导左>右<
                        {
                            if (enumLeftRight == EnumLeftRight.右耳)
                            {
                                gph.DrawCurve(pen_value_you, new PointF[] { new PointF(theOPoint.X + i * iXSpan + iXSpan - 3 + 骨导曲线大小, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY - 骨导曲线大小), new PointF(theOPoint.X + i * iXSpan + iXSpan - 3, theOPoint.Y - iYSpan - xy_Value[i] * iY - 20), new PointF(theOPoint.X + i * iXSpan + iXSpan - 3 + 骨导曲线大小, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY + 骨导曲线大小) }, 骨导曲线曲度);
                            }
                            else
                            {
                                gph.DrawCurve(pen_value_zuo, new PointF[] { new PointF(theOPoint.X + i * iXSpan + iXSpan - 骨导曲线大小, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY - 3 - 骨导曲线大小), new PointF(theOPoint.X + i * iXSpan + iXSpan, theOPoint.Y - iYSpan - xy_Value[i] * iY - 3 - 20), new PointF(theOPoint.X + i * iXSpan + iXSpan - 骨导曲线大小, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY - 3 + 骨导曲线大小) }, 骨导曲线曲度);
                            }
                        }
                        //画数值Label
                        gph.DrawString(xy_Value[i].ToString(), font_xy, Brushes.Black, new PointF(theOPoint.X + i * iXSpan + iXSpan - 8, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY - 20));
                        //画折线
                        if (i > 0)
                        {
                            gph.DrawLine(Pens.Black, theOPoint.X + (i - 1) * iXSpan + iXSpan, theOPoint.Y - iYSpan * 2 - xy_Value[i - 1] * iY, theOPoint.X + i * iXSpan + iXSpan, theOPoint.Y - iYSpan * 2 - xy_Value[i] * iY);
                        }
                    }
                }
                #endregion
                #region 反向
                else//反向
                {
                    gph.Clear(Color.White);
                    //设置中心点:在物理图的左上角,也就是Y0和X0的位置附近
                    PointF theOPoint = new PointF(iOPointX_down, iOPointY_down);//50,50
                    //图表标题
                    gph.DrawString(enumLeftRight == EnumLeftRight.右耳 ? "右耳(R)" : "左耳(L)", font_title_picture, Brushes.Black, new PointF(iWidth - 120, iHieght - 80));
                    //画x轴线和 X轴名称
                    gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y, iWidth, theOPoint.Y);
                    gph.DrawString("赫兹(Hz)", font_title_xy, Brushes.Black, new PointF(iWidth - 80, 10));
                    //画y轴线和 Y轴名称
                    gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y, theOPoint.X, 450);
                    gph.DrawString("分贝", font_title_xy, Brushes.Black, new PointF(0, 450));
                    gph.DrawString("(dB)", font_title_xy, Brushes.Black, new PointF(0, 475));

                    //画y轴刻度和刻度线
                    for (int i = 0; i < y_dB.Length; i++)
                    {
                        //画Y轴刻度【与标题冲突,所以把120的隐藏】
                        if (y_dB[i].Equals("120")) { }
                        else
                        {
                            gph.DrawString(y_dB[i], font_xy, enumLeftRight == EnumLeftRight.右耳 ? Brushes.Red : Brushes.Blue, new PointF(theOPoint.X - iYSpan, theOPoint.Y + i * iYSpan - 6));
                        }
                        //画刻度线
                        //gph.DrawLine(Pens.Black, theOPoint.X - 6, theOPoint.Y + i * iYSpan - 3, theOPoint.X, theOPoint.Y + i * iYSpan);
                        //画网格线(圆点不画)
                        if (i > 0)
                        {
                            gph.DrawLine(pen_light, theOPoint.X, theOPoint.Y + i * iYSpan, iWidth, theOPoint.Y + i * iYSpan);
                        }
                        //画半刻度线
                        //gph.DrawLine(pen_dash, theOPoint.X + 3, theOPoint.Y + i * iYSpan + iYSpan / 2 + 3, theOPoint.X, theOPoint.Y + i * iYSpan + iYSpan / 2);
                        //半网格虚线
                        gph.DrawLine(pen_dash, theOPoint.X, theOPoint.Y + i * iYSpan + iYSpan / 2, iWidth, theOPoint.Y + i * iYSpan + iYSpan / 2);
                    }
                    //画x轴刻度和X轴线
                    for (int i = 0; i < x_Hz.Length; i++)
                    {
                        //画x轴刻度
                        gph.DrawString(x_Hz[i], font_xy, enumLeftRight == EnumLeftRight.右耳 ? Brushes.Red : Brushes.Blue, new PointF(theOPoint.X + i * iXSpan, theOPoint.Y - 20));
                        //话X轴刻度线
                        //gph.DrawLine(Pens.Black, theOPoint.X + i * iXSpan, theOPoint.Y, theOPoint.X + i * iXSpan + 3, theOPoint.Y - 3);
                        if (i > 0)
                        {
                            gph.DrawLine(pen_light, theOPoint.X + i * iXSpan, iHieght, theOPoint.X + i * iXSpan, theOPoint.Y);
                        }
                    }
                    //画值点和连线
                    for (int i = 0; i < xy_Value.Length; i++)
                    {
                        //画点 气导左x右o
                        if (enumAirBone == EnumAirBone.气导)
                        {
                            if (enumLeftRight == EnumLeftRight.右耳)
                            {
                                gph.DrawEllipse(pen_value_you, theOPoint.X + i * iXSpan + iXSpan - 3, theOPoint.Y + iYSpan * 2 + xy_Value[i] * iY - 3, 气导圆大小, 气导圆大小);
                            }
                            else
                            {
                                gph.DrawLine(pen_value_zuo, theOPoint.X + i * iXSpan + iXSpan - 气导叉大小, theOPoint.Y + iYSpan * 2 + xy_Value[i] * iY - 气导叉大小,
                                    theOPoint.X + i * iXSpan + iXSpan + 气导叉大小, theOPoint.Y + iYSpan * 2 + xy_Value[i] * iY + 气导叉大小);
                                gph.DrawLine(pen_value_zuo, theOPoint.X + i * iXSpan + iXSpan - 气导叉大小, theOPoint.Y + iYSpan * 2 + xy_Value[i] * iY + 气导叉大小,
                                    theOPoint.X + i * iXSpan + iXSpan + 气导叉大小, theOPoint.Y + iYSpan * 2 + xy_Value[i] * iY - 气导叉大小);
                            }
                        }
                        else//骨导左>右<
                        {
                            if (enumLeftRight == EnumLeftRight.右耳)
                            {
                                gph.DrawCurve(pen_value_you, new PointF[] { 
                                    new PointF(theOPoint.X + i * iXSpan+ iXSpan - 3 + 骨导曲线大小, theOPoint.Y + iYSpan*2 + xy_Value[i] * iY - 骨导曲线大小), 
                                    new PointF(theOPoint.X + i * iXSpan + iXSpan- 3, theOPoint.Y + iYSpan*2 + xy_Value[i] * iY), 
                                    new PointF(theOPoint.X + i * iXSpan+ iXSpan - 3 + 骨导曲线大小, theOPoint.Y + iYSpan*2 + xy_Value[i] * iY + 骨导曲线大小) }, 骨导曲线曲度);
                            }
                            else
                            {
                                gph.DrawCurve(pen_value_zuo, new PointF[] { 
                                    new PointF(theOPoint.X + i * iXSpan+ iXSpan - 骨导曲线大小, theOPoint.Y + iYSpan*2 + xy_Value[i] * iY - 3 - 骨导曲线大小), 
                                    new PointF(theOPoint.X + i * iXSpan+ iXSpan, theOPoint.Y + iYSpan*2 + xy_Value[i] * iY - 3), 
                                    new PointF(theOPoint.X + i * iXSpan + iXSpan- 骨导曲线大小, theOPoint.Y + iYSpan*2 + xy_Value[i] * iY - 3 + 骨导曲线大小) }, 骨导曲线曲度);
                            }
                        }
                        //画数值
                        gph.DrawString(xy_Value[i].ToString(), font_xy, Brushes.Black, new PointF(theOPoint.X + i * iXSpan + iXSpan - 8, theOPoint.Y + iYSpan * 2 + xy_Value[i] * iY - 15));
                        //画折线
                        if (i > 0)
                            gph.DrawLine(Pens.Black, theOPoint.X + (i - 1) * iXSpan + iXSpan, theOPoint.Y + iYSpan * 2 + xy_Value[i - 1] * iY, theOPoint.X + i * iXSpan + iXSpan, theOPoint.Y + iYSpan * 2 + xy_Value[i] * iY);
                    }
                }
                #endregion
                return bmap;
            }
            finally
            {
                gph.Dispose();
            }
        }
        /// <summary> 
        /// 取修正值 125Hz-8000Hz
        /// </summary>
        /// <param name="hz"></param>
        /// <param name="result"></param>
        /// <param name="age"></param>
        /// <param name="sex"></param>
        /// <returns></returns>
        public static int FixValue(EnumHz hz, int result, int age, EnumSex4Input sex)
        {
            switch (hz)
            {
                case EnumHz.Hz8000:
                    {
                        switch (sex)
                        {
                            case EnumSex4Input.男:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 60;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 39;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 23;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 11;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 3;
                                                    }
                                    break;
                                }
                            case EnumSex4Input.女:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 41;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 27;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 15;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 7;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 2;
                                                    }
                                    break;
                                }
                        }
                        break;
                    }
                case EnumHz.Hz6000:
                    {
                        switch (sex)
                        {
                            case EnumSex4Input.男:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 49;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 32;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 18;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 9;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 3;
                                                    }
                                    break;
                                }
                            case EnumSex4Input.女:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 32;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 21;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 12;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 6;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 2;
                                                    }
                                    break;
                                }
                        }
                        break;
                    }
                case EnumHz.Hz4000:
                    {
                        switch (sex)
                        {
                            case EnumSex4Input.男:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 43;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 28;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 16;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 8;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 2;
                                                    }
                                    break;
                                }
                            case EnumSex4Input.女:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 24;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 16;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 9;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 4;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 1;
                                                    }
                                    break;
                                }
                        }
                        break;
                    }
                case EnumHz.Hz3000:
                    {
                        switch (sex)
                        {
                            case EnumSex4Input.男:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 31;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 20;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 12;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 6;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 2;
                                                    }
                                    break;
                                }
                            case EnumSex4Input.女:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 20;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 13;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 8;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 4;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 1;
                                                    }
                                    break;
                                }
                        }
                        break;
                    }
                case EnumHz.Hz2000:
                    {
                        switch (sex)
                        {
                            case EnumSex4Input.男:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 19;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 12;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 7;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 3;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 1;
                                                    }
                                    break;
                                }
                            case EnumSex4Input.女:
                                {
                                    if (age >= 70)
                                    {
                                        result = result - 16;
                                    }
                                    else
                                        if (age >= 60)
                                        {
                                            result = result - 11;
                                        }
                                        else
                                            if (age >= 50)
                                            {
                                                result = result - 6;
                                            }
                                            else
                                                if (age >= 40)
                                                {
                                                    result = result - 3;
                                                }
                                                else
                                                    if (age >= 30)
                                                    {
                                                        result = result - 1;
                                                    }
                                    break;
                                }
                        }
                        break;
                    }
                case EnumHz.Hz1000:
                    {
                        if (age >= 70)
                        {
                            result = result - 11;
                        }
                        else
                            if (age >= 60)
                            {
                                result = result - 7;
                            }
                            else
                                if (age >= 50)
                                {
                                    result = result - 4;
                                }
                                else
                                    if (age >= 40)
                                    {
                                        result = result - 2;
                                    }
                                    else
                                        if (age >= 30)
                                        {
                                            result = result - 1;
                                        }
                        break;
                    }
                case EnumHz.Hz500:
                    {
                        if (age >= 70)
                        {
                            result = result - 9;
                        }
                        else
                            if (age >= 60)
                            {
                                result = result - 6;
                            }
                            else
                                if (age >= 50)
                                {
                                    result = result - 4;
                                }
                                else
                                    if (age >= 40)
                                    {
                                        result = result - 2;
                                    }
                                    else
                                        if (age >= 30)
                                        {
                                            result = result - 1;
                                        }
                        break;
                    }
                case EnumHz.Hz250:
                case EnumHz.Hz125:
                    {
                        if (age >= 70)
                        {
                            result = result - 8;
                        }
                        else
                            if (age >= 60)
                            {
                                result = result - 5;
                            }
                            else
                                if (age >= 50)
                                {
                                    result = result - 3;
                                }
                                else
                                    if (age >= 40)
                                    {
                                        result = result - 2;
                                    }
                                    else
                                        if (age >= 30)
                                        {
                                            result = result - 0;
                                        }
                        break;
                    }
            }
            return result;
        }
    }
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值