|
|
@@ -37,7 +37,13 @@ namespace OTSModelSharp
|
|
|
public int cy;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ public enum XRAY_TYPE
|
|
|
+ {
|
|
|
+ MIN = 0,
|
|
|
+ SEARCH = 0,
|
|
|
+ ANALYSIS = 1,
|
|
|
+ MAX = 1
|
|
|
+ }
|
|
|
class SmplMeasure
|
|
|
{
|
|
|
protected static NLog.Logger loger = null;
|
|
|
@@ -92,6 +98,9 @@ namespace OTSModelSharp
|
|
|
CFieldMgr FieldMgr = new CFieldMgr();
|
|
|
|
|
|
COTSFieldMgr oTSFieldMgr = new COTSFieldMgr();
|
|
|
+
|
|
|
+ // X-Ray parameter,this is the initialization parameter
|
|
|
+ COTSXRayParam m_pXRayParam;
|
|
|
public SmplMeasure()
|
|
|
{
|
|
|
if (loger == null)
|
|
|
@@ -310,6 +319,8 @@ namespace OTSModelSharp
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ // Sample hole BSE image list
|
|
|
+ public List<CHoleBSEImg> GetHoleBESImgList() { return m_listHoleBSEImg; }
|
|
|
public void SetWorkingFolder(String a_strWorkingFolder)
|
|
|
{
|
|
|
// add "\\" at the string end if it is not "\\"
|
|
|
@@ -958,6 +969,44 @@ namespace OTSModelSharp
|
|
|
m_pMsrThread.SendMessageToMeasureApp(MsgSmplEnd);
|
|
|
}
|
|
|
|
|
|
+ // hardware control
|
|
|
+ public COTSSemBase GetSEMControl()//Control中的方法
|
|
|
+ {
|
|
|
+ // SEM controller
|
|
|
+ COTSSemBase pSEMController = null;
|
|
|
+
|
|
|
+
|
|
|
+ // get SEM controller
|
|
|
+ pSEMController = m_pMsrThread.GetSEMController();
|
|
|
+
|
|
|
+ // return SEM controller
|
|
|
+ return pSEMController;
|
|
|
+ }
|
|
|
+
|
|
|
+ public COTSScanBase GetScanControl()
|
|
|
+ {
|
|
|
+ // scan controller
|
|
|
+ COTSScanBase pScanController = null;
|
|
|
+
|
|
|
+ // get scan controller
|
|
|
+ pScanController = m_pMsrThread.GetScanController();
|
|
|
+
|
|
|
+ // return scan controller
|
|
|
+ return pScanController;
|
|
|
+ }
|
|
|
+
|
|
|
+ public OTSEDSBase GetEDSControl()
|
|
|
+ {
|
|
|
+ // EDS controller
|
|
|
+ OTSEDSBase pEDSController = null;
|
|
|
+
|
|
|
+ // get EDS controller
|
|
|
+ pEDSController = m_pMsrThread.GetEDSController();
|
|
|
+
|
|
|
+ // return EDS controller
|
|
|
+ return pEDSController;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
// hole BSE images list
|
|
|
void SetHoleBESImgList(CHoleBSEImgsList a_listHoleBSEImg, bool a_bClear/* = TRUE*/)
|
|
|
@@ -1606,5 +1655,84 @@ namespace OTSModelSharp
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ // get x-ray acquire time
|
|
|
+ public bool GetXRayAcquireTime(XRAY_TYPE a_nXrayType, OTS_THREE_TIES_OPTIONS a_nXraySpeed, uint a_nXRayAQTime)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ // get project manager file
|
|
|
+ COTSProjMgrFile pOTSProjMgrFile = m_pMsrThread.GetProjMgrFile();
|
|
|
+
|
|
|
+
|
|
|
+ // x-ray parameters
|
|
|
+ COTSXRayParam pXRayParam = pOTSProjMgrFile.GetXRayParam();
|
|
|
+
|
|
|
+
|
|
|
+ a_nXRayAQTime = (uint)pXRayParam.GetMidAnalyAQTime();
|
|
|
+
|
|
|
+ // ok, return TRUE
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // get x-rays
|
|
|
+ public bool GetXRayByPoints(List<CPosXray> a_listPosXRay, uint a_nXRayAQTime, bool a_bElementInfo /*= FALSE*/)
|
|
|
+ {
|
|
|
+ // get EDS controller
|
|
|
+ OTSEDSBase pEDSController = GetEDSControl();
|
|
|
+
|
|
|
+
|
|
|
+ // init EDS controller
|
|
|
+ if (!pEDSController.Init())
|
|
|
+ {
|
|
|
+ loger.Error("GetXRayByFeatures: failed to inti EDS (%s).", pEDSController.GetName());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // set get quantify info flag, firstly only get x-ray data
|
|
|
+
|
|
|
+ if (!a_bElementInfo)
|
|
|
+ {
|
|
|
+ pEDSController.SetQuantification(false);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ pEDSController.SetQuantification(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ pEDSController.SetQuantification(true);
|
|
|
+ //if (!pEDSController->GetXRayByPoints(a_listPosXRay, a_nXRayAQTime))
|
|
|
+ //{
|
|
|
+ // // failed to call EDS controller GetXRayByPoints method
|
|
|
+ // LogErrorTrace(__FILE__, __LINE__, _T("GetXRayByPoints: failed to get EDS controller."));
|
|
|
+ // return FALSE;
|
|
|
+ //}
|
|
|
+
|
|
|
+ List<CPosXray> listXRayPointsTemp = new List<CPosXray>();
|
|
|
+ CPosXray pXRayPointTemp = new CPosXray();
|
|
|
+ listXRayPointsTemp.Add(pXRayPointTemp);
|
|
|
+
|
|
|
+
|
|
|
+ pEDSController.SetQuantification(true);
|
|
|
+ for (int i = 0; i < (int)a_listPosXRay.Count; i++)
|
|
|
+ {
|
|
|
+ listXRayPointsTemp[0] = a_listPosXRay[i];
|
|
|
+
|
|
|
+
|
|
|
+ if (!pEDSController.GetXRayByPoints(listXRayPointsTemp, a_nXRayAQTime))
|
|
|
+ {
|
|
|
+ loger.Error("GetXRayByPoints: failed to get element.");
|
|
|
+ //return FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
+ a_listPosXRay[i] = listXRayPointsTemp[0];
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // ok, return TRUE
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|