123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using static OTSDataType.otsdataconst;
- using OTSModelSharp;
- using System.Xml;
- using OTSModelSharp.ResourceManage;
- using static OTSModelSharp.ResourceManage.ResourceID;
- using OTSMeasureApp;
- using OTSMeasureApp._0_OTSModel.OTSDataType;
- namespace OTSDataType
- {
- public class COTSSample : ISlo
- {
- const string NOT_APPLIED = "N/A";
- private string m_strName;
- private string m_strHoleName;
- private bool m_bParamLock;
-
- private bool m_bSwitch;
-
- private CSampleParam m_poMsrParams;
- private CDomain m_poMsrArea;
- private CSEMDataMsr m_poSEMDataMsr;
- private CMsrSampleStatus m_Status;
- private CMsrResultItems m_poMsrResults;
- private MEMBRANE_TYPE m_membraneType;
- private List<COTSField> m_listFieldData;
- public CFieldPositionHelper pFieldMgr=new CFieldPositionHelper();
- public COTSSample()
- {
- // initialization
- Init();
- }
- void Init()
- {
- m_strName = "";
- m_strHoleName = "";
- m_bParamLock = false;
- m_bSwitch = true;
-
- m_poMsrParams = new CSampleParam();
- m_poMsrArea = new CDomain();
- m_poSEMDataMsr = new CSEMDataMsr();
- m_Status = new CMsrSampleStatus();
- m_poMsrResults = new CMsrResultItems();
- m_membraneType = MEMBRANE_TYPE.Abrasive;
- m_listFieldData = new List<COTSField>();
-
- }
-
-
- public CDomain GetMsrDomain() { return m_poMsrArea; }
-
-
- // calculate scan field size
- public void CalculateScanFieldSize(double a_dPixelSize,ref int scanFieldWidth,ref int scanFieldHeight)
- {
-
- // get image size
- OTS_IMAGE_RESULOTION_OPTIONS nImageSizeId = m_poMsrParams.GetImageScanParam().GetImageResulotion();
- long nResulotionId = RESOLUTION_ID_FIRST_TIE + (long)nImageSizeId;
- int nImagewidth = RESOLUTION_VALUE[nResulotionId].Width;
- int nHeight = RESOLUTION_VALUE[nResulotionId].Height;
- // calculate scan field size
- scanFieldWidth = (int)((a_dPixelSize * (double)nImagewidth) + 0.5);
- scanFieldHeight= (int)((a_dPixelSize * (double)nHeight) + 0.5);
-
- }
- public bool GetBSESize(out int a_nWidth, out int a_nHeight)
- {
- // scan parameters
- CSampleParam pMsrParam = GetMsrParams();
- COTSImgScanPrm pImgScanParam = pMsrParam.GetImageScanParam();
- // get image size
- OTS_IMAGE_RESULOTION_OPTIONS nImageSizeId = pImgScanParam.GetImageResulotion();
- int nResulotionId = RESOLUTION_ID_FIRST_TIE + (int)nImageSizeId;
- Size sizePixelImage = RESOLUTION_VALUE[nResulotionId];
- // get scan field size
- a_nWidth = sizePixelImage.Width;
- a_nHeight = sizePixelImage.Height;
- return true;
- }
- // name
- public string GetName() { return m_strName; }
- public void SetName(string a_strName) { m_strName = a_strName; }
- // sample hole
- public string GetSampleHoleName() { return m_strHoleName; }
- public void SetSampleHoleName(string a_strHoleName) { m_strHoleName = a_strHoleName; }
- // param modify lock
- public bool GetParamLock() { return m_bParamLock; }
- public void SetParamLock(bool a_bParamLock) { m_bParamLock = a_bParamLock; }
- // switch
- public bool GetSwitch() { return m_bSwitch; }
- public void SetSwitch(bool a_bSwitch) { m_bSwitch = a_bSwitch; }
- // measurement parameter
- public CSampleParam GetMsrParams() { return m_poMsrParams; }
- public void SetMsrParams(CSampleParam a_poMsrParams)
- {
- m_poMsrParams = a_poMsrParams;
- }
- // measurement area
- public void SetMsrDomain(CDomain a_poMsrArea)
- {
- m_poMsrArea = a_poMsrArea;
- }
- // SEM data (measurement)
- public CSEMDataMsr GetSEMDataMsr() { return m_poSEMDataMsr; }
- public void SetSEMDataMsr(CSEMDataMsr a_poSEMDataMsr)
- {
- m_poSEMDataMsr = a_poSEMDataMsr;
- }
- // measure status
- public CMsrSampleStatus GetMsrStatus() { return m_Status; }
- public void SetMsrStatus(CMsrSampleStatus a_poMsrStatus)
- {
- m_Status = a_poMsrStatus;
- }
- // fields
- public List<COTSField> GetFieldsData() { return m_listFieldData; }
- public void SetFieldsData(List<COTSField> a_listFieldData)
- {
- m_listFieldData = a_listFieldData;
- for (int i = 0; i < m_listFieldData.Count; i++)
- {
- m_listFieldData[i].SetId(i);
- }
- var mySemdata = GetSEMDataMsr();
- mySemdata.SetTotalFields(m_listFieldData.Count);
- }
-
- public void AddNewField(PointF centerPoint ,int measureSequence)
- {
- var pixelsize = CalculatePixelSize();
- var newfld = new COTSField(centerPoint, pixelsize);
- newfld.SetMeasureSequence(measureSequence);
- int nNewFieldId;
- nNewFieldId =GetIdForANewField();
- newfld.SetId(nNewFieldId);
-
-
- m_listFieldData.Add(newfld);
- var mySemdata = GetSEMDataMsr();
- mySemdata.SetTotalFields(m_listFieldData.Count);
-
- }
- public void AddNewField(COTSField newfld)
- {
-
- int nNewFieldId;
- nNewFieldId = GetIdForANewField();
- newfld.SetId(nNewFieldId);
- m_listFieldData.Add(newfld);
- var mySemdata = GetSEMDataMsr();
- mySemdata.SetTotalFields(m_listFieldData.Count);
- }
- public void ClearFields()
- {
- m_listFieldData.Clear();
- }
- public int GetIdForANewField()
- {
- List<COTSField> listFieldData = GetFieldsData();
- // new field id
- int nNewFieldId = listFieldData.Count;
- do
- {
- bool iffound = false;
- COTSField cOTSFieldData;
- for (int i = 0; i < listFieldData.Count; i++)
- {
- cOTSFieldData = listFieldData[i];
- if (cOTSFieldData.GetId() == nNewFieldId)
- {
- iffound = true;
- }
- }
- if (iffound == true)
- {
- ++nNewFieldId;
- }
- else
- {
- break;
- }
- } while (true);
- return nNewFieldId;
- }
- // measure results
- public CMsrResultItems GetMsrResults() { return m_poMsrResults; }
- public void SetMsrResults(CMsrResultItems a_poMsrResults)
- {
- m_poMsrResults = a_poMsrResults;
- }
- // has measure results test
- public bool HasMeasureResult()
- {
- // result items is not empty
- bool bHasResult = (m_poMsrResults.GetResultItems().Count != 0);
- return bHasResult;
- }
- //public MEMBRANE_TYPE GetMembraneType() { return m_membraneType; }
- //public void SetMembraneType(MEMBRANE_TYPE val) { m_membraneType = val; }
- public bool IsThisPointInMeasureArea(Point p)
- {
- return pFieldMgr.IsThisPointInMeasureArea(p);
- }
-
- public double CalculatePixelSize()
- {
- // pixel size
- double dPixelSize = 0.0;
- // make sure SEM is valid
- if (m_poSEMDataMsr != new CSEMDataMsr())
- {
- // get scan field size
- int nScanFieldSize = m_poSEMDataMsr.GetScanFieldSize();
- // get image size
- OTS_IMAGE_RESULOTION_OPTIONS nImageSizeId = m_poMsrParams.GetImageScanParam().GetImageResulotion();
- long nResulotionId = RESOLUTION_ID_FIRST_TIE + (long)nImageSizeId;
- int nImageSize = RESOLUTION_VALUE[nResulotionId].Width;
- // calculate pixel size
- dPixelSize = (double)nScanFieldSize / (double)nImageSize;
- }
- // return pixel size
- return dPixelSize;
- }
-
-
- // calculate field area
- public double CalculateAFieldArea()
- {
- // pixel size
- double dAFieldArea = 0.0;
- // make sure SEM is valid
- if (m_poSEMDataMsr != new CSEMDataMsr())
- {
- // get image size
- OTS_IMAGE_RESULOTION_OPTIONS nImageSizeId = m_poMsrParams.GetImageScanParam().GetImageResulotion();
- long nResulotionId = RESOLUTION_ID_FIRST_TIE + (long)nImageSizeId;
- int nImageSize = RESOLUTION_VALUE[nResulotionId].Width;
- int nHeight = RESOLUTION_VALUE[nResulotionId].Height;
- // pixel size (micros)
- double dPixelSize = CalculatePixelSize();
-
- // calculate pixel size
- dAFieldArea = (double)nImageSize * nHeight * dPixelSize * dPixelSize * 0.000001;// mm^2
- }
- // return pixel size
- return dAFieldArea;
- }
- public bool InitFieldPosData( out List<Point> lisFieldPos, out Size iSzie)
- {
- lisFieldPos = new List<Point>();
- iSzie = new Size();
-
- CDomain pMsrArea = this.GetMsrDomain();
- COTSImgScanPrm pImgScanParam = this.GetMsrParams().GetImageScanParam();
- COTSImageProcParam pImgProcParam = this.GetMsrParams().GetImageProcessParam();
- CSEMDataMsr pSEMDataMsr = this.GetSEMDataMsr();
- List<PointF> listPoint = new List<PointF>();
- listPoint.Clear();
- //calculate all the field position point in OTS coordination.
- if (!pFieldMgr.Init(pMsrArea, pImgScanParam, pImgProcParam.GetOverlapParam(), pSEMDataMsr, listPoint))
- {
- return false;
- }
- lisFieldPos = pFieldMgr.GetFieldCentrePoints();
- var oValue = new COTSRect();
- if (!pFieldMgr.GetOTSRectByIndex(0, ref oValue))
- {
- return false;
- }
- iSzie = new Size((int)oValue.GetWidth(), (int)oValue.GetHeight());
- return true;
- }
- public override void Serialize(bool isStoring, XmlDocument classDoc, XmlNode rootNode)
- {
- xString xstrSampleName = new xString();
- xString xstrHoleName = new xString();
- xBool xParamLock = new xBool();
- xBool xSwitch = new xBool();
-
- Collection<COTSField> fielddata = new Collection<COTSField>();
- Slo slo = new Slo();
- slo.Register("SampleName", xstrSampleName);
- slo.Register("HoleName", xstrHoleName);
- slo.Register("ParamLock", xParamLock);
- slo.Register("Switch", xSwitch);
-
- slo.Register("MsrArea", m_poMsrArea);
- slo.Register("MsrParams", m_poMsrParams);
- slo.Register("SEMDataMsr", m_poSEMDataMsr);
- slo.Register("AllFields", fielddata);
- if (isStoring)
- {
- xstrSampleName.AssignValue(m_strName);
- xstrHoleName.AssignValue(m_strHoleName);
- xParamLock.AssignValue(m_bParamLock);
- xSwitch.AssignValue(m_bSwitch);
- foreach (var f in m_listFieldData)
- {
- fielddata.addItem(f);
- }
-
- slo.Serialize(true, classDoc, rootNode);
- }
- else
- {
- slo.Serialize(false, classDoc, rootNode);
- m_strName = xstrSampleName.value();
- m_strHoleName = xstrHoleName.value();
- m_bParamLock = xParamLock.value();
- m_bSwitch = xSwitch.value();
- int i = 0;
- foreach (var f in fielddata.m_vCollection)
- {
- var fld = (COTSField)f;
- int w, h;
- this.GetBSESize(out w,out h);
- fld.ImgWidth = w;fld.ImgHeight = h;
- fld.SetPixelSize(CalculatePixelSize());
- fld.SetId(i);
- i++;
- m_listFieldData.Add(fld);
- }
- }
- }
- }
- }
|