瀏覽代碼

add acquire clear particle image function

gsp 1 年之前
父節點
當前提交
e52a58bea4

+ 2 - 1
Bin/x64/Debug/Config/ProData/HardwareConfig.xml

@@ -4,5 +4,6 @@
   <Member RegName="EDSName" Value="Oxford" DelayQuantify="true" WeightPercentageToAtomicPercentage="false" />
   <Member RegName="BrukerDllVersion" Version="Bruker.API.Esprit64.dll" />
   <Member RegName="FEIIP" Value="192.168.0.1" />
-  <Member RegName="FEIPORT" Value="7520" />
+  <Member RegName="FEIPORT" Value="7520" />AquireClearParticleImage="false"
+  <Member RegName="AquireClearParticleImage" Value="false" />
 </XMLData>

+ 2 - 0
OTSIncAMeasureApp/0-OTSModel/OTSDataType/COTSField.cs

@@ -16,6 +16,8 @@ namespace OTSDataType
         public COTSField upField = null;
         public COTSField downField = null;
         public COTSField rightField = null;
+
+        public List<CBSEImgClr> particleImages = new List<CBSEImgClr>();
         protected NLog.Logger log;
         // ID
         int m_nID;

+ 34 - 3
OTSIncAMeasureApp/1-OTSMeasure/Measure/3-MeasureFlow/CSmplMeasure.cs

@@ -44,8 +44,9 @@ namespace OTSModelSharp
       
         protected Queue<COTSField> fieldQueue=new Queue<COTSField>();
       
-        protected IClassifyEngine m_classifyEngine; 
+        protected IClassifyEngine m_classifyEngine;
 
+        private bool m_ifAquireClearParticleImage=false;
 
         public CSmplMeasure( string a_strWorkingFolder, COTSSample a_pSample)
         {
@@ -64,8 +65,9 @@ namespace OTSModelSharp
             m_EDSController = EDSController.GetEDSController(imgwidth,imgheight,expC,ifautoid,knownelements);
             m_listHoleBSEImg = new CHoleBSEImgsList();
             m_Sample = a_pSample;
+            m_ifAquireClearParticleImage = FileHelper.GetIfAquireClearParticleImage();
+
 
-          
         }
 
        public void SetSample(COTSSample a_pSample)
@@ -747,9 +749,27 @@ namespace OTSModelSharp
                     // image process
 
                     FieldImageProcess(curFld);
+
                     MsgFieldBSE.InitFieldBSEAnalysisPartsDataMsg();
 
                     m_pMsrThread.SendMessageToMeasureGUI(MsgFieldBSE);
+
+                    if (m_ifAquireClearParticleImage)
+                    {
+                        var listAnalysisParts = curFld.GetListAnalysisParticles();
+                        foreach (var p in listAnalysisParts)
+                        {
+                            Rectangle r = (Rectangle)p.GetParticleRect();
+                            var img = m_ScanHardwareMgr.AcquireRectangleBSEImage(r);
+                            if (img != null)
+                            {
+                                curFld.particleImages.Add(img);
+                            }
+                        }
+
+                    }
+                   
+
                     COTSXRayParam pXRayParam = m_Sample.GetMsrParams().GetXRayParam();
 
                     if (pXRayParam.GetUsingXray() == true)
@@ -869,6 +889,8 @@ namespace OTSModelSharp
             curFldData.CalculateParticleAbsolutPos(m_pMsrThread.GetProjResultData().GetSEMStageData());
            
             curFldData.InitParticles(pImgProcessParam);
+            
+
 
             return ;
 
@@ -1174,7 +1196,6 @@ namespace OTSModelSharp
           
             return true;
         }
-
       
 
 
@@ -1197,7 +1218,17 @@ namespace OTSModelSharp
                 log.Error("SaveFieldFiles: save BSE file failed.");
                 return false;
             }
+            if (fldData.particleImages.Count > 0)
+            {
+                for (int i=0;i<fldData.particleImages.Count;i++)
+                {
+                    strBSEFilePathname= m_pSampleRstFile.GetParticleImageFolder() + "\\"  + sFieldId +"_" +i.ToString()+pBSEImgFileMgr.BMP_IMG_FILE_EXT;
 
+                    pBSEImgFileMgr.SetBSEImg(fldData.particleImages[i]);
+                    pBSEImgFileMgr.SaveIntoBitmap(strBSEFilePathname);
+                }
+            
+            }
             // IncA Data list
 
             CIncAFileMgr pDBFileMgr = m_pSampleRstFile.DBFileMgr;

