Browse Source

add pause function when doing measurement.

gsp 3 years ago
parent
commit
55e85a99a8

+ 32 - 6
OTSIncAMeasureApp/0-OTSModel/Measure/3-MeasureFlow/CMeasure.cs

@@ -108,14 +108,23 @@ namespace OTSModelSharp
         public delegate void   ProgressEventHandler(ST_MSTMsg msg);
         public event ProgressEventHandler ProgressEvent;
         COTSMsrPrjResultData m_pProjData;
-        List< COTSSample> m_listMeasurableSamples;
+        List< COTSSample> m_listMeasurableSamples=new List<COTSSample>();
         string m_strWorkingFolder;
         CMsrThreadStatus m_ThreadStatus;
        
        
        SemController m_SemController;// there is no correspondense clr,so use this instead temporarilly
         protected static NLog.Logger loger = NLog.LogManager.GetCurrentClassLogger();
+       public SortedDictionary<string, CSmplMeasure> mapSmplMsr = new SortedDictionary<string, CSmplMeasure>();//use this map to hold all the smplMeasure object 
+        public List<COTSSample> GetListMeasurableSamples()
+        {
+            return m_listMeasurableSamples;
+        }
 
+        public void SetListMeasurableSamples(List<COTSSample> value)
+        {
+            m_listMeasurableSamples = value;
+        }
 
         public CMeasure()
         {         
@@ -145,7 +154,7 @@ namespace OTSModelSharp
        public  void Init(COTSMsrPrjResultData a_pProjMgrFile)
         {
             m_pProjData = a_pProjMgrFile;
-            m_listMeasurableSamples = a_pProjMgrFile.GetSampleList() ;
+            SetListMeasurableSamples(a_pProjMgrFile.GetSampleList());
             return ;
         }
         void ThreadOver()
@@ -224,7 +233,7 @@ namespace OTSModelSharp
             // start measurement, creat thread measure status class, let the main thread know that measurement started
 
 
-             SortedDictionary<string , CSmplMeasure> mapSmplMsr=new SortedDictionary<string, CSmplMeasure>();//use this map to hold all the smplMeasure object 
+           
 
            
             m_ThreadStatus.SetStartTime(System.DateTime.Now);
@@ -258,7 +267,7 @@ namespace OTSModelSharp
             List <string >  listMeasuredSamples = m_ThreadStatus.GetCompletedSamples();
 
             // got through measure list
-            foreach (var pSample in m_listMeasurableSamples)
+            foreach (var pSample in GetListMeasurableSamples())
             {// check and break if stop button is clicked 
                 if (m_ThreadStatus.GetStatus()== OTS_MSR_THREAD_STATUS.STOPPED )
                 {
@@ -314,7 +323,24 @@ namespace OTSModelSharp
 
 
                 // check if measurement is successful
-                if (pSample.GetMsrStatus().GetStatus() == OTS_MSR_SAMPLE_STATUS.STOPPED)
+                if (pSample.GetMsrStatus().GetStatus() == OTS_MSR_SAMPLE_STATUS.PAUSED)
+                {// record end time
+                    m_ThreadStatus.SetStatus(OTS_MSR_THREAD_STATUS.PAUSED);
+                    m_ThreadStatus.ComputeTime(OTS_THREAD_TIME_TYPE.STOPPED);
+
+                    // update thread measure status class, let the main thread know that this sample measurement stopped
+                    ST_MSTMsg MsgSmpStop = new ST_MSTMsg();
+                    MsgSmpStop.iMsgType = ENUM_MSG_TYPE.MSAMPLESTATUS;
+                    MsgSmpStop.STMThreadStu.iMsrStatu = OTS_MSR_THREAD_STATUS.PAUSED;
+                    MsgSmpStop.STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.PAUSED;
+                    MsgSmpStop.STMThreadStu.csMsrEndTime = DateTime.Now.ToShortDateString();
+                    MsgSmpStop.STMThreadStu.iMsrStatu = OTS_MSR_THREAD_STATUS.PAUSED;
+                    ProgressEvent(MsgSmpStop);
+
+
+                    ThreadOver();
+                    return;
+                }else if (pSample.GetMsrStatus().GetStatus() == OTS_MSR_SAMPLE_STATUS.STOPPED)
                 {// record end time
                     m_ThreadStatus.SetStatus(OTS_MSR_THREAD_STATUS.STOPPED);
                     m_ThreadStatus.ComputeTime(OTS_THREAD_TIME_TYPE.STOPPED);
@@ -564,7 +590,7 @@ namespace OTSModelSharp
             //poImageScanParam.SetImagePixelSize(OTS_FIVE_TIES_OPTIONS.TIE1);
 
             CSampleParam poMsrParams = pHoleSample.GetMsrParams();
-            poImageScanParam.SetImageResulotion(m_listMeasurableSamples[0].GetMsrParams().GetImageScanParam().GetImageResulotion());//由于各样品分辨率应该一致,故此处没有读取选取的特定样品孔样品
+            poImageScanParam.SetImageResulotion(GetListMeasurableSamples()[0].GetMsrParams().GetImageScanParam().GetImageResulotion());//由于各样品分辨率应该一致,故此处没有读取选取的特定样品孔样品
             poMsrParams.SetImageScanParam(poImageScanParam);
             pHoleSample.SetMsrParams(poMsrParams);
 

+ 61 - 31
OTSIncAMeasureApp/0-OTSModel/Measure/3-MeasureFlow/CSmplMeasure.cs

@@ -22,7 +22,7 @@ namespace OTSModelSharp
     using CHoleBSEImgsList = List<CHoleBSEImg>;
 
 
-    class CSmplMeasure
+  public  class CSmplMeasure
     {
         protected static NLog.Logger log ;
         protected bool bSaveThreadWorking;
@@ -79,7 +79,7 @@ namespace OTSModelSharp
             m_Sample = a_pSample;
             m_pSampleRstFile.SetSample(a_pSample);
         }
-
+        public COTSSample GetSample() { return m_Sample; }
 
         public void SetMsrThread(CMeasure mt)
         {
@@ -348,6 +348,20 @@ namespace OTSModelSharp
             //Debug.Assert(m_pMsrThread == null);
             return m_pMsrThread.IsMeasureStopped();
         }
+        protected bool IsPaused()
+        {
+            //Debug.Assert(m_pMsrThread == null);
+            var statu = m_pMsrThread.GetMsrThreadStatus();
+            if (statu.GetStatus() == OTS_MSR_THREAD_STATUS.PAUSED)
+            {
+                return true;
+            }
+            else 
+            {
+                return false;
+            }
+            
+        }
 
         bool IsSampleOver(COTSImgScanPrm  a_pScanParam)
         {
@@ -669,6 +683,18 @@ namespace OTSModelSharp
                     {
                         continue;
                     }
+                    if (IsPaused())
+                    {// measure stopped			
+                        pStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.PAUSED);
+                        // record end time
+                        pStatus.ComputeTime(OTS_MSR_TIME_TYPE.STOPPED);
+                        //must wait for the saving data thread  finished,or we'll get null pointer exception when we stop the measure process.			
+                        while (fieldQueue.Count() > 0)
+                        {
+                            Thread.Sleep(100);
+                        }
+                        return;
+                    }
                     if (IsAborted())
                     {// measure stopped			
                         pStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.STOPPED);
@@ -679,15 +705,13 @@ namespace OTSModelSharp
                         {
                             Thread.Sleep(100);
                         }
-                        return;
+                        break;
                     }
+                   
 
                     // check if sample measurement completes
                     COTSImgScanPrm pScanParam = m_Sample.GetMsrParams().GetImageScanParam();
                  
-
-
-
                     if (IsSampleOver(pScanParam))
                     {
                         pStatus.ComputeTime(OTS_MSR_TIME_TYPE.STOPPED);
@@ -803,36 +827,42 @@ namespace OTSModelSharp
                     Thread.Sleep(1000);
                     log.Warn("db saving!");
                 }
-                //merging particles
-                log.Info("Merging big particles which are crossing the field edge!");
-                CImageHandler imgpro = new CImageHandler();
-                int scanfldsize = m_Sample.GetSEMDataMsr().GetScanFieldSize();
-                List<COTSParticleClr> mergedParticles = new List<COTSParticleClr>();
-                double pixelSize = m_Sample.CalculatePixelSize();
-                imgpro.MergeBigBoundaryParticles(m_pSampleRstFile.GetFieldData(), pixelSize, scanfldsize, m_Sample.GetResolutionSize(), ref mergedParticles);
-               
-                CalculateMergedPartProperty(mergedParticles,pixelSize);
+                TheLastWorkOfSampleMeasure();
+            }
+    }
+        public void TheLastWorkOfSampleMeasure()
+        {
+            COTSSample theSample = m_Sample;
+            var pStatus = theSample.GetMsrStatus();
+            //merging particles
+            log.Info("Merging big particles which are crossing the field edge!");
+            CImageHandler imgpro = new CImageHandler();
+            int scanfldsize = theSample.GetSEMDataMsr().GetScanFieldSize();
+            List<COTSParticleClr> mergedParticles = new List<COTSParticleClr>();
+            double pixelSize = theSample.CalculatePixelSize();
+            imgpro.MergeBigBoundaryParticles(theSample.GetFieldsData(), pixelSize, scanfldsize, theSample.GetResolutionSize(), ref mergedParticles);
 
-                ClassifyMergedParticles(mergedParticles);
-                log.Info("begin merged particle data db saving...");
-              
-           
-                SaveMergedParticles(mergedParticles);
-          
+            CalculateMergedPartProperty(mergedParticles, pixelSize);
 
+            ClassifyMergedParticles(mergedParticles);
+            log.Info("begin merged particle data db saving...");
 
-                pStatus.ComputeTime(OTS_MSR_TIME_TYPE.COMPLT);
 
-                pStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.SUCCESSED);
+            SaveMergedParticles(mergedParticles);
 
-                // let main thread to know that this sample measurement completes
-                ST_MSTMsg MsgSmplEnd = new ST_MSTMsg();
-                MsgSmplEnd.iMsgType = ENUM_MSG_TYPE.MSAMPLESTATUS;
-                MsgSmplEnd.STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.SUCCESSED;
-                MsgSmplEnd.STMSampleStu.cSampleName = m_Sample.GetName();
-                m_pMsrThread.SendMessageToMeasureApp(MsgSmplEnd);
-            }
-    }
+
+
+            pStatus.ComputeTime(OTS_MSR_TIME_TYPE.COMPLT);
+
+            pStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.SUCCESSED);
+
+            // let main thread to know that this sample measurement completes
+            ST_MSTMsg MsgSmplEnd = new ST_MSTMsg();
+            MsgSmplEnd.iMsgType = ENUM_MSG_TYPE.MSAMPLESTATUS;
+            MsgSmplEnd.STMSampleStu.iMsrSampleStatu = OTS_MSR_SAMPLE_STATUS.SUCCESSED;
+            MsgSmplEnd.STMSampleStu.cSampleName = theSample.GetName();
+            m_pMsrThread.SendMessageToMeasureApp(MsgSmplEnd);
+        }
 
         public bool DoMEasureForReMeasure()
         {

+ 30 - 30
OTSIncAMeasureApp/0-OTSModel/Measure/3-MeasureFlow/CSmplMsrResult.cs

@@ -14,7 +14,7 @@ using System.Xml;
 
 namespace OTSModelSharp
 {
-    class CSmplMsrResult 
+ public   class CSmplMsrResult 
     {
 
         //----------------定义----------------------
@@ -111,11 +111,11 @@ namespace OTSModelSharp
                 m_pSample.GetFieldsData().Add(pFieldDataNew);
             }
         }
-        public List<COTSFieldData> GetFieldData()
-        {
-            return m_pSample.GetFieldsData();
-            //m_pSample.GetFieldsData()
-        }
+        //public List<COTSFieldData> GetFieldData()
+        //{
+        //    return m_pSample.GetFieldsData();
+        //    //m_pSample.GetFieldsData()
+        //}
         public CSmplMsrResult(string measureWorkingFolder,COTSSample a_pSample)
         {
             Init();
@@ -823,16 +823,16 @@ namespace OTSModelSharp
             return true;
         }
         // fields
-        public COTSFieldData GetFieldById(int a_nID)
-        {
-            List<COTSFieldData> listFieldData = GetFieldData();
-            if (a_nID < 0 || a_nID > (int)listFieldData.Count)
-            {
-                return null;
-            }
-           COTSFieldData pFieldData = listFieldData[a_nID];
-            return pFieldData;
-        }
+        //public COTSFieldData GetFieldById(int a_nID)
+        //{
+        //    List<COTSFieldData> listFieldData = m_pSample.GetFieldsData();
+        //    if (a_nID < 0 || a_nID > (int)listFieldData.Count)
+        //    {
+        //        return null;
+        //    }
+        //   COTSFieldData pFieldData = listFieldData[a_nID];
+        //    return pFieldData;
+        //}
         //public void AddAField(COTSFieldData a_pFieldData)
         //{
         //    m_pSample.AddFieldData(a_pFieldData);
@@ -846,20 +846,20 @@ namespace OTSModelSharp
 
         }
        
