|
|
@@ -986,10 +986,10 @@ namespace OTSModelSharp
|
|
|
// return pSEMController;
|
|
|
//}
|
|
|
|
|
|
- public COTSScanBase GetScanControl()
|
|
|
+ public IScanController GetScanControl()
|
|
|
{
|
|
|
// scan controller
|
|
|
- COTSScanBase pScanController = null;
|
|
|
+ IScanController pScanController = null;
|
|
|
|
|
|
// get scan controller
|
|
|
pScanController = m_pMsrThread.GetScanController();
|
|
|
@@ -998,10 +998,10 @@ namespace OTSModelSharp
|
|
|
return pScanController;
|
|
|
}
|
|
|
|
|
|
- public OTSEDSBase GetEDSControl()
|
|
|
+ public IEDSController GetEDSControl()
|
|
|
{
|
|
|
// EDS controller
|
|
|
- OTSEDSBase pEDSController = null;
|
|
|
+ IEDSController pEDSController = null;
|
|
|
|
|
|
// get EDS controller
|
|
|
pEDSController = m_pMsrThread.GetEDSController();
|
|
|
@@ -1068,7 +1068,7 @@ namespace OTSModelSharp
|
|
|
}
|
|
|
|
|
|
// get pixel size
|
|
|
- public bool GetPixelSize(double a_dPixelSize)
|
|
|
+ public bool GetPixelSize(ref double a_dPixelSize)
|
|
|
{
|
|
|
|
|
|
a_dPixelSize = m_pSample.CalculatePixelSize();
|
|
|
@@ -1318,7 +1318,7 @@ namespace OTSModelSharp
|
|
|
MergeBigBoundaryParticles(mergedParts);
|
|
|
double pixelSize = 0;
|
|
|
|
|
|
- this.GetPixelSize(pixelSize);
|
|
|
+ this.GetPixelSize(ref pixelSize);
|
|
|
|
|
|
oTSFieldMgr.CalMergedParticleImageProp(mergedParts, pixelSize);
|
|
|
|
|
|
@@ -1363,7 +1363,7 @@ namespace OTSModelSharp
|
|
|
List<COTSSegment> boarderSegs;
|
|
|
var allFields = m_pSmplMsrResultFileMgr.GetSmplMsrResultFile().GetFieldData();
|
|
|
double pixelSize = 0;
|
|
|
- this.GetPixelSize(pixelSize);
|
|
|
+ this.GetPixelSize(ref pixelSize);
|
|
|
var FldMgr = new CFieldMgr();
|
|
|
FldMgr.SetSEMDataMsr(this.GetSample().GetSEMDataMsr());
|
|
|
|
|
|
@@ -1734,6 +1734,108 @@ namespace OTSModelSharp
|
|
|
// ok, return TRUE
|
|
|
return true;
|
|
|
}
|
|
|
+ bool GetXRayByFeatures(List<COTSParticle> a_listParticles, int a_nXRayAQTime, bool a_bElementInfo /*= FALSE*/)
|
|
|
+ {
|
|
|
+ // get EDS controller
|
|
|
+ pEDSController = GetEDSControl();
|
|
|
+ ASSERT(pEDSController);
|
|
|
+ if (!pEDSController)
|
|
|
+ {
|
|
|
+ LogErrorTrace(__FILE__, __LINE__, _T("GetXRayByFeatures: failed to get EDS controller."));
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ // get out if particles list is empty
|
|
|
+ if (a_listParticles.size() == 0)
|
|
|
+ {
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
+ // init EDS controller
|
|
|
+ if (!pEDSController->Init())
|
|
|
+ {
|
|
|
+ LogErrorTrace(__FILE__, __LINE__, _T("GetXRayByFeatures: failed to inti EDS (%s)."), pEDSController->GetName());
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+
|
|
|
+ // set get quantify info flag
|
|
|
+ pEDSController->SetQuantification(a_bElementInfo);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ int nSize = (int)a_listParticles.size();
|
|
|
+
|
|
|
+
|
|
|
+ if (nSize > 512)
|
|
|
+ {
|
|
|
+ m_pMsrThread->SendLogMessageToMeasureApp(_T("Too many feature Xray! Divide into multi times!"), PostLogLevel::error);
|
|
|
+
|
|
|
+ }
|
|
|
+ int nTimes = nSize / 512;
|
|
|
+ int nLast = nSize % 512;
|
|
|
+ if (nLast != 0)
|
|
|
+ {
|
|
|
+ nTimes += 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ COTSParticleList listPosXRayTemp;
|
|
|
+
|
|
|
+ for (int i = 0; i < nTimes; i++)
|
|
|
+ {
|
|
|
+ listPosXRayTemp.clear();
|
|
|
+ for (int m = 0; m < 512; m++)
|
|
|
+ {
|
|
|
+ if (i * 512 + m < nSize)
|
|
|
+ {
|
|
|
+ listPosXRayTemp.push_back(a_listParticles[i * 512 + m]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // get the features list of the particles
|
|
|
+ CPosXraysList listPosXRay;
|
|
|
+ std::vector<std::vector<BrukerSegment>> listBrukerFeatures;//covert these particles into brukerfeatures.
|
|
|
+ for (auto pPart : listPosXRayTemp)
|
|
|
+ {
|
|
|
+ if (pPart->GetXrayInfo() == nullptr)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ auto pFeature = pPart->GetFeature();
|
|
|
+ COTSSegmentsList listSegment = pFeature->GetSegmentsList();
|
|
|
+
|
|
|
+ std::vector<BrukerSegment> listBrukSegment;
|
|
|
+ for (auto Segment : listSegment)
|
|
|
+ {
|
|
|
+ BrukerSegment BrukSeg;
|
|
|
+ BrukSeg.XCount = Segment->GetLength();
|
|
|
+ BrukSeg.Y = Segment->GetHeight();
|
|
|
+ BrukSeg.XStart = Segment->GetStart();
|
|
|
+ listBrukSegment.push_back(BrukSeg);
|
|
|
+ }
|
|
|
+
|
|
|
+ listBrukerFeatures.push_back(listBrukSegment);
|
|
|
+ listPosXRay.push_back(pPart->GetXrayInfo());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (listPosXRay.size() > 0)
|
|
|
+ {
|
|
|
+ if (!pEDSController->GetXRayByFeatures(listPosXRay, listBrukerFeatures, a_nXRayAQTime))
|
|
|
+ {
|
|
|
+ LogErrorTrace(__FILE__, __LINE__, _T("GetXRayByFeatures: failed to get xray by features."));
|
|
|
+ return FALSE;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return TRUE;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
}
|