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(); } /// /// 获取所选样品设定数据 /// /// /// /// 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(); } /// /// 二次采集能谱 /// /// /// /// /// /// public bool AcquisitionSpectrum(string samplePath, int xrayMode, double new_PixelSize, ref Particle particle, uint a_nXRayAQTime) { try { List cOTSParticleClrs = new List(); List elements = new List(); //采集能谱 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 segs = new List(); 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 elementChemistryClrs = cOTSParticle.GetXray().GetElementQuantifyData(); List nameList = new List(); List perList = new List(); 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; } } } }