-        public bool DeleteAFieldById(int a_nID)
-        {
-            List<COTSFieldData> listFieldData = GetFieldData();
-            if (a_nID < 0 || a_nID > (int)listFieldData.Count)
-            {
-                return false;
-            }
-            //listFieldData.erase(listFieldData.begin() + a_nID);
-            for (int i = 0; i < a_nID; i++)
-            {
-                listFieldData.RemoveAt(0);
-            }
-            return true;
-        }
+        //public bool DeleteAFieldById(int a_nID)
+        //{
+        //    List<COTSFieldData> listFieldData = GetFieldData();
+        //    if (a_nID < 0 || a_nID > (int)listFieldData.Count)
+        //    {
+        //        return false;
+        //    }
+        //    //listFieldData.erase(listFieldData.begin() + a_nID);
+        //    for (int i = 0; i < a_nID; i++)
+        //    {
+        //        listFieldData.RemoveAt(0);
+        //    }
+        //    return true;
+        //}
         // pathname
         public string GetPathFileName()
         {

+ 6 - 5
OTSIncAMeasureApp/0-OTSModel/OTSDataType/CMsrSampleStatus.cs

@@ -13,10 +13,11 @@ namespace OTSDataType
         MIN = 0,
         UNMEASURED = 0,
         INPROCESS = 1,
-        STOPPED = 2,
-        FAILED = 3,
-        SUCCESSED = 4,
-        MAX = 4
+        PAUSED=2,
+        STOPPED = 3,
+        FAILED = 4,
+        SUCCESSED = 5,
+        MAX = 5
     }
 
     public enum OTS_MSR_TIME_TYPE
