Export_ReportTemplate.cs 121 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641
  1. using OTSIncAReportApp._1_UI;
  2. using OTSIncAReportApp.Control_ECharts;
  3. using OTSIncAReportApp.DataOperation.DataAccess;
  4. using OTSCommon.Model;
  5. using OTSIncAReportGraph.Controls;
  6. using OTSIncAReportGrids;
  7. using OTSRptPeriodicTable;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Data;
  11. using System.Drawing;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Windows.Forms;
  15. using System.Xml;
  16. using static OTSIncAReportApp.OTSReport_Export;
  17. using OTSIncAReportApp.ReportTemplate;
  18. using OTSIncAReportApp.OTSSampleReportInfo;
  19. using OTSPeriodicTable;
  20. namespace OTSIncAReportApp.OTSTemplateDesigner
  21. {
  22. public class Export_ReportTemplate
  23. {
  24. #region 全局变量
  25. public List<DataTable> m_list_dt; //导出的各模块数据,合集
  26. public OTSReport_Export m_otsreport_export;
  27. UserLibraryData userLibrary;
  28. DataTable userLibraryData;
  29. DataTable m_bt_DBData = new DataTable();
  30. List<string> TemplateList;
  31. frmReportConditionChoose m_condition;
  32. public int condition = -1;
  33. #endregion
  34. #region 构造函数
  35. public Export_ReportTemplate(OTSReport_Export in_export)
  36. {
  37. m_otsreport_export = in_export;
  38. TemplateList = new List<string>();
  39. m_condition = in_export.m_ReportApp.m_conditionChoose;
  40. //加载三元相图各项
  41. string pathtpf = in_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.TrigTemplateFileFolder + "\\" + in_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.TriTempFile;// Application.StartupPath + "\\Config\\ProData\\DefaultTriTemplateFile.tpf";
  42. TemplateList = new List<string>();
  43. DataSet ds = DataOperation.DataAccess.XMLoperate.GetXmlData(pathtpf, "XMLData");
  44. DataTable dt = ds.Tables["Member"];
  45. foreach (DataRow item in dt.Rows)
  46. {
  47. if (item["TemplateName"].ToString() != "")
  48. {
  49. TemplateList.Add(item["TemplateName"].ToString());
  50. }
  51. }
  52. m_list_dt = new List<DataTable>();
  53. }
  54. public Export_ReportTemplate()
  55. {
  56. m_list_dt = new List<DataTable>();
  57. }
  58. #endregion
  59. #region 插入测量结果Grid表格
  60. /// <summary>
  61. /// 向 模板设计器 中插入测量结果Grid表格
  62. /// </summary>
  63. /// <returns></returns>
  64. public DataTable InsertReportTemplateTable_ResultGrid()
  65. {
  66. //------------------加载模块,获取数据-------------------------------------------------
  67. ResultGrid ls_resultgrid = new ResultGrid(m_otsreport_export.m_ReportApp);
  68. Dictionary<string, string> keyValues_ResultGrid = ls_resultgrid.GetData_ResultGrid_Report();
  69. //------------------加载模块,获取数据结束----------------------------------------------
  70. Dictionary<string, string>.Enumerator en = keyValues_ResultGrid.GetEnumerator();
  71. string str_CLJGMC = "";
  72. string str_YXSJ = "";
  73. string str_SCZS = "";
  74. string str_FLFA = "";
  75. string str_YJCTZ = "";
  76. string str_SCMJ = "";
  77. string Magnification = "";
  78. string str_CKBZ = "GB/T30834-2014";
  79. keyValues_ResultGrid.TryGetValue(ls_resultgrid.table["col1"].ToString(), out str_CLJGMC);//测量结果名称
  80. keyValues_ResultGrid.TryGetValue(ls_resultgrid.table["col4"].ToString(), out str_YXSJ);//运行时间
  81. keyValues_ResultGrid.TryGetValue(ls_resultgrid.table["col5"].ToString(), out str_SCZS);//视场总数
  82. keyValues_ResultGrid.TryGetValue(ls_resultgrid.table["col6"].ToString(), out str_FLFA);//分类方案
  83. keyValues_ResultGrid.TryGetValue(ls_resultgrid.table["col7"].ToString(), out str_YJCTZ);//已检测特征
  84. keyValues_ResultGrid.TryGetValue(ls_resultgrid.table["col8"].ToString(), out str_SCMJ);//视场面积
  85. keyValues_ResultGrid.TryGetValue("Magnification", out Magnification);//放大倍数
  86. //将获取到的数据转换成报告模板能接收的格式。
  87. DataTable ls_new_dt = new DataTable();
  88. ls_new_dt.TableName = "ResultGrid";
  89. ls_new_dt.Columns.Add("CLJGMC"); //测量结果名称
  90. ls_new_dt.Columns.Add("YXSJ"); //运行时间
  91. ls_new_dt.Columns.Add("SCZS"); //视场总数
  92. ls_new_dt.Columns.Add("FLFA"); //分类方案
  93. ls_new_dt.Columns.Add("YJCTZ"); //已检测特征
  94. ls_new_dt.Columns.Add("SCMJ"); //视场面积
  95. ls_new_dt.Columns.Add("CKBZ"); //参考标准
  96. ls_new_dt.Columns.Add("FDBS");
  97. //行转列,这里不会发生改变,所以这样写
  98. DataRow dr = ls_new_dt.NewRow();
  99. dr["CLJGMC"] = str_CLJGMC;
  100. dr["YXSJ"] = str_YXSJ;
  101. dr["SCZS"] = str_SCZS;
  102. dr["FLFA"] = str_FLFA;
  103. dr["YJCTZ"] = str_YJCTZ;
  104. dr["SCMJ"] = str_SCMJ;
  105. dr["CKBZ"] = str_CKBZ;
  106. dr["FDBS"] = Magnification;
  107. ls_new_dt.Rows.Add(dr);
  108. m_list_dt.Add(ls_new_dt);
  109. return ls_new_dt;
  110. }
  111. #endregion
  112. #region 读取选择颗粒数据
  113. private void SelectParticleData(out DataTable dt)
  114. {
  115. List<Particle> selectParticles = m_otsreport_export.m_ReportApp.GetSelectedParticles();
  116. #region Datatable数据表格式
  117. DataTable dtUelect = new DataTable();
  118. dtUelect.Columns.Add("fieldid");
  119. dtUelect.Columns.Add("particleid");
  120. dtUelect.Columns.Add("AveGray");
  121. dtUelect.Columns.Add("RectLeft");
  122. dtUelect.Columns.Add("RectTop");
  123. dtUelect.Columns.Add("RectWidth");
  124. dtUelect.Columns.Add("RectHeight");
  125. dtUelect.Columns.Add("Area");
  126. dtUelect.Columns.Add("PosX");
  127. dtUelect.Columns.Add("PosY");
  128. dtUelect.Columns.Add("TypeId");
  129. dtUelect.Columns.Add("SegmentNum");
  130. dtUelect.Columns.Add("SEMPosX");
  131. dtUelect.Columns.Add("SEMPosY");
  132. dtUelect.Columns.Add("XrayId");
  133. dtUelect.Columns.Add("DMAX");
  134. dtUelect.Columns.Add("DMIN");
  135. dtUelect.Columns.Add("DPERP");
  136. dtUelect.Columns.Add("PERIMETER");
  137. dtUelect.Columns.Add("ORIENTATION");
  138. dtUelect.Columns.Add("DINSCR");
  139. dtUelect.Columns.Add("DMEAN");
  140. dtUelect.Columns.Add("DELONG");
  141. dtUelect.Columns.Add("DFERET");
  142. dtUelect.Columns.Add("TypeName");
  143. dtUelect.Columns.Add("TypeColor");
  144. #endregion
  145. for (int i = 0; i < selectParticles.Count; i++)
  146. {
  147. dtUelect.Rows.Add(selectParticles[i].FieldId, selectParticles[i].ParticleId, selectParticles[i].AveGray, selectParticles[i].RectLeft, selectParticles[i].RectTop, selectParticles[i].RectWidth, selectParticles[i].RectHeight, selectParticles[i].Area, selectParticles[i].PosX, selectParticles[i].PosX, selectParticles[i].TypeId, /*selectParticles[i].ElementNum,*/ selectParticles[i].SegmentNum, selectParticles[i].SEMPosX, selectParticles[i].SEMPosY, selectParticles[i].ParticleId, selectParticles[i].DMAX, selectParticles[i].DMIN, selectParticles[i].DPERP, selectParticles[i].PERIMETER, selectParticles[i].ORIENTATION, selectParticles[i].DINSCR, selectParticles[i].DMEAN, selectParticles[i].DELONG, selectParticles[i].DFERET, selectParticles[i].TypeName, selectParticles[i].TypeColor);
  148. }
  149. dt = dtUelect.Copy();
  150. }
  151. #endregion
  152. #region 读取标准库所需要的数据
  153. private void GetSTL(string str ,out DataTable data)
  154. {
  155. DataTable dt = new DataTable();
  156. dt.Columns.Add("TypeId");
  157. dt.Columns.Add("Hardness", typeof(double));
  158. dt.Columns.Add("Hardness_detailed");
  159. OTSCommon.SqLiteHelper sh = new OTSCommon.SqLiteHelper("data source='" + System.IO.Directory.GetCurrentDirectory()+ "\\Config\\SysData\\"+ str + ".db" + "'");
  160. DataTable dt_stl= sh.ExecuteQuery("select * from ClassifySTD");
  161. for (int i=0;i< dt_stl.Rows.Count;i++)
  162. {
  163. DataRow dr = dt.NewRow();
  164. dr["TypeId"] = dt_stl.Rows[i]["StrName"].ToString();
  165. dr["Hardness_detailed"] = dt_stl.Rows[i]["Hardness"].ToString();
  166. if (System.Text.RegularExpressions.Regex.Replace(dt_stl.Rows[i]["Hardness"].ToString(), @"[^\d.\d]", "").ToString()!="")
  167. {
  168. if (System.Text.RegularExpressions.Regex.Replace(dt_stl.Rows[i]["Hardness"].ToString(), @"[^\d.\d]", "")== "o. Def.")
  169. {
  170. dr["Hardness"] = 0;
  171. }
  172. else
  173. {
  174. dr["Hardness"] = Convert.ToDouble(System.Text.RegularExpressions.Regex.Replace(dt_stl.Rows[i]["Hardness"].ToString(), @"[^\d.\d]", ""));
  175. }
  176. }else
  177. {
  178. dr["Hardness"] = 0;
  179. }
  180. dt.Rows.Add(dr);
  181. }
  182. data = dt;
  183. }
  184. public bool GetDBData(c_TemplateClass m_mbszclass)
  185. {
  186. //GetSTL();
  187. m_bt_DBData.Clear();
  188. m_bt_DBData.Columns.Clear();
  189. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  190. List<string> colid = new List<string>() { "TypeName", "ar", "TypeId", "Largest", "Class", "con" };
  191. //获取粒级表
  192. string path1 = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFileFolder + m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFile;
  193. DataSet ds = OTSIncAReportApp.DataOperation.DataAccess.XMLoperate.GetXml(path1);
  194. string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
  195. for (int i = 0; i < sizestr.Split(',').Length - 1; i++)
  196. {
  197. if (sizestr.Split(',')[i].Length > 0)
  198. {
  199. double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
  200. double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
  201. colid.Add(d1.ToString() + "~" + d2.ToString());
  202. }
  203. }
  204. double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
  205. colid.Add(d.ToString() + "~MAX");
  206. for (int i=0;i< colid.Count;i++)
  207. {
  208. m_bt_DBData.Columns.Add(colid[i].ToString());
  209. }
  210. DataTable dt =InvalidRemoval(fielddata.GetParticleListForParticlSize("area", ""), "TypeName");
  211. DataTable AreaInformationOfAllElements = InvalidRemoval(fielddata.GetAreaByAllIncA(""), "TypeName");
  212. DataTable dtp = InvalidRemoval(fielddata.GetParticleAll(""), "GroupName");
  213. //选择颗粒信息
  214. DataTable data;
  215. SelectParticleData(out data);
  216. //选择颗粒整理成表
  217. DataTable Partic_dt = new DataTable();
  218. if (data.Rows.Count >0)
  219. {
  220. Partic_dt = GetParticleListForParticlSize(data, dtp);
  221. }
  222. List<string> vs = new List<string>() { "DMAX", "DMIN", "FERET", "Area" };
  223. string po = vs[m_otsreport_export.m_mbszclass.M_KLFXJG.index_cb_klcc_jsfs];
  224. switch (po)
  225. {
  226. case "DMAX":
  227. po = "DMAX";
  228. break;
  229. case "DMIN":
  230. po = "DMIN";
  231. break;
  232. case "CIRCLE":
  233. po = "Area";
  234. break;
  235. case "FERET":
  236. po = "DFERET";
  237. break;
  238. }
  239. //如果是全部颗粒(0)
  240. if (m_mbszclass.M_SY.int_xzkl == 0)
  241. {
  242. for (int i = 0; i < dt.Rows.Count; i++)
  243. {
  244. DataRow dr = m_bt_DBData.NewRow();
  245. dr["TypeName"] = dt.Rows[i]["TypeName"].ToString();
  246. dr["TypeId"] = dt.Rows[i]["TypeId"].ToString();
  247. dr["con"] = dt.Rows[i]["con"].ToString();
  248. dr["Class"] = dt.Rows[i]["GroupName"].ToString();
  249. dr["Largest"] = Math.Round(Convert.ToDouble(dt.Rows[i]["max"]), 2);
  250. for (int a = 6; a < colid.Count; a++)
  251. {
  252. string d1 = colid[a].Split('~')[0];
  253. string d2 = colid[a].Split('~')[1];
  254. if (d2 == "MAX")
  255. {
  256. d2 = "999";
  257. }
  258. DataRow[] datas = dtp.Select(getWhere(d2, d1, po, dt.Rows[i]["TypeId"].ToString()));
  259. dr[colid[a]] = datas.Count();
  260. }
  261. for (int a = 0; a < AreaInformationOfAllElements.Rows.Count; a++)
  262. {
  263. if (dt.Rows[i]["TypeId"].ToString() == AreaInformationOfAllElements.Rows[a]["TypeId"].ToString())
  264. {
  265. dr["ar"] = AreaInformationOfAllElements.Rows[a]["ar"];
  266. }
  267. }
  268. m_bt_DBData.Rows.Add(dr);
  269. }
  270. }
  271. else//选择颗粒(1)
  272. {
  273. for (int i = 0; i < Partic_dt.Rows.Count; i++)
  274. {
  275. DataRow dr = m_bt_DBData.NewRow();
  276. dr["TypeName"] = Partic_dt.Rows[i]["TypeName"].ToString();
  277. dr["TypeId"] = Partic_dt.Rows[i]["TypeId"].ToString();
  278. dr["con"] = Partic_dt.Rows[i]["con"].ToString();
  279. dr["Class"] = Partic_dt.Rows[i]["GroupName"].ToString();
  280. dr["Largest"] = Math.Round(Convert.ToDouble(Partic_dt.Rows[i]["max"]), 2);
  281. for (int a = 6; a < colid.Count; a++)
  282. {
  283. string d1 = colid[a].Split('~')[0];
  284. string d2 = colid[a].Split('~')[1];
  285. if (d2 == "MAX")
  286. {
  287. d2 = "999";
  288. }
  289. DataRow[] datas = dtp.Select(getWhere(d2, d1, po, Partic_dt.Rows[i]["TypeId"].ToString()));
  290. dr[colid[a]] = datas.Count();
  291. }
  292. dr["ar"] = Partic_dt.Rows[i]["Area"];
  293. m_bt_DBData.Rows.Add(dr);
  294. }
  295. }
  296. return true;
  297. }
  298. private DataTable GetParticleListForParticlSize(DataTable data,DataTable table)
  299. {
  300. DataTable dt_Partick = new DataTable();
  301. dt_Partick.Columns.Add("TypeId");
  302. dt_Partick.Columns.Add("TypeName");
  303. dt_Partick.Columns.Add("TypeColor");
  304. dt_Partick.Columns.Add("con");
  305. dt_Partick.Columns.Add("av");
  306. dt_Partick.Columns.Add("max");
  307. dt_Partick.Columns.Add("Area",typeof(double));
  308. dt_Partick.Columns.Add("GroupName");
  309. List<string> typeName = new List<string>();
  310. for (int i=0;i<data.Rows.Count;i++)
  311. {
  312. typeName.Add(data.Rows[i]["TypeId"].ToString());
  313. }
  314. typeName = typeName.Distinct().ToList();
  315. for (int i = 0; i < typeName.Count; i++)
  316. {
  317. DataTable dt = dt_Partick.Clone();
  318. for (int j = 0; j < data.Rows.Count; j++)
  319. {
  320. if (typeName[i].ToString() == data.Rows[j]["TypeId"].ToString())
  321. {
  322. DataRow row = dt.NewRow();
  323. row["TypeId"] = data.Rows[j]["TypeId"];
  324. row["TypeName"] = data.Rows[j]["TypeName"];
  325. row["TypeColor"] = data.Rows[j]["TypeColor"];
  326. row["Area"] = data.Rows[j]["Area"];
  327. dt.Rows.Add(row);
  328. }
  329. }
  330. DataRow dr = dt_Partick.NewRow();
  331. dr["TypeId"] = dt.Rows[0]["TypeId"].ToString();
  332. dr["TypeName"] = dt.Rows[0]["TypeName"].ToString();
  333. dr["TypeColor"] = dt.Rows[0]["TypeColor"].ToString();
  334. dr["con"] = dt.Rows.Count;
  335. dr["av"] = dt.Compute("min(Area)", "");
  336. dr["max"] = dt.Compute("Max(Area)", "");
  337. dr["Area"] = dt.Compute("SUM(Area)", "");
  338. dt_Partick.Rows.Add(dr);
  339. }
  340. for (int i=0;i< dt_Partick.Rows.Count;i++)
  341. {
  342. for (int j=0;j< table.Rows.Count;j++)
  343. {
  344. if (dt_Partick.Rows[i]["TypeId"].ToString()== table.Rows[j]["TypeId"].ToString())
  345. {
  346. dt_Partick.Rows[i]["GroupName"] = table.Rows[j]["GroupName"];
  347. break;
  348. }
  349. }
  350. }
  351. return dt_Partick;
  352. }
  353. private DataTable InvalidRemoval(DataTable dt ,string str)
  354. {
  355. DataTable dataTable = dt.Copy();
  356. dataTable.Clear();
  357. for (int i=0;i<dt.Rows.Count;i++)
  358. {
  359. if (dt.Rows[i][str].ToString() != "Invalid" && dt.Rows[i][str].ToString()!= "Not Identified" && dt.Rows[i][str].ToString()!= "NOT_INCLUTION")
  360. {
  361. dataTable.Rows.Add(dt.Rows[i].ItemArray);
  362. }
  363. }
  364. return dataTable;
  365. }
  366. private string getWhere(string max, string min, string col, string partic)
  367. {
  368. return col + ">=" + min + " and " + col + "<" + max + " and TypeId=" + partic;
  369. }
  370. #endregion
  371. #region 插入颗粒列表并带有帧图
  372. private bool DoesDBexist()
  373. {
  374. try
  375. {
  376. ResultFile resfile = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()];
  377. string str_libraryName = ((Dictionary<string, object>)((Dictionary<string, object>)((Dictionary<string, object>)resfile.ResultInfo["Sample"])["Members"])["MsrParams"])["STDName"].ToString();
  378. OTSCommon.SqLiteHelper sh = new OTSCommon.SqLiteHelper("data source='" + System.IO.Directory.GetCurrentDirectory() + "\\Config\\SysData\\" + str_libraryName + ".db" + "'");
  379. if (sh.ExecuteQuery("select * from ClassifySTD")==null)
  380. {
  381. return false;
  382. }
  383. return true;
  384. }
  385. catch
  386. {
  387. return false;
  388. }
  389. }
  390. private string datatable_data(DataTable dt,int it,string str)
  391. {
  392. if (str == "Hardness")
  393. {
  394. return dt.Rows[it]["Hardness_detailed"].ToString();
  395. }
  396. else
  397. if (str == "Area")
  398. {
  399. return Convert.ToDouble(dt.Rows[it][str]).ToString("#0.00");
  400. }
  401. else
  402. if (str== "DMAX")
  403. {
  404. return Math.Round(Convert.ToDouble(dt.Rows[it][str]), 2).ToString();
  405. }
  406. else
  407. {
  408. return dt.Rows[it][str].ToString();
  409. }
  410. }
  411. private bool JudgeWhetherItExists(int id, DataTable dt,string column)
  412. {
  413. for (int i=0;i<dt.Rows.Count;i++)
  414. {
  415. if (id == Convert.ToInt32(dt.Rows[i][column].ToString()))
  416. return true;
  417. }
  418. return false;
  419. }
  420. #endregion
  421. #region 插入颗粒尺寸表
  422. private DataTable QuantityOfIntegratedSubstances(DataTable dataTable, List<string> ClassName )
  423. {
  424. DataTable dt_Class = dataTable.Copy();
  425. dt_Class.Clear();
  426. dt_Class.TableName = "Particel";
  427. dt_Class.Columns.Remove("Name");
  428. dt_Class.Columns.Remove("TypeId");
  429. for (int i = 0; i < ClassName.Count; i++)
  430. {
  431. //保留当前循环中大类物质,去除其他物质
  432. DataTable dt = dataTable.Copy();
  433. dt.Clear();
  434. for (int a = 0; a < dataTable.Rows.Count; a++)
  435. {
  436. if (dataTable.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  437. {
  438. dt.Rows.Add(dataTable.Rows[a].ItemArray);
  439. }
  440. }
  441. if (dt.Rows.Count == 0)
  442. continue;
  443. DataTable dt_2 = new DataTable();
  444. dt_2 = dataTable.Copy();
  445. dt_2.Clear();
  446. DataRow row = dt_2.NewRow();
  447. dt_2.Rows.Add(row);
  448. for (int a=0;a< dt.Columns.Count;a++)
  449. {
  450. if (dt.Columns[a].ToString() != "Name" && dt.Columns[a].ToString() != "Class"&&dt.Columns[a].ToString()!= "TypeId")
  451. {
  452. bool bl = false;
  453. for (int b = 0; b < dt.Rows.Count; b++)
  454. {
  455. if (!dt.Rows[b].IsNull(dt.Columns[a].ToString()))
  456. {
  457. bl = true;
  458. }
  459. }
  460. if (bl)
  461. {
  462. dt_2.Rows[0][dt.Columns[a].ToString()] = decimal.Parse(dt.Compute("sum(" + dt.Columns[a].ToString() + ")", "").ToString());
  463. }
  464. }
  465. }
  466. dt_2.Columns.Remove("Name");
  467. dt_2.Columns.Remove("TypeId");
  468. dt_2.Rows[0]["Class"] = ClassName[i];
  469. //dt_2.Rows[0]["TypeId"] = dt.Rows[0]["TypeId"].ToString();
  470. dt_Class.Rows.Add(dt_2.Rows[0].ItemArray);
  471. }
  472. m_list_dt.Add(dt_Class);
  473. return dt_Class;
  474. }
  475. #endregion
  476. #region 插入平均元素含量表
  477. private DataTable ElementSorting( DataTable AllAnalysisDetails, List<string> ClassName , ParticleData fielddata)
  478. {
  479. DataTable dte = fielddata.GetAllElement();
  480. DataTable ElementSorting_dt = AllAnalysisDetails.Copy();
  481. ElementSorting_dt.Clear();
  482. for (int i=0; i< ClassName.Count;i++)
  483. {
  484. DataTable dt = AllAnalysisDetails.Copy();
  485. dt.Clear();
  486. for (int a=0;a< AllAnalysisDetails.Rows.Count;a++)
  487. {
  488. if (AllAnalysisDetails.Rows[a]["Class"].ToString()== ClassName[i].ToString())
  489. {
  490. dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  491. }
  492. }
  493. //将颗粒大小排序(从大到小)
  494. DataView dv = dt.DefaultView;
  495. dv.Sort = "Area DESC";
  496. DataTable dt_Element = dv.ToTable();
  497. for (int a=0;a< dt_Element.Rows.Count;a++)
  498. {
  499. ElementSorting_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  500. }
  501. }
  502. //循环创建元素列(类型定义为double,为以后计算做准备)
  503. for (int a = 0; a < dte.Rows.Count; a++)
  504. {
  505. ElementSorting_dt.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  506. }
  507. for (int a = 0; a < ElementSorting_dt.Rows.Count; a++)
  508. {
  509. DataTable ClassificationDetails = fielddata.GetAreaByIncA(ElementSorting_dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  510. //DataRow dr2 = ElementSorting_dt.NewRow();
  511. foreach (DataRow dr in ClassificationDetails.Rows)
  512. {
  513. double doe = Convert.ToDouble(dr["pc"]);
  514. ElementSorting_dt.Rows[a][dr["Name"].ToString()] = Math.Round( doe/Convert.ToDouble(ElementSorting_dt.Rows[a]["Area"]),2);
  515. }
  516. }
  517. return ElementSorting_dt;
  518. }
  519. private DataTable ElementalSubstance(DataTable AllAnalysisDetails, List<string> ClassName, ParticleData fielddata)
  520. {
  521. //当前元素物质类面积的总和
  522. double ElementalSubstance = 0;
  523. DataTable dte = fielddata.GetAllElement();
  524. DataTable dt_Class = new DataTable();
  525. dt_Class.Columns.Add("Name");
  526. dt_Class.Columns.Add("Area");
  527. //循环创建元素列(类型定义为double,为以后计算做准备)
  528. for (int a = 0; a < dte.Rows.Count; a++)
  529. {
  530. dt_Class.Columns.Add(dte.Rows[a]["Name"].ToString(), typeof(double));
  531. }
  532. //循环大类物质列表
  533. for (int i = 0; i < ClassName.Count; i++)
  534. {
  535. //保留当前循环中大类物质,去除其他物质
  536. DataTable dt = AllAnalysisDetails.Copy();
  537. dt.Clear();
  538. for (int a = 0; a < AllAnalysisDetails.Rows.Count; a++)
  539. {
  540. if (AllAnalysisDetails.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  541. {
  542. dt.Rows.Add(AllAnalysisDetails.Rows[a].ItemArray);
  543. }
  544. }
  545. if (dt.Rows.Count == 0)
  546. continue;
  547. //计算出当前循环中大类物质的面积
  548. ElementalSubstance=Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  549. DataTable ta = new DataTable();
  550. ta = dt_Class.Copy();
  551. ta.Clear();
  552. for (int a = 0; a < dt.Rows.Count; a++)
  553. {
  554. DataTable ClassificationDetails = fielddata.GetAreaByIncA(dt.Rows[a]["TypeId"].ToString(), "");//获取单个分类的元素信息
  555. DataRow dr2 = ta.NewRow();
  556. foreach (DataRow dr in ClassificationDetails.Rows)
  557. {
  558. double doe = Convert.ToDouble(dr["pc"]);
  559. dr2[dr["Name"].ToString()] = doe;
  560. }
  561. ta.Rows.Add(dr2);
  562. }
  563. DataTable dataTable = ta.Copy();
  564. dataTable.Clear();
  565. DataRow row = dataTable.NewRow();
  566. dataTable.Rows.Add(row);
  567. for (int a=0;a< ta.Columns.Count;a++)
  568. {
  569. if (ta.Columns[a].ToString()!="Name"&& ta.Columns[a].ToString() !="Class")
  570. {
  571. bool bl = false;
  572. for (int b=0;b<ta.Rows.Count;b++)
  573. {
  574. if (!ta.Rows[b].IsNull(ta.Columns[a].ToString()))
  575. {
  576. bl = true;
  577. }
  578. }
  579. if (bl)
  580. //datatSuncolumn(ta, ta.Columns[a].ToString());
  581. dataTable.Rows[0][ta.Columns[a].ToString()] = Math.Round(datatSuncolumn(ta, ta.Columns[a].ToString()) / ElementalSubstance,2);
  582. }
  583. }
  584. dataTable.Rows[0]["Name"] = ClassName[i].ToString();
  585. dataTable.Rows[0]["Area"] = ElementalSubstance;
  586. dt_Class.Rows.Add(dataTable.Rows[0].ItemArray);
  587. }
  588. return dt_Class;
  589. }
  590. private double datatSuncolumn(DataTable dt ,string str)
  591. {
  592. double sum=0;
  593. for (int i=0;i<dt.Rows.Count;i++)
  594. {
  595. if (dt.Rows[i][str].ToString()=="")
  596. {
  597. dt.Rows[i][str] = 0;
  598. }
  599. sum = sum+Convert.ToDouble(dt.Rows[i][str].ToString());
  600. }
  601. return sum;
  602. }
  603. private DataTable MaterialElementComposition(DataTable a_ElementalSubstance,int NumberOfColumns)
  604. {
  605. DataTable dt_ElementalSubstance = new DataTable();
  606. dt_ElementalSubstance.TableName = "ElementalSubstance_Value";
  607. dt_ElementalSubstance.Columns.Add("Name");
  608. dt_ElementalSubstance.Columns.Add("Area");
  609. for (int i=0;i< a_ElementalSubstance.Rows.Count;i++)
  610. {
  611. dt_ElementalSubstance.Rows.Add(a_ElementalSubstance.Rows[i]["Name"]);
  612. dt_ElementalSubstance.Rows[i]["Area"]=Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"]),2) ;
  613. }
  614. int cunt = 1;
  615. for (int i=0;i< NumberOfColumns; i++)
  616. {
  617. if (i< m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys.Count())
  618. {
  619. dt_ElementalSubstance.Columns.Add(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]);
  620. for (int a=0;a< a_ElementalSubstance.Rows.Count;a++)
  621. {
  622. if (a_ElementalSubstance.Columns.Contains(m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]))
  623. {
  624. if (a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]].ToString() == "")
  625. {
  626. dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
  627. }
  628. else
  629. {
  630. dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = a_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]];
  631. }
  632. }
  633. else
  634. {
  635. dt_ElementalSubstance.Rows[a][m_otsreport_export.m_mbszclass.M_YSFXJG.list_str_tb_ysfx_xsys[i]] = 0;
  636. }
  637. }
  638. }
  639. else
  640. {
  641. dt_ElementalSubstance.Columns.Add("Null"+ cunt.ToString());
  642. cunt = cunt + 1;
  643. for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  644. {
  645. dt_ElementalSubstance.Rows[a][i+2] = "-";
  646. }
  647. }
  648. }
  649. DataTable dataTable = new DataTable();
  650. dataTable = dt_ElementalSubstance.Copy();
  651. dataTable.Clear();
  652. DataRow row = dataTable.NewRow();
  653. dataTable.Rows.Add(row);
  654. dataTable.TableName = "ElementalSubstance_Name";
  655. for (int i=0;i< dataTable.Columns.Count;i++)
  656. {
  657. dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
  658. }
  659. m_list_dt.Add(dataTable);
  660. m_list_dt.Add(dt_ElementalSubstance);
  661. return dt_ElementalSubstance;
  662. }
  663. #endregion
  664. #region 其它部份
  665. /// <summary>
  666. /// 输入颗粒的所在帧图id,颗粒id,颗粒类型id,获取对应的XRay能谱数据图
  667. /// </summary>
  668. /// <returns></returns>
  669. public Bitmap ExportXRayBitmap(string in_fieldid, string in_particleid, int in_stdtypeid, string TypeName, ParticleData particleData)
  670. {
  671. Bitmap ret_bp;
  672. //显示xray相关信息
  673. uint[] Search_xray = new uint[2000];
  674. uint[] Analysis_xray = new uint[2000];
  675. //
  676. int i_xray_id = 0;
  677. List<Element> list_celementchemistryclr = new List<Element>();
  678. //获取Xray数据
  679. list_celementchemistryclr = new List<Element>();
  680. Particle list = particleData.GetParticleByFidAndPid(in_fieldid, in_particleid);
  681. if (list == null)
  682. {
  683. return null;
  684. }
  685. Particle particle = list;
  686. if (particle.XrayId > -1)
  687. {
  688. for (int i = 0; i < 2000; i++)
  689. {
  690. if (particle.XRayData!=null)
  691. {
  692. Analysis_xray[i] = BitConverter.ToUInt32(particle.XRayData, i * 4);
  693. }
  694. }
  695. Search_xray = Analysis_xray;
  696. i_xray_id = particle.XrayId;
  697. list_celementchemistryclr = particle.ElementList;
  698. }
  699. //get CElementChemistryClr list
  700. List<ShowElementInfo> list_showelementinfo = new List<ShowElementInfo>();
  701. for (int i = 0; i < list_celementchemistryclr.Count; i++)
  702. {
  703. ShowElementInfo ls_sei = new ShowElementInfo();
  704. ls_sei.ElementName = list_celementchemistryclr[i].Name;
  705. ls_sei.Percentage = list_celementchemistryclr[i].Percentage;
  706. ls_sei.dKF = Convert.ToDouble(CListPeriodic.GetPeriodicByEleName(ls_sei.ElementName).K_Peak);
  707. list_showelementinfo.Add(ls_sei);
  708. }
  709. //获取使用标准库的名称
  710. string str_stdname = "";
  711. string str_IncALibName = "";
  712. if (in_stdtypeid < 1000)
  713. {
  714. //小于1000,使用系统默认分类
  715. str_IncALibName = TypeName;
  716. str_stdname = "Default standard library";
  717. }
  718. else if (in_stdtypeid >= 1000 && in_stdtypeid < 10000)
  719. {
  720. //大于等于1000,并且小于10000时,使用系统数据库中夹杂物来分析
  721. str_IncALibName = TypeName;
  722. str_stdname = "User defined standard library";
  723. }
  724. else if (in_stdtypeid > 10000)
  725. {
  726. //大于10000时,使用用户标准库来分析夹杂物名称
  727. str_IncALibName = TypeName;
  728. str_stdname = "System standard library";
  729. }
  730. //获取数据后,需要对xraytable设置
  731. OTSIncAReportGraph.Controls.Control_XRayTable control_XRayTable1 = new Control_XRayTable();
  732. control_XRayTable1.SetXRayShowLineValue(Search_xray, Analysis_xray, list_showelementinfo);
  733. //颗粒国标信息
  734. //control_XRayTable1.GBInfoStr = in_dparticle.GBContent;
  735. control_XRayTable1.MaterialName = str_IncALibName;//杂夹物
  736. control_XRayTable1.STDName = str_stdname;//标准库
  737. control_XRayTable1.List_ShowElementInfo = list_showelementinfo;
  738. control_XRayTable1.Visible = true;
  739. control_XRayTable1.Invalidate();
  740. control_XRayTable1.Refresh();
  741. ret_bp = control_XRayTable1.ExportXRayImage();
  742. return ret_bp;
  743. }
  744. /// <summary>
  745. /// 传入DataTable,和行号,返回该Row行中,返回6个靠前的元素,不足6个返回空
  746. /// </summary>
  747. /// <param name="in_dt"></param>
  748. /// <param name="row_index"></param>
  749. /// <returns></returns>
  750. private void GetMaxElementFromDataTable(DataTable in_dt, int row_index, out List<string> out_list_elementname, out List<double> out_list_elementvalue)
  751. {
  752. out_list_elementname = new List<string>();
  753. out_list_elementvalue = new List<double>();
  754. //分别排出元素名,元素值列表
  755. List<string> list_elementname = new List<string>();
  756. List<double> list_elementvalue = new List<double>();
  757. string str_element = in_dt.Rows[row_index]["Element"].ToString();
  758. //防止取出的元素信息为空
  759. if (str_element != "")
  760. {
  761. string[] strcbo = str_element.Split(';');
  762. for (int i = 0; i < strcbo.Length-1; i++)
  763. {
  764. string[] str = strcbo[i].Split('-');
  765. list_elementname.Add(str[0]);
  766. list_elementvalue.Add(Math.Round(Convert.ToDouble(str[1]), 2));
  767. }
  768. }
  769. //循环6次,得到最大的6个元素信息
  770. for (int geti = 0; geti < 11; geti++)
  771. {
  772. double max_elementvalue = -1;
  773. string max_elementname = "";
  774. int max_index = -1;
  775. if (list_elementvalue.Count > 0)
  776. {
  777. for (int i = 0; i < list_elementvalue.Count; i++)
  778. {
  779. if (list_elementvalue[i] > max_elementvalue)
  780. {
  781. max_elementvalue = list_elementvalue[i];
  782. max_elementname = list_elementname[i];
  783. max_index = i;
  784. }
  785. }
  786. //移除掉最大的元素
  787. list_elementname.RemoveAt(max_index);
  788. list_elementvalue.RemoveAt(max_index);
  789. //将最大的元素添加到list中
  790. if (max_elementvalue > 0)
  791. {
  792. out_list_elementname.Add(max_elementname);
  793. out_list_elementvalue.Add(max_elementvalue);
  794. }
  795. else
  796. {
  797. out_list_elementname.Add(" ");
  798. out_list_elementvalue.Add(0);
  799. }
  800. }
  801. else
  802. {
  803. //如果元素数量已经不够,则添加空
  804. out_list_elementname.Add(" ");
  805. out_list_elementvalue.Add(0);
  806. }
  807. }
  808. }
  809. #endregion
  810. /// <summary>
  811. /// 国标一
  812. /// </summary>
  813. /// <returns></returns>
  814. public List<DataTable> InsertReportTemplateTable_ChineseStandardABCDDS(OTSCLRINTERFACE.CPropParamClr cPropParamClr, List<string> datasourcelist , int DataSourceId ,int GB_index)
  815. {
  816. //得到国标一的DataTable表格
  817. cPropParamClr.SetDataSourceList(datasourcelist);
  818. cPropParamClr.SetDataSourceId(DataSourceId);//
  819. cPropParamClr.SetType((int)OTSSampleReportInfo.DisplayPicutureType.AnalyzeDataTable);//table
  820. cPropParamClr.SetCalTableType(GB_index);//国标1
  821. if (GB_index == (int)OTSSampleReportInfo.CALCULATE_TABLE_TYPE.GB_Method1)
  822. {
  823. List<OTSCLRINTERFACE.CGridDataClr> listGriddataclr = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_ReportMgr.GridDataTransfer(cPropParamClr);
  824. m_otsreport_export.m_ReportApp.im_ChineseStandardABCDDS = new OTSIncAReportGB.ChineseStandardABCDDS(m_otsreport_export.m_ReportApp.m_rstDataMgr.m_ReportMgr, listGriddataclr);
  825. m_otsreport_export.m_ReportApp.m_TablesWindow.Controls.Clear();
  826. return m_otsreport_export.m_ReportApp.im_ChineseStandardABCDDS.ChineseStandardABCD_GetDataTable(); ;
  827. }
  828. else
  829. {
  830. List<OTSCLRINTERFACE.CGridDataClr> listGriddataclr2 = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_ReportMgr.GridDataTransfer(cPropParamClr);//
  831. m_otsreport_export.m_ReportApp.m_TablesWindow.Controls.Clear();
  832. m_otsreport_export.m_ReportApp.im_NationalStandardMethodTwo = new OTSIncAReportGB.NationalStandardMethodTwo(m_otsreport_export.m_ReportApp.m_rstDataMgr.m_ReportMgr, listGriddataclr2);
  833. return m_otsreport_export.m_ReportApp.im_NationalStandardMethodTwo.ChineseStandardABCD_GetDataTable();
  834. }
  835. }
  836. //-------------------------------------------------dev----------------------------------------------------------
  837. /// <summary>
  838. /// DEV颗粒列表颗粒前20个谱图排序
  839. /// </summary>
  840. /// <param name="m_mbszclass"></param>
  841. /// <returns></returns>
  842. public DataTable Get_dev_kllb_data(c_TemplateClass m_mbszclass)
  843. {
  844. int serialNumber = 1;
  845. //------------------加载模块,获取数据-------------------------------------------------
  846. m_otsreport_export.m_ReportApp.im_ParticlesGridDevidePage = new ParticlesGridDevidePage(m_otsreport_export.m_ReportApp);
  847. DataTable SelectParticleTable = new DataTable();
  848. SelectParticleData(out SelectParticleTable);
  849. int sel = 0;
  850. if (m_mbszclass.M_SY.int_xzkl == 0)
  851. {
  852. sel = 0;
  853. }
  854. else
  855. {
  856. sel = 1;
  857. }
  858. //根据sql条件,查询获取颗粒信息数据
  859. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  860. DataTable dt = InvalidRemoval(fielddata.GetIncaSurfaceData(SelectParticleTable, sel, m_mbszclass.M_KLLBXX.list_str_kllb_qcys), "TypeName");
  861. ResultFile resfile = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()];
  862. string str_libraryName = ((Dictionary<string, object>)((Dictionary<string, object>)((Dictionary<string, object>)resfile.ResultInfo["Sample"])["Members"])["MsrParams"])["STDName"].ToString();
  863. if (m_mbszclass.M_KLLBXX.str_cb_kllb_sort_p1.ToString() == "Hardness")
  864. {
  865. dt.Columns.Add("Hardness", typeof(double));
  866. dt.Columns.Add("Hardness_detailed");
  867. if (DoesDBexist())
  868. {
  869. DataTable dt_stl = new DataTable();
  870. GetSTL(str_libraryName, out dt_stl);
  871. for (int i = 0; i < dt.Rows.Count; i++)
  872. {
  873. for (int a = 0; a < dt_stl.Rows.Count; a++)
  874. {
  875. if (dt.Rows[i]["TypeName"].ToString() == dt_stl.Rows[a]["TypeId"].ToString())
  876. {
  877. dt.Rows[i]["Hardness"] = Convert.ToDouble(dt_stl.Rows[a]["Hardness"]);
  878. dt.Rows[i]["Hardness_detailed"] = dt_stl.Rows[a]["Hardness_detailed"];
  879. break;
  880. }
  881. }
  882. }
  883. }
  884. }
  885. //去除物质分类(非夹杂物分类)
  886. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++)
  887. {
  888. for (int i = dt.Rows.Count-1; i >=0; i--)
  889. {
  890. if (dt.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString())
  891. {
  892. dt.Rows.RemoveAt(i);
  893. }
  894. }
  895. }
  896. //将颗粒大小排序(从大到小)
  897. DataView dv = dt.DefaultView;
  898. dv.Sort = m_mbszclass.M_KLLBXX.str_cb_kllb_sort_p1.ToString() + " DESC";
  899. DataTable dt_ParticlesGridDevidePage = dv.ToTable();
  900. string str_resultPath = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath;
  901. //------------------加载模块,获取数据结束----------------------------------------------
  902. #region 创建要插入数据库表结构
  903. //插入模板需父子表,结构
  904. //表名field_dt表:(父表) 帧图表
  905. DataTable DT_field_dt = new DataTable();
  906. DT_field_dt.TableName = "field_dt";
  907. DataColumn colpictid2 = new DataColumn("FieldId");
  908. colpictid2.DataType = typeof(int);
  909. DT_field_dt.Columns.Add(colpictid2);
  910. //图像列
  911. DataColumn colpict2 = new DataColumn("FieldImg");
  912. colpict2.DataType = System.Type.GetType("System.Byte[]");
  913. DT_field_dt.Columns.Add(colpict2);
  914. //largest20表:(无关系表) 需要显示前20条带有显示能谱图像的颗粒表
  915. DataTable DT_Largest20 = new DataTable();
  916. DT_Largest20.TableName = "Largest20";
  917. DT_Largest20.Columns.Add("pid");
  918. DT_Largest20.Columns.Add("Size");
  919. DT_Largest20.Columns.Add("Width");
  920. DT_Largest20.Columns.Add("DMAX");
  921. DT_Largest20.Columns.Add("DMIN");
  922. DT_Largest20.Columns.Add("Class");
  923. DT_Largest20.Columns.Add("ColName1");
  924. DT_Largest20.Columns.Add("ColName2");
  925. DT_Largest20.Columns.Add("ColName3");
  926. DT_Largest20.Columns.Add("ColName4");
  927. DT_Largest20.Columns.Add("ColName5");
  928. DT_Largest20.Columns.Add("ColName6");
  929. DT_Largest20.Columns.Add("ColName7");
  930. DT_Largest20.Columns.Add("ColName8");
  931. DT_Largest20.Columns.Add("ColName9");
  932. DT_Largest20.Columns.Add("ColName10");
  933. DT_Largest20.Columns.Add("ColVal1");
  934. DT_Largest20.Columns.Add("ColVal2");
  935. DT_Largest20.Columns.Add("ColVal3");
  936. DT_Largest20.Columns.Add("ColVal4");
  937. DT_Largest20.Columns.Add("ColVal5");
  938. DT_Largest20.Columns.Add("ColVal6");
  939. DT_Largest20.Columns.Add("ColVal7");
  940. DT_Largest20.Columns.Add("ColVal8");
  941. DT_Largest20.Columns.Add("ColVal9");
  942. DT_Largest20.Columns.Add("ColVal10");
  943. // 图像列
  944. DT_Largest20.Columns.Add("p1", typeof(Bitmap));
  945. DT_Largest20.Columns.Add("p2", typeof(Bitmap));
  946. DT_Largest20.Columns.Add("p3", typeof(Bitmap));
  947. #endregion
  948. #region 插入-前20颗粒部份
  949. for (int i_row = 0; i_row < dt_ParticlesGridDevidePage.Rows.Count; i_row++)
  950. {
  951. if (dt_ParticlesGridDevidePage.Rows[i_row].ItemArray[24].ToString() != "Not Identified")
  952. {
  953. //获取颗粒的fieldid,和particleid
  954. string str_fieldid = dt_ParticlesGridDevidePage.Rows[i_row]["fieldid"].ToString();
  955. string str_particleid = dt_ParticlesGridDevidePage.Rows[i_row]["particleid"].ToString();
  956. //string str_subparticles = dt_ParticlesGridDevidePage.Rows[i_row]["SubParticles"].ToString();
  957. string str_typeid = dt_ParticlesGridDevidePage.Rows[i_row]["TypeId"].ToString();
  958. string str_typename = dt_ParticlesGridDevidePage.Rows[i_row]["TypeName"].ToString();
  959. string str_element = dt_ParticlesGridDevidePage.Rows[i_row]["Element"].ToString();
  960. //获取原始颗粒图像
  961. Bitmap bp_particle = new Bitmap(1, 1);
  962. string str_path = str_resultPath + "\\FIELD_FILES\\";
  963. string str_imagePath = str_path + "Field" + str_fieldid.ToString() + ".bmp";
  964. if (str_fieldid == "-1")
  965. continue;
  966. if (serialNumber > 20)
  967. continue;
  968. Rectangle rectangle = new Rectangle() { X = Convert.ToInt32(dt_ParticlesGridDevidePage.Rows[i_row]["RectLeft"]), Y = Convert.ToInt32(dt_ParticlesGridDevidePage.Rows[i_row]["RectTop"]), Width = Convert.ToInt32(dt_ParticlesGridDevidePage.Rows[i_row]["RectWidth"]), Height = Convert.ToInt32(dt_ParticlesGridDevidePage.Rows[i_row]["RectHeight"]) };
  969. Bitmap bp_field = fielddata.ReadImageFile(str_imagePath);
  970. bp_particle = fielddata.GetBitmapByParticle(bp_field, rectangle);
  971. bp_particle.Tag = new List<string>() { dt_ParticlesGridDevidePage.Rows[i_row]["FieldId"].ToString(), dt_ParticlesGridDevidePage.Rows[i_row]["ParticleId"].ToString(), dt_ParticlesGridDevidePage.Rows[i_row]["TypeId"].ToString() };
  972. //}
  973. //获取该颗粒的xray能谱图像
  974. System.Drawing.Bitmap bp_xraybp = ExportXRayBitmap(str_fieldid,
  975. str_particleid, Convert.ToInt32(str_typeid), str_typename, fielddata);
  976. Bitmap ls_xraybpnew = new Bitmap(1, 1);
  977. ls_xraybpnew = OTSIncAReportGraph.Class.DrawFunction.KiResizeImage(bp_xraybp, 700, 115);//能谱图处理
  978. //获取该颗粒的二次放大处理图像
  979. Bitmap ls_processbitmap = new Bitmap(1, 1);
  980. ls_processbitmap = OTSIncAReportGraph.Class.DrawFunction.GetReZoomBitmap(bp_particle);// (Bitmap)bp_particle.Clone();//待完善
  981. //再将图像转成二进制流-------------------------------------------------------------------
  982. //原图
  983. MemoryStream newms_p1 = new MemoryStream();
  984. bp_particle.Save(newms_p1, System.Drawing.Imaging.ImageFormat.Bmp);
  985. //二次放大图
  986. MemoryStream newms_p2 = new MemoryStream();
  987. ls_processbitmap.Save(newms_p2, System.Drawing.Imaging.ImageFormat.Bmp);
  988. //能谱图
  989. MemoryStream newms_p3 = new MemoryStream();
  990. ls_xraybpnew.Save(newms_p3, System.Drawing.Imaging.ImageFormat.Bmp);
  991. //---------------------------------------------------------------------------------------
  992. DataRow dr = DT_Largest20.NewRow();
  993. dr["p1"] = bp_particle;
  994. dr["p2"] = ls_processbitmap;
  995. dr["p3"] = ls_xraybpnew;
  996. newms_p1.Dispose();
  997. newms_p2.Dispose();
  998. newms_p3.Dispose();
  999. dr["pid"] = serialNumber++.ToString();
  1000. //颗粒列表列中第一个可选参数
  1001. dr["Size"] = datatable_data(dt_ParticlesGridDevidePage, i_row, m_mbszclass.M_KLLBXX.str_cb_kllb_sort_p1);
  1002. //这个参数没有用
  1003. dr["Width"] = dt_ParticlesGridDevidePage.Rows[i_row]["rectwidth"].ToString();
  1004. //颗粒列表列中第二个可选参数
  1005. dr["DMAX"] = datatable_data(dt_ParticlesGridDevidePage, i_row, m_mbszclass.M_KLLBXX.str_cb_kllb_sort_p2);
  1006. //颗粒列表列中第三个可选参数
  1007. dr["DMIN"] = datatable_data(dt_ParticlesGridDevidePage, i_row, m_mbszclass.M_KLLBXX.str_cb_kllb_sort_p3);
  1008. //颗粒列表列中显示分类不可以选择
  1009. dr["Class"] = dt_ParticlesGridDevidePage.Rows[i_row]["typename"].ToString();
  1010. GetMaxElementFromDataTable(dt_ParticlesGridDevidePage, i_row, out List<string> list_max_elementname, out List<double> list_max_elementvale);
  1011. double colVal = 0;
  1012. for (int i=0;i< list_max_elementvale.Count;i++)
  1013. {
  1014. colVal = colVal + Convert.ToDouble(list_max_elementvale[i]);
  1015. }
  1016. //元素1
  1017. dr["ColName1"] = list_max_elementname[0];
  1018. dr["ColVal1"] = ParameterNormalization(colVal, list_max_elementvale[0]);
  1019. //元素2
  1020. dr["ColName2"] = list_max_elementname[1];
  1021. dr["ColVal2"] = ParameterNormalization(colVal, list_max_elementvale[1]);
  1022. //元素3
  1023. dr["ColName3"] = list_max_elementname[2];
  1024. dr["ColVal3"] = ParameterNormalization(colVal, list_max_elementvale[2]);
  1025. //元素4
  1026. dr["ColName4"] = list_max_elementname[3];
  1027. dr["ColVal4"] = ParameterNormalization(colVal, list_max_elementvale[3]);
  1028. //元素5
  1029. dr["ColName5"] = list_max_elementname[4];
  1030. dr["ColVal5"] = ParameterNormalization(colVal, list_max_elementvale[4]);
  1031. //元素6
  1032. dr["ColName6"] = list_max_elementname[5];
  1033. dr["ColVal6"] = ParameterNormalization(colVal, list_max_elementvale[5]);
  1034. //元素7
  1035. dr["ColName7"] = list_max_elementname[6];
  1036. dr["ColVal7"] = ParameterNormalization(colVal, list_max_elementvale[6]);
  1037. //元素8
  1038. dr["ColName8"] = list_max_elementname[7];
  1039. dr["ColVal8"] = ParameterNormalization(colVal, list_max_elementvale[7]);
  1040. //元素6
  1041. dr["ColName9"] = list_max_elementname[8];
  1042. dr["ColVal9"] = ParameterNormalization(colVal, list_max_elementvale[8]);
  1043. //元素6
  1044. dr["ColName9"] = list_max_elementname[9];
  1045. dr["ColVal9"] = ParameterNormalization(colVal, list_max_elementvale[9]);
  1046. DT_Largest20.Rows.Add(dr);
  1047. }
  1048. }
  1049. #endregion
  1050. return DT_Largest20;
  1051. }
  1052. /// <summary>
  1053. /// 参数归一化
  1054. /// </summary>
  1055. /// <param name="a_mi">总数</param>
  1056. /// <param name="m">传参</param>
  1057. /// <returns></returns>
  1058. public string ParameterNormalization(double a_mi,double m)
  1059. {
  1060. double ColVal = Convert.ToDouble(m / a_mi * 100);
  1061. if (ColVal == 0)
  1062. {
  1063. return "";
  1064. }
  1065. else
  1066. {
  1067. return Math.Round(ColVal, 2).ToString();
  1068. }
  1069. }
  1070. public void Get_dev_kllb_data_frame(c_TemplateClass m_mbszclass, out DataTable file_pic, out List<DataTable> list_dt)
  1071. {
  1072. //------------------加载模块,获取数据-------------------------------------------------
  1073. m_otsreport_export.m_ReportApp.im_ParticlesGridDevidePage = new ParticlesGridDevidePage(m_otsreport_export.m_ReportApp);
  1074. SelectParticleData(out DataTable SelectParticleTable);
  1075. int sel = 0;
  1076. if (m_mbszclass.M_SY.int_xzkl == 0)
  1077. {
  1078. sel = 0;
  1079. }
  1080. else
  1081. {
  1082. sel = 1;
  1083. }
  1084. //根据sql条件,查询获取颗粒信息数据
  1085. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  1086. DataTable dt = InvalidRemoval(fielddata.GetIncaSurfaceData(SelectParticleTable, sel, m_mbszclass.M_KLLBXX.list_str_kllb_qcys), "TypeName");
  1087. ResultFile resfile = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()];
  1088. string str_libraryName = ((Dictionary<string, object>)((Dictionary<string, object>)((Dictionary<string, object>)resfile.ResultInfo["Sample"])["Members"])["MsrParams"])["STDName"].ToString();
  1089. if (m_mbszclass.M_KLLBXX.str_cb_kllb_sort_p1.ToString() == "Hardness")
  1090. {
  1091. dt.Columns.Add("Hardness", typeof(double));
  1092. dt.Columns.Add("Hardness_detailed");
  1093. if (DoesDBexist())
  1094. {
  1095. DataTable dt_stl = new DataTable();
  1096. GetSTL(str_libraryName, out dt_stl);
  1097. for (int i = 0; i < dt.Rows.Count; i++)
  1098. {
  1099. for (int a = 0; a < dt_stl.Rows.Count; a++)
  1100. {
  1101. if (dt.Rows[i]["TypeName"].ToString() == dt_stl.Rows[a]["TypeId"].ToString())
  1102. {
  1103. dt.Rows[i]["Hardness"] = Convert.ToDouble(dt_stl.Rows[a]["Hardness"]);
  1104. dt.Rows[i]["Hardness_detailed"] = dt_stl.Rows[a]["Hardness_detailed"];
  1105. break;
  1106. }
  1107. }
  1108. }
  1109. }
  1110. }
  1111. //去除物质分类(非夹杂物分类)
  1112. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++)
  1113. {
  1114. for (int i = dt.Rows.Count - 1; i >= 0; i--)
  1115. {
  1116. if (dt.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString())
  1117. {
  1118. dt.Rows.RemoveAt(i);
  1119. }
  1120. }
  1121. }
  1122. //将颗粒大小排序(从大到小)
  1123. DataView dv = dt.DefaultView;
  1124. dv.Sort = m_mbszclass.M_KLLBXX.str_cb_kllb_sort_p1.ToString() + " DESC";
  1125. DataTable dt_ParticlesGridDevidePage = dv.ToTable();
  1126. string str_resultPath = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath;
  1127. DataTable DT_field_dt = new DataTable();
  1128. DT_field_dt.TableName = "field_dt";
  1129. DT_field_dt.Columns.Add("FieldId", typeof(int));
  1130. //图像列
  1131. DT_field_dt.Columns.Add("FieldImg", typeof(Bitmap));
  1132. //首先生成标记颗粒的帧图图像文件
  1133. DataTable dt_GridDevidePage = dt_ParticlesGridDevidePage.Copy();
  1134. dt_GridDevidePage.Clear();
  1135. for (int i = 0; i < dt_ParticlesGridDevidePage.Rows.Count; i++)
  1136. {
  1137. if (dt_ParticlesGridDevidePage.Rows[i]["TypeName"].ToString() != "Not Identified")
  1138. {
  1139. dt_GridDevidePage.Rows.Add(dt_ParticlesGridDevidePage.Rows[i].ItemArray);
  1140. }
  1141. }
  1142. m_otsreport_export.m_ReportApp.im_ParticlesGridDevidePage.Out_MarkParticleRectangleOnFieldFile(str_resultPath, dt_GridDevidePage, out List<string> vs, out DataTable data);
  1143. FrameGraphParticleTableDatat(dt_ParticlesGridDevidePage, fielddata, data, m_mbszclass, out DataTable data_A);
  1144. List<DataTable> listData = new List<DataTable>();
  1145. for (int i = 0; i < data.Rows.Count; i++)
  1146. {
  1147. DataTable dataTable = data_A.Clone();
  1148. //在数据表中有颗粒在该帧图中的话,则对该帧图标记图像进行读取存入数据库
  1149. DataRow[] datarowlist = data_A.Select(data.Rows[i]["fieldid"].ToString());
  1150. if (datarowlist.Count() > 0)
  1151. {
  1152. for (int a = 0; a < data_A.Rows.Count; a++)
  1153. {
  1154. if (data.Rows[i]["id"].ToString() == data_A.Rows[a]["FieldId"].ToString())
  1155. {
  1156. dataTable.Rows.Add(data_A.Rows[a].ItemArray);
  1157. }
  1158. }
  1159. listData.Add(dataTable);
  1160. }
  1161. }
  1162. file_pic = data.Copy();
  1163. list_dt = listData;
  1164. }
  1165. private void FrameGraphParticleTableDatat(DataTable dt_ParticlesGridDevidePage, ParticleData fielddata, DataTable DT_field_dt, c_TemplateClass m_mbszclass, out DataTable data_A)
  1166. {
  1167. //将颗粒大小排序(从大到小)
  1168. DataView dv = dt_ParticlesGridDevidePage.DefaultView;
  1169. dv.Sort = m_mbszclass.M_KLLBXX.str_cb_kllb_chartSort_p1.ToString() + " DESC";
  1170. DataTable dt = dv.ToTable();
  1171. //表名Largest_frame表:(子表) 显示20条颗粒除外的部份颗粒信息
  1172. DataTable FrameGraphSubTable = new DataTable();
  1173. FrameGraphSubTable.TableName = "FrameGraphSubTable";
  1174. FrameGraphSubTable.Columns.Add("pid");
  1175. FrameGraphSubTable.Columns.Add("Size");
  1176. FrameGraphSubTable.Columns.Add("Width");
  1177. FrameGraphSubTable.Columns.Add("DMAX");
  1178. FrameGraphSubTable.Columns.Add("DMIN");
  1179. FrameGraphSubTable.Columns.Add("Class");
  1180. FrameGraphSubTable.Columns.Add("ColName1");
  1181. FrameGraphSubTable.Columns.Add("ColName2");
  1182. FrameGraphSubTable.Columns.Add("ColName3");
  1183. FrameGraphSubTable.Columns.Add("ColName4");
  1184. FrameGraphSubTable.Columns.Add("ColName5");
  1185. FrameGraphSubTable.Columns.Add("ColName6");
  1186. FrameGraphSubTable.Columns.Add("ColName7");
  1187. FrameGraphSubTable.Columns.Add("ColName8");
  1188. FrameGraphSubTable.Columns.Add("ColName9");
  1189. FrameGraphSubTable.Columns.Add("ColName10");
  1190. FrameGraphSubTable.Columns.Add("ColVal1");
  1191. FrameGraphSubTable.Columns.Add("ColVal2");
  1192. FrameGraphSubTable.Columns.Add("ColVal3");
  1193. FrameGraphSubTable.Columns.Add("ColVal4");
  1194. FrameGraphSubTable.Columns.Add("ColVal5");
  1195. FrameGraphSubTable.Columns.Add("ColVal6");
  1196. FrameGraphSubTable.Columns.Add("ColVal7");
  1197. FrameGraphSubTable.Columns.Add("ColVal8");
  1198. FrameGraphSubTable.Columns.Add("ColVal9");
  1199. FrameGraphSubTable.Columns.Add("ColVal10");
  1200. FrameGraphSubTable.Columns.Add("pic", typeof(Bitmap));
  1201. FrameGraphSubTable.Columns.Add("FieldId", typeof(int));
  1202. for (int i_row = 0; i_row < dt.Rows.Count; i_row++)
  1203. {
  1204. if (dt.Rows[i_row]["element"].ToString() == "")
  1205. continue;
  1206. if (dt.Rows[i_row]["TypeName"].ToString() == "Not Identified")
  1207. continue;
  1208. string str_fieldid = dt.Rows[i_row]["fieldid"].ToString();
  1209. if (JudgeWhetherItExists(Convert.ToInt32(str_fieldid), DT_field_dt, "id"))
  1210. {
  1211. //获取原始颗粒图像
  1212. Bitmap bp_particle = new Bitmap(1, 1);
  1213. Bitmap bp_field = new Bitmap(1, 1);
  1214. Rectangle rectangle = new Rectangle() { X = Convert.ToInt32(dt.Rows[i_row]["RectLeft"]), Y = Convert.ToInt32(dt.Rows[i_row]["RectTop"]), Width = Convert.ToInt32(dt.Rows[i_row]["RectWidth"]), Height = Convert.ToInt32(dt.Rows[i_row]["RectHeight"]) };
  1215. for (int i = 0; i < DT_field_dt.Rows.Count; i++)
  1216. {
  1217. if (dt.Rows[i_row]["FieldId"].ToString() == DT_field_dt.Rows[i]["id"].ToString())
  1218. {
  1219. bp_field = new Bitmap(DT_field_dt.Rows[i]["fieldFullName"].ToString());
  1220. }
  1221. }
  1222. bp_particle = fielddata.GetBitmapByParticle(bp_field, rectangle);
  1223. bp_particle.Tag = new List<string>() { dt.Rows[i_row]["FieldId"].ToString(), dt.Rows[i_row]["ParticleId"].ToString(), dt.Rows[i_row]["TypeId"].ToString() };
  1224. DataRow dr = FrameGraphSubTable.NewRow();
  1225. dr["pic"] = bp_particle;
  1226. //帧图列表列第一个字段的可选参数
  1227. dr["pid"] = datatable_data(dt, i_row, m_mbszclass.M_KLLBXX.str_cb_kllb_chartSort_p1);
  1228. //帧图列表列第二个字段的可选参数
  1229. dr["Size"] = datatable_data(dt, i_row, m_mbszclass.M_KLLBXX.str_cb_kllb_chartSort_p2);
  1230. dr["Width"] = dt.Rows[i_row]["rectwidth"].ToString();
  1231. dr["DMAX"] = Math.Round(Convert.ToDouble(dt.Rows[i_row]["dmax"]), 2).ToString();
  1232. dr["DMIN"] = Math.Round(Convert.ToDouble(dt.Rows[i_row]["dmin"]), 2).ToString();
  1233. dr["Class"] = dt.Rows[i_row]["typename"].ToString();
  1234. dr["fieldid"] = str_fieldid;
  1235. GetMaxElementFromDataTable(dt, i_row, out List<string> list_max_elementname, out List<double> list_max_elementvale);
  1236. double colVal = 0;
  1237. for (int i = 0; i < list_max_elementvale.Count; i++)
  1238. {
  1239. colVal = colVal + Convert.ToDouble(list_max_elementvale[i]);
  1240. }
  1241. //元素1
  1242. dr["ColName1"] = list_max_elementname[0];
  1243. dr["ColVal1"] = ParameterNormalization(colVal, list_max_elementvale[0]);
  1244. //元素2
  1245. dr["ColName2"] = list_max_elementname[1];
  1246. dr["ColVal2"] = ParameterNormalization(colVal, list_max_elementvale[1]);
  1247. //元素3
  1248. dr["ColName3"] = list_max_elementname[2];
  1249. dr["ColVal3"] = ParameterNormalization(colVal, list_max_elementvale[2]);
  1250. //元素4
  1251. dr["ColName4"] = list_max_elementname[3];
  1252. dr["ColVal4"] = ParameterNormalization(colVal, list_max_elementvale[3]);
  1253. //元素5
  1254. dr["ColName5"] = list_max_elementname[4];
  1255. dr["ColVal5"] = ParameterNormalization(colVal, list_max_elementvale[4]);
  1256. //元素6
  1257. dr["ColName6"] = list_max_elementname[5];
  1258. dr["ColVal6"] = ParameterNormalization(colVal, list_max_elementvale[5]);
  1259. //元素6
  1260. dr["ColName7"] = list_max_elementname[6];
  1261. dr["ColVal7"] = ParameterNormalization(colVal, list_max_elementvale[6]);
  1262. //元素6
  1263. dr["ColName8"] = list_max_elementname[7];
  1264. dr["ColVal8"] = ParameterNormalization(colVal, list_max_elementvale[7]);
  1265. //元素6
  1266. dr["ColName9"] = list_max_elementname[8];
  1267. dr["ColVal9"] = ParameterNormalization(colVal, list_max_elementvale[8]);
  1268. //元素6
  1269. dr["ColName10"] = list_max_elementname[9];
  1270. dr["ColVal10"] = ParameterNormalization(colVal, list_max_elementvale[9]);
  1271. FrameGraphSubTable.Rows.Add(dr);
  1272. }
  1273. }
  1274. data_A = FrameGraphSubTable.Copy();
  1275. }
  1276. public void ParticleSizeTable(c_TemplateClass m_mbszclass, out DataTable surface_dt, out DataTable partsize_dt, out DataTable class_dt, out DataTable subdivide_dt, out DataTable colid_data)
  1277. {
  1278. //全部大类
  1279. DataTable dt_addCalss = new DataTable();
  1280. DataTable dt_allSubdivision = new DataTable();
  1281. //全部小类
  1282. if (m_bt_DBData.Columns.Count == 0)
  1283. {
  1284. GetDBData(m_mbszclass);
  1285. }
  1286. List<string> colid = new List<string>();
  1287. //获取粒级表
  1288. string path1 = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFileFolder + m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFile;
  1289. DataSet ds = OTSIncAReportApp.DataOperation.DataAccess.XMLoperate.GetXml(path1);
  1290. string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
  1291. for (int i = 0; i < sizestr.Split(',').Length - 1; i++)
  1292. {
  1293. if (sizestr.Split(',')[i].Length > 0)
  1294. {
  1295. double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
  1296. double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
  1297. colid.Add(d1.ToString() + "~" + d2.ToString());
  1298. }
  1299. }
  1300. double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
  1301. colid.Add(d.ToString() + "~MAX");
  1302. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  1303. //------------------------------------------------
  1304. DataTable ls_partsize_dt = new DataTable();
  1305. ls_partsize_dt.TableName = "PartSize";
  1306. ls_partsize_dt.Columns.Add("c1");
  1307. ls_partsize_dt.Columns.Add("c2");
  1308. ls_partsize_dt.Columns.Add("c3");
  1309. ls_partsize_dt.Columns.Add("c4");
  1310. ls_partsize_dt.Columns.Add("c5");
  1311. ls_partsize_dt.Columns.Add("c6");
  1312. ls_partsize_dt.Columns.Add("c7");
  1313. ls_partsize_dt.Columns.Add("c8");
  1314. ls_partsize_dt.Columns.Add("c9");
  1315. DataRow dr = ls_partsize_dt.NewRow();
  1316. for (int i = 1; i < 10; i++)
  1317. {
  1318. if (colid.Count < i)
  1319. {
  1320. dr["c" + i.ToString()] = "";
  1321. }
  1322. else
  1323. {
  1324. dr["c" + i.ToString()] = colid[i - 1];
  1325. }
  1326. }
  1327. ls_partsize_dt.Rows.Add(dr);
  1328. DataTable ls_Particel_dt = new DataTable();
  1329. ls_Particel_dt.TableName = "Particel";
  1330. ls_Particel_dt.Columns.Add("c1", typeof(double));
  1331. ls_Particel_dt.Columns.Add("c2", typeof(double));
  1332. ls_Particel_dt.Columns.Add("c3", typeof(double));
  1333. ls_Particel_dt.Columns.Add("c4", typeof(double));
  1334. ls_Particel_dt.Columns.Add("c5", typeof(double));
  1335. ls_Particel_dt.Columns.Add("c6", typeof(double));
  1336. ls_Particel_dt.Columns.Add("c7", typeof(double));
  1337. ls_Particel_dt.Columns.Add("c8", typeof(double));
  1338. ls_Particel_dt.Columns.Add("c9", typeof(double));
  1339. ls_Particel_dt.Columns.Add("Name");
  1340. ls_Particel_dt.Columns.Add("total", typeof(double));
  1341. ls_Particel_dt.Columns.Add("TypeId");
  1342. ls_Particel_dt.Columns.Add("Class");
  1343. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  1344. {
  1345. DataRow dr2 = ls_Particel_dt.NewRow();
  1346. dr2["Name"] = m_bt_DBData.Rows[i]["TypeName"].ToString();
  1347. dr2["Class"] = m_bt_DBData.Rows[i]["Class"].ToString();
  1348. dr2["TypeId"] = m_bt_DBData.Rows[i]["TypeId"].ToString();//获取分类编号
  1349. for (int j = 1; j < 10; j++)
  1350. {
  1351. if (colid.Count >= j)
  1352. {
  1353. dr2["c" + j.ToString()] = Convert.ToDouble(m_bt_DBData.Rows[i][colid[j - 1]]);
  1354. }
  1355. }
  1356. if (dr2["Name"].ToString() != "" && dr2["Name"].ToString().IndexOf("number") < 0)
  1357. {
  1358. dr2["total"] = "0"; //求合
  1359. double d_total = 0;
  1360. for (int j = 1; j < 10; j++)
  1361. {
  1362. if (colid.Count >= j)
  1363. {
  1364. d_total = d_total + Convert.ToInt64(m_bt_DBData.Rows[i][colid[j - 1]]);
  1365. }
  1366. }
  1367. dr2["total"] = d_total.ToString();
  1368. }
  1369. ls_Particel_dt.Rows.Add(dr2);
  1370. }
  1371. dt_allSubdivision = ls_Particel_dt.Copy();
  1372. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  1373. List<string> ClassName = new List<string>();
  1374. DataTable getClass_dt = fielddata.GetAllClass();
  1375. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  1376. {
  1377. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid")
  1378. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  1379. }
  1380. //颗粒尺寸数据(例 1.5有多少,2.0有多少)
  1381. colid_data = new DataTable();
  1382. colid_data.Columns.Add("name");
  1383. colid_data.Columns.Add("quantity",typeof(double));
  1384. for (int i=0;i< ls_Particel_dt.Columns.Count;i++)
  1385. {
  1386. if (ls_Particel_dt.Columns[i].ColumnName=="c"+(i+1).ToString())
  1387. {
  1388. if (i< colid.Count)
  1389. {
  1390. DataRow dr1 = colid_data.NewRow();
  1391. dr1["name"] = colid[i].ToString();
  1392. int quantity = 0;
  1393. for (int a = 0; a < ls_Particel_dt.Rows.Count; a++)
  1394. {
  1395. quantity = quantity + Convert.ToInt32(ls_Particel_dt.Rows[a][i].ToString());
  1396. }
  1397. dr1["quantity"] = quantity.ToString();
  1398. colid_data.Rows.Add(dr1);
  1399. }
  1400. }
  1401. }
  1402. //获取大分类信息
  1403. DataTable dt = InvalidRemoval(QuantityOfIntegratedSubstances(ls_Particel_dt, ClassName), "Class");
  1404. dt_addCalss = dt.Copy();
  1405. DataTable data = classIfIcationSort(ls_Particel_dt, ClassName, dt);
  1406. surface_dt = data.Copy();
  1407. class_dt = dt_addCalss.Copy();
  1408. subdivide_dt = dt_allSubdivision.Copy();
  1409. partsize_dt = ls_partsize_dt.Copy();
  1410. }
  1411. private DataTable classIfIcationSort(DataTable dataTable, List<string> ClassName, DataTable data)
  1412. {
  1413. DataTable dt = new DataTable();
  1414. dt = dataTable.Copy();
  1415. dt.Clear();
  1416. dt.TableName = "Particel_subdivision";
  1417. //循环list中每个类型
  1418. for (int i = 0; i < ClassName.Count(); i++)
  1419. {
  1420. DataTable data1 = dt.Copy();
  1421. data1.Clear();
  1422. data1.Rows.Add();
  1423. for (int a = 0; a < data.Rows.Count; a++)
  1424. {
  1425. if (data.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  1426. {
  1427. for (int b = 1; b < 10; b++)
  1428. {
  1429. data1.Rows[0]["c" + b.ToString()] = data.Rows[a]["c" + b.ToString()];
  1430. }
  1431. data1.Rows[0]["total"] = data.Rows[a]["total"];
  1432. data1.Rows[0]["Class"] = data.Rows[a]["Class"];
  1433. dt.Rows.Add(data1.Rows[0].ItemArray);
  1434. }
  1435. }
  1436. DataTable dt_1 = new DataTable();
  1437. dt_1 = dt.Copy();
  1438. dt_1.Clear();
  1439. //循环DataTable中每个分类的数据
  1440. for (int a = 0; a < dataTable.Rows.Count; a++)
  1441. {
  1442. if (dataTable.Rows[a]["Class"].ToString() == ClassName[i])
  1443. {
  1444. dataTable.Rows[a]["Class"] = "";
  1445. dt_1.Rows.Add(dataTable.Rows[a].ItemArray);
  1446. }
  1447. }
  1448. //将颗粒数量排序(从大到小)
  1449. DataView dv = dt_1.DefaultView;
  1450. dv.Sort = "total DESC";
  1451. DataTable dt_1_sort = dv.ToTable();
  1452. for (int a = 0; a < dt_1_sort.Rows.Count; a++)
  1453. {
  1454. dt.Rows.Add(dt_1_sort.Rows[a].ItemArray);
  1455. }
  1456. }
  1457. dt.Columns.Remove("TypeId");
  1458. return dt;
  1459. }
  1460. public bool InsertReportTemplateTable_ElementAvgGrid(c_TemplateClass m_mbszclass, out DataTable dt1, out DataTable dt2,out DataTable allElement_dt)
  1461. {
  1462. if (m_bt_DBData.Columns.Count == 0)
  1463. {
  1464. GetDBData(m_mbszclass);
  1465. }
  1466. //根据sql条件,查询获取颗粒信息数据
  1467. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  1468. DataTable AllAnalysisDetails = new DataTable();
  1469. AllAnalysisDetails.TableName = "ElementValue";
  1470. AllAnalysisDetails.Columns.Add("Name");
  1471. AllAnalysisDetails.Columns.Add("TypeId");
  1472. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  1473. AllAnalysisDetails.Columns.Add("Class");
  1474. for (int i = 0; i < m_bt_DBData.Rows.Count; i++)
  1475. {
  1476. DataRow dr2 = AllAnalysisDetails.NewRow();
  1477. dr2["Name"] = m_bt_DBData.Rows[i]["TypeName"].ToString();
  1478. dr2["Area"] = Convert.ToDouble(m_bt_DBData.Rows[i]["ar"]);
  1479. dr2["TypeId"] = m_bt_DBData.Rows[i]["TypeId"].ToString();
  1480. dr2["Class"] = m_bt_DBData.Rows[i]["Class"].ToString();
  1481. AllAnalysisDetails.Rows.Add(dr2);
  1482. }
  1483. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  1484. List<string> ClassName = new List<string>();
  1485. DataTable getClass_dt = fielddata.GetAllClass();
  1486. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  1487. {
  1488. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid")
  1489. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  1490. }
  1491. //统计元素物质大类的元素信息和面积占比
  1492. DataTable dt_ElementalSubstance = ElementalSubstance(AllAnalysisDetails, ClassName, fielddata);
  1493. //统计元素并按照Class Name自定义列表进行排序,大类中的小类元素信息按照面积从大到小排序
  1494. DataTable dt_ElementSorting = ElementSorting(AllAnalysisDetails, ClassName, fielddata);
  1495. //生成最后导出时物质元素成分表
  1496. DataTable dt = MaterialElementComposition(dt_ElementalSubstance, 13);//导出14个元素成分信息
  1497. //生成最后导出时物质元素细分表
  1498. SubdivisionOfMaterialElements(dt_ElementSorting, 13, ClassName, dt, out dt1, out dt2);
  1499. allElement_dt = dt_ElementSorting.Copy();
  1500. return true;
  1501. }
  1502. private bool SubdivisionOfMaterialElements(DataTable a_ElementalSubstance, int NumberOfColumns, List<string> ClassName, DataTable data, out DataTable dt1, out DataTable dt2)
  1503. {
  1504. DataTable dt_ElementalSubstance = new DataTable();
  1505. dt_ElementalSubstance = data.Copy();
  1506. dt_ElementalSubstance.Clear();
  1507. dt_ElementalSubstance.TableName = "ElementSubdivision_Value";
  1508. dt_ElementalSubstance.Columns["Name"].ColumnName = "Class";
  1509. dt_ElementalSubstance.Columns.Add("Name");
  1510. //处理元素面积保留小数点后两位
  1511. for (int i = 0; i < a_ElementalSubstance.Rows.Count; i++)
  1512. {
  1513. a_ElementalSubstance.Rows[i]["Area"] = Math.Round(Convert.ToDouble(a_ElementalSubstance.Rows[i]["Area"].ToString()), 2);
  1514. }
  1515. //循环元素物质大类
  1516. for (int i = 0; i < ClassName.Count; i++)
  1517. {
  1518. DataTable dt_1 = new DataTable();
  1519. dt_1 = data.Copy();
  1520. dt_1.Clear();
  1521. for (int a = 0; a < data.Rows.Count; a++)
  1522. {
  1523. if (data.Rows[a]["Name"].ToString() == ClassName[i].ToString())
  1524. {
  1525. dt_1.Rows.Add(data.Rows[a].ItemArray);
  1526. }
  1527. }
  1528. dt_1.Columns["Name"].ColumnName = "Class";
  1529. dt_1.Columns.Add("Name");
  1530. DataTable dt_2 = new DataTable();
  1531. dt_2 = dt_1.Copy();
  1532. dt_2.Clear();
  1533. dt_2.Rows.Add();
  1534. //循环整个表筛选出当前的物质
  1535. for (int a = 0; a < a_ElementalSubstance.Rows.Count; a++)
  1536. {
  1537. if (ClassName[i].ToString() == a_ElementalSubstance.Rows[a]["Class"].ToString())
  1538. {
  1539. for (int b = 0; b < dt_1.Columns.Count; b++)
  1540. {
  1541. if (dt_2.Columns[b].ToString() != "Class")
  1542. {
  1543. if (a_ElementalSubstance.Columns.Contains(dt_2.Columns[b].ToString()))
  1544. {
  1545. if (a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()].ToString() == "")
  1546. {
  1547. dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
  1548. }
  1549. else
  1550. {
  1551. dt_2.Rows[0][dt_2.Columns[b].ToString()] = a_ElementalSubstance.Rows[a][dt_2.Columns[b].ToString()];
  1552. }
  1553. }
  1554. else
  1555. {
  1556. dt_2.Rows[0][dt_2.Columns[b].ToString()] = 0;
  1557. }
  1558. }
  1559. }
  1560. dt_1.Rows.Add(dt_2.Rows[0].ItemArray);
  1561. }
  1562. }
  1563. for (int a = 0; a < dt_1.Rows.Count; a++)
  1564. {
  1565. dt_ElementalSubstance.Rows.Add(dt_1.Rows[a].ItemArray);
  1566. }
  1567. }
  1568. DataTable dataTable = new DataTable();
  1569. dataTable = dt_ElementalSubstance.Copy();
  1570. dataTable.Clear();
  1571. DataRow row = dataTable.NewRow();
  1572. dataTable.Rows.Add(row);
  1573. dataTable.TableName = "ElementSubdivision_Name";
  1574. for (int i = 0; i < dataTable.Columns.Count; i++)
  1575. {
  1576. dataTable.Rows[0][dataTable.Columns[i].ToString()] = dataTable.Columns[i].ToString();
  1577. }
  1578. dt1 = dataTable.Copy();
  1579. dt2 = dt_ElementalSubstance.Copy();
  1580. //m_list_dt.Add(dataTable);
  1581. //m_list_dt.Add(dt_ElementalSubstance);
  1582. return true;
  1583. }
  1584. #region 三元图
  1585. //手动绘制的三元图
  1586. public Bitmap DrawATernaryPicture(int selectindex, c_TemplateClass m_mbszclass, List<Color> Color_list)
  1587. {
  1588. int sel = 0;
  1589. if (m_mbszclass.M_SY.int_xzkl == 0)
  1590. {
  1591. sel = 0;
  1592. }
  1593. else
  1594. {
  1595. sel = 1;
  1596. }
  1597. ResultFile resultFile = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()];
  1598. string template = TemplateList[selectindex];
  1599. if (template == "")
  1600. { //三元相图模板
  1601. template = m_condition.m_conditionData.GetPropItemDisplayValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE).ToString();
  1602. }
  1603. //获取粒级表
  1604. string pathtpf = Application.StartupPath + "\\Config\\ProData\\DefaultTriTemplateFile.tpf";
  1605. List<string> nameList = new List<string>();
  1606. DataSet ds = XMLoperate.GetXmlData(pathtpf, "XMLData");
  1607. DataTable dt = ds.Tables["Member"];
  1608. string TemplateName = "";
  1609. //遍历第一层节点
  1610. foreach (DataRow element in dt.Rows)
  1611. {
  1612. TemplateName = element["TemplateName"].ToString();
  1613. if (TemplateName == template)
  1614. {
  1615. string Element = element["Element"].ToString();
  1616. nameList.Add(Element.Split('.')[0]);
  1617. nameList.Add(Element.Split('.')[1]);
  1618. nameList.Add(Element.Split('.')[2]);
  1619. break;
  1620. }
  1621. }
  1622. DataTable dt_point_sort = new DataTable();
  1623. dt_point_sort.Columns.Add("X", typeof(double));
  1624. dt_point_sort.Columns.Add("Y", typeof(double));
  1625. dt_point_sort.Columns.Add("Color_position");
  1626. DataTable particles = GetParticles(resultFile.FilePath, nameList, sel);
  1627. foreach (DataRow item in particles.Rows)
  1628. {
  1629. if (item["particleLocation"].ToString() == "0,0,0")
  1630. {
  1631. continue;
  1632. }
  1633. double top = Convert.ToDouble(item["top"]);
  1634. double left = Convert.ToDouble(item["left"]);
  1635. double right = Convert.ToDouble(item["right"]);
  1636. //x=right+top/2,y=(√3/2)*top
  1637. double Y = 0.866 * top * 500;
  1638. double X = (right + top / 2) * 500;
  1639. double[] point_ = { Math.Round(X, 2), Math.Round(Y) };
  1640. DataRow dr = dt_point_sort.NewRow();
  1641. dr["X"] = Math.Round(X, 2);
  1642. dr["Y"] = Math.Round(Y);
  1643. dr["Color_position"] = item["Color_position"];
  1644. dt_point_sort.Rows.Add(dr);
  1645. }
  1646. #region 图形
  1647. int Line = 500;
  1648. Bitmap map = new Bitmap(530, 530);
  1649. Graphics g = Graphics.FromImage(map);
  1650. SolidBrush sbrush_White = new SolidBrush(Color.White);
  1651. g.FillRectangle(sbrush_White, 0, 0, 530, 530);
  1652. Pen mypen = new Pen(Color.Black, 1);
  1653. g.DrawImage(map, 0, 0, map.Width, map.Height);
  1654. g.DrawLine(mypen, new Point(Line + 10, Line), new Point(Line / 2 + 10, Convert.ToInt32(Line - (Line / 2 * 1.732))));//"\"
  1655. g.DrawLine(mypen, new Point(Line / 2 + 10, Convert.ToInt32(Line - (Line / 2 * 1.732))), new Point(0 + 10, Line));//"/"
  1656. g.DrawLine(mypen, new Point(0 + 10, Line), new Point(Line + 10, Line));//"_"
  1657. mypen.DashStyle = System.Drawing.Drawing2D.DashStyle.Custom;
  1658. mypen.DashPattern = new float[] { 2, 2 };
  1659. mypen = new Pen(Color.FromArgb(212, 212, 212), 1);
  1660. int point = Line / 10;
  1661. for (int i = 1; i < 10; i++)
  1662. {
  1663. //"\"
  1664. int x1_a = point / 2 + ((point / 2) * (i - 1));
  1665. int x2_a = Line - (43 * i);
  1666. int y1_a = point * i;
  1667. g.DrawLine(mypen, new Point(x1_a + 10, x2_a), new Point(y1_a + 10, Line));
  1668. //"/"
  1669. int x1_b = Line - (point / 2 + ((point / 2) * (i - 1)));
  1670. int x2_b = Line - (43 * i);
  1671. int y1_b = Line - (point * i);
  1672. g.DrawLine(mypen, new Point(x1_b + 10, x2_b), new Point(y1_b + 10, Line));
  1673. //"_"
  1674. int x1_c = point / 2 + ((point / 2) * (i - 1));
  1675. int x2_c = Line - (43 * i);
  1676. int y1_c = Line - (point / 2 + ((point / 2) * (i - 1)));
  1677. int y2_c = Line - (43 * i);
  1678. g.DrawLine(mypen, new Point(x1_c + 10, x2_c), new Point(y1_c + 10, y2_c));
  1679. g.DrawLine(mypen, new Point(y1_a + 10, Line + 10), new Point(y1_a + 10, Line));
  1680. g.DrawLine(mypen, new Point(x1_b + 10, x2_b), new Point(x1_b + 10 + 10, x2_b));
  1681. g.DrawLine(mypen, new Point(x1_c + 10 - 10, x2_c), new Point(y1_c + 10, y2_c));
  1682. g.DrawString((i * 10).ToString(), new Font("宋体", 8, FontStyle.Bold), new SolidBrush(Color.Black), new Point(x1_c - 20, x2_c-5));
  1683. g.DrawString((i * 10).ToString(), new Font("宋体", 8, FontStyle.Bold), new SolidBrush(Color.Black), new Point(y1_b , Line+8));
  1684. g.DrawString(((10-i) * 10).ToString(), new Font("宋体", 8, FontStyle.Bold), new SolidBrush(Color.Black), new Point(x1_b + 20, x2_b-5));
  1685. }
  1686. for (int i = 0; i < dt_point_sort.Rows.Count; i++)
  1687. {
  1688. mypen = new Pen(Color.Black, 1);
  1689. SolidBrush mysbrush = new SolidBrush(Color_list[Convert.ToInt32(dt_point_sort.Rows[i]["Color_position"])]);
  1690. g.FillRectangle(mysbrush, Convert.ToInt32(dt_point_sort.Rows[i]["X"]) + 8, 500 - Convert.ToInt32(dt_point_sort.Rows[i]["Y"]) - 2, 4, 5);
  1691. g.DrawRectangle(mypen, Convert.ToInt32(dt_point_sort.Rows[i]["X"]) + 7, 500 - Convert.ToInt32(dt_point_sort.Rows[i]["Y"]) - 2, 5, 5);
  1692. }
  1693. Font myFont = new Font("宋体", 13, FontStyle.Bold);
  1694. Font Font_features = new Font("宋体", 10, FontStyle.Bold);
  1695. SolidBrush sbrush = new SolidBrush(Color.Black);
  1696. g.DrawString("features:" + dt_point_sort.Rows.Count.ToString(), Font_features, sbrush, 400, 200);
  1697. g.DrawString(TemplateName, myFont, sbrush, 265 - (TemplateName.Length * 10 / 2), 10);
  1698. g.DrawString(TemplateName.Split('.')[0].ToString(), myFont, sbrush, 265 - (TemplateName.Split('.')[0].ToString().Length * 10 / 2), 45);//顶点名字
  1699. g.DrawString(TemplateName.Split('.')[1].ToString(), myFont, sbrush, 0, 510);//左侧名字
  1700. g.DrawString(TemplateName.Split('.')[2].ToString(), myFont, sbrush, 500 - (TemplateName.Split('.')[0].ToString().Length * 10), 510);//左侧名字
  1701. //map.Save("D:\\1.bmp");
  1702. #endregion
  1703. return map;
  1704. }
  1705. //绘制图例
  1706. public Bitmap DrawATernaryDiagramLegend(List<Color> Color_list)
  1707. {
  1708. Bitmap map = new Bitmap(450, 115);
  1709. Graphics g = Graphics.FromImage(map);
  1710. SolidBrush sbrush_White = new SolidBrush(Color.White);
  1711. SolidBrush sbrush = new SolidBrush(Color.Black);
  1712. g.FillRectangle(sbrush_White, 0, 0, 450, 115);
  1713. Font myFont = new Font("宋体", 10, FontStyle.Bold);
  1714. g.DrawString("legend(length,microns)", myFont, sbrush, 140, 3);
  1715. //legend(length,microns)
  1716. Pen mypen = new Pen(Color.Black, 1);
  1717. g.DrawLine(mypen, 100, 19, 350, 19);
  1718. //设置标签名称
  1719. List<string> listName = new List<string>();
  1720. //获取粒级表
  1721. string pathe = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFileFolder + m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFile;
  1722. DataSet ds = XMLoperate.GetXml(pathe);
  1723. string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
  1724. for (int i = 0; i < sizestr.Split(',').Length - 1; i++)
  1725. {
  1726. if (sizestr.Split(',')[i].Length > 0)
  1727. {
  1728. double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
  1729. double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
  1730. listName.Add(d1.ToString() + "~" + d2.ToString());
  1731. }
  1732. }
  1733. double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
  1734. listName.Add(d.ToString() + "~MAX");
  1735. int PositionJeight = 27;
  1736. string str_unit = " microns";
  1737. for (int i=0;i< listName.Count;i=i+3)
  1738. {
  1739. if (i< listName.Count)
  1740. {
  1741. SolidBrush sbrush_Color = new SolidBrush(Color_list[i]);
  1742. g.DrawRectangle(mypen, 26, PositionJeight, 8, 8);
  1743. g.FillRectangle(sbrush_Color, 27, PositionJeight + 1, 7, 7);
  1744. g.DrawString(listName[i].ToString()+ str_unit, myFont, sbrush, 38, PositionJeight-2);
  1745. }
  1746. if (i+1 < listName.Count)
  1747. {
  1748. SolidBrush sbrush_Color = new SolidBrush(Color_list[i+1]);
  1749. g.DrawRectangle(mypen, 170, PositionJeight, 8, 8);
  1750. g.FillRectangle(sbrush_Color, 171, PositionJeight + 1, 7, 7);
  1751. g.DrawString(listName[i+1].ToString()+ str_unit, myFont, sbrush, 182, PositionJeight - 2);
  1752. }
  1753. if (i + 2 < listName.Count)
  1754. {
  1755. SolidBrush sbrush_Color = new SolidBrush(Color_list[i + 2]);
  1756. g.DrawRectangle(mypen, 314, PositionJeight, 8, 8);
  1757. g.FillRectangle(sbrush_Color, 315, PositionJeight + 1, 7, 7);
  1758. g.DrawString(listName[i + 2].ToString()+ str_unit, myFont, sbrush, 326, PositionJeight - 2);
  1759. }
  1760. PositionJeight = PositionJeight + 15;
  1761. }
  1762. //g.DrawRectangle(mypen, 26, 27, 8, 8);
  1763. //g.DrawString("50-100 microns", myFont, sbrush, 38, 25);
  1764. //g.DrawRectangle(mypen, 170, 27, 8, 8);
  1765. //g.DrawString("50-100 microns", myFont, sbrush, 182, 25);
  1766. //g.DrawRectangle(mypen, 314, 27, 8, 8);
  1767. //g.DrawString("50-100 microns", myFont, sbrush, 326, 25);
  1768. //map.Save("D://2.bmp");
  1769. return map;
  1770. }
  1771. private DataTable GetParticles(string filepath, List<string> nameList, int sel)
  1772. {
  1773. ParticleData particledata = new ParticleData(filepath);
  1774. //设置标签名称
  1775. List<string> listName = new List<string>();
  1776. //获取粒级表
  1777. string pathe = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFileFolder + m_otsreport_export.m_ReportApp.m_rstDataMgr.m_RptConfigFile.PartSizeFile;
  1778. DataSet ds = XMLoperate.GetXml(pathe);
  1779. string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
  1780. for (int i = 0; i < sizestr.Split(',').Length - 1; i++)
  1781. {
  1782. if (sizestr.Split(',')[i].Length > 0)
  1783. {
  1784. double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
  1785. double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
  1786. listName.Add(d1.ToString() + "~" + d2.ToString());
  1787. }
  1788. }
  1789. double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
  1790. listName.Add(d.ToString() + "~MAX");
  1791. string filedAndParticl = "";
  1792. if (sel == 1)
  1793. {
  1794. List<Particle> selectParticles = m_otsreport_export.m_ReportApp.GetSelectedParticles();
  1795. foreach (var item in selectParticles)
  1796. {
  1797. filedAndParticl = filedAndParticl + "," + (item.FieldId.ToString() + "-" + item.ParticleId.ToString());
  1798. }
  1799. if (filedAndParticl != "")
  1800. {
  1801. filedAndParticl = filedAndParticl + ",";
  1802. }
  1803. }
  1804. string po = "";
  1805. string con = "";
  1806. int row = m_condition.m_conditionData.ConditionItemList.Count;
  1807. if (condition != -1)
  1808. {
  1809. List<string> li = new List<string>() { "DMAX", "DMIN", "Area", "FERET" };
  1810. con = li[condition];
  1811. }
  1812. else
  1813. {
  1814. if (row < 4)
  1815. {
  1816. con = "DMAX";
  1817. }
  1818. else
  1819. {
  1820. con = m_condition.m_conditionData.GetPropItemDisplayValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE).ToString();
  1821. }
  1822. }
  1823. switch (con)
  1824. {
  1825. case "DMAX":
  1826. po = "DMAX";
  1827. break;
  1828. case "DMIN":
  1829. po = "DMIN";
  1830. break;
  1831. case "CIRCLE":
  1832. po = "Area";
  1833. break;
  1834. case "FERET":
  1835. po = "DFERET";
  1836. break;
  1837. }
  1838. DataTable dtp = particledata.GetParticleAllHaveXray(filedAndParticl);
  1839. //DataTable dtp = particledata.GetParticleHaveXray(filedAndParticl);
  1840. for (int i=0;i<dtp.Rows.Count;i++)
  1841. {
  1842. if (Convert.ToInt32( dtp.Rows[i]["TypeId"])< 0 || dtp.Rows[i]["TypeName"].ToString()== "Invalid")
  1843. {
  1844. dtp.Rows[i].Delete();
  1845. }
  1846. }
  1847. dtp.AcceptChanges();
  1848. //创建一个临时表
  1849. DataTable ret_dt = new DataTable();
  1850. //然后额外存放三列,用于存放拆分后三个顶点的值
  1851. ret_dt.Columns.Add("sizeLevel");
  1852. ret_dt.Columns.Add("particleLocation");
  1853. ret_dt.Columns.Add("top");
  1854. ret_dt.Columns.Add("left");
  1855. ret_dt.Columns.Add("right");
  1856. ret_dt.Columns.Add("Color_position");
  1857. for (int k = 0; k < listName.Count; k++)
  1858. {
  1859. string str = listName[k];
  1860. string d1 = str.Split('~')[0];
  1861. string d2 = str.Split('~')[1];
  1862. if (d2 == "MAX")
  1863. {
  1864. d2 = "999";
  1865. }
  1866. DataRow[] datas = dtp.Select(getWhere(d2, d1, po));
  1867. foreach (var item in datas)
  1868. {
  1869. DataRow dr = ret_dt.NewRow();
  1870. dr["sizeLevel"] = str;
  1871. string element = item["Element"].ToString();
  1872. string strRet = getStrRet(nameList, element);
  1873. dr["particleLocation"] = strRet;
  1874. dr["top"] = strRet.Split(',')[0];
  1875. dr["left"] = strRet.Split(',')[1];
  1876. dr["right"] = strRet.Split(',')[2];
  1877. dr["Color_position"] = k.ToString();
  1878. ret_dt.Rows.Add(dr);
  1879. }
  1880. }
  1881. return ret_dt;
  1882. }
  1883. private string getWhere(string max, string min, string col)
  1884. {
  1885. return col + ">=" + min + " and " + col + "<=" + max;
  1886. }
  1887. private string getStrRet(List<string> template, string element)
  1888. {
  1889. List<string> name = new List<string>()
  1890. { "h","he",
  1891. "li","be","b","c","n","o","f","ne",
  1892. "na","mg","al","si","p","s","cl","ar",
  1893. "k","ca","sc","ti","v","cr","mn","fe","co","ni","cu","zn","ga","ge","as","se","br","kr",
  1894. "rb","sr","y","zr","nb","mo","tc","ru","rh","pd","ag","cd","in","sn","sb","te","i","xe",
  1895. "cs","ba","la",
  1896. "ce","pr","nd","pm","sm","eu","gd","tb","dy","ho","er","tm","yb","lu",
  1897. "hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn",
  1898. "fr","ra","ac",
  1899. "th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr"
  1900. };
  1901. List<double> value = new List<double>()
  1902. { 1.008,4.003,
  1903. 6.941,9.012,10.811,12.011,14.007,15.999,18.998,20.180,
  1904. 22.990,24.305,26.982,28.086,30.974,32.066,35.453,39.948,
  1905. 39.098,40.08,44.956,47.88,50.942,51.996,54.938,55.847,58.933,58.70,63.546,65.39,69.72,72.61,74.922,78.96,79.904,83.80,
  1906. 85.468,87.62,88.906,91.22,92.906,95.94,98.00,101.07,102.906,106.42,107.868,112.41,114.82,118.71,121.76,127.60,126.905,131.29,
  1907. 132.905,137.33,138.906,
  1908. 140.12,140.908,144.24,145.0,150.36,151.97,157.25,158.925,162.50,64.93,167.26,168.934,173.04,174.967,
  1909. 178.49,180.948,183.85,186.207,190.20,192.22,195.08,196.967,200.59,204.38,207.2,208.980,209.00,210.00,222.00,
  1910. 223.00,226.025,227.028,
  1911. 232.038,231.036,238.029,237.048,244.00,243.00,247.00,247.00,251.00,252.00,257.00,258.00,259.00,260.00
  1912. };
  1913. double d_ASum = 0;
  1914. double d_BSum = 0;
  1915. double d_CSum = 0;
  1916. string aElements = template[0];
  1917. string bElements = template[1];
  1918. string cElements = template[2];
  1919. foreach (var item in element.Split(';'))
  1920. {
  1921. if (item.Contains(aElements + "-"))
  1922. {
  1923. if (aElements != "")
  1924. {
  1925. d_ASum = Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(aElements.ToLower())];
  1926. }
  1927. }
  1928. for (int i = 0; i < bElements.Split(',').Length; i++)
  1929. {
  1930. string e = bElements.Split(',')[i];
  1931. if (item.Contains(e + "-"))
  1932. {
  1933. d_BSum = d_BSum + Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(e.ToLower())];
  1934. }
  1935. }
  1936. if (item.Contains(cElements + "-"))
  1937. {
  1938. if (cElements != "")
  1939. d_CSum = Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(cElements.ToLower())];
  1940. }
  1941. }
  1942. double allNums = d_ASum + d_BSum + d_CSum;
  1943. string strRet = "";
  1944. if ((allNums) == 0)
  1945. {
  1946. strRet = "0,0,0";
  1947. }
  1948. else
  1949. {
  1950. double aPercent = 0, bPercent = 0, cPercent = 0;
  1951. if (d_ASum != 0)
  1952. {
  1953. aPercent = d_ASum / allNums;
  1954. }
  1955. if (d_BSum != 0)
  1956. {
  1957. bPercent = d_BSum / allNums;
  1958. }
  1959. if (d_CSum != 0)
  1960. {
  1961. cPercent = d_CSum / allNums;
  1962. }
  1963. strRet = aPercent.ToString() + "," + bPercent.ToString() + "," + cPercent.ToString();
  1964. }
  1965. return strRet;
  1966. }
  1967. #endregion
  1968. /// <summary>
  1969. /// 大分类数据
  1970. /// </summary>
  1971. /// <param name="m_mbszclass"></param>
  1972. /// <returns></returns>
  1973. public DataTable ClassificationIntegration(c_TemplateClass m_mbszclass,string str)
  1974. {
  1975. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  1976. DataTable data = new DataTable();
  1977. if (m_mbszclass.M_SY.int_xzkl == 0)
  1978. {
  1979. data = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息
  1980. }
  1981. else
  1982. {
  1983. DataTable AllInca = fielddata.GetAreaByAllIncA("");
  1984. DataTable SelectParticl = SelectParticleData();
  1985. data = GetParticleListForParticlSize(SelectParticl, AllInca);
  1986. }
  1987. DataTable AreaInformationOfAllElements = ConSolidateInvalid(data);
  1988. DataTable AllAnalysisDetails = new DataTable();
  1989. AllAnalysisDetails.Columns.Add("Name");
  1990. AllAnalysisDetails.Columns.Add("TypeId");
  1991. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  1992. AllAnalysisDetails.Columns.Add("Class");
  1993. AllAnalysisDetails.Columns.Add("Cunt", typeof(double));
  1994. for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++)
  1995. {
  1996. DataRow dr2 = AllAnalysisDetails.NewRow();
  1997. dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString();
  1998. dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]);
  1999. dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString();
  2000. dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]);
  2001. dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  2002. AllAnalysisDetails.Rows.Add(dr2);
  2003. }
  2004. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  2005. List<string> ClassName = new List<string>();
  2006. DataTable getClass_dt = fielddata.GetAllClass();
  2007. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  2008. {
  2009. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  2010. }
  2011. DataTable AreaRatio = new DataTable();
  2012. AreaRatio.TableName = "InclusionAreaRatio";
  2013. AreaRatio.Columns.Add("Class");
  2014. AreaRatio.Columns.Add("Name");
  2015. AreaRatio.Columns.Add("Area", typeof(double));
  2016. AreaRatio.Columns.Add("inca_proportion");
  2017. AreaRatio.Columns.Add("inca_FieldRatio");
  2018. AreaRatio.Columns.Add("Cunt", typeof(int));
  2019. //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一)
  2020. double totalInclusionArea = Convert.ToDouble(decimal.Parse(AllAnalysisDetails.Compute("sum(Area)", "").ToString()));
  2021. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  2022. {
  2023. DataRow dr2 = AreaRatio.NewRow();
  2024. dr2["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  2025. dr2["Name"] = AllAnalysisDetails.Rows[i]["Name"].ToString();
  2026. dr2["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]);
  2027. dr2["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / totalInclusionArea) * 100, 2);
  2028. dr2["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  2029. dr2["Cunt"] = AllAnalysisDetails.Rows[i]["Cunt"].ToString();
  2030. AreaRatio.Rows.Add(dr2);
  2031. }
  2032. DataTable AreaRatio_dt = AreaRatio.Copy();
  2033. AreaRatio_dt.Clear();
  2034. for (int i = 0; i < ClassName.Count(); i++)
  2035. {
  2036. DataTable dt = AreaRatio.Copy();
  2037. dt.Clear();
  2038. for (int a = 0; a < AreaRatio.Rows.Count; a++)
  2039. {
  2040. if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  2041. {
  2042. dt.Rows.Add(AreaRatio.Rows[a].ItemArray);
  2043. }
  2044. }
  2045. DataView dv = dt.DefaultView;
  2046. dv.Sort = "Area DESC";
  2047. DataTable dt_Element = dv.ToTable();
  2048. for (int a = 0; a < dt_Element.Rows.Count; a++)
  2049. {
  2050. AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  2051. }
  2052. }
  2053. DataTable AllAnalysisDetails1 = AreaRatio_dt.Copy();
  2054. AllAnalysisDetails1.Clear();
  2055. for (int i = 0; i < ClassName.Count; i++)
  2056. {
  2057. DataTable dt = AreaRatio_dt.Copy();
  2058. dt.Clear();
  2059. for (int a = 0; a < AreaRatio_dt.Rows.Count; a++)
  2060. {
  2061. if (AreaRatio_dt.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  2062. {
  2063. dt.Rows.Add(AreaRatio_dt.Rows[a].ItemArray);
  2064. }
  2065. }
  2066. if (dt.Rows.Count > 0)
  2067. {
  2068. double totalInclusionArea2 = Convert.ToDouble(decimal.Parse(AreaRatio_dt.Compute("sum(Area)", "").ToString()));
  2069. double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  2070. int cunt = Convert.ToInt32(decimal.Parse(dt.Compute("sum(Cunt)", "").ToString()));
  2071. DataRow dr3 = AllAnalysisDetails1.NewRow();
  2072. dr3["Class"] = ClassName[i].ToString();
  2073. dr3["Area"] = Math.Round(Area, 2);
  2074. dr3["inca_proportion"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / totalInclusionArea2) * 100, 2);
  2075. dr3["inca_FieldRatio"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  2076. dr3["Cunt"] = cunt;
  2077. AllAnalysisDetails1.Rows.Add(dr3);
  2078. }
  2079. }
  2080. return AllAnalysisDetails1;
  2081. }
  2082. private DataTable SelectParticleData()
  2083. {
  2084. List<Particle> selectParticles = m_otsreport_export.m_ReportApp.GetSelectedParticles();
  2085. #region Datatable数据表格式
  2086. DataTable dtUelect = new DataTable();
  2087. dtUelect.Columns.Add("fieldid");
  2088. dtUelect.Columns.Add("particleid");
  2089. dtUelect.Columns.Add("AveGray");
  2090. dtUelect.Columns.Add("RectLeft");
  2091. dtUelect.Columns.Add("RectTop");
  2092. dtUelect.Columns.Add("RectWidth");
  2093. dtUelect.Columns.Add("RectHeight");
  2094. dtUelect.Columns.Add("Area");
  2095. dtUelect.Columns.Add("PosX");
  2096. dtUelect.Columns.Add("PosY");
  2097. dtUelect.Columns.Add("TypeId");
  2098. dtUelect.Columns.Add("SegmentNum");
  2099. dtUelect.Columns.Add("SEMPosX");
  2100. dtUelect.Columns.Add("SEMPosY");
  2101. dtUelect.Columns.Add("XrayId");
  2102. dtUelect.Columns.Add("DMAX");
  2103. dtUelect.Columns.Add("DMIN");
  2104. dtUelect.Columns.Add("DPERP");
  2105. dtUelect.Columns.Add("PERIMETER");
  2106. dtUelect.Columns.Add("ORIENTATION");
  2107. dtUelect.Columns.Add("DINSCR");
  2108. dtUelect.Columns.Add("DMEAN");
  2109. dtUelect.Columns.Add("DELONG");
  2110. dtUelect.Columns.Add("DFERET");
  2111. dtUelect.Columns.Add("TypeName");
  2112. dtUelect.Columns.Add("TypeColor");
  2113. #endregion
  2114. for (int i = 0; i < selectParticles.Count; i++)
  2115. {
  2116. dtUelect.Rows.Add(selectParticles[i].FieldId, selectParticles[i].ParticleId, selectParticles[i].AveGray, selectParticles[i].RectLeft, selectParticles[i].RectTop, selectParticles[i].RectWidth, selectParticles[i].RectHeight, selectParticles[i].Area, selectParticles[i].PosX, selectParticles[i].PosX, selectParticles[i].TypeId, /*selectParticles[i].ElementNum,*/ selectParticles[i].SegmentNum, selectParticles[i].SEMPosX, selectParticles[i].SEMPosY, selectParticles[i].ParticleId, selectParticles[i].DMAX, selectParticles[i].DMIN, selectParticles[i].DPERP, selectParticles[i].PERIMETER, selectParticles[i].ORIENTATION, selectParticles[i].DINSCR, selectParticles[i].DMEAN, selectParticles[i].DELONG, selectParticles[i].DFERET, selectParticles[i].TypeName, selectParticles[i].TypeColor);
  2117. }
  2118. return dtUelect;
  2119. }
  2120. private DataTable ConSolidateInvalid(DataTable dt)
  2121. {
  2122. DataTable dt_invalid = dt.Clone();
  2123. DataTable dt_no_invalid = dt.Clone();
  2124. for (int i = 0; i < dt.Rows.Count; i++)
  2125. {
  2126. if (dt.Rows[i]["TypeName"].ToString() == "Invalid")
  2127. {
  2128. dt_invalid.Rows.Add(dt.Rows[i].ItemArray);
  2129. }
  2130. else
  2131. {
  2132. dt_no_invalid.Rows.Add(dt.Rows[i].ItemArray);
  2133. }
  2134. }
  2135. return dt_no_invalid;
  2136. }
  2137. /// <summary>
  2138. /// 细分类数据
  2139. /// </summary>
  2140. /// <param name="m_mbszclass"></param>
  2141. /// <returns></returns>
  2142. public DataTable subdivisionIntegration(c_TemplateClass m_mbszclass)
  2143. {
  2144. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  2145. DataTable data = new DataTable();
  2146. if (m_mbszclass.M_SY.int_xzkl == 0)
  2147. {
  2148. data = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息
  2149. }
  2150. else
  2151. {
  2152. DataTable AllInca = fielddata.GetAreaByAllIncA("");
  2153. DataTable SelectParticl = SelectParticleData();
  2154. data = GetParticleListForParticlSize(SelectParticl, AllInca);
  2155. }
  2156. return ConSolidateInvalid(data);
  2157. }
  2158. public void GenerateINCAtable(string str,out DataTable dt)
  2159. {
  2160. //根据sql条件,查询获取颗粒信息数据
  2161. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  2162. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  2163. List<string> ClassName = new List<string>();
  2164. DataTable getClass_dt = fielddata.GetAllClass();
  2165. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  2166. {
  2167. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid")
  2168. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  2169. }
  2170. //夹杂物面积比添加大类
  2171. DataTable RawParticleData = InclusionAreaRatio_2(str);
  2172. //夹杂物面积比计算大类占比
  2173. ProportionOfParticleArea(RawParticleData, ClassName, str, out dt);
  2174. }
  2175. private bool ProportionOfParticleArea(DataTable dataTable, List<string> ClassName,string str, out DataTable dt_out)
  2176. {
  2177. DataTable AllAnalysisDetails = dataTable.Copy();
  2178. AllAnalysisDetails.Clear();
  2179. AllAnalysisDetails.TableName = "InclusionAreaRatio";
  2180. for (int i = 0; i < ClassName.Count; i++)
  2181. {
  2182. DataTable dt = dataTable.Copy();
  2183. dt.Clear();
  2184. for (int a = 0; a < dataTable.Rows.Count; a++)
  2185. {
  2186. if (dataTable.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  2187. {
  2188. dt.Rows.Add(dataTable.Rows[a].ItemArray);
  2189. }
  2190. }
  2191. if (dt.Rows.Count > 0)
  2192. {
  2193. double totalInclusionArea = Convert.ToDouble(decimal.Parse(dataTable.Compute("sum(Area)", "").ToString()));
  2194. double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  2195. DataRow dr = AllAnalysisDetails.NewRow();
  2196. dr["Class"] = ClassName[i].ToString();
  2197. dr["Area"] = Math.Round(Area, 2);
  2198. //Convert.ToDouble(decimal.Parse(dt.Compute("sum(e3)", "").ToString()));
  2199. dr["inca_proportion"] = Math.Round((Convert.ToDouble(Area) / totalInclusionArea) * 100, 2);
  2200. dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(Area) / Convert.ToDouble(str)) * 100, 4);
  2201. AllAnalysisDetails.Rows.Add(dr);
  2202. DataView dv = dt.DefaultView;
  2203. dv.Sort = "Area DESC";
  2204. DataTable dt_Area = dv.ToTable();
  2205. for (int a = 0; a < dt_Area.Rows.Count; a++)
  2206. {
  2207. dt_Area.Rows[a]["Class"] = "";
  2208. dt_Area.Rows[a]["Area"] = Math.Round(Convert.ToDouble(dt_Area.Rows[a]["Area"]), 2);
  2209. AllAnalysisDetails.Rows.Add(dt_Area.Rows[a].ItemArray);
  2210. }
  2211. }
  2212. }
  2213. dt_out = AllAnalysisDetails.Copy();
  2214. return true;
  2215. }
  2216. private DataTable InclusionAreaRatio_2(string str)
  2217. {
  2218. //根据sql条件,查询获取颗粒信息数据
  2219. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  2220. DataTable AreaInformationOfAllElements = InvalidRemoval(InvalidRemoval(fielddata.GetAreaByAllIncA(""), "GroupName"), "TypeName");
  2221. DataTable AllAnalysisDetails = new DataTable();
  2222. AllAnalysisDetails.Columns.Add("Name");
  2223. AllAnalysisDetails.Columns.Add("TypeId");
  2224. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  2225. AllAnalysisDetails.Columns.Add("Class");
  2226. AllAnalysisDetails.Columns.Add("Cunt", typeof(double));
  2227. for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++)
  2228. {
  2229. DataRow dr2 = AllAnalysisDetails.NewRow();
  2230. dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString();
  2231. dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]);
  2232. dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString();
  2233. dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]);
  2234. dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  2235. AllAnalysisDetails.Rows.Add(dr2);
  2236. }
  2237. List<string> ClassName = new List<string>();
  2238. DataTable getClass_dt = fielddata.GetAllClass();
  2239. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  2240. {
  2241. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid")
  2242. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  2243. }
  2244. DataTable AreaRatio = new DataTable();
  2245. AreaRatio.TableName = "InclusionAreaRatio";
  2246. AreaRatio.Columns.Add("Class");
  2247. AreaRatio.Columns.Add("subdivision");
  2248. AreaRatio.Columns.Add("Area", typeof(double));
  2249. AreaRatio.Columns.Add("inca_proportion");
  2250. AreaRatio.Columns.Add("inca_FieldRatio");
  2251. //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一)
  2252. int sumArea = 0;
  2253. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  2254. {
  2255. sumArea = sumArea + Convert.ToInt32(AllAnalysisDetails.Rows[i]["Area"]);
  2256. }
  2257. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  2258. {
  2259. DataRow dr = AreaRatio.NewRow();
  2260. dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  2261. dr["subdivision"] = AllAnalysisDetails.Rows[i]["Name"].ToString();
  2262. dr["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]);
  2263. dr["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / sumArea) * 100, 2);
  2264. dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  2265. AreaRatio.Rows.Add(dr);
  2266. }
  2267. DataTable AreaRatio_dt = AreaRatio.Copy();
  2268. AreaRatio_dt.Clear();
  2269. for (int i = 0; i < ClassName.Count(); i++)
  2270. {
  2271. DataTable dt = AreaRatio.Copy();
  2272. dt.Clear();
  2273. for (int a = 0; a < AreaRatio.Rows.Count; a++)
  2274. {
  2275. if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  2276. {
  2277. dt.Rows.Add(AreaRatio.Rows[a].ItemArray);
  2278. }
  2279. }
  2280. DataView dv = dt.DefaultView;
  2281. dv.Sort = "Area DESC";
  2282. DataTable dt_Element = dv.ToTable();
  2283. for (int a = 0; a < dt_Element.Rows.Count; a++)
  2284. {
  2285. AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  2286. }
  2287. }
  2288. return AreaRatio_dt;
  2289. }
  2290. public void criterion_out(GBReport GB_Report, OTSReport_Export in_export,int Index,DataTable dev_internationalLanguage,bool gb_1,bool gb_2,bool AmericanStandard,bool GermanStandard)
  2291. {
  2292. //首页信息
  2293. GB_Report = new GBReport(in_export);
  2294. GB_Report.setResultGrid(m_otsreport_export.m_mbszclass);
  2295. GB_Report.International_language(dev_internationalLanguage);
  2296. for (int i = 0; i < m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList.Count; i++)
  2297. {
  2298. string anothername = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[i].anotherFileName.ToString();
  2299. string resultfile = m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[i].FilePath.ToString() + "\\" + m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[i].FileName_real.ToString();
  2300. m_otsreport_export.m_ReportApp.m_rstDataMgr.m_ReportMgr.AddASmplMsrResultMgr(resultfile, anothername);
  2301. }
  2302. OTSCLRINTERFACE.CPropParamClr clr_prop = m_otsreport_export.m_ReportApp.m_rstDataMgr.m_ReportMgr.GetPropertyParamTable();
  2303. List<string> datasourcelist = m_otsreport_export.m_ReportApp.m_conditionChoose.m_conditionData.GetComboDownListByItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE);
  2304. if (gb_1)
  2305. {
  2306. List<DataTable> GB1 = InsertReportTemplateTable_ChineseStandardABCDDS(clr_prop, datasourcelist, Index, (int)CALCULATE_TABLE_TYPE.GB_Method1);
  2307. DataView dv_gb1 = GB1[4].DefaultView;
  2308. dv_gb1.Sort = "Grade desc";
  2309. DataTable dt_gb1 = dv_gb1.ToTable();
  2310. for (int i=0; i < GB1[4].Rows.Count;i++)
  2311. {
  2312. for(int a=0;a< GB1[4].Columns.Count;a++)
  2313. {
  2314. GB1[4].Rows[i][a] = dt_gb1.Rows[i][a];
  2315. }
  2316. }
  2317. List<string> GB1NameList = new List<string>();
  2318. GB1NameList.Add("A类");
  2319. GB1NameList.Add("B类");
  2320. GB1NameList.Add("C类");
  2321. GB1NameList.Add("D类");
  2322. GB1NameList.Add("DS类");
  2323. GB_Report.set_GB_Method(GB1, GB1NameList, "方法一");
  2324. }
  2325. if (gb_2)
  2326. {
  2327. List<DataTable> GB2 = InsertReportTemplateTable_ChineseStandardABCDDS(clr_prop, datasourcelist, Index, (int)CALCULATE_TABLE_TYPE.GB_Method2);
  2328. DataView dv_gb1 = GB2[5].DefaultView;
  2329. dv_gb1.Sort = "Grade desc";
  2330. DataTable dt_gb1 = dv_gb1.ToTable();
  2331. for (int i = 0; i < GB2[5].Rows.Count; i++)
  2332. {
  2333. for (int a = 0; a < GB2[5].Columns.Count; a++)
  2334. {
  2335. GB2[5].Rows[i][a] = dt_gb1.Rows[i][a];
  2336. }
  2337. }
  2338. List<string> GB2NameList = new List<string>();
  2339. GB2NameList.Add("A类");
  2340. GB2NameList.Add("B类");
  2341. GB2NameList.Add("C类");
  2342. GB2NameList.Add("D类");
  2343. GB2NameList.Add("D硫化物类");
  2344. GB2NameList.Add("DS类");
  2345. GB_Report.set_GB_Method(GB2, GB2NameList, "方法二");
  2346. }
  2347. DevExpress.XtraReports.UI.ReportPrintTool tool = new DevExpress.XtraReports.UI.ReportPrintTool(GB_Report);
  2348. tool.ShowPreview();
  2349. }
  2350. }
  2351. }