+ 9 - 1
OTSIncAMeasureApp/1-OTSMeasure/Measure/3-MeasureFlow/CSmplMsrResult.cs

@@ -15,6 +15,7 @@ namespace OTSModelSharp
       
         string m_strSampleWorkingFolder;
         string m_strFieldFileSubFolder;
+        string m_strParticleImageFolder;
       
 
         // pathname
@@ -29,6 +30,7 @@ namespace OTSModelSharp
        public  string SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER = "FIELD_FILES";
 
        public  string DBFILE_NAME = "Inclusion.db";
+        public string PARTICLE_IMGFOLDER = "PARTICLE_IMAGE";
         // BSE file name
         public string SMPL_MSR_RESULT_FIELDS_BSE = ("Field");
 
@@ -80,8 +82,8 @@ namespace OTSModelSharp
           
             m_strRstFileName = m_strSampleWorkingFolder + "\\" + a_pSample.GetName() + SMPL_MSR_RESULT_FILE_EXT;
             m_strdbPathName = m_strFieldFileSubFolder + "\\" + DBFILE_NAME;
+            m_strParticleImageFolder= m_strFieldFileSubFolder + "\\" + PARTICLE_IMGFOLDER;
 
-          
             m_DBFileMgr = new CIncAFileMgr(m_strdbPathName);
         }
         protected void Init()
@@ -221,6 +223,7 @@ namespace OTSModelSharp
 
                     return false;
                 }
+                CreateFolder(m_strParticleImageFolder);
             }
 
            
@@ -308,6 +311,11 @@ namespace OTSModelSharp
             // return field file sub folder string
             return m_strFieldFileSubFolder;
         }
+        public string GetParticleImageFolder()
+        {
+            return m_strParticleImageFolder;
+
+        }
        
        
         public void SetSEMGnr(CSEMDataGnr a_pSEMGnr)

+ 4 - 0
OTSIncAMeasureApp/ServiceCenter/CPP(Bruker)API/ScanController.cs

@@ -133,5 +133,9 @@ namespace OTSModelSharp.ServiceCenter
             
         }
 
+        public CBSEImgClr AcquireRectangleBSEImage( Rectangle rec)
+        {
+            return null;
+        }
     }
 }

+ 18 - 0
OTSIncAMeasureApp/ServiceCenter/FEIAutoScript/FEIScanController.cs

@@ -35,6 +35,24 @@ namespace OTSMeasureApp.ServiceCenter
             return bse;
         }
 
+        public CBSEImgClr AcquireRectangleBSEImage(System.Drawing.Rectangle rec)
+        {
+            int fieldWidth = 3072;
+            int fieldHeight = 2048;
+            Rectangle r = new Rectangle();
+            CBSEImgClr bse = new CBSEImgClr(r);
+            bse.InitImageData(imageWidth, imageHeight);
+            byte[] imgData = new byte[imageWidth * imageHeight];
+            double mag=0;
+            if (!ApiClass.RunAcquireImageRect(fieldWidth, fieldHeight, rec,ref mag, 2, "", ref imgData))
+            {
+                return null;
+            }
+            bse.SetImageData(imgData, (int)(rec.Width*mag), (int)(rec.Height*mag));
+
+            return bse;
+        }
+
         public bool Init()
         {
             string FEIIP = FileHelper.GetXMLInformations("FEIIP");

+ 46 - 0
OTSIncAMeasureApp/ServiceCenter/FileHelper.cs

@@ -163,6 +163,52 @@ namespace OTSModelSharp.ServiceCenter
                 return false;
             }
         }