@@ -32,7 +33,7 @@ namespace OTSDataType
         //using namespace OTSDATA;
         const OTS_MSR_SAMPLE_STATUS DEFAULT_MSR_SAMPLE_STATUS = OTS_MSR_SAMPLE_STATUS.UNMEASURED;
 
-        public OTS_MSR_SAMPLE_STATUS m_nStatus;
+        private OTS_MSR_SAMPLE_STATUS m_nStatus;
 
         DateTime m_timeStart = new DateTime();
         DateTime m_timeEnd = new DateTime();

+ 2 - 10
OTSIncAMeasureApp/0-OTSModel/OTSDataType/COTSSample.cs

@@ -343,12 +343,7 @@ namespace OTSDataType
         // calculate scan field size
         public void CalculateScanFieldSize(double a_dPixelSize,ref int scanFieldWidth,ref int scanFieldHeight)
         {
-            // scan field size
-            //int nScanFiledSize = 0;
-
-            // make sure SEM is valid
-            //if (!m_poSEMDataMsr.Equals(new CSEMDataMsr()))
-            //{
+    
                 // get image size
                 OTS_IMAGE_RESULOTION_OPTIONS nImageSizeId = m_poMsrParams.GetImageScanParam().GetImageResulotion();
                 long nResulotionId = RESOLUTION_ID_FIRST_TIE + (long)nImageSizeId;
@@ -358,10 +353,7 @@ namespace OTSDataType
                 // calculate scan field size
                 scanFieldWidth = (int)((a_dPixelSize * (double)nImagewidth) + 0.5);
                 scanFieldHeight= (int)((a_dPixelSize * (double)nHeight) + 0.5);
-            //}
-
-            //// return scan field size
-            //return nScanFiledSize;
+           
         }
         public bool GetBSESize(out int a_nWidth, out int a_nHeight)
         {

+ 4 - 3
OTSIncAMeasureApp/0-OTSModel/OTSDataType/otsdataconst.cs

@@ -253,9 +253,10 @@ namespace OTSDataType
             READY = 0,
             //MIN = 0,
             INPROCESS = 1,
-            STOPPED = 2,
-            FAILED = 3,
-            COMPLETED = 4,
+            PAUSED=2,
+            STOPPED = 3,
+            FAILED = 4,
+            COMPLETED = 5,
             //MAX = 4
         }
    

