绘制肺功能检测报告图

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>
    /// PulmonaryFunctionReport
    /// author CYTD Young
    /// 2016-12-03 10:32:14
    /// music: Grouplove - Do You Love Someone
    /// </summary>
    public partial class PulmonaryFunctionReport : DevExpress.XtraReports.UI.XtraReport
    {
        public PulmonaryFunctionReport()
        {
            InitializeComponent();
        }

        public void InitData(string sglcheckid, string checkDoctor, string checkDate,
           string[] fvcValues, string[] fev1Values, string[] fev1BFBValues, string[] mvvValues, 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 项目结果
            //this.xrTableCellfvc单位.Text = "";
            this.xrTableCellfvc实测值.Text = fvcValues[0];
            this.xrTableCellfvc预测值.Text = fvcValues[1];
            this.xrTableCellfvc百分比.Text = fvcValues[2];
            //this.xrTableCellfvc1单位.Text = "";
            this.xrTableCellfvc1实测值.Text = fev1Values[0];
            this.xrTableCellfvc1预计值.Text = fev1Values[1];
            this.xrTableCellfvc1百分比.Text = fev1Values[2];
            //this.xrTableCellfvcBFB单位.Text = "";
            this.xrTableCellfvcBFB实测值.Text = fev1Values[0];
            this.xrTableCellfvcBFB预计值.Text = fev1Values[1];
            this.xrTableCellfvcBFB百分比.Text = fev1Values[2];
            //this.xrTableCellmvv单位.Text = "";
            this.xrTableCellmvv实测值.Text = fev1BFBValues[0];
            this.xrTableCellmvv预计值.Text = fev1BFBValues[1];
            this.xrTableCellmvv百分比.Text = fev1BFBValues[2];
            #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 画图
            int diagX = (int)double.Parse(fvcValues[2]);
            int diagY = (int)double.Parse(fev1Values[2]);
            this.xrPictureBox肺通气功能图.Image = DrawDIAG(diagX, diagY);
            //int copdX = (int)double.Parse(fev1Values[2]);
            //int copdY = (int)double.Parse(fev1BFBValues[2]);
            //this.xrPictureBox慢阻肺图.Image = DrawCOPD(copdX, copdY);
            #endregion

            #region 项目结论
            this.xrLabel检查结果诊断.Text = jielun;
            #endregion
        }


        private Image DrawDIAG(int xValue, int yValue)
        {
            int iOPointX_up = 40;//圆点X
            int iOPointY_up = 400;//圆点Y
            int iXSpan = 12;//X轴跨度——小格宽度
            int iYSpan = 4;//Y周跨度--小格高度
            Font font_title_picture = new Font("宋体", 14);
            Font font_title_xy = new Font("宋体", 12);
            Font font_xy = new Font("宋体", 11);
            int 数值点的圈大小 = 6;
            string[] x = { "60", "80", "100" };
            string[] y = { "40", "70", "100" };
            #region 初始化字体和画笔
            Pen pen_light = new Pen(Color.LightGray);
            pen_light.DashStyle = DashStyle.Solid;
            Pen pen_value_you = new Pen(Color.Red, 2);
            pen_value_you.DashStyle = DashStyle.Solid;
            StringFormat StrF = new StringFormat();
            StrF.FormatFlags = StringFormatFlags.DirectionVertical;
            #endregion
            int iWidth = 650;//宽度
            int iHieght = 450;//高度
            Bitmap bmap = new Bitmap(iWidth, iHieght);
            Graphics gph = Graphics.FromImage(bmap);
            try
            {
                gph.Clear(Color.White);
                PointF theOPoint = new PointF(iOPointX_up, iOPointY_up);
                gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y, iWidth, theOPoint.Y);
                gph.DrawString("(%VC)", font_title_xy, Brushes.Black, new PointF(560, 410));
                gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y, theOPoint.X, 0);
                gph.DrawString("(FEV1.0%)", font_title_xy, Brushes.Black, new PointF(0, 7), StrF);

                gph.DrawString("正常", font_xy, Brushes.LightGray, new PointF(455, 165));
                gph.DrawString("限制性", font_xy, Brushes.LightGray, new PointF(45, 165));
                gph.DrawString("阻塞性", font_xy, Brushes.LightGray, new PointF(455, 375));
                gph.DrawString("混合性", font_xy, Brushes.LightGray, new PointF(45, 375));
                for (int i = 0; i < y.Length; i++)
                {
                    int iY = 4;
                    if (i == 1) { iY = 7; }
                    else if (i == 2) { iY = 10; }
                    gph.DrawString(y[i], font_xy, Brushes.Black, new PointF(theOPoint.X - 30, theOPoint.Y - (iY - 4) * iYSpan * 10 - 6));
                    gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y - (iY - 4) * iYSpan * 10, iWidth, theOPoint.Y - (iY - 4) * iYSpan * 10);
                }
                for (int i = 0; i < x.Length; i++)
                {
                    gph.DrawString(x[i], font_xy, Brushes.Black, new PointF(theOPoint.X + i * iXSpan * 20 - 5, theOPoint.Y + 10));
                    if (i > 0)
                    {
                        gph.DrawLine(Pens.Black, theOPoint.X + i * iXSpan * 20, 0, theOPoint.X + i * iXSpan * 20, theOPoint.Y);
                    }
                }
                //10=200/20
                gph.DrawEllipse(pen_value_you, theOPoint.X + (xValue - 60) * iXSpan - 3, theOPoint.Y - (yValue - 40) * iYSpan, 数值点的圈大小, 数值点的圈大小);
            }
            finally
            {
                gph.Dispose();
            }
            return bmap;
        }

        private Image DrawCOPD(int xValue, int yValue)
        {
            int iOPointX_up = 80;//圆点X
            int iOPointY_up = 280;//圆点Y
            int iXSpan = 5;//X轴跨度——小格宽度
            int iYSpan = 2;//Y周跨度--小格高度
            Font font_title_picture = new Font("宋体", 14);
            Font font_title_xy = new Font("宋体", 12);
            Font font_xy = new Font("宋体", 11);
            int 数值点的圈大小 = 6;
            string[] x = { "100", "80", "50", "30", "0" };
            string[] y = { "0", "70", "100" };
            #region 初始化字体和画笔
            Pen pen_light = new Pen(Color.LightGray);
            pen_light.DashStyle = DashStyle.Solid;
            Pen pen_value_you = new Pen(Color.Red, 2);
            pen_value_you.DashStyle = DashStyle.Solid;
            StringFormat StrF = new StringFormat();
            StrF.FormatFlags = StringFormatFlags.DirectionVertical;
            #endregion
            //画图初始化  
            int iWidth = 620;//宽度
            int iHieght = 350;//高度
            Bitmap bmap = new Bitmap(iWidth, iHieght);
            Graphics gph = Graphics.FromImage(bmap);
            try
            {
                gph.Clear(Color.White);
                //设置中心点:在物理图的左下角,也就是Ymax和X0的位置附近
                PointF theOPoint = new PointF(iOPointX_up, iOPointY_up);
                gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y, iWidth, theOPoint.Y);
                gph.DrawString("(%FEV1.0)", font_title_xy, Brushes.Black, new PointF(490, 280));
                //画y轴线和 Y轴名称
                gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y, theOPoint.X, 0);
                gph.DrawString("(FEV1.0/FVC)", font_title_xy, Brushes.Black, new PointF(15, 7), StrF);

                gph.DrawString("正常", font_xy, Brushes.LightGray, new PointF(545, 113));
                gph.DrawString("Ⅰ", font_xy, Brushes.LightGray, new PointF(165, 245));
                gph.DrawString("Ⅱ", font_xy, Brushes.LightGray, new PointF(310, 245));
                gph.DrawString("Ⅲ", font_xy, Brushes.LightGray, new PointF(410, 245));
                gph.DrawString("Ⅳ", font_xy, Brushes.LightGray, new PointF(560, 245));
                //画y轴刻度和刻度线
                for (int i = 0; i < y.Length; i++)
                {
                    int iY = 0;
                    if (i == 1) { iY = 7; }
                    else if (i == 2) { iY = 10; }
                    gph.DrawString(y[i], font_xy, Brushes.Black, new PointF(theOPoint.X - iYSpan * 10, theOPoint.Y - iY * iYSpan * 10 - 6));
                    if (i > 0)
                    {
                        gph.DrawLine(Pens.Black, theOPoint.X, theOPoint.Y - iY * iYSpan * 10, iWidth, theOPoint.Y - iY * iYSpan * 10);
                    }

                }
                //画x轴刻度和X轴线
                for (int i = 0; i < x.Length; i++)
                {
                    int iX = 10;
                    if (i == 1) { iX = 8; }
                    else if (i == 2) { iX = 5; }
                    else if (i == 3) { iX = 3; }
                    else if (i == 4) { iX = 0; }
                    gph.DrawString(x[i], font_xy, Brushes.Black, new PointF(theOPoint.X + (10 - iX) * iXSpan * 10 - 5, theOPoint.Y + 10));
                    if (i > 0)
                    {
                        if (i != 4)
                        {
                            gph.DrawLine(Pens.Black, theOPoint.X + (10 - iX) * iXSpan * 10, theOPoint.Y - 7 * iYSpan * 10, theOPoint.X + (10 - iX) * iXSpan * 10, theOPoint.Y);
                        }
                        else
                        {
                            gph.DrawLine(Pens.Black, theOPoint.X + (10 - iX) * iXSpan * 10, 0, theOPoint.X + (10 - iX) * iXSpan * 10, theOPoint.Y);
                        }
                    }
                }
                gph.DrawEllipse(pen_value_you, theOPoint.X + (100 - xValue) * iXSpan, theOPoint.Y - yValue * iYSpan, 数值点的圈大小, 数值点的圈大小);
            }
            finally
            {
                gph.Dispose();
            }
            return bmap;
        }
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值