123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- using OTSCLRINTERFACE;
- using OTSCommon.DBOperate.Model;
- using OTSDataType;
- using OTSModelSharp;
- using OTSModelSharp.DTLBase;
- using OTSModelSharp.ServiceCenter;
- using System;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using static OTSDataType.otsdataconst;
- namespace OTSMeasureApp._0_OTSModel.Measure._4_ReMeasure
- {
- class SmplMeasureReMeasure : CSmplMeasure
- {
- OTSIncAMeasureAppForm aMeasureAppForm;
- IEDSController eds;
- COTSField curFldData;
- public SmplMeasureReMeasure(string a_strWorkingFolder, COTSSample a_pSample) : base(a_strWorkingFolder, a_pSample)
- {
- SetWorkingFolder(a_strWorkingFolder);
- SetSample(a_pSample);
- m_classifyEngine = new CClassifyEngine();
-
-
- }
-
- /// <summary>
- /// 获取所选样品设定数据
- /// </summary>
- /// <param name="sampleName"></param>
- /// <param name="a_pBSEImg"></param>
- /// <returns></returns>
- public byte[] SetReFldInfo(string sampleName,CBSEImgClr a_pBSEImg)
- {
-
- aMeasureAppForm = (OTSIncAMeasureAppForm)Application.OpenForms["OTSIncAMeasureAppForm"];
- COTSSample sampleClr = aMeasureAppForm.m_ProjRstData.GetSampleByName(sampleName);
- curFldData = new COTSField(new Point(0, 0), m_Sample.CalculatePixelSize());
- curFldData.SetId(0);
- curFldData.SetBSEImage(a_pBSEImg);
- SetSample(sampleClr);
- var expC = m_Sample.GetMsrParams().GetXRayParam().GetAnalyExpCount();
- var imgwidth = m_Sample.GetMsrParams().GetImageScanParam().GetImageResolutionSize().cx;
- var imgheight = m_Sample.GetMsrParams().GetImageScanParam().GetImageResolutionSize().cy;
- var ifautoid = m_Sample.GetMsrParams().GetXRayParam().IfAutoId;
- var knownelements = m_Sample.GetMsrParams().GetXRayParam().AnalysisElements;
- eds = EDSController.GetEDSController(imgwidth, imgheight, expC, ifautoid, knownelements);
- //eds = EDSController.GetEDSController(imgwidth,imgheight,expC);
- return a_pBSEImg.GetImageDataPtr();
- }
- /// <summary>
- /// 二次采集能谱
- /// </summary>
- /// <param name="samplePath"></param>
- /// <param name="xrayMode"></param>
- /// <param name="particle"></param>
- /// <param name="a_nXRayAQTime"></param>
- /// <returns></returns>
- public bool AcquisitionSpectrum(string samplePath, int xrayMode, double new_PixelSize, ref Particle particle, uint a_nXRayAQTime)
- {
- try
- {
- List<COTSParticleClr> cOTSParticleClrs = new List<COTSParticleClr>();
- List<Element> elements = new List<Element>();
- //采集能谱
- COTSParticleClr cOTSParticle = new COTSParticleClr();
- CPosXrayClr cPosXray = new CPosXrayClr();
- cOTSParticle.SetAnalysisId(particle.XrayId);
- cOTSParticle.SetFieldId(particle.FieldId);
- cOTSParticle.SetXray(cPosXray);
- cOTSParticle.SetXRayPos(new Point(particle.PosX, particle.PosY));
- cOTSParticle.SetParticleRect(new Rectangle(particle.RectLeft, particle.RectTop, particle.RectWidth, particle.RectHeight));
- cOTSParticle.SetActualArea(particle.Area);
- COTSFeatureClr fea = new COTSFeatureClr();
- List<COTSSegmentClr> segs = new List<COTSSegmentClr>();
- for (int k = 0; k < particle.SegmentNum; k++)
- {
- segs.Add(new COTSSegmentClr(particle.SegmentList[k].Height, particle.SegmentList[k].Start, particle.SegmentList[k].Length));
- }
- fea.SetSegmentsList(segs, false);
- cOTSParticle.SetFeature(fea);
- cOTSParticleClrs.Add(cOTSParticle);
- if (xrayMode == (int)OTS_X_RAY_SCAN_MODE.PointMode)
- {
- eds.GetXRayByParts(cOTSParticleClrs, a_nXRayAQTime, true);
- }
- else
- {
- eds.GetXRayByFeatures(cOTSParticleClrs, a_nXRayAQTime, true);
- }
- //重新计算颗粒信息
- CImageHandler m_ImagePro = new CImageHandler();
- m_ImagePro.CalParticleImageProp(cOTSParticle, new_PixelSize);
- particle.DFERET = cOTSParticle.GetFeretDiameter();
- particle.DMAX = cOTSParticle.GetDMAX();
- particle.DMIN = cOTSParticle.GetDMIN();
- particle.DPERP = cOTSParticle.GetDMPERP();
- particle.PERIMETER = cOTSParticle.GetDPRIMETER();
- particle.ORIENTATION = cOTSParticle.GetORIENTATION();
- particle.DINSCR = cOTSParticle.GetDINSCR();
- particle.DMEAN = cOTSParticle.GetDMEAN();
- particle.DELONG = cOTSParticle.GetDELONG();
- //保存能谱数据库
- SQLiteHelper sQLiteHelper = new SQLiteHelper(samplePath + "Inclusion.db");
- sQLiteHelper.GetDBConnection();
- sQLiteHelper.BeginTransaction();
- log.Info("Begin to save info to db ");
- uint[] xrayData = cOTSParticle.GetXray().GetXrayData();
- byte[] bytedata = new byte[GENERALXRAYCHANNELS * 4];
- for (int k = 0; k < GENERALXRAYCHANNELS; k++)
- {
- uint m = xrayData[k];
- byte[] dwordData = BitConverter.GetBytes(m);
- bytedata[k * 4] = dwordData[0];
- bytedata[k * 4 + 1] = dwordData[1];
- bytedata[k * 4 + 2] = dwordData[2];
- bytedata[k * 4 + 3] = dwordData[3];
- }
- if (!sQLiteHelper.ExecuteXrayForTransaction(cOTSParticle.GetAnalysisId(), cOTSParticle.GetFieldId(), bytedata))
- {
- NLog.LogManager.GetCurrentClassLogger().Error("ExecuteXrayForTransaction failed");
- return false;
- }
- //保存元素数据库
- List<CElementChemistryClr> elementChemistryClrs = cOTSParticle.GetXray().GetElementQuantifyData();
- List<string> nameList = new List<string>();
- List<double> perList = new List<double>();
- for (int k = 0; k < elementChemistryClrs.Count; k++)
- {
- nameList.Add(elementChemistryClrs[k].GetName());
- perList.Add(elementChemistryClrs[k].GetPercentage());
- Element element = new Element();
- element.Name = elementChemistryClrs[k].GetName();
- element.Percentage = elementChemistryClrs[k].GetPercentage();
- element.ElementId = k;
- element.ElementNum = elementChemistryClrs.Count;
- element.FieldId = cOTSParticle.GetFieldId();
- element.XrayId = cOTSParticle.GetAnalysisId();
- elements.Add(element);
- }
- if (!sQLiteHelper.ExecuteElementForTransaction(cOTSParticle.GetAnalysisId(), cOTSParticle.GetFieldId(), cOTSParticle.GetXray().GetElementNum(), nameList, perList))
- {
- NLog.LogManager.GetCurrentClassLogger().Error("ExecuteElementForTransaction failed");
- return false;
- }
- //保存颗粒数据库
- //if (!sQLiteHelper.ExecuteSegmentForTransaction(cOTSParticle.GetAnalysisId(), cOTSParticle.GetFieldId(), particle.SegmentList))
- //{
- // NLog.LogManager.GetCurrentClassLogger().Error("ExecuteSegmentForTransaction failed");
- // return false;
- //}
- //重新分类
- string stdFileName = m_Sample.GetMsrParams().GetSTDName();
- if (stdFileName != "NoSTDDB")
- {
- if (!stdFileName.Contains(".db"))
- {
- stdFileName += ".db";
- }
- var m_classifyEngine = new CClassifyEngine();
- IClassifyEngine engine = m_classifyEngine.GetExpressionClassifyEngine(stdFileName);
- if (!engine.ClassifyByExpression(cOTSParticle))
- {
- NLog.LogManager.GetCurrentClassLogger().Error("reclassification failed");
- return false;
- }
- string[] values = new string[31];
- values[0] = particle.FieldId.ToString();
- values[1] = particle.XrayId.ToString();
- values[2] = cOTSParticle.GetAveGray().ToString();
- values[3] = particle.RectLeft.ToString();
- values[4] = particle.RectTop.ToString();
- values[5] = particle.RectWidth.ToString();
- values[6] = particle.RectHeight.ToString();
- values[7] = particle.Area.ToString();
- values[8] = particle.PosX.ToString();
- values[9] = particle.PosY.ToString();
- values[10] = particle.DFERET.ToString();
- values[11] = particle.SegmentNum.ToString();
- values[12] = particle.FieldPosX.ToString();
- values[13] = particle.FieldPosY.ToString();
- values[14] = particle.ParticleId.ToString();
- values[15] = particle.DMAX.ToString();
- values[16] = particle.DMIN.ToString();
- values[17] = particle.DPERP.ToString();
- values[18] = particle.PERIMETER.ToString();
- values[19] = particle.ORIENTATION.ToString();
- values[20] = particle.DINSCR.ToString();
- values[21] = particle.DMEAN.ToString();
- values[22] = particle.DELONG.ToString();
- values[23] = cOTSParticle.GetClassifyId().ToString();
- values[24] = cOTSParticle.GetTypeName().ToString();
- values[25] = cOTSParticle.GetTypeColor().ToString();
- values[26] = particle.SEMPosX.ToString();
- values[27] = particle.SEMPosY.ToString();
- values[28] = cOTSParticle.GetGrpId().ToString();
- values[29] = cOTSParticle.GetGrpName().ToString();
- values[30] = cOTSParticle.GetGrpColor().ToString();
- if (!sQLiteHelper.ExecuteIncAForTransaction("IncADataReMeasure", values))
- {
- NLog.LogManager.GetCurrentClassLogger().Error("ExecuteIncAForTransaction failed");
- return false;
- }
- particle.TypeName = cOTSParticle.GetTypeName();
- particle.ElementList = elements;
- particle.XRayData = bytedata;
- }
- sQLiteHelper.CommitTransaction();
- return true;
- }
- catch (Exception ex)
- {
- NLog.LogManager.GetCurrentClassLogger().Error(ex.ToString());
- return false;
- }
- }
- }
- }
|