+ 33 - 4
OTSIncAMeasureApp/1-OTSMeasure/CMeasureThreadWrapper.cs

@@ -47,6 +47,19 @@ namespace OTSMeasureApp
             m_MsrThread.ProgressEvent += M_MsrThread_ProgressEvent;
          
 
+        }
+        public bool IsHavingNotCompleteSamples()
+        {
+            foreach(var s in m_MsrThread.GetListMeasurableSamples())
+            {
+                if (s.GetMsrStatus().GetStatus() == OTS_MSR_SAMPLE_STATUS.PAUSED)
+                {
+                    return true;
+                }
+            
+            }
+            return false;
+        
         }
         #endregion
         #region 设置线程类型
@@ -194,6 +207,12 @@ namespace OTSMeasureApp
 
                         StopMeasure(MSTMsg);
 
+                    }
+                    else if (MSTMsg.STMThreadStu.iMsrStatu == otsdataconst.OTS_MSR_THREAD_STATUS.PAUSED)
+                    {
+
+                        PauseMeasure(MSTMsg);
+
                     }
                     else
                     {
@@ -212,20 +231,21 @@ namespace OTSMeasureApp
                     }
                     else if (MSTMsg.STMSampleStu.iMsrSampleStatu == OTSDataType.OTS_MSR_SAMPLE_STATUS.STOPPED)
                     {
-
+                        StopMeasure(MSTMsg);
                     }
                     else if (MSTMsg.STMSampleStu.iMsrSampleStatu == OTSDataType.OTS_MSR_SAMPLE_STATUS.FAILED)
                     {
+                        StopMeasure(MSTMsg);
                         log.Error("(OTSGetMreRetThread) MSTMsg.STMSampleStu.iMeasureSampleStatus = RET_MEASURE_SAMPLE_STATUS.FAILED Failed");
 
                     }
                     else if (MSTMsg.STMSampleStu.iMsrSampleStatu == OTSDataType.OTS_MSR_SAMPLE_STATUS.SUCCESSED)
                     {
-
+                        StopMeasure(MSTMsg);
                     }
-                    else
+                    else if(MSTMsg.STMSampleStu.iMsrSampleStatu == OTSDataType.OTS_MSR_SAMPLE_STATUS.PAUSED)
                     {
-                        log.Error("(OTSGetMreRetThread) MSTMsg.STMSampleStu.iMeasureSampleStatus =" + MSTMsg.STMSampleStu.iMsrSampleStatu.ToString() + "Failed");
+                        log.Warn("This sample measure is paused!");
                     }
                     break;
                 case OTSModelSharp.ENUM_MSG_TYPE.MSAMPLERESULT:
@@ -299,6 +319,15 @@ namespace OTSMeasureApp
             m_OTSMeasureResult.RunMeasureState(SMsrData);
         }
 
