SmplMeasureReMeasure.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using OTSCLRINTERFACE;
  2. using OTSCommon;
  3. using OTSCommon.Model;
  4. using OTSModelSharp;
  5. using OTSModelSharp.DTLBase;
  6. using OTSModelSharp.ServiceCenter;
  7. using OTSModelSharp.ServiceInterface;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Drawing;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using static OTSDataType.otsdataconst;
  15. namespace OTSMeasureApp._0_OTSModel.Measure._4_ReMeasure
  16. {
  17. class SmplMeasureReMeasure : CSmplMeasure
  18. {
  19. SemController sem = SemController.GetSEMController();
  20. ScanController scan = ScanController.GetScanController();
  21. EDSController eds = EDSController.GetEDSController();
  22. public bool ReMeasure(string samplePath, int width, int height, Dictionary<int, List<Particle>> keyValues, int IMGSCANSPEED_INDEX, int XRAYSCANMODE_INDEX, int NUD_SCANTIME_COUNT)
  23. {
  24. try
  25. {
  26. sem.Connect();
  27. eds.Connect();
  28. //参数定义
  29. int nBrukerDwellTimeId = 3;
  30. long nBrukerDwellTime = 0;
  31. switch (IMGSCANSPEED_INDEX)
  32. {
  33. case (int)OTS_IMAGE_SCANSPEED_OPTIONS.low:
  34. nBrukerDwellTimeId = 3;
  35. break;
  36. case (int)OTS_IMAGE_SCANSPEED_OPTIONS.meddium:
  37. nBrukerDwellTimeId = 4;
  38. break;
  39. case (int)OTS_IMAGE_SCANSPEED_OPTIONS.high:
  40. nBrukerDwellTimeId = 5;
  41. break;
  42. default:
  43. nBrukerDwellTimeId = 3;
  44. break;
  45. }
  46. nBrukerDwellTime = DWELLTIME_BRUKER_VALUES[nBrukerDwellTimeId];
  47. SQLiteHelper sQLiteHelper = new SQLiteHelper(samplePath + "Inclusion.db");
  48. sQLiteHelper.GetDBConnection();
  49. sQLiteHelper.BeginTransaction();
  50. log.Info("Begin to process field count : " + keyValues.Count);
  51. //按帧图分析
  52. for (int i = 0; i < keyValues.Count; i++)
  53. {
  54. List<COTSParticleClr> cOTSParticleClrs = new List<COTSParticleClr>();
  55. //移动到当前帧
  56. log.Debug("Begin to move to the field : " + keyValues.ElementAt(i).Value[0].FieldId);
  57. sem.MoveSEMToPoint(keyValues.ElementAt(i).Value[0].FieldPosX, keyValues.ElementAt(i).Value[0].FieldPosY);
  58. //采集图像
  59. log.Info("Begin to AcquireBSEImage ");
  60. scan.SetDwellTime(nBrukerDwellTimeId);
  61. scan.SetImageSize(width, height);
  62. CBSEImgClr imgClr = scan.AcquireBSEImage(0, 0, (int)nBrukerDwellTime);
  63. Bitmap bitmap = CImageHandler.ToGrayBitmap(imgClr.GetImageDataPtr(), width, height);
  64. bitmap.Save(samplePath + "Field" + keyValues.ElementAt(i).Value[0].FieldId + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
  65. //打能谱
  66. log.Info("Begin to GetXRayByPoints count : " + keyValues.ElementAt(i).Value.Count);
  67. if (XRAYSCANMODE_INDEX == (int)OTS_X_RAY_SCAN_MODE.PointMode)
  68. {
  69. for (int j = 0; j < keyValues.ElementAt(i).Value.Count; j++)
  70. {
  71. COTSParticleClr cOTSParticle = new COTSParticleClr();
  72. CPosXrayClr cPosXray = new CPosXrayClr();
  73. cOTSParticle.SetAnalysisId(keyValues.ElementAt(i).Value[j].XrayId);
  74. cOTSParticle.SetFieldId(keyValues.ElementAt(i).Value[j].FieldId);
  75. cOTSParticle.SetXray(cPosXray);
  76. cOTSParticle.SetXRayPos(new Point(keyValues.ElementAt(i).Value[j].PosX, keyValues.ElementAt(i).Value[j].PosY));
  77. cOTSParticleClrs.Add(cOTSParticle);
  78. }
  79. eds.GetXRayByPoints(cOTSParticleClrs, (uint)nBrukerDwellTime, true);
  80. }
  81. else
  82. {
  83. for (int j = 0; j < keyValues.ElementAt(i).Value.Count; j++)
  84. {
  85. COTSParticleClr cOTSParticle = new COTSParticleClr();
  86. CPosXrayClr cPosXray = new CPosXrayClr();
  87. cOTSParticle.SetAnalysisId(keyValues.ElementAt(i).Value[j].XrayId);
  88. cOTSParticle.SetFieldId(keyValues.ElementAt(i).Value[j].FieldId);
  89. cOTSParticle.SetXray(cPosXray);
  90. cOTSParticle.SetParticleRect(new Rectangle(keyValues.ElementAt(i).Value[j].RectLeft, keyValues.ElementAt(i).Value[j].RectTop, keyValues.ElementAt(i).Value[j].RectWidth, keyValues.ElementAt(i).Value[j].RectHeight));
  91. COTSFeatureClr fea = new COTSFeatureClr();
  92. List<COTSSegmentClr> segs = new List<COTSSegmentClr>();
  93. for (int k = 0; k < keyValues.ElementAt(i).Value[j].SegmentNum; k++)
  94. {
  95. segs.Add(new COTSSegmentClr(keyValues.ElementAt(i).Value[j].SegmentList[k].Height, keyValues.ElementAt(i).Value[j].SegmentList[k].Start, keyValues.ElementAt(i).Value[j].SegmentList[k].Length));
  96. }
  97. fea.SetSegmentsList(segs, false);
  98. cOTSParticle.SetFeature(fea);
  99. cOTSParticleClrs.Add(cOTSParticle);
  100. }
  101. eds.GetXRayByFeatures(cOTSParticleClrs, (uint)nBrukerDwellTime, true);
  102. }
  103. //修改数据库能谱
  104. log.Info("Begin to save info to db ");
  105. for (int j = 0; j < cOTSParticleClrs.Count; j++)
  106. {
  107. UInt32[] xrayData = cOTSParticleClrs[j].GetXray().GetXrayData();
  108. byte[] bytedata = new byte[GENERALXRAYCHANNELS * 4];
  109. for (int k = 0; k < GENERALXRAYCHANNELS; k++)
  110. {
  111. uint m = xrayData[k];
  112. byte[] dwordData = BitConverter.GetBytes(m);
  113. bytedata[k * 4] = dwordData[0];
  114. bytedata[k * 4 + 1] = dwordData[1];
  115. bytedata[k * 4 + 2] = dwordData[2];
  116. bytedata[k * 4 + 3] = dwordData[3];
  117. }
  118. sQLiteHelper.ExecuteXrayForTransaction(cOTSParticleClrs[j].GetAnalysisId(), cOTSParticleClrs[j].GetFieldId(), bytedata);
  119. List<CElementChemistryClr> elementChemistryClrs = cOTSParticleClrs[j].GetXray().GetElementQuantifyData();
  120. List<string> nameList = new List<string>();
  121. List<double> perList = new List<double>();
  122. for (int k = 0; k < elementChemistryClrs.Count; k++)
  123. {
  124. nameList.Add(elementChemistryClrs[k].GetName());
  125. perList.Add(elementChemistryClrs[k].GetPercentage());
  126. }
  127. sQLiteHelper.ExecuteElementForTransaction(cOTSParticleClrs[j].GetAnalysisId(), cOTSParticleClrs[j].GetFieldId(), cOTSParticleClrs[j].GetXray().GetElementNum(), nameList, perList);
  128. }
  129. log.Info("End process the field : " + keyValues.ElementAt(i).Value[0].FieldId);
  130. }
  131. sQLiteHelper.CommitTransaction();
  132. sem.DisConnect();
  133. eds.DisConnect();
  134. return true;
  135. }
  136. catch (Exception ex)
  137. {
  138. log.Error("ReMeasure Erroe ! " + ex);
  139. return false;
  140. }
  141. }
  142. }
  143. }