| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 | using OTSModelSharp;using OTSDataType;using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Windows.Forms;using static OTSDataType.otsdataconst;using OTSMeasureApp._1_OTSMeasure.Measure._3_MeasureFlow;namespace OTSMeasureApp{    class OTSMeasureDisplayResult    {        NLog.Logger log ;        public enum ProgressState        {                       MeasureCheckReport = 1,            MeasureResult = 2        }        #region 变量生成汇总        OTSIncAMeasureAppForm m_MeasureApp = null;                             //样品台窗口对象        public OTSSamplespaceWindow m_OTSSamplespaceWindow = null;               //测量进度信息窗口对象        public MeasureCheckResultInfoWindow m_MeasureCheckReportInfoWindow = null;        //测量结果信息窗口对象        public OTSMeasureResultWindow m_OTSMeasureResultWindow = null;        //在窗体TAB测量状态中显示BSE图        public OTSMeasureStatusWindow m_OTSMeasureStatusWindow = null;        public OTSPropertyWindow m_SPropertyWindows = null;        public System.ComponentModel.BackgroundWorker m_bgWorker;        ST_MSTMsg MeasureResultMsrData;                      #endregion        #region 构造方法        public OTSMeasureDisplayResult( OTSIncAMeasureAppForm m_MeasureApps ,BackgroundWorker a_bgWorker)        {            log = NLog.LogManager.GetCurrentClassLogger();                          m_MeasureApp = m_MeasureApps;                               m_OTSSamplespaceWindow = m_MeasureApps.m_SamplepaceWindow;                m_OTSMeasureResultWindow = m_MeasureApp.m_MeasureResultWindow;                m_SPropertyWindows = m_MeasureApp.m_SPropertyWindows;                        m_OTSMeasureStatusWindow = m_MeasureApp.m_MessureStatuWindow;            Control.CheckForIllegalCrossThreadCalls = false;                //测量结束信息窗口对象                m_MeasureCheckReportInfoWindow = new MeasureCheckResultInfoWindow();            m_bgWorker = a_bgWorker;            //设置报告更新是否可用            m_bgWorker.WorkerReportsProgress = true;            //设置支持取消操作是否可用            m_bgWorker.WorkerSupportsCancellation = true;            m_bgWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);        }        private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)        {            ReportProgress((ProgressState)e.ProgressPercentage);        }        #endregion        #region 修改窗体控件的响应事件_ProgressChanged        //这里就是通过响应消息,来处理界面的显示工作        private void ReportProgress(ProgressState state)        {            try            {                if (state == ProgressState.MeasureCheckReport)                {                    DisMeasureResultInfo(MeasureResultMsrData);                }                //测量结果                if (state == ProgressState.MeasureResult)                {                    if (m_OTSMeasureResultWindow == null)                    {                        //实例窗体                        m_OTSMeasureResultWindow = m_MeasureApp.m_MeasureResultWindow;                    }                    //获取工作样品信息                    COTSSample WSample = m_MeasureApp.m_ProjParam.GetWorkSample();                    CMsrResultItems MsrResults = WSample.GetMsrResults();                    //获取结果文件 颗粒列表信息                    List<CMsrResultItem> cMsrResultItemClrList = MsrResults.GetResultItems();                    //设置测量状态数据列表                    m_OTSMeasureResultWindow.SetMeasureListInfo(cMsrResultItemClrList);                }            }            catch (Exception ex)            {                log.Error(ex.ToString());            }        }        #endregion        #region 打开测量结果窗口        /// <summary>        /// 打开测量结果窗口        /// </summary>        public void DisMeasureResultInfo(ST_MSTMsg sMSR)        {            //打开测量结果窗体            if (m_MeasureCheckReportInfoWindow.IsDisposed)            {                m_MeasureCheckReportInfoWindow = new MeasureCheckResultInfoWindow();            }            SetMeasureResultInfo(sMSR);            m_MeasureCheckReportInfoWindow.Activate();            m_MeasureCheckReportInfoWindow.Show();                   }        #endregion        #region 显示BSE图片        public void OTSMeasureStatusWindowFun(int width, int height, byte[] ImageData, OTSIncAMeasureAppForm m_MeasureApps)        {            //设置图像数据与状态            OTSMeasureStatusWindow.bfResult = true;            m_MeasureApps.m_MessureStatuWindow.originalBseData = ImageData;            //获取灰度图数据            double[] dGrayLevelData = new double[255];            dGrayLevelData = GetStaticGaryData(ImageData, dGrayLevelData);            m_MeasureApps.m_MessureStatuWindow.dGrayLevelData = dGrayLevelData;            if (m_MeasureApps.m_MessureStatuWindow.panelXray.Visible)            {                m_MeasureApps.m_MessureStatuWindow.panelXray.Visible = false;            }            //删除点标记            m_MeasureApps.m_MessureStatuWindow.DelElementPointGDIObjects();            //显示BSE图            m_MeasureApps.m_MessureStatuWindow.picBox.Show();              //显示BSE图            m_MeasureApps.m_MessureStatuWindow.ShowImage(width, height, ImageData);        }        public double[] GetStaticGaryData(byte[] Imagedata, double[] GrayLevelData)        {            try            {                //获得下标每一点的灰度值,并在数组里加一                for (int i = 0; i < Imagedata.Length; i++)                {                    byte graylevel = Imagedata[i];                    if (graylevel > 0 && graylevel < 255)                    {                        GrayLevelData[graylevel] += 1;                    }                }                return GrayLevelData;            }            catch (Exception ex)            {                log.Error(ex.ToString());                return null;            }        }        #endregion                                    #region 设置测量结束窗体中信息内容        public void SetMeasureResultInfo(ST_MSTMsg SMsrData)        {            //设置开始时间            string startTime = SMsrData.STMThreadStu.SMsrCompleteData.csMsrStartTime;            //设置结束时间            string endTime = SMsrData.STMThreadStu.SMsrCompleteData.csMsrEndTime;            //设置测量数            int completeSampleCount = SMsrData.STMThreadStu.SMsrCompleteData.iMsrCompleteSampleCount;            //设置帧图数            int completeFieldCount = SMsrData.STMThreadStu.SMsrCompleteData.iMsrCompleteFieldCount;            //颗粒数            int particleCount = SMsrData.STMThreadStu.SMsrCompleteData.iParticleCount;            //用时            TimeSpan measureTime = SMsrData.STMThreadStu.SMsrCompleteData.MsrUsedTime;            string measureState = string.Empty;            OTSCommon.Language lan = new OTSCommon.Language();            Hashtable table= lan.GetNameTable("OTSMeasureResultWindow");            //状态                    switch (SMsrData.STMThreadStu.iMsrStatu)            {                case OTS_MSR_THREAD_STATUS.COMPLETED:                    measureState = table["state1"].ToString();                    break;                case OTS_MSR_THREAD_STATUS.FAILED:                    measureState = table["state2"].ToString();                    break;                case OTS_MSR_THREAD_STATUS.STOPPED:                    measureState = table["state3"].ToString();                    break;            }            //设置测量结果窗体信息            string measureTimes = string.Empty;            m_MeasureCheckReportInfoWindow.SetMeasureStateInfo(measureState, completeSampleCount, completeFieldCount, particleCount, startTime, measureTime, endTime, ref measureTimes);        }        #endregion               public void MeasureComplete(ST_MSTMsg SMsrData)        {            string inprocessEndTime = SMsrData.STMThreadStu.csMsrEndTime;                                  //获取需显示的grid信息            var sample = m_MeasureApp.m_ProjParam.GetWorkSample();            var stype = m_MeasureApp.m_ProjParam.GetDefaultParam().GetSysType();            OTSSampleVisualPropertyInfo MeasureInfo = new OTSSampleVisualPropertyInfo(sample, stype);            m_MeasureApp.m_SPropertyWindows.DisplaySampleMeasureInfo(MeasureInfo);            SetMeasureResultInfo(SMsrData);            MeasureResultMsrData = SMsrData;            m_bgWorker.ReportProgress((int)ProgressState.MeasureCheckReport);        }            #region 测量方法              public void Field_START_MSR(ST_MSTMsg SMsrData)        {            var sam1 = m_MeasureApp.m_SamplepaceWindow.GetWorkingVisualSample();            m_MeasureApp.m_SamplepaceWindow.ChangeMeasureFieldColor(sam1, SMsrData.STMSampleRetData.SMsrField.FieldPos, Color.Yellow);            m_MeasureApp.m_SamplepaceWindow.Invalidate();        }        public void Field_DATA(ST_MSTMsg SMsrData)        {                                        m_OTSMeasureResultWindow.SetMeasureTime(SMsrData.STMSampleRetData.SFieldData.TUsedTime);                        //---------update the progress bar测量状态进度窗口            var FieldData =SMsrData.STMSampleRetData.SFieldData;            //样品测量中的总帧图数            int MeasureFieldTotalCount = FieldData.iMeasureFieldCount;            //样品测量中当前已测量的帧图数            int CompleteFieldCount = FieldData.iCompleteFieldCount;            int ParticleCount = FieldData.iSParticleCount;            if (CompleteFieldCount >= 0 && MeasureFieldTotalCount >= 0)            {                m_bgWorker.ReportProgress((int)ProgressState.MeasureResult);                //设置当前进度信息(当前Field数量与Field总数)                m_OTSMeasureResultWindow.SetCurrentProgressInfo(CompleteFieldCount, MeasureFieldTotalCount, ParticleCount);            }            //-----------            var sam = m_MeasureApp.m_SamplepaceWindow.GetWorkingVisualSample();            m_MeasureApp.m_SamplepaceWindow.ChangeMeasureFieldColor(sam, SMsrData.STMSampleRetData.SFieldData.FieldPos, Color.Green);            m_MeasureApp.m_SamplepaceWindow.Invalidate();        }        public void Field_BSE_DATA(ST_MSTMsg SMsrData)        {            //获取显示BSE的图片数据            byte[] ImageData = SMsrData.STMSampleRetData.BSEData.lpBSEData;            //图片宽度            int width = SMsrData.STMSampleRetData.BSEData.iBSEDataWidth;            //图片高度            int height = SMsrData.STMSampleRetData.BSEData.iBSEDataHeight;            //显示状态中的BSE图像控件            if (!m_MeasureApp.m_MessureStatuWindow.picBox.Visible)            {                m_MeasureApp.m_MessureStatuWindow.picBox.Visible = true;            }            //调用测量状态TAB中窗体 显示BSE图片            OTSMeasureStatusWindowFun(width, height, ImageData, m_MeasureApp);        }        public void SampleStart(ST_MSTMsg SMsrData)        {            //获取样品名称            string sampleName = SMsrData.STMSampleStu.cSampleName;            //样品测量开始时间            string csSampleMsrStartTime = SMsrData.STMSampleStu.csSampleMsrStartTime;            //设置样品名称                            if (sampleName != "")                {                                            m_MeasureApp.m_SamplepaceWindow.SetSampleOrder(sampleName);                        if (m_MeasureApp.GetRunType() == MSR_RUN_TYPE.RUNMEASURE)                        {                            m_OTSMeasureResultWindow.SetSampleName(sampleName);                        }                        m_MeasureApp.m_SamplepaceWindow.Invalidate();                                       //设置开始时间                                  m_OTSMeasureResultWindow.SetStartTime(csSampleMsrStartTime);            }                        //切换样品            m_MeasureApp.SwitchWSample(sampleName);            //设置样品名称            m_OTSMeasureResultWindow.SetSampleName(sampleName);        }        public void MeasureStopped(ST_MSTMsg SMsrData)        {            string stopEndTime = SMsrData.STMThreadStu.csMsrEndTime;            //打开测量结果窗口            SetMeasureResultInfo(SMsrData);            MeasureResultMsrData = SMsrData;            m_bgWorker.ReportProgress((int)ProgressState.MeasureCheckReport);            //测量停止,更新Grid显示的测量信息            //获取需显示的grid信息            var sample = m_MeasureApp.m_ProjParam.GetWorkSample();            var stype = m_MeasureApp.m_ProjParam.GetDefaultParam().GetSysType();            OTSSampleVisualPropertyInfo MeasureInfo = new OTSSampleVisualPropertyInfo(sample, stype);            m_MeasureApp.m_SPropertyWindows.DisplaySampleMeasureInfo(MeasureInfo);        }        public void MeasureFailed(ST_MSTMsg SMsrData)        {            string failedEndTime = SMsrData.STMThreadStu.csMsrEndTime;            SetMeasureResultInfo(SMsrData);            MeasureResultMsrData = SMsrData;           m_bgWorker.ReportProgress((int)ProgressState.MeasureCheckReport);            //测量失败,更新Grid显示的测量信息            //获取需显示的grid信息            var sample = m_MeasureApp.m_ProjParam.GetWorkSample();            var stype = m_MeasureApp.m_ProjParam.GetDefaultParam().GetSysType();            OTSSampleVisualPropertyInfo MeasureInfo = new OTSSampleVisualPropertyInfo(sample, stype);            m_MeasureApp.m_SPropertyWindows.DisplaySampleMeasureInfo(MeasureInfo);        }        #endregion    }}
 |