+        private void PauseMeasure(ST_MSTMsg SMsrData)
+        {
+            m_MeasureApp.SetPauseMeasureRibbonStatus();
+
+            GetMsrRetData(ref SMsrData.STMThreadStu.SMsrCompleteData);
+
+            m_OTSMeasureResult.RunMeasureState(SMsrData);
+        }
+
         private void GetBSEData(ST_MSTMsg SMsrData)
         {
 

+ 74 - 73
OTSIncAMeasureApp/OTSIncAMeasureAppForm.Designer.cs

@@ -29,21 +29,21 @@
         private void InitializeComponent()
         {
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OTSIncAMeasureAppForm));
-            OTS.WinFormsUI.Docking.DockPanelSkin dockPanelSkin2 = new OTS.WinFormsUI.Docking.DockPanelSkin();
-            OTS.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin2 = new OTS.WinFormsUI.Docking.AutoHideStripSkin();
-            OTS.WinFormsUI.Docking.DockPanelGradient dockPanelGradient4 = new OTS.WinFormsUI.Docking.DockPanelGradient();
-            OTS.WinFormsUI.Docking.TabGradient tabGradient8 = new OTS.WinFormsUI.Docking.TabGradient();
-            OTS.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin2 = new OTS.WinFormsUI.Docking.DockPaneStripSkin();
-            OTS.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient2 = new OTS.WinFormsUI.Docking.DockPaneStripGradient();
-            OTS.WinFormsUI.Docking.TabGradient tabGradient9 = new OTS.WinFormsUI.Docking.TabGradient();
-            OTS.WinFormsUI.Docking.DockPanelGradient dockPanelGradient5 = new OTS.WinFormsUI.Docking.DockPanelGradient();
-            OTS.WinFormsUI.Docking.TabGradient tabGradient10 = new OTS.WinFormsUI.Docking.TabGradient();
-            OTS.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient2 = new OTS.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
-            OTS.WinFormsUI.Docking.TabGradient tabGradient11 = new OTS.WinFormsUI.Docking.TabGradient();
-            OTS.WinFormsUI.Docking.TabGradient tabGradient12 = new OTS.WinFormsUI.Docking.TabGradient();
-            OTS.WinFormsUI.Docking.DockPanelGradient dockPanelGradient6 = new OTS.WinFormsUI.Docking.DockPanelGradient();
-            OTS.WinFormsUI.Docking.TabGradient tabGradient13 = new OTS.WinFormsUI.Docking.TabGradient();
-            OTS.WinFormsUI.Docking.TabGradient tabGradient14 = new OTS.WinFormsUI.Docking.TabGradient();
+            OTS.WinFormsUI.Docking.DockPanelSkin dockPanelSkin1 = new OTS.WinFormsUI.Docking.DockPanelSkin();
+            OTS.WinFormsUI.Docking.AutoHideStripSkin autoHideStripSkin1 = new OTS.WinFormsUI.Docking.AutoHideStripSkin();
+            OTS.WinFormsUI.Docking.DockPanelGradient dockPanelGradient1 = new OTS.WinFormsUI.Docking.DockPanelGradient();
+            OTS.WinFormsUI.Docking.TabGradient tabGradient1 = new OTS.WinFormsUI.Docking.TabGradient();
+            OTS.WinFormsUI.Docking.DockPaneStripSkin dockPaneStripSkin1 = new OTS.WinFormsUI.Docking.DockPaneStripSkin();
+            OTS.WinFormsUI.Docking.DockPaneStripGradient dockPaneStripGradient1 = new OTS.WinFormsUI.Docking.DockPaneStripGradient();
+            OTS.WinFormsUI.Docking.TabGradient tabGradient2 = new OTS.WinFormsUI.Docking.TabGradient();
+            OTS.WinFormsUI.Docking.DockPanelGradient dockPanelGradient2 = new OTS.WinFormsUI.Docking.DockPanelGradient();
+            OTS.WinFormsUI.Docking.TabGradient tabGradient3 = new OTS.WinFormsUI.Docking.TabGradient();
+            OTS.WinFormsUI.Docking.DockPaneStripToolWindowGradient dockPaneStripToolWindowGradient1 = new OTS.WinFormsUI.Docking.DockPaneStripToolWindowGradient();
+            OTS.WinFormsUI.Docking.TabGradient tabGradient4 = new OTS.WinFormsUI.Docking.TabGradient();
+            OTS.WinFormsUI.Docking.TabGradient tabGradient5 = new OTS.WinFormsUI.Docking.TabGradient();
+            OTS.WinFormsUI.Docking.DockPanelGradient dockPanelGradient3 = new OTS.WinFormsUI.Docking.DockPanelGradient();
+            OTS.WinFormsUI.Docking.TabGradient tabGradient6 = new OTS.WinFormsUI.Docking.TabGradient();
+            OTS.WinFormsUI.Docking.TabGradient tabGradient7 = new OTS.WinFormsUI.Docking.TabGradient();
             this.rbNew = new System.Windows.Forms.RibbonButton();
             this.rbOpen = new System.Windows.Forms.RibbonButton();
             this.rbSave = new System.Windows.Forms.RibbonButton();
@@ -168,7 +168,7 @@
             this.rbMenu.BorderMode = System.Windows.Forms.RibbonWindowMode.InsideWindow;
             this.rbMenu.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);
             this.rbMenu.Location = new System.Drawing.Point(0, 0);
-            this.rbMenu.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.rbMenu.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
             this.rbMenu.Minimized = true;
             this.rbMenu.Name = "rbMenu";
             // 
@@ -201,7 +201,7 @@
             this.rbMenu.QuickAcessToolbar.Image = null;
             this.rbMenu.QuickAcessToolbar.Tag = null;
             this.rbMenu.QuickAcessToolbar.ToolTipImage = null;
-            this.rbMenu.Size = new System.Drawing.Size(1916, 130);
+            this.rbMenu.Size = new System.Drawing.Size(1277, 130);
             this.rbMenu.TabIndex = 0;
             this.rbMenu.Tabs.Add(this.rbTabHome);
             this.rbMenu.Tabs.Add(this.rbTabView);
@@ -668,6 +668,7 @@
             this.rbPause.ToolTip = null;
             this.rbPause.ToolTipImage = null;
             this.rbPause.ToolTipTitle = null;
