using PaintDotNet; using PaintDotNet.Base.Functionodel; using PaintDotNet.Base.SettingModel; using PaintDotNet.DbOpreate.DbModel; using PaintDotNet.DedicatedAnalysis.DuctileIron.Common; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Metis.AutoAnalysis { class ReportExporter { public RulerModel rulerModel;//标尺样式信息 public int lineLength = 1;//标尺长度 public bool getLengthFromConfig = true;//是否从配置文件获取长度 private Form m_form; public Form form { set { m_form = value; } } //标志 public mic_rulers xmlSaveModel;//存储标尺信息(xml或者预览拍摄选中标尺) /// /// 换算完的标尺信息,包含所有系统内得单位 /// public Dictionary rules = new Dictionary(); public ReportExporter() { InitRulerInfo(); } private void InitRulerInfo() { this.rulerModel = Startup.instance.rulerModel; this.xmlSaveModel = Startup.instance.ruleDB; List mic_rulersAll = new List(); if (this.xmlSaveModel == null && mic_rulersAll.Count > 0) this.xmlSaveModel = mic_rulersAll[0]; this.rules.Clear(); if (this.xmlSaveModel != null && this.xmlSaveModel.pixel_length != 0) { //计算单位长度 比如0.05英寸/像素; 100纳米/像素; double unitLength = (double)(this.xmlSaveModel.physical_length / (decimal)this.xmlSaveModel.pixel_length); switch (this.xmlSaveModel.ruler_units) { case (int)MeasurementUnit.Inch://英寸 this.rules.Add(MeasurementUnit.Inch, unitLength); //英寸 this.rules.Add(MeasurementUnit.Mil, 1000 * unitLength); //米尔 this.rules.Add(MeasurementUnit.Centimeter, 2.54 * unitLength); //厘米 this.rules.Add(MeasurementUnit.Millimeter, 25.4 * unitLength); //毫米 this.rules.Add(MeasurementUnit.Micron, 25400 * unitLength); //微米 this.rules.Add(MeasurementUnit.Nano, 25400000 * unitLength); //纳米 break; case (int)MeasurementUnit.Mil://米尔 this.rules.Add(MeasurementUnit.Inch, 0.001 * unitLength); //英寸 this.rules.Add(MeasurementUnit.Mil, unitLength); //米尔 this.rules.Add(MeasurementUnit.Centimeter, 0.00254 * unitLength); //厘米 this.rules.Add(MeasurementUnit.Millimeter, 0.0254 * unitLength); //毫米 this.rules.Add(MeasurementUnit.Micron, 25.4 * unitLength); //微米 this.rules.Add(MeasurementUnit.Nano, 25400 * unitLength); //纳米 break; case (int)MeasurementUnit.Centimeter://厘米 this.rules.Add(MeasurementUnit.Inch, 0.3937008 * unitLength); //英寸 this.rules.Add(MeasurementUnit.Mil, 393.7008 * unitLength); //米尔 this.rules.Add(MeasurementUnit.Centimeter, unitLength); //厘米 this.rules.Add(MeasurementUnit.Millimeter, 10 * unitLength); //毫米 this.rules.Add(MeasurementUnit.Micron, 10000 * unitLength); //微米 this.rules.Add(MeasurementUnit.Nano, 10000000 * unitLength); //纳米 break; case (int)MeasurementUnit.Millimeter://毫米 this.rules.Add(MeasurementUnit.Inch, 0.0393701 * unitLength); //英寸 this.rules.Add(MeasurementUnit.Mil, 39.3701 * unitLength); //米尔 this.rules.Add(MeasurementUnit.Centimeter, 0.1 * unitLength); //厘米 this.rules.Add(MeasurementUnit.Millimeter, unitLength); //毫米 this.rules.Add(MeasurementUnit.Micron, 1000 * unitLength); //微米 this.rules.Add(MeasurementUnit.Nano, 1000000 * unitLength); //纳米 break; case (int)MeasurementUnit.Micron://微米 this.rules.Add(MeasurementUnit.Inch, 0.00003937007874 * unitLength); //英寸 this.rules.Add(MeasurementUnit.Mil, 0.03937007874 * unitLength); //米尔 this.rules.Add(MeasurementUnit.Centimeter, 0.0001 * unitLength); //厘米 this.rules.Add(MeasurementUnit.Millimeter, 0.001 * unitLength); //毫米 this.rules.Add(MeasurementUnit.Micron, unitLength); //微米 this.rules.Add(MeasurementUnit.Nano, 1000 * unitLength); //纳米 break; case (int)MeasurementUnit.Nano://纳米 this.rules.Add(MeasurementUnit.Inch, 3.9370e-8 * unitLength); //英寸 this.rules.Add(MeasurementUnit.Mil, 3.9370e-5 * unitLength); //米尔 this.rules.Add(MeasurementUnit.Centimeter, 1e-7 * unitLength); //厘米 this.rules.Add(MeasurementUnit.Millimeter, 1e-6 * unitLength); //毫米 this.rules.Add(MeasurementUnit.Micron, 0.001 * unitLength); //微米 this.rules.Add(MeasurementUnit.Nano, unitLength); //纳米 break; default: this.xmlSaveModel = null; break; } } } public void CreateGrainReport(List lstModel, List> bitmapList,string lblResult) { AppCommon appCommon = new AppCommon(); if (!appCommon.isExcelInstalled()) { MessageBox.Show(PdnResources.GetString("office.Message")); return; } if (lstModel.Count == 0) { MessageBox.Show(PdnResources.GetString("Menu.setthetemplate.Text")); return; } var m = lstModel[0]; if (string.IsNullOrEmpty(m.savePath)) { MessageBox.Show(PdnResources.GetString("Menu.setthepath.Text")); return; } ProgressThreadProcClass procClass = new ProgressThreadProcClass(); System.Threading.ThreadStart copyThreadProc = delegate () { //当前图片微米标尺(点距计算用毫米) double unitLength = 0; //当前图片放大倍数 double pointPitch = 0; this.rules.TryGetValue(MeasurementUnit.Micron, out unitLength); //获取当前图片放大倍数 pointPitch = (double)this.xmlSaveModel.gain_multiple; bool isNeedZoom = true; if (unitLength == 0) unitLength = 1; try { int count = lstModel.Count; for (int i = 0; i < count; i++) { var model = lstModel[i]; var bitLit = bitmapList[i]; OfficeFileOperater.CreateAnalysisReport(model, new List>(), bitLit, new Dictionary(), isNeedZoom, pointPitch, unitLength, this.xmlSaveModel.gain_multiple, lblResult, null, null, null); } procClass.DismissProgressAction(this.m_form); //MessageBox.Show(PdnResources.GetString("Menu.Analysisreporfoldertoview.text")); } catch (Exception) { MessageBox.Show(PdnResources.GetString("Menu.newdefit.Text")); } finally { procClass.DismissProgressAction(this.m_form); } }; procClass.StartProgressAutoAction(this.m_form, new System.Threading.ThreadStart(copyThreadProc), PdnResources.GetString("Menu.Tools.CreateReport.Text")); } public void CreateAnalysisReport(AutoAnalyzeSettingModel analyzeSettingModel, List> contentList, List bitmapList, Dictionary tagPositionDic, string dictPath = null, Dictionary pNames = null, List> content2List = null) { AppCommon appCommon = new AppCommon(); if (!appCommon.isExcelInstalled()) { MessageBox.Show(PdnResources.GetString("office.Message")); return; } if (analyzeSettingModel == null) { MessageBox.Show(PdnResources.GetString("Menu.setthetemplate.Text")); return; } if (string.IsNullOrEmpty(analyzeSettingModel.savePath)) { MessageBox.Show(PdnResources.GetString("Menu.setthepath.Text")); return; } ProgressThreadProcClass procClass = new ProgressThreadProcClass(); System.Threading.ThreadStart copyThreadProc = delegate () { //当前图片微米标尺(点距计算用毫米) double unitLength = 0; //当前图片放大倍数 double pointPitch = 0; this.rules.TryGetValue(MeasurementUnit.Micron, out unitLength); //获取当前图片放大倍数 pointPitch = (double)this.xmlSaveModel.gain_multiple; bool isNeedZoom = true; if (unitLength == 0) unitLength = 1; try { OfficeFileOperater.CreateAnalysisReport(analyzeSettingModel, contentList, bitmapList, tagPositionDic, isNeedZoom, pointPitch, unitLength, this.xmlSaveModel.gain_multiple,"", dictPath, pNames, content2List); procClass.DismissProgressAction(this.m_form); //MessageBox.Show(PdnResources.GetString("Menu.Analysisreporfoldertoview.text")); } catch (Exception) { MessageBox.Show(PdnResources.GetString("Menu.newdefit.Text")); } finally { procClass.DismissProgressAction(this.m_form); } }; procClass.StartProgressAutoAction(this.m_form, new System.Threading.ThreadStart(copyThreadProc), PdnResources.GetString("Menu.Tools.CreateReport.Text")); } } }