COTSSample.cs 49 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using static OTSDataType.otsdataconst;
  8. using static OTSDataType.LanguageID;
  9. namespace OTSDataType
  10. {
  11. //every possible display item in the sample property grid should be a member in this enum.
  12. public enum OTS_SAMPLE_PROP_GRID_ITEMS
  13. {// we prepare 10 items for every group.so the first group starts from 0,the second starts from 10,and so on.
  14. //the item's value is contrast to the position exactly when it's displayed in the property grid.and the caption string is read from the resource file by the value too.
  15. INVALID = -1,
  16. MIN = 0,
  17. GENERAL_GRP_MIN = 0,
  18. SAMPLE_NAME = 0,
  19. SAMPLE_HOLE_NAME = 1,
  20. SWITCH = 2,
  21. MEASURE_PARAM_FILE_NAME = 3,
  22. STD_FILE_NAME = 4,
  23. MEMBRANE_TYPE = 5,
  24. GENERAL_GRP_MAX = 5,
  25. IMAGE_GRP_MIN = 10,
  26. START_MODE = 10,
  27. STOP_MODE = 11,
  28. STOP_PARAM_PARTICLE = 12,
  29. STOP_PARAM_FIELD = 13,
  30. STOP_PARAM_TIME = 14,
  31. SCAN_SPEED = 15,
  32. IMAGE_RESOLUTION = 16,
  33. IMAGE_GRP_MAX = 16,
  34. IMAGE_PROC_MIN = 20,
  35. PARTICLE_AREA_MIN = 20,
  36. PARTICLE_AREA_MAX = 21,
  37. BG_GRAY_MIN = 22,
  38. BG_GRAY_MAX = 23,
  39. PARTICLE_GRAY_MIN = 24,
  40. PARTICLE_GRAY_MAX = 25,
  41. BGREMOVE_TYPE = 26,
  42. AUTOBGREMOVE_TYPE = 27,//Auto BGremove still has three types to choose
  43. IMAGE_PROC_MAX = 27,
  44. XRAY_MIN = 30,
  45. SEARCH_RESOLUTION = 30,
  46. LOW_COUNTS = 31,
  47. ANALYSIS_RESOLUTION = 32,
  48. SCAN_MODE = 33,
  49. ANALYSIS_COUNTS = 34,
  50. XRAY_STEP = 35,
  51. XRAY_QUANTIFY_MINSIZE = 36,
  52. XRAY_FASTTIME = 37,
  53. XRAY_MAX = 37,
  54. SEM_DATA_MIN = 40,
  55. MAGNIFICATION = 40,
  56. PIXEL_SIZE = 41,
  57. WORKING_DISTANCE = 42,
  58. TOTAL_FIELDS = 43,
  59. TOTAL_TO_MEASURE_AREA = 44,
  60. SEM_DATA_MAX = 44,
  61. MEASURE_STATAU_MIN = 50,
  62. MEASURE_STATAU = 50,
  63. START_TIME = 51,
  64. USED_TIME = 52,
  65. FINISH_TIME = 53,
  66. COMPLETED_FIELDS = 54,
  67. MEASURE_STATAU_MAX = 55,
  68. MEASURE_RESULT_MIM = 60,
  69. RATIO = 60,
  70. TOTAL_AREA = 61,
  71. TOTAL_PARTICLE = 62,
  72. TOTAL_PARTICLE_AREA = 63,
  73. MEASURE_RESULT_MAX = 63,
  74. FIELD_STOP_TYPEMIN = 400,
  75. FIELD_STOP_TYPE = 400,
  76. FIELDSTOP_AREAPERCENTAGE = 401,
  77. FIELDSTOP_LARGEPARTICLES = 404,
  78. FIELDSTOP_SMALLPARTICLES = 405,
  79. FIELDSTOP_LARGEPARTICLESPERCENTAGE = 406,
  80. FIELDSTOP_SMALLPARTICLESPERCENTAGE = 407,
  81. FIELD_STOP_TYPEMAX = 407,
  82. MAX = 407
  83. }
  84. public enum OTS_SAMPLE_PROP_GRID_ITEM_GROUPS
  85. {
  86. INVALID = -1,
  87. MIN = 0,
  88. GENERAL = 0,
  89. IMAGESCAN = 1,
  90. IMAGE_PROCESS = 2,
  91. XRAY = 3,
  92. FIELDPROCESS = 4,
  93. SEM = 5,
  94. MEASURE_STATUS = 6,
  95. MEASURE_RESULTS = 7,
  96. MAX = 7
  97. }
  98. public enum OTS_ITEM_TYPES
  99. {
  100. INVALID = -1,
  101. BOOLVALUE = 0,
  102. INT = 1,
  103. DOUBLEVALUE = 2,
  104. STRING = 3,
  105. COMBO = 4,
  106. TIME = 5,
  107. TIME_SPAN = 6,
  108. FILE_LIST = 7
  109. }
  110. public class COTSSample
  111. {
  112. const string NOT_APPLIED = "N/A";
  113. private string m_strName;
  114. private string m_strHoleName;
  115. private bool m_bParamLock;
  116. private bool m_bSwitch;
  117. private CMsrParams m_poMsrParams;
  118. private CDomain m_poMsrArea;
  119. private CSEMDataMsr m_poSEMDataMsr;
  120. private CMsrSampleStatus m_poMsrStatus;
  121. private CMsrResults m_poMsrResults;
  122. private MEMBRANE_TYPE m_membraneType;
  123. private List<COTSFieldData> m_listFieldData;
  124. public COTSSample()
  125. {
  126. // initialization
  127. Init();
  128. }
  129. void Init()
  130. {
  131. m_strName = "";
  132. m_strHoleName = "";
  133. m_bParamLock = false;
  134. m_bSwitch = true;
  135. m_poMsrParams = new CMsrParams();
  136. m_poMsrArea = new CDomain();
  137. m_poSEMDataMsr = new CSEMDataMsr();
  138. m_poMsrStatus = new CMsrSampleStatus();
  139. m_poMsrResults = new CMsrResults();
  140. m_membraneType = MEMBRANE_TYPE.Abrasive;
  141. }
  142. public bool SetPropboolData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, bool a_bValue)
  143. {
  144. switch (a_nId)
  145. {
  146. case OTS_SAMPLE_PROP_GRID_ITEMS.SWITCH:
  147. {
  148. m_bSwitch = a_bValue;
  149. }
  150. break;
  151. default:
  152. {
  153. // something wrong, return false
  154. return false;
  155. }
  156. }
  157. // failed, return false
  158. return true;
  159. }
  160. public CDomain GetMsrArea() { return null; }
  161. public bool SetPropdoubleData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, double a_dValue)
  162. {
  163. switch (a_nId)
  164. {
  165. case OTS_SAMPLE_PROP_GRID_ITEMS.MAGNIFICATION:
  166. {
  167. // value validation
  168. if (a_dValue < MAGNIFICATION_MIN || a_dValue > MAGNIFICATION_MAX)
  169. {
  170. return false;
  171. }
  172. m_poSEMDataMsr.SetMagnification(a_dValue);
  173. }
  174. break;
  175. case OTS_SAMPLE_PROP_GRID_ITEMS.PIXEL_SIZE:
  176. {
  177. if (a_dValue < PIXELSIZE_MIN || a_dValue > PIXELSIZE_MAX)
  178. {
  179. return false;
  180. }
  181. //m_poMsrParams.GetImageScanParam().SetImagePixelSize((OTS_FIVE_TIES_OPTIONS)(int)a_dValue);
  182. int nScanFieldSize = CalculateScanFieldSize(a_dValue);
  183. m_poSEMDataMsr.SetScanFieldSize(nScanFieldSize);
  184. }
  185. break;
  186. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_AREA_MIN:
  187. {
  188. if (PARTICLE_AREA_MIN > a_dValue || a_dValue > PARTICLE_AREA_MAX)
  189. {
  190. return false;
  191. }
  192. CDoubleRange oIncArea = m_poMsrParams.GetImageProcessParam().GetIncAreaRange();
  193. oIncArea.SetStart(a_dValue);
  194. m_poMsrParams.GetImageProcessParam().SetIncAreaRange(oIncArea);
  195. }
  196. break;
  197. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_AREA_MAX:
  198. {
  199. if (PARTICLE_AREA_MIN > a_dValue || a_dValue > PARTICLE_AREA_MAX)
  200. {
  201. return false;
  202. }
  203. CDoubleRange oIncArea = m_poMsrParams.GetImageProcessParam().GetIncAreaRange();
  204. oIncArea.SetEnd(a_dValue);
  205. m_poMsrParams.GetImageProcessParam().SetIncAreaRange(oIncArea);
  206. }
  207. break;
  208. // read only property, tread as default.
  209. case OTS_SAMPLE_PROP_GRID_ITEMS.WORKING_DISTANCE:
  210. case OTS_SAMPLE_PROP_GRID_ITEMS.RATIO:
  211. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_TO_MEASURE_AREA:
  212. default:
  213. {
  214. // something wrong, return false
  215. return false;
  216. }
  217. //break;
  218. }
  219. // ok, return true
  220. return true;
  221. }
  222. // duplication
  223. void Duplicate(COTSSample a_oSource)
  224. {
  225. // initialization
  226. Init();
  227. // copy data over
  228. m_strName = a_oSource.m_strName;
  229. m_strHoleName = a_oSource.m_strHoleName;
  230. m_bParamLock = a_oSource.m_bParamLock;
  231. m_bSwitch = a_oSource.m_bSwitch;
  232. m_poMsrParams = new CMsrParams(a_oSource.m_poMsrParams);
  233. m_poMsrArea = new CDomain(a_oSource.m_poMsrArea);
  234. m_poSEMDataMsr = new CSEMDataMsr(a_oSource.m_poSEMDataMsr);
  235. m_poMsrStatus = new CMsrSampleStatus(a_oSource.m_poMsrStatus);
  236. m_poMsrResults = new CMsrResults(a_oSource.m_poMsrResults);
  237. m_membraneType = a_oSource.m_membraneType;
  238. }
  239. // calculate scan field size
  240. public int CalculateScanFieldSize(double a_dPixelSize)
  241. {
  242. // scan field size
  243. int nScanFiledSize = 0;
  244. // make sure SEM is valid
  245. if (!m_poSEMDataMsr.Equals(new CSEMDataMsr()))
  246. {
  247. // get image size
  248. OTS_FIVE_TIES_OPTIONS nImageSizeId = m_poMsrParams.GetImageScanParam().GetImagePixelSize();
  249. long nResulotionId = RESOLUTION_ID_FIRST_TIE + (long)nImageSizeId;
  250. int nImageSize = RESOLUTION_VALUE[nResulotionId].Width;
  251. // calculate scan field size
  252. nScanFiledSize = (int)((a_dPixelSize * (double)nImageSize) + 0.5);
  253. }
  254. // return scan field size
  255. return nScanFiledSize;
  256. }
  257. public bool GetBSESize(out int a_nWidth, out int a_nHeight)
  258. {
  259. // scan parameters
  260. CMsrParams pMsrParam = GetMsrParams();
  261. COTSImgScanPrm pImgScanParam = pMsrParam.GetImageScanParam();
  262. // get image size
  263. OTS_FIVE_TIES_OPTIONS nImageSizeId = pImgScanParam.GetImagePixelSize();
  264. int nResulotionId = RESOLUTION_ID_FIRST_TIE + (int)nImageSizeId;
  265. Size sizePixelImage = RESOLUTION_VALUE[nResulotionId];
  266. // get scan field size
  267. a_nWidth = sizePixelImage.Width;
  268. a_nHeight = sizePixelImage.Height;
  269. return true;
  270. }
  271. // name
  272. public string GetName() { return m_strName; }
  273. public void SetName(string a_strName) { m_strName = a_strName; }
  274. // sample hole
  275. public string GetSampleHoleName() { return m_strHoleName; }
  276. public void SetSampleHoleName(string a_strHoleName) { m_strHoleName = a_strHoleName; }
  277. // param modify lock
  278. public bool GetParamLock() { return m_bParamLock; }
  279. public void SetParamLock(bool a_bParamLock) { m_bParamLock = a_bParamLock; }
  280. // switch
  281. public bool GetSwitch() { return m_bSwitch; }
  282. public void SetSwitch(bool a_bSwitch) { m_bSwitch = a_bSwitch; }
  283. // measurement parameter
  284. public CMsrParams GetMsrParams() { return m_poMsrParams; }
  285. public void SetMsrParams(CMsrParams a_poMsrParams)
  286. {
  287. m_poMsrParams = a_poMsrParams;
  288. }
  289. // measurement area
  290. public void SetMsrArea(CDomain a_poMsrArea)
  291. {
  292. m_poMsrArea = a_poMsrArea;
  293. }
  294. // SEM data (measurement)
  295. public CSEMDataMsr GetSEMDataMsr() { return m_poSEMDataMsr; }
  296. public void SetSEMDataMsr(CSEMDataMsr a_poSEMDataMsr)
  297. {
  298. m_poSEMDataMsr = a_poSEMDataMsr;
  299. }
  300. // measure status
  301. public CMsrSampleStatus GetMsrStatus() { return m_poMsrStatus; }
  302. public void SetMsrStatus(CMsrSampleStatus a_poMsrStatus)
  303. {
  304. m_poMsrStatus = a_poMsrStatus;
  305. }
  306. // fields
  307. public List<COTSFieldData> GetFieldsData() { return m_listFieldData; }
  308. public void SetFieldsData(List<COTSFieldData> a_listFieldData)
  309. {
  310. m_listFieldData = a_listFieldData;
  311. }
  312. // measure results
  313. public CMsrResults GetMsrResults() { return m_poMsrResults; }
  314. public void SetMsrResults(CMsrResults a_poMsrResults)
  315. {
  316. m_poMsrResults = a_poMsrResults;
  317. }
  318. // has measure results test
  319. public bool HasMeasureResult()
  320. {
  321. // result items is not empty
  322. bool bHasResult = !(m_poMsrResults.GetResultItems().Count==0);
  323. return bHasResult;
  324. }
  325. public MEMBRANE_TYPE GetMembraneType() { return m_membraneType; }
  326. public void SetMembraneType(MEMBRANE_TYPE val) { m_membraneType = val; }
  327. // int data (16)
  328. public bool GetPropIntData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId,out int a_nValue)
  329. {
  330. switch (a_nId)
  331. {
  332. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_PARTICLE:
  333. {
  334. a_nValue = m_poMsrParams.GetImageScanParam().GetStopParamParticles();
  335. }
  336. break;
  337. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_FIELD:
  338. {
  339. a_nValue = m_poMsrParams.GetImageScanParam().GetStopParamFields();
  340. }
  341. break;
  342. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_TIME:
  343. {
  344. a_nValue = m_poMsrParams.GetImageScanParam().GetStopParamMeasTime();
  345. }
  346. break;
  347. case OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MIN:
  348. {
  349. a_nValue = m_poMsrParams.GetImageProcessParam().GetBGGray().GetStart();
  350. }
  351. break;
  352. case OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MAX:
  353. {
  354. a_nValue = m_poMsrParams.GetImageProcessParam().GetBGGray().GetEnd();
  355. }
  356. break;
  357. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MIN:
  358. {
  359. a_nValue = m_poMsrParams.GetImageProcessParam().GetParticleGray().GetStart();
  360. }
  361. break;
  362. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MAX:
  363. {
  364. a_nValue = m_poMsrParams.GetImageProcessParam().GetParticleGray().GetEnd();
  365. }
  366. break;
  367. case OTS_SAMPLE_PROP_GRID_ITEMS.LOW_COUNTS:
  368. {
  369. a_nValue = m_poMsrParams.GetXRayParam().GetXRaySearchCount();
  370. }
  371. break;
  372. case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_COUNTS:
  373. {
  374. a_nValue = m_poMsrParams.GetXRayParam().GetAnalyExpCount();
  375. }
  376. break;
  377. case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_RESOLUTION:
  378. {
  379. a_nValue = (int)m_poMsrParams.GetXRayParam().GetMidAnalyAQTime();
  380. }
  381. break;
  382. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_FIELDS:
  383. {
  384. a_nValue = m_poSEMDataMsr.GetTotalFields();
  385. }
  386. break;
  387. case OTS_SAMPLE_PROP_GRID_ITEMS.COMPLETED_FIELDS:
  388. {
  389. a_nValue = m_poMsrStatus.GetCompletedFields();
  390. }
  391. break;
  392. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_AREA:
  393. {
  394. a_nValue =(int) m_poMsrResults.GetMeasuredArea();
  395. }
  396. break;
  397. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_PARTICLE:
  398. {
  399. a_nValue = (int)m_poMsrResults.GetTotalParticleNumber();
  400. }
  401. break;
  402. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_PARTICLE_AREA:
  403. {
  404. a_nValue =(int) m_poMsrResults.GetTotalParticleArea();
  405. }
  406. break;
  407. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_AREAPERCENTAGE:
  408. {
  409. a_nValue = m_poMsrParams.GetImageScanParam().GetFieldAreaPercentage();
  410. }
  411. break;
  412. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_LARGEPARTICLES:
  413. {
  414. a_nValue = m_poMsrParams.GetImageScanParam().GetFieldLargeParticleNum();
  415. }
  416. break;
  417. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_LARGEPARTICLESPERCENTAGE:
  418. {
  419. a_nValue = m_poMsrParams.GetImageScanParam().GetFieldLargeParticlesPercentage();
  420. }
  421. break;
  422. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_SMALLPARTICLES:
  423. {
  424. a_nValue = m_poMsrParams.GetImageScanParam().GetFieldSmallParticleNum();
  425. }
  426. break;
  427. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_SMALLPARTICLESPERCENTAGE:
  428. {
  429. a_nValue = m_poMsrParams.GetImageScanParam().GetFieldSmallParticlesPercentage();
  430. }
  431. break;
  432. case OTS_SAMPLE_PROP_GRID_ITEMS.XRAY_QUANTIFY_MINSIZE:
  433. {
  434. a_nValue = m_poMsrParams.GetXRayParam().GetQuantifyMinSize();
  435. }
  436. break;
  437. case OTS_SAMPLE_PROP_GRID_ITEMS.XRAY_FASTTIME:
  438. {
  439. a_nValue = m_poMsrParams.GetXRayParam().GetFastXrayTime();
  440. }
  441. break;
  442. default:
  443. {
  444. // something wrong, return false
  445. a_nValue = -1;
  446. return false;
  447. }
  448. }
  449. // ok, return true
  450. return true;
  451. }
  452. public bool SetPropIntData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, int a_nValue)
  453. {
  454. switch (a_nId)
  455. {
  456. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_PARTICLE:
  457. {
  458. // value validation
  459. if (STOP_PARAM_PARTICLE_MIN >= a_nValue || a_nValue > STOP_PARAM_PARTICLE_MAX)
  460. {
  461. return false;
  462. }
  463. if (m_poMsrParams.GetImageScanParam().GetStopParamParticles() != a_nValue)
  464. {
  465. m_poMsrParams.GetImageScanParam().SetStopParamParticles(a_nValue);
  466. m_poMsrStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.UNMEASURED);
  467. }
  468. }
  469. break;
  470. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_FIELD:
  471. {
  472. if (STOP_PARAM_FIELD_MIN >= a_nValue || a_nValue > STOP_PARAM_FIELD_MAX)
  473. {
  474. return false;
  475. }
  476. if (m_poMsrParams.GetImageScanParam().GetStopParamFields() != a_nValue)
  477. {
  478. m_poMsrParams.GetImageScanParam().SetStopParamFields(a_nValue);
  479. m_poMsrStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.UNMEASURED);
  480. }
  481. }
  482. break;
  483. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_PARAM_TIME:
  484. {
  485. if (STOP_PARAM_MSR_TINE_MIN >= a_nValue || a_nValue > STOP_PARAM_MSR_TINE_MAX)
  486. {
  487. return false;
  488. }
  489. if (m_poMsrParams.GetImageScanParam().GetStopParamMeasTime() != a_nValue)
  490. {
  491. m_poMsrParams.GetImageScanParam().SetStopParamMeasTime(a_nValue);
  492. m_poMsrStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.UNMEASURED);
  493. }
  494. }
  495. break;
  496. case OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MIN:
  497. {
  498. if (GRAY_LEVEL_MIN > a_nValue || a_nValue > GRAY_LEVEL_MAX)
  499. {
  500. return false;
  501. }
  502. if (m_poMsrParams == null)
  503. {
  504. return false;
  505. }
  506. COTSImgProcPrm pImageProcessParam = m_poMsrParams.GetImageProcessParam();
  507. if (pImageProcessParam == null)
  508. {
  509. return false;
  510. }
  511. CIntRange oBGGray = m_poMsrParams.GetImageProcessParam().GetBGGray();
  512. oBGGray.SetStart(a_nValue);
  513. m_poMsrParams.GetImageProcessParam().SetBGGray(oBGGray);
  514. }
  515. break;
  516. case OTS_SAMPLE_PROP_GRID_ITEMS.BG_GRAY_MAX:
  517. {
  518. if (GRAY_LEVEL_MIN > a_nValue || a_nValue > GRAY_LEVEL_MAX)
  519. {
  520. return false;
  521. }
  522. CIntRange oBGGray = m_poMsrParams.GetImageProcessParam().GetBGGray();
  523. oBGGray.SetEnd(a_nValue);
  524. m_poMsrParams.GetImageProcessParam().SetBGGray(oBGGray);
  525. }
  526. break;
  527. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MIN:
  528. {
  529. if (GRAY_LEVEL_MIN > a_nValue || a_nValue > GRAY_LEVEL_MAX)
  530. {
  531. return false;
  532. }
  533. CIntRange oParticleGray = m_poMsrParams.GetImageProcessParam().GetParticleGray();
  534. oParticleGray.SetStart(a_nValue);
  535. m_poMsrParams.GetImageProcessParam().SetParticleGray(oParticleGray);
  536. }
  537. break;
  538. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_GRAY_MAX:
  539. {
  540. if (GRAY_LEVEL_MIN > a_nValue || a_nValue > GRAY_LEVEL_MAX)
  541. {
  542. return false;
  543. }
  544. CIntRange oParticleGray = m_poMsrParams.GetImageProcessParam().GetParticleGray();
  545. oParticleGray.SetEnd(a_nValue);
  546. m_poMsrParams.GetImageProcessParam().SetParticleGray(oParticleGray);
  547. }
  548. break;
  549. case OTS_SAMPLE_PROP_GRID_ITEMS.LOW_COUNTS:
  550. {
  551. if (COUNTS_MIN > a_nValue)
  552. {
  553. return false;
  554. }
  555. m_poMsrParams.GetXRayParam().SetXRaySearchCount(a_nValue);
  556. }
  557. break;
  558. case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_COUNTS:
  559. {
  560. if (COUNTS_MIN > a_nValue)
  561. {
  562. return false;
  563. }
  564. m_poMsrParams.GetXRayParam().SetAnalyExpCount(a_nValue);
  565. }
  566. break;
  567. case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_RESOLUTION:
  568. {
  569. if (0 >= a_nValue)
  570. {
  571. return false;
  572. }
  573. m_poMsrParams.GetXRayParam().SetMidAnalyAQTime(a_nValue);
  574. }
  575. break;
  576. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_AREAPERCENTAGE:
  577. {
  578. m_poMsrParams.GetImageScanParam().SetFieldAreaPercentage(a_nValue);
  579. }
  580. break;
  581. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_LARGEPARTICLES:
  582. {
  583. m_poMsrParams.GetImageScanParam().SetFieldLargeParticleNum(a_nValue);
  584. }
  585. break;
  586. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_LARGEPARTICLESPERCENTAGE:
  587. {
  588. m_poMsrParams.GetImageScanParam().SetFieldLargeParticlePercentage(a_nValue);
  589. }
  590. break;
  591. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_SMALLPARTICLES:
  592. {
  593. if (0 >= a_nValue)
  594. {
  595. return false;
  596. }
  597. m_poMsrParams.GetImageScanParam().SetFieldSmallParticleNum(a_nValue);
  598. }
  599. break;
  600. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELDSTOP_SMALLPARTICLESPERCENTAGE:
  601. {
  602. if ((0 >= a_nValue) || (100 < a_nValue))
  603. {
  604. return false;
  605. }
  606. m_poMsrParams.GetImageScanParam().SetFieldSmallParticlePercentage(a_nValue);
  607. }
  608. break;
  609. case OTS_SAMPLE_PROP_GRID_ITEMS.XRAY_QUANTIFY_MINSIZE:
  610. {
  611. if (0 >= a_nValue)
  612. {
  613. return false;
  614. }
  615. m_poMsrParams.GetXRayParam().SetQuantifyMinSize(a_nValue);
  616. }
  617. break;
  618. case OTS_SAMPLE_PROP_GRID_ITEMS.XRAY_FASTTIME:
  619. {
  620. if (0 >= a_nValue)
  621. {
  622. return false;
  623. }
  624. m_poMsrParams.GetXRayParam().SetFastXrayTime(a_nValue);
  625. }
  626. break;
  627. // read only properties, treat same as default
  628. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_FIELDS:
  629. case OTS_SAMPLE_PROP_GRID_ITEMS.COMPLETED_FIELDS:
  630. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_AREA:
  631. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_PARTICLE:
  632. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_PARTICLE_AREA:
  633. default:
  634. {
  635. // something wrong, return false
  636. return false;
  637. }
  638. }
  639. // ok, return true
  640. return true;
  641. }
  642. // double data (4)
  643. public bool GetPropdoubleData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId,out double a_dValue)
  644. {
  645. switch (a_nId)
  646. {
  647. case OTS_SAMPLE_PROP_GRID_ITEMS.MAGNIFICATION:
  648. {
  649. a_dValue = m_poSEMDataMsr.GetMagnification();
  650. }
  651. break;
  652. case OTS_SAMPLE_PROP_GRID_ITEMS.PIXEL_SIZE:
  653. {
  654. a_dValue = CalculatePixelSize();
  655. }
  656. break;
  657. case OTS_SAMPLE_PROP_GRID_ITEMS.WORKING_DISTANCE:
  658. {
  659. a_dValue = m_poSEMDataMsr.GetWorkingDistance();
  660. }
  661. break;
  662. case OTS_SAMPLE_PROP_GRID_ITEMS.RATIO:
  663. {
  664. a_dValue = m_poMsrResults.GetRadio();
  665. }
  666. break;
  667. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_AREA_MIN:
  668. {
  669. a_dValue = m_poMsrParams.GetImageProcessParam().GetIncAreaRange().GetStart();
  670. }
  671. break;
  672. case OTS_SAMPLE_PROP_GRID_ITEMS.PARTICLE_AREA_MAX:
  673. {
  674. a_dValue = m_poMsrParams.GetImageProcessParam().GetIncAreaRange().GetEnd();
  675. }
  676. break;
  677. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_TO_MEASURE_AREA:
  678. {
  679. double dFieldArea = 0; // this area should be the field area
  680. dFieldArea = CalculateAFieldArea();
  681. a_dValue = (double)m_poSEMDataMsr.GetTotalFields() * dFieldArea;//
  682. }
  683. break;
  684. default:
  685. {
  686. // something wrong, return false
  687. a_dValue = -1;
  688. return false;
  689. }
  690. }
  691. // ok, return true
  692. return true;
  693. }
  694. // string data (7)
  695. public bool GetPropStringData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId,out string a_strValue)
  696. {
  697. switch (a_nId)
  698. {
  699. case OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_NAME:
  700. {
  701. a_strValue = m_strName;
  702. }
  703. break;
  704. case OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_HOLE_NAME:
  705. {
  706. a_strValue = m_strHoleName;
  707. }
  708. break;
  709. case OTS_SAMPLE_PROP_GRID_ITEMS.MAGNIFICATION:
  710. {
  711. a_strValue = NOT_APPLIED;
  712. }
  713. break;
  714. case OTS_SAMPLE_PROP_GRID_ITEMS.PIXEL_SIZE:
  715. {
  716. a_strValue = NOT_APPLIED;
  717. }
  718. break;
  719. case OTS_SAMPLE_PROP_GRID_ITEMS.WORKING_DISTANCE:
  720. {
  721. a_strValue = NOT_APPLIED;
  722. }
  723. break;
  724. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_FIELDS:
  725. {
  726. a_strValue = NOT_APPLIED;
  727. }
  728. break;
  729. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_TO_MEASURE_AREA:
  730. {
  731. a_strValue = NOT_APPLIED;
  732. }
  733. break;
  734. case OTS_SAMPLE_PROP_GRID_ITEMS.MEASURE_STATAU:
  735. {
  736. OTS_MSR_SAMPLE_STATUS nStatus = m_poMsrStatus.GetStatus();
  737. string strStatus = nStatus.ToString();
  738. //strStatus= MultiLang.GetInstance().GetstringByKey(GrpMeasureResultParam,IDS_MEASURE_STATUS_FIRST + (int)nStatus);
  739. a_strValue = strStatus;
  740. }
  741. break;
  742. default:
  743. {
  744. // something wrong, return false
  745. a_strValue = NOT_APPLIED;
  746. return false;
  747. }
  748. //break;
  749. }
  750. // ok, return true
  751. return true;
  752. }
  753. public bool SetPropStringData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, string a_strValue)
  754. {
  755. switch (a_nId)
  756. {
  757. case OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_NAME:
  758. {
  759. //we think the samplename as the Identification of the sample,if we change the name then reset the status.
  760. //so we can remeasure the sample by change the sample name.
  761. if (m_strName != a_strValue)
  762. {
  763. m_strName = a_strValue;
  764. m_poMsrStatus = new CMsrSampleStatus();
  765. }
  766. }
  767. break;
  768. // read only property, tread as default.
  769. case OTS_SAMPLE_PROP_GRID_ITEMS.SAMPLE_HOLE_NAME:
  770. case OTS_SAMPLE_PROP_GRID_ITEMS.MAGNIFICATION:
  771. case OTS_SAMPLE_PROP_GRID_ITEMS.PIXEL_SIZE:
  772. case OTS_SAMPLE_PROP_GRID_ITEMS.WORKING_DISTANCE:
  773. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_FIELDS:
  774. case OTS_SAMPLE_PROP_GRID_ITEMS.TOTAL_TO_MEASURE_AREA:
  775. case OTS_SAMPLE_PROP_GRID_ITEMS.MEASURE_STATAU:
  776. default:
  777. {
  778. // something wrong, return false
  779. return false;
  780. }
  781. //break;
  782. }
  783. // ok, return true
  784. return true;
  785. }
  786. // combo data (7)
  787. public bool GetPropComboData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, int a_nValue)
  788. {
  789. switch (a_nId)
  790. {
  791. case OTS_SAMPLE_PROP_GRID_ITEMS.START_MODE:
  792. {
  793. a_nValue = (int)m_poMsrParams.GetImageScanParam().GetStartImageMode();
  794. }
  795. break;
  796. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_MODE:
  797. {
  798. a_nValue = (int)m_poMsrParams.GetImageScanParam().GetStopMode();
  799. }
  800. break;
  801. case OTS_SAMPLE_PROP_GRID_ITEMS.SCAN_SPEED:
  802. {
  803. a_nValue = (int)m_poMsrParams.GetImageScanParam().GetScanImageSpeed();
  804. }
  805. break;
  806. case OTS_SAMPLE_PROP_GRID_ITEMS.IMAGE_RESOLUTION:
  807. {
  808. a_nValue = (int)m_poMsrParams.GetImageScanParam().GetImagePixelSize();
  809. }
  810. break;
  811. case OTS_SAMPLE_PROP_GRID_ITEMS.SEARCH_RESOLUTION:
  812. {
  813. a_nValue = (int)m_poMsrParams.GetXRayParam().GetSearchSpeed();
  814. }
  815. break;
  816. /*case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_RESOLUTION:
  817. {
  818. a_nValue = (int)m_poMsrParams.GetXRayParam().GetAnalySpeed();
  819. }
  820. break;*/
  821. case OTS_SAMPLE_PROP_GRID_ITEMS.SCAN_MODE:
  822. {
  823. a_nValue = (int)m_poMsrParams.GetXRayParam().GetScanMode();
  824. }
  825. break;
  826. case OTS_SAMPLE_PROP_GRID_ITEMS.MEMBRANE_TYPE:
  827. {
  828. a_nValue = (int)this.GetMembraneType();
  829. }
  830. break;
  831. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELD_STOP_TYPE:
  832. {
  833. a_nValue = (int)m_poMsrParams.GetImageScanParam().GetFieldStopMode();
  834. }
  835. break;
  836. case OTS_SAMPLE_PROP_GRID_ITEMS.BGREMOVE_TYPE:
  837. {
  838. a_nValue = (int)m_poMsrParams.GetImageProcessParam().GetBGRemoveType();
  839. }
  840. break;
  841. case OTS_SAMPLE_PROP_GRID_ITEMS.AUTOBGREMOVE_TYPE:
  842. {
  843. a_nValue = (int)m_poMsrParams.GetImageProcessParam().GetAutoBGRemoveType();
  844. }
  845. break;
  846. default:
  847. {
  848. // something wrong, return false
  849. return false;
  850. }
  851. //break;
  852. }
  853. // ok, return true
  854. return true;
  855. }
  856. public bool SetPropComboData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, int a_nValue)
  857. {
  858. switch (a_nId)
  859. {
  860. case OTS_SAMPLE_PROP_GRID_ITEMS.START_MODE:
  861. {
  862. if (OTS_GET_IMAGE_MODE.MIN > (OTS_GET_IMAGE_MODE)a_nValue || (OTS_GET_IMAGE_MODE)a_nValue > OTS_GET_IMAGE_MODE.MAX)
  863. {
  864. return false;
  865. }
  866. m_poMsrParams.GetImageScanParam().SetStartImageMode((OTS_GET_IMAGE_MODE)a_nValue);
  867. }
  868. break;
  869. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_MODE:
  870. {
  871. if (OTS_MEASURE_STOP_MODE.MIN > (OTS_MEASURE_STOP_MODE)a_nValue || (OTS_MEASURE_STOP_MODE)a_nValue > OTS_MEASURE_STOP_MODE.MAX)
  872. {
  873. return false;
  874. }
  875. if (m_poMsrParams.GetImageScanParam().GetStopMode() != (OTS_MEASURE_STOP_MODE)a_nValue)
  876. {
  877. m_poMsrParams.GetImageScanParam().SetStopMode((OTS_MEASURE_STOP_MODE)a_nValue);
  878. m_poMsrStatus.SetStatus(OTS_MSR_SAMPLE_STATUS.UNMEASURED);
  879. }
  880. }
  881. break;
  882. case OTS_SAMPLE_PROP_GRID_ITEMS.SCAN_SPEED:
  883. {
  884. if (OTS_THREE_TIES_OPTIONS.MIN > (OTS_THREE_TIES_OPTIONS)a_nValue || (OTS_THREE_TIES_OPTIONS)a_nValue > OTS_THREE_TIES_OPTIONS.MAX)
  885. {
  886. return false;
  887. }
  888. m_poMsrParams.GetImageScanParam().SetScanImageSpeed((OTS_THREE_TIES_OPTIONS)a_nValue);
  889. }
  890. break;
  891. case OTS_SAMPLE_PROP_GRID_ITEMS.IMAGE_RESOLUTION:
  892. {
  893. if (OTS_FIVE_TIES_OPTIONS.MIN > (OTS_FIVE_TIES_OPTIONS)a_nValue || (OTS_FIVE_TIES_OPTIONS)a_nValue > OTS_FIVE_TIES_OPTIONS.MAX)
  894. {
  895. return false;
  896. }
  897. m_poMsrParams.GetImageScanParam().SetImagePixelSize((OTS_FIVE_TIES_OPTIONS)a_nValue);
  898. }
  899. break;
  900. case OTS_SAMPLE_PROP_GRID_ITEMS.SEARCH_RESOLUTION:
  901. {
  902. if (OTS_THREE_TIES_OPTIONS.MIN > (OTS_THREE_TIES_OPTIONS)a_nValue || (OTS_THREE_TIES_OPTIONS)a_nValue > OTS_THREE_TIES_OPTIONS.MAX)
  903. {
  904. return false;
  905. }
  906. m_poMsrParams.GetXRayParam().SetSearchSpeed((OTS_THREE_TIES_OPTIONS)a_nValue);
  907. }
  908. break;
  909. /*case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_RESOLUTION:
  910. {
  911. if (OTS_THREE_TIES_OPTIONS.MIN > (OTS_THREE_TIES_OPTIONS)a_nValue || (OTS_THREE_TIES_OPTIONS)a_nValue > OTS_THREE_TIES_OPTIONS.MAX)
  912. {
  913. return false;
  914. }
  915. m_poMsrParams.GetXRayParam().SetAnalySpeed((OTS_THREE_TIES_OPTIONS)a_nValue);
  916. }
  917. break;*/
  918. case OTS_SAMPLE_PROP_GRID_ITEMS.SCAN_MODE:
  919. {
  920. if (OTS_X_RAY_SCAN_MODE.MIN > (OTS_X_RAY_SCAN_MODE)a_nValue || (OTS_X_RAY_SCAN_MODE)a_nValue > OTS_X_RAY_SCAN_MODE.MAX)
  921. {
  922. return false;
  923. }
  924. m_poMsrParams.GetXRayParam().SetScanMode((OTS_X_RAY_SCAN_MODE)a_nValue);
  925. }
  926. break;
  927. case OTS_SAMPLE_PROP_GRID_ITEMS.MEMBRANE_TYPE:
  928. {
  929. if (MEMBRANE_TYPE.MIN > (MEMBRANE_TYPE)a_nValue || (MEMBRANE_TYPE)a_nValue > MEMBRANE_TYPE.MAX)
  930. {
  931. return false;
  932. }
  933. this.SetMembraneType((MEMBRANE_TYPE)a_nValue);
  934. }
  935. break;
  936. case OTS_SAMPLE_PROP_GRID_ITEMS.FIELD_STOP_TYPE:
  937. {
  938. if (OTS_MEASURE_FIELD_STOP_MODE.MIN > (OTS_MEASURE_FIELD_STOP_MODE)a_nValue || (OTS_MEASURE_FIELD_STOP_MODE)a_nValue > OTS_MEASURE_FIELD_STOP_MODE.MAX)
  939. {
  940. return false;
  941. }
  942. m_poMsrParams.GetImageScanParam().SetFieldStopMode((OTS_MEASURE_FIELD_STOP_MODE)a_nValue);
  943. }
  944. break;
  945. case OTS_SAMPLE_PROP_GRID_ITEMS.BGREMOVE_TYPE:
  946. {
  947. if (OTS_BGREMOVE_TYPE.MIN > (OTS_BGREMOVE_TYPE)a_nValue || (OTS_BGREMOVE_TYPE)a_nValue > OTS_BGREMOVE_TYPE.MAX)
  948. {
  949. return false;
  950. }
  951. //m_poMsrParams.GetImageProcessParam().SetBGRemoveType((OTS_BGREMOVE_TYPE)a_nValue);
  952. m_poMsrParams.GetImageProcessParam().SetBGRemoveType((OTS_BGREMOVE_TYPE)a_nValue);
  953. }
  954. break;
  955. case OTS_SAMPLE_PROP_GRID_ITEMS.AUTOBGREMOVE_TYPE:
  956. {
  957. if (OTS_AUTOBGREMOVE_TYPE.MIN > (OTS_AUTOBGREMOVE_TYPE)a_nValue || (OTS_AUTOBGREMOVE_TYPE)a_nValue > OTS_AUTOBGREMOVE_TYPE.MAX)
  958. {
  959. return false;
  960. }
  961. //m_poMsrParams.GetImageProcessParam().SetAutoBGRemoveType((OTS_AUTOBGREMOVE_TYPE)a_nValue);
  962. m_poMsrParams.GetImageProcessParam().SetAutoBGRemoveType((OTS_AUTOBGREMOVE_TYPE)a_nValue);
  963. }
  964. break;
  965. default:
  966. {
  967. // something wrong, return false
  968. return false;
  969. }
  970. //break;
  971. }
  972. // ok, return true
  973. return true;
  974. }
  975. public bool GetPropComboStrings(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, List<string> a_listComboStrings)
  976. {
  977. // clear the strings list
  978. a_listComboStrings.Clear();
  979. // set the strings list
  980. string strItem;
  981. switch (a_nId)
  982. {
  983. case OTS_SAMPLE_PROP_GRID_ITEMS.START_MODE:
  984. {
  985. for (int i = (int)OTS_GET_IMAGE_MODE.MIN; i <= (int)OTS_GET_IMAGE_MODE.MAX; ++i)
  986. {
  987. strItem = MultiLang.GetInstance().GetStringByKey(GrpNormalParam, IDS_IMAGE_MODE_FIRST + i);
  988. a_listComboStrings.Add(strItem);
  989. }
  990. }
  991. break;
  992. case OTS_SAMPLE_PROP_GRID_ITEMS.STOP_MODE:
  993. {
  994. for (int i = (int)OTS_MEASURE_STOP_MODE.MIN; i <= (int)OTS_MEASURE_STOP_MODE.MAX; ++i)
  995. {
  996. strItem = MultiLang.GetInstance().GetStringByKey(GrpNormalParam, IDS_MEASURE_STOP_MODE_FIRST + i);
  997. a_listComboStrings.Add(strItem);
  998. }
  999. }
  1000. break;
  1001. case OTS_SAMPLE_PROP_GRID_ITEMS.SCAN_SPEED:
  1002. case OTS_SAMPLE_PROP_GRID_ITEMS.SEARCH_RESOLUTION:
  1003. //case OTS_SAMPLE_PROP_GRID_ITEMS.ANALYSIS_RESOLUTION:
  1004. {
  1005. for (int i = (int)OTS_THREE_TIES_OPTIONS.MIN; i <= (int)OTS_THREE_TIES_OPTIONS.MAX; ++i)
  1006. {
  1007. strItem = MultiLang.GetInstance().GetStringByKey(GrpNormalParam, IDS_THREE_TIES_OPTIONS_FIRST + i);
  1008. a_listComboStrings.Add(strItem);
  1009. }
  1010. }
  1011. break;
  1012. case OTS_SAMPLE_PROP_GRID_ITEMS.IMAGE_RESOLUTION:
  1013. {
  1014. for (int i = (int)OTS_FIVE_TIES_OPTIONS.MIN; i <= (int)OTS_FIVE_TIES_OPTIONS.MAX; ++i)
  1015. {
  1016. strItem = RESOLUTION_STRINGS[RESOLUTION_ID_FIRST_TIE + i];
  1017. a_listComboStrings.Add(strItem);
  1018. }
  1019. }
  1020. break;
  1021. case OTS_SAMPLE_PROP_GRID_ITEMS.SCAN_MODE:
  1022. {
  1023. for (int i = (int)OTS_X_RAY_SCAN_MODE.MIN; i <= (int)OTS_X_RAY_SCAN_MODE.MAX; ++i)
  1024. {
  1025. strItem = MultiLang.GetInstance().GetStringByKey(GrpNormalParam, IDS_X_RAY_SCAN_MODE_FIRST + i);
  1026. a_listComboStrings.Add(strItem);
  1027. }
  1028. }
  1029. break;
  1030. /*case OTS_SAMPLE_PROP_GRID_ITEMS.STEEL_TECHNOLOGY:
  1031. {
  1032. for (int i = (int)STEEL_TECHNOLOGY.MIN; i <= (int)STEEL_TECHNOLOGY.MAX; ++i)
  1033. {
  1034. strItem = MultiLang.GetInstance().GetstringByKey(IDS_STEEL_TECHNOLOGY + i);
  1035. a_listComboStrings.push_back(strItem);
  1036. }
  1037. }
  1038. break;*/
  1039. default:
  1040. {
  1041. // something wrong, return false
  1042. return false;
  1043. }
  1044. //break;
  1045. }
  1046. // ok, return true
  1047. return true;
  1048. }
  1049. // time data
  1050. public bool GetPropTimeData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, DateTime a_oValue)
  1051. {
  1052. switch (a_nId)
  1053. {
  1054. case OTS_SAMPLE_PROP_GRID_ITEMS.START_TIME:
  1055. {
  1056. a_oValue = m_poMsrStatus.GetStartTime();
  1057. }
  1058. break;
  1059. case OTS_SAMPLE_PROP_GRID_ITEMS.FINISH_TIME:
  1060. {
  1061. a_oValue = m_poMsrStatus.GetEndTime();
  1062. }
  1063. break;
  1064. default:
  1065. {
  1066. // something wrong, return false
  1067. return false;
  1068. }
  1069. }
  1070. // ok, return true
  1071. return true;
  1072. }
  1073. public bool SetPropTimeData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, DateTime a_oValue)
  1074. {
  1075. switch (a_nId)
  1076. {
  1077. // read only property, tread as default.
  1078. case OTS_SAMPLE_PROP_GRID_ITEMS.START_TIME:
  1079. break;
  1080. case OTS_SAMPLE_PROP_GRID_ITEMS.FINISH_TIME:
  1081. break;
  1082. default:
  1083. {
  1084. // something wrong, return false
  1085. return false;
  1086. }
  1087. }
  1088. // ok, return true
  1089. return true;
  1090. }
  1091. // time span data (1)
  1092. public bool GetPropTimeSpanData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, TimeSpan a_oValue)
  1093. {
  1094. switch (a_nId)
  1095. {
  1096. case OTS_SAMPLE_PROP_GRID_ITEMS.USED_TIME:
  1097. {
  1098. a_oValue = m_poMsrStatus.GetUsedTime();
  1099. }
  1100. break;
  1101. default:
  1102. {
  1103. // something wrong, return false
  1104. return false;
  1105. }
  1106. }
  1107. // ok, return true
  1108. return true;
  1109. }
  1110. public bool SetPropTimeSpanData(OTS_SAMPLE_PROP_GRID_ITEMS a_nId, TimeSpan a_oValue)
  1111. {
  1112. switch (a_nId)
  1113. {
  1114. // read only property, tread as default.
  1115. case OTS_SAMPLE_PROP_GRID_ITEMS.USED_TIME:
  1116. break;
  1117. default:
  1118. {
  1119. // something wrong, return false
  1120. return false;
  1121. }
  1122. }
  1123. // ok, return true
  1124. return true;
  1125. }
  1126. public double CalculatePixelSize()
  1127. {
  1128. // pixel size
  1129. double dPixelSize = 0.0;
  1130. // make sure SEM is valid
  1131. if (m_poSEMDataMsr !=new CSEMDataMsr())
  1132. {
  1133. // get scan field size
  1134. int nScanFieldSize = m_poSEMDataMsr.GetScanFieldSize();
  1135. // get image size
  1136. OTS_FIVE_TIES_OPTIONS nImageSizeId = m_poMsrParams.GetImageScanParam().GetImagePixelSize();
  1137. long nResulotionId = RESOLUTION_ID_FIRST_TIE + (long)nImageSizeId;
  1138. int nImageSize = RESOLUTION_VALUE[nResulotionId].Width;
  1139. // calculate pixel size
  1140. dPixelSize = (double)nScanFieldSize / (double)nImageSize;
  1141. }
  1142. // return pixel size
  1143. return dPixelSize;
  1144. }
  1145. // calculate field area
  1146. public double CalculateAFieldArea()
  1147. {
  1148. // pixel size
  1149. double dAFieldArea = 0.0;
  1150. // make sure SEM is valid
  1151. if (m_poSEMDataMsr != new CSEMDataMsr())
  1152. {
  1153. // get image size
  1154. OTS_FIVE_TIES_OPTIONS nImageSizeId = m_poMsrParams.GetImageScanParam().GetImagePixelSize();
  1155. long nResulotionId = RESOLUTION_ID_FIRST_TIE + (long)nImageSizeId;
  1156. int nImageSize = RESOLUTION_VALUE[nResulotionId].Width;
  1157. // pixel size (micros)
  1158. double dPixelSize = 0;
  1159. dPixelSize = CalculatePixelSize();
  1160. // calculate pixel size
  1161. dAFieldArea = (double)nImageSize * (double)nImageSize * 0.75 * dPixelSize * dPixelSize * 0.000001;// mm^2
  1162. }
  1163. // return pixel size
  1164. return dAFieldArea;
  1165. }
  1166. public bool GetBSESize(int a_nWidth, int a_nHeight)
  1167. {
  1168. // scan parameters
  1169. CMsrParams pMsrParam = GetMsrParams();
  1170. COTSImgScanPrm pImgScanParam = pMsrParam.GetImageScanParam();
  1171. // get image size
  1172. OTS_FIVE_TIES_OPTIONS nImageSizeId = pImgScanParam.GetImagePixelSize();
  1173. int nResulotionId = RESOLUTION_ID_FIRST_TIE + (int)nImageSizeId;
  1174. Size sizePixelImage = RESOLUTION_VALUE[nResulotionId];
  1175. // get scan field size
  1176. a_nWidth = sizePixelImage.Width;
  1177. a_nHeight = sizePixelImage.Height;
  1178. return true;
  1179. }
  1180. }
  1181. }