+            this.rbPause.Click += new System.EventHandler(this.rbPause_Click);
             // 
             // rbStop
             // 
@@ -847,11 +848,11 @@
             this.TSGrayVal,
             this.STSemCoordinate,
             this.toolStripStatusLabel1});
-            this.statusStrip1.Location = new System.Drawing.Point(0, 1010);
+            this.statusStrip1.Location = new System.Drawing.Point(0, 671);
             this.statusStrip1.Name = "statusStrip1";
-            this.statusStrip1.Padding = new System.Windows.Forms.Padding(3, 0, 21, 0);
+            this.statusStrip1.Padding = new System.Windows.Forms.Padding(2, 0, 14, 0);
             this.statusStrip1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
-            this.statusStrip1.Size = new System.Drawing.Size(1916, 35);
+            this.statusStrip1.Size = new System.Drawing.Size(1277, 26);
             this.statusStrip1.TabIndex = 2;
             this.statusStrip1.Text = "statusStrip1";
             // 
@@ -859,20 +860,20 @@
             // 
             this.TSGrayVal.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right;
             this.TSGrayVal.Name = "TSGrayVal";
-            this.TSGrayVal.Size = new System.Drawing.Size(68, 28);
+            this.TSGrayVal.Size = new System.Drawing.Size(48, 21);
             this.TSGrayVal.Text = "灰度值";
             // 
             // STSemCoordinate
             // 
             this.STSemCoordinate.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right;
             this.STSemCoordinate.Name = "STSemCoordinate";
-            this.STSemCoordinate.Size = new System.Drawing.Size(88, 28);
+            this.STSemCoordinate.Size = new System.Drawing.Size(62, 21);
             this.STSemCoordinate.Text = "SEM坐标";
             // 
             // toolStripStatusLabel1
             // 
             this.toolStripStatusLabel1.Name = "toolStripStatusLabel1";
-            this.toolStripStatusLabel1.Size = new System.Drawing.Size(77, 28);
+            this.toolStripStatusLabel1.Size = new System.Drawing.Size(54, 21);
             this.toolStripStatusLabel1.Text = "IsReady";
             this.toolStripStatusLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
             this.toolStripStatusLabel1.Visible = false;
@@ -887,53 +888,53 @@
             this.dockPanel.DockLeftPortion = 0.21D;
             this.dockPanel.DockRightPortion = 0.27D;
             this.dockPanel.Location = new System.Drawing.Point(0, 130);
-            this.dockPanel.Margin = new System.Windows.Forms.Padding(9, 10, 9, 10);
+            this.dockPanel.Margin = new System.Windows.Forms.Padding(6, 7, 6, 7);
             this.dockPanel.Name = "dockPanel";