+        public static bool GetIfAquireClearParticleImage()
+        {
+            try
+            {
+                XmlDocument doc;
+                string value = string.Empty;
+                if (Hardwareconfigdoc == null)
+                {
+                    string xmlFilePath = System.Configuration.ConfigurationManager.ConnectionStrings["XMLFileName"].ConnectionString;
+
+
+                    Hardwareconfigdoc = new XmlDocument();
+
+                    Hardwareconfigdoc.Load(xmlFilePath);    //加载Xml文件 
+                    doc = Hardwareconfigdoc;
+
+                }
+                else
+                {
+                    doc = Hardwareconfigdoc;
+                }
+
+
+                XmlElement root = doc.DocumentElement;   //获取根节点  
+
+                XmlNodeList mainNodes = root.GetElementsByTagName("Member"); //获取子节点集合  
+
+                foreach (XmlNode node in mainNodes)
+                {
+                    //获取Name属性值
+                    string name = ((XmlElement)node).GetAttribute("RegName");
+                    if (name.Equals("AquireClearParticleImage"))
+                    {
+
+                        value = ((XmlElement)node).GetAttribute("value");
+
+                        break;
+                    }
+                }
+                return Convert.ToBoolean(value);
+            }
+            catch (Exception)
+            {
+                return false;
+            }
+        }
         public static string GetOxfordInputSourceType()
         {
             try

+ 2 - 0
OTSIncAMeasureApp/ServiceCenter/IMeasureHardware.cs

@@ -69,6 +69,8 @@ namespace OTSModelSharp.ServiceCenter
       
         CBSEImgClr AcquireBSEImage();
 
+        CBSEImgClr AcquireRectangleBSEImage( System.Drawing.Rectangle rec);
+
     }
 
     public interface IEDSController

+ 18 - 16
OTSIncAMeasureApp/ServiceCenter/OxfordExtender/OxfordScanController.cs

@@ -1,34 +1,29 @@
 
-//using OINA.Extender.Data.Image;
+
 using OTSCLRINTERFACE;
-using OxfordExtenderWrapper;
+using OTSMeasureApp.ServiceCenter.OxfordExtender;
 using OTSModelSharp.ServiceCenter;
+using OxfordExtenderWrapper;
 using System;
-using System.Collections.Generic;
 using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Runtime.Remoting.Channels.Ipc;
-using System.Runtime.Remoting.Channels;
-using OTSMeasureApp.ServiceCenter.OxfordExtender;
+using System.Windows;
 using static OxfordExtenderWrapper.ExtenderIpcUI;
 
 namespace OTSMeasureApp.ServiceCenter
 {
     class OxfordScanController : IScanController
     {
-       
+
         int imageWidth = 0;
         int imageHeight = 0;
         double dwelltime = 0;
         ExtenderIpcUI iExtender;
         ImageInputSourceType imagesourceType;
 
-     
+
         public OxfordScanController(ImageInputSourceType sourceType)
         {
-  
+
             iExtender = ExtenderWrapperIpc.GetExtenderWrapper();
             imagesourceType = sourceType;
         }
@@ -45,7 +40,7 @@ namespace OTSMeasureApp.ServiceCenter
                 p.height = imageHeight;
                 p.DwellTime = dwelltime;
                 p.sourceType = imagesourceType;
-              
+
                 NLog.LogManager.GetCurrentClassLogger().Info("Begin to acquire BSE image!");
                 iExtender.AquisitionImage(ref p);
                 NLog.LogManager.GetCurrentClassLogger().Info("End acquiring BSE image!");
@@ -61,6 +56,13 @@ namespace OTSMeasureApp.ServiceCenter
             return null;
         }
 
+      
+
+        public CBSEImgClr AcquireRectangleBSEImage( Rectangle rec)
+        {
+            return null;
+        }
+
         public bool Init()
         {
             iExtender = ExtenderWrapperIpc.GetExtenderWrapper();
@@ -69,7 +71,7 @@ namespace OTSMeasureApp.ServiceCenter
 
         public bool SetDwellTime(DwellTimeLevel val)
         {
-             dwelltime = 2;
+            dwelltime = 2;
             switch (val)
             {
                 case DwellTimeLevel.Low:
@@ -85,7 +87,7 @@ namespace OTSMeasureApp.ServiceCenter
 
 
             }
-           
+
             return true;
         }
 
@@ -94,7 +96,7 @@ namespace OTSMeasureApp.ServiceCenter
             imageWidth = nWidth;
             imageHeight = nHeight;
 
-          
+
             return true;
         }
     }