-            this.dockPanel.Size = new System.Drawing.Size(1916, 880);
-            dockPanelGradient4.EndColor = System.Drawing.SystemColors.ControlLight;
-            dockPanelGradient4.StartColor = System.Drawing.SystemColors.ControlLight;
-            autoHideStripSkin2.DockStripGradient = dockPanelGradient4;
-            tabGradient8.EndColor = System.Drawing.SystemColors.Control;
-            tabGradient8.StartColor = System.Drawing.SystemColors.Control;
-            tabGradient8.TextColor = System.Drawing.SystemColors.ControlDarkDark;
-            autoHideStripSkin2.TabGradient = tabGradient8;
-            dockPanelSkin2.AutoHideStripSkin = autoHideStripSkin2;
-            tabGradient9.EndColor = System.Drawing.SystemColors.ControlLightLight;
-            tabGradient9.StartColor = System.Drawing.SystemColors.ControlLightLight;
-            tabGradient9.TextColor = System.Drawing.SystemColors.ControlText;
-            dockPaneStripGradient2.ActiveTabGradient = tabGradient9;
-            dockPanelGradient5.EndColor = System.Drawing.SystemColors.Control;
-            dockPanelGradient5.StartColor = System.Drawing.SystemColors.Control;
-            dockPaneStripGradient2.DockStripGradient = dockPanelGradient5;
-            tabGradient10.EndColor = System.Drawing.SystemColors.ControlLight;
-            tabGradient10.StartColor = System.Drawing.SystemColors.ControlLight;
-            tabGradient10.TextColor = System.Drawing.SystemColors.ControlText;
-            dockPaneStripGradient2.InactiveTabGradient = tabGradient10;
-            dockPaneStripSkin2.DocumentGradient = dockPaneStripGradient2;
-            tabGradient11.EndColor = System.Drawing.SystemColors.ActiveCaption;
-            tabGradient11.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
-            tabGradient11.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
-            tabGradient11.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
-            dockPaneStripToolWindowGradient2.ActiveCaptionGradient = tabGradient11;
-            tabGradient12.EndColor = System.Drawing.SystemColors.Control;
-            tabGradient12.StartColor = System.Drawing.SystemColors.Control;
-            tabGradient12.TextColor = System.Drawing.SystemColors.ControlText;
-            dockPaneStripToolWindowGradient2.ActiveTabGradient = tabGradient12;
-            dockPanelGradient6.EndColor = System.Drawing.SystemColors.ControlLight;
-            dockPanelGradient6.StartColor = System.Drawing.SystemColors.ControlLight;
-            dockPaneStripToolWindowGradient2.DockStripGradient = dockPanelGradient6;
-            tabGradient13.EndColor = System.Drawing.SystemColors.GradientInactiveCaption;
-            tabGradient13.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
-            tabGradient13.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
-            tabGradient13.TextColor = System.Drawing.SystemColors.ControlText;
-            dockPaneStripToolWindowGradient2.InactiveCaptionGradient = tabGradient13;
-            tabGradient14.EndColor = System.Drawing.Color.Transparent;
-            tabGradient14.StartColor = System.Drawing.Color.Transparent;
-            tabGradient14.TextColor = System.Drawing.SystemColors.ControlDarkDark;
-            dockPaneStripToolWindowGradient2.InactiveTabGradient = tabGradient14;
-            dockPaneStripSkin2.ToolWindowGradient = dockPaneStripToolWindowGradient2;
-            dockPanelSkin2.DockPaneStripSkin = dockPaneStripSkin2;
-            this.dockPanel.Skin = dockPanelSkin2;
+            this.dockPanel.Size = new System.Drawing.Size(1277, 541);
+            dockPanelGradient1.EndColor = System.Drawing.SystemColors.ControlLight;
+            dockPanelGradient1.StartColor = System.Drawing.SystemColors.ControlLight;
+            autoHideStripSkin1.DockStripGradient = dockPanelGradient1;
+            tabGradient1.EndColor = System.Drawing.SystemColors.Control;
+            tabGradient1.StartColor = System.Drawing.SystemColors.Control;
+            tabGradient1.TextColor = System.Drawing.SystemColors.ControlDarkDark;
+            autoHideStripSkin1.TabGradient = tabGradient1;
+            dockPanelSkin1.AutoHideStripSkin = autoHideStripSkin1;
+            tabGradient2.EndColor = System.Drawing.SystemColors.ControlLightLight;
+            tabGradient2.StartColor = System.Drawing.SystemColors.ControlLightLight;
+            tabGradient2.TextColor = System.Drawing.SystemColors.ControlText;
+            dockPaneStripGradient1.ActiveTabGradient = tabGradient2;
+            dockPanelGradient2.EndColor = System.Drawing.SystemColors.Control;
+            dockPanelGradient2.StartColor = System.Drawing.SystemColors.Control;
+            dockPaneStripGradient1.DockStripGradient = dockPanelGradient2;
+            tabGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
+            tabGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
+            tabGradient3.TextColor = System.Drawing.SystemColors.ControlText;
+            dockPaneStripGradient1.InactiveTabGradient = tabGradient3;
+            dockPaneStripSkin1.DocumentGradient = dockPaneStripGradient1;
+            tabGradient4.EndColor = System.Drawing.SystemColors.ActiveCaption;
+            tabGradient4.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
+            tabGradient4.StartColor = System.Drawing.SystemColors.GradientActiveCaption;
+            tabGradient4.TextColor = System.Drawing.SystemColors.ActiveCaptionText;
+            dockPaneStripToolWindowGradient1.ActiveCaptionGradient = tabGradient4;
+            tabGradient5.EndColor = System.Drawing.SystemColors.Control;
+            tabGradient5.StartColor = System.Drawing.SystemColors.Control;
+            tabGradient5.TextColor = System.Drawing.SystemColors.ControlText;
+            dockPaneStripToolWindowGradient1.ActiveTabGradient = tabGradient5;
+            dockPanelGradient3.EndColor = System.Drawing.SystemColors.ControlLight;
+            dockPanelGradient3.StartColor = System.Drawing.SystemColors.ControlLight;
+            dockPaneStripToolWindowGradient1.DockStripGradient = dockPanelGradient3;
+            tabGradient6.EndColor = System.Drawing.SystemColors.GradientInactiveCaption;
+            tabGradient6.LinearGradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
+            tabGradient6.StartColor = System.Drawing.SystemColors.GradientInactiveCaption;
+            tabGradient6.TextColor = System.Drawing.SystemColors.ControlText;
+            dockPaneStripToolWindowGradient1.InactiveCaptionGradient = tabGradient6;
+            tabGradient7.EndColor = System.Drawing.Color.Transparent;
+            tabGradient7.StartColor = System.Drawing.Color.Transparent;
+            tabGradient7.TextColor = System.Drawing.SystemColors.ControlDarkDark;
+            dockPaneStripToolWindowGradient1.InactiveTabGradient = tabGradient7;
+            dockPaneStripSkin1.ToolWindowGradient = dockPaneStripToolWindowGradient1;
+            dockPanelSkin1.DockPaneStripSkin = dockPaneStripSkin1;
+            this.dockPanel.Skin = dockPanelSkin1;
             this.dockPanel.TabIndex = 4;
             // 
             // ribbonButton3
@@ -966,9 +967,9 @@
             // 
             // OTSIncAMeasureAppForm
             // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(1916, 1045);
+            this.ClientSize = new System.Drawing.Size(1277, 697);
             this.Controls.Add(this.dockPanel);
             this.Controls.Add(this.statusStrip1);
             this.Controls.Add(this.rbMenu);
@@ -976,8 +977,8 @@
             this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
             this.IsMdiContainer = true;
             this.KeyPreview = true;
-            this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
-            this.MinimumSize = new System.Drawing.Size(1011, 732);
+            this.Margin = new System.Windows.Forms.Padding(2, 1, 2, 1);
+            this.MinimumSize = new System.Drawing.Size(679, 501);
             this.Name = "OTSIncAMeasureAppForm";
             this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
             this.Text = "OTSMeasureApp";

+ 49 - 5
OTSIncAMeasureApp/OTSIncAMeasureAppForm.cs

@@ -429,6 +429,12 @@ namespace OTSMeasureApp
                     e.Cancel = true;
                     return;
                 }
+                if (m_MsrThreadWrapper.IsHavingNotCompleteSamples())    //当前正在测量
+                {
+                    e.Cancel = true;
+                    MessageBox.Show("There is one sample is still  in pausing state,please stop it!");
+                    return;
+                }
 
                 //判断测量结果文件修改后是否保存
                 if (m_ProjData.IsModified())
@@ -887,7 +893,6 @@ namespace OTSMeasureApp
             bool iRev = m_ProjData.SaveAs();
             if (!iRev)
             {
-                //log.Trace("(OTSIncAMeasureAppForm.ribbonOrbMenuItemSaveAs_Click)  m_DataMgrFun.SaveAsFile()  Failed !");
                 return;
             }
         }
@@ -997,7 +1002,33 @@ namespace OTSMeasureApp
                 //停止测量线程    
                 m_MsrThreadWrapper.SetMeasureThreadStatus(otsdataconst.OTS_MSR_THREAD_STATUS.STOPPED);
             }
+            else if (m_MsrThreadWrapper.m_MsrThread.GetMsrThreadStatus() .GetStatus()== OTS_MSR_THREAD_STATUS.PAUSED)
+            {
+                foreach (KeyValuePair<string, CSmplMeasure> smpl in m_MsrThreadWrapper.m_MsrThread.mapSmplMsr)
+                {
+                    if (smpl.Value.GetSample().GetMsrStatus().GetStatus() == OTS_MSR_SAMPLE_STATUS.PAUSED)
+                    {
+                        smpl.Value.TheLastWorkOfSampleMeasure();
+                        return;
+                    }
+                }
+
+
+            }
+
+
+
+
 
+        }
+        private void rbPause_Click(object sender, EventArgs e)
+        {
+            //如果当前正在测量,则停止测量线程
+            if (MeasureThreadRunFlag)
+            {
+                //停止测量线程    
+                m_MsrThreadWrapper.SetMeasureThreadStatus(otsdataconst.OTS_MSR_THREAD_STATUS.PAUSED);
+            }
         }
         private void rbRuler_Click(object sender, EventArgs e)
         {
@@ -1028,9 +1059,23 @@ namespace OTSMeasureApp
             rbCheckParam.Enabled = true;
         }
 
+        public void SetPauseMeasureRibbonStatus()
+        {
+            //this.PropertyMeasureThreadRunFlag = false;
+            ribView.Enabled = true;
+            m_RibbonFun.SetToolButnStatu(true);
+            rbPanelFile.Enabled = true;
+            rbPanelSample.Enabled = true;
+            m_RibbonFun.SetMeasureRibbonButnStatu();
+            m_SolutionWindows.Enabled = true;
+            m_SPropertyWindows.Enabled = true;
+            rbStart.Enabled = true;
+            rbPause.Enabled = false;
+            rbStop.Enabled = true;
+            rbCheckParam.Enabled = false;
+        }
 
 
-      
 
         public bool SwitchMeasureSample(string sMsrSampleName)
         {
@@ -1353,9 +1398,7 @@ namespace OTSMeasureApp
             ChannelServices.RegisterChannel(channel, false);
             //Register this service type.
             RemotingConfiguration.RegisterWellKnownServiceType(typeof(IpcSEMController), "RemoteObject", WellKnownObjectMode.Singleton);
-            //RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject2), "RemoteObject2", WellKnownObjectMode.Singleton);
-            //Console.WriteLine("press return to exit");
-            //Console.ReadLine();
+         
 
         }
 
@@ -1416,5 +1459,6 @@ namespace OTSMeasureApp
                 rbAutoBeamOff.SmallImage = global::OTSMeasureApp.Properties.Resources.AutoBeamOff_on;
             }
         }
+
     }
 }

+ 6 - 6
OTSIncAMeasureApp/OTSIncAMeasureAppForm.resx

@@ -152,12 +152,6 @@
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAW
         JQAAFiUBSVIk8AAAABNJREFUOE9jGAWjYBSMAjBgYAAABBAAAadEfGMAAAAASUVORK5CYII=
-</value>
-  </data>
-  <data name="ribCircle.SmallImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
-        vAAADrwBlbxySQAAABNJREFUOE9jGAWjYBSMAjBgYAAABBAAAadEfGMAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="rbCircleCenter.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -182,6 +176,12 @@
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAW
         JQAAFiUBSVIk8AAAABNJREFUOE9jGAWjYBSMAjBgYAAABBAAAadEfGMAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="ribCircle.SmallImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        vAAADrwBlbxySQAAABNJREFUOE9jGAWjYBSMAjBgYAAABBAAAadEfGMAAAAASUVORK5CYII=
 </value>
   </data>
   <data name="ribRectangle.SmallImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">