EChart_ParticlesComposition.cs 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884
  1. using CefSharp;
  2. using CefSharp.WinForms;
  3. using Newtonsoft.Json;
  4. using OTSIncAReportApp.OTSDataMgrFunction;
  5. using OTSIncAReportApp.OTSSampleReportInfo;
  6. using OTSIncAReportApp.SysMgrTools;
  7. using System;
  8. using System.Collections;
  9. using System.Collections.Generic;
  10. using System.Data;
  11. using System.IO;
  12. using System.Linq;
  13. using System.Windows.Forms;
  14. namespace OTSIncAReportApp.Control_ECharts
  15. {
  16. /// <summary>
  17. /// 各图char相关模块
  18. /// </summary>
  19. public partial class EChart_ParticlesComposition : UserControl
  20. {
  21. #region 图表相关变量
  22. //y轴名称
  23. public string m_str_AxisY { get; set; }
  24. //定义图片
  25. JsEvent js;
  26. //定义图片base64
  27. public string pic { get; set; }
  28. //定义图形类型
  29. public string type { get; set; }
  30. //图形数据
  31. public string data { get; set; }
  32. string url = "Resources/HTML/charts.html";
  33. //数据图类型:常用夹杂物分类CommonlyUsedClassify ,颗粒成分PComponent,元素成分EComponent,颗粒尺寸分布PSize
  34. string ComSel { get; set; }
  35. frmReportApp m_ReportApp;
  36. List<int> FLID = new List<int>() { 0, 1, 2, 4, 6, 7, 8, 9 };
  37. List<string> NameList = new List<string>() { "过小颗粒", "过大颗粒", "亮度不在分析范围内的颗粒", "低计数率颗粒", "不含分析元素的颗粒", "非夹杂物颗粒SiC", "非夹杂物颗粒FeO", "未识别颗粒" };
  38. private frmReportConditionChoose m_conditionChoose;
  39. private ResultDataMgr m_DataMgr;
  40. #endregion
  41. #region 窗体加载及构造函数
  42. public EChart_ParticlesComposition(frmReportApp ReportApp, string comsel)
  43. {
  44. ComSel = comsel;
  45. m_ReportApp = ReportApp;
  46. m_conditionChoose = ReportApp.m_conditionChoose;
  47. m_DataMgr = ReportApp.m_DataMgrFun;
  48. InitializeComponent();
  49. }
  50. private void EChart_ParticlesComposition_Load(object sender, EventArgs e)
  51. {
  52. //国际化
  53. Language lan = new Language();
  54. Hashtable table = lan.GetNameTable("CompositionDistributionGrid");
  55. NameList = new List<string>() { table["partcletype0"].ToString(), table["partcletype1"].ToString(), table["partcletype2"].ToString(), table["partcletype4"].ToString(), table["partcletype6"].ToString(), table["partcletype7"].ToString(), table["partcletype8"].ToString(), table["partcletype9"].ToString() };
  56. //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE);
  57. //string sou = m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString();
  58. string sou = m_conditionChoose.m_SourceGridData.GetPropItemValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE).ToString();
  59. if (sou.Contains("+"))
  60. {
  61. if (m_ReportApp.more)
  62. {
  63. m_ReportApp.trans = false;
  64. }
  65. else
  66. {
  67. m_ReportApp.trans = true;
  68. }
  69. m_ReportApp.more = true;
  70. //获取到List,json的字符串
  71. ChartdateMore list_json_str = GetListJsonStr();
  72. url = "Resources/HTML/chartsMore.html";
  73. m_ReportApp.data = JsonConvert.SerializeObject(list_json_str);
  74. }
  75. else
  76. {
  77. if (!m_ReportApp.more)
  78. {
  79. m_ReportApp.trans = false;
  80. }
  81. else
  82. {
  83. m_ReportApp.trans = true;
  84. }
  85. m_ReportApp.more = false;
  86. //获取到List,json的字符串
  87. List<Chartdate> list_json_str = GetListJsonStrByChartStruct();
  88. url = "Resources/HTML/charts.html";
  89. m_ReportApp.data = JsonConvert.SerializeObject(list_json_str[0]);
  90. }
  91. InitBrowser();
  92. }
  93. #endregion
  94. #region 获取单数据源
  95. private Chartdate GetCommonlyUsedClassifyData(string path)
  96. {
  97. DataOperation.DataAccess.ParticleData particledata = new DataOperation.DataAccess.ParticleData(path);
  98. //创建新的图形数据源
  99. Chartdate chart = new Chartdate();
  100. chart.Title = m_ReportApp.m_reportname;
  101. chart.YName = m_str_AxisY;
  102. //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  103. //int sel = m_ReportApp.SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString());
  104. int sel = m_conditionChoose.m_SourceGridData.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  105. string filedAndParticl = "";
  106. if (sel == 1)
  107. {
  108. List<OTSIncAReportApp.DataOperation.Model.Particle> selectParticles = m_ReportApp.SelectedParticles;
  109. foreach (var item in selectParticles)
  110. {
  111. filedAndParticl = filedAndParticl + "," + (item.FieldId.ToString() + "-" + item.ParticleId.ToString());
  112. }
  113. if (filedAndParticl != "")
  114. {
  115. filedAndParticl = filedAndParticl + ",";
  116. }
  117. }
  118. DataTable dt = particledata.GetCommonlyUsedClassifyData();
  119. //设置标签名称
  120. List<string> listName = new List<string>();
  121. listName.Add("尖晶石");
  122. listName.Add("氧化物");
  123. listName.Add("硫氧化物");
  124. listName.Add("氮化物");
  125. listName.Add("硫化物");
  126. chart.ListName = listName;
  127. //设置数据
  128. List<Item> listData = new List<Item>();
  129. //ListData
  130. for (int k = 0; k < dt.Rows.Count; k++)
  131. {
  132. try
  133. {
  134. Item item_SPINEL = new Item()
  135. {
  136. value = decimal.Round(decimal.Parse(dt.Rows[k]["SPINEL"].ToString()), 2).ToString(),
  137. name = "尖晶石"
  138. };
  139. listData.Add(item_SPINEL);
  140. Item item_OXIDE = new Item()
  141. {
  142. value = decimal.Round(decimal.Parse(dt.Rows[k]["OXIDE"].ToString()), 2).ToString(),
  143. name = "氧化物"
  144. };
  145. listData.Add(item_OXIDE);
  146. Item item_SULFIDE_OXIDE = new Item()
  147. {
  148. value = decimal.Round(decimal.Parse(dt.Rows[k]["SULFIDE_OXIDE"].ToString()), 2).ToString(),
  149. name = "硫氧化物"
  150. };
  151. listData.Add(item_SULFIDE_OXIDE);
  152. Item item_NITRIDE = new Item()
  153. {
  154. value = decimal.Round(decimal.Parse(dt.Rows[k]["NITRIDE"].ToString()), 2).ToString(),
  155. name = "氮化物"
  156. };
  157. listData.Add(item_NITRIDE);
  158. Item item_SULFIDE = new Item()
  159. {
  160. value = decimal.Round(decimal.Parse(dt.Rows[k]["SULFIDE"].ToString()), 2).ToString(),
  161. name = "硫化物"
  162. };
  163. listData.Add(item_SULFIDE);
  164. }
  165. catch
  166. {
  167. Item item = new Item()
  168. {
  169. value = "",
  170. name = ""
  171. };
  172. listData.Add(item);
  173. }
  174. }
  175. chart.ListData = listData;
  176. return chart;
  177. }
  178. /// <summary>
  179. /// 获取颗粒成分数据
  180. /// </summary>
  181. private Chartdate GetPComponentData(string path)
  182. {
  183. DataOperation.DataAccess.ParticleData particledata = new DataOperation.DataAccess.ParticleData(path);
  184. //创建新的图形数据源
  185. Chartdate chart = new Chartdate();
  186. chart.Title = m_ReportApp.m_reportname;
  187. chart.YName = m_str_AxisY;
  188. //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  189. //int sel = m_ReportApp.SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString());
  190. int sel = m_conditionChoose.m_SourceGridData.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  191. string filedAndParticl = "";
  192. if (sel == 1)
  193. {
  194. List<OTSIncAReportApp.DataOperation.Model.Particle> selectParticles = m_ReportApp.SelectedParticles;
  195. foreach (var item in selectParticles)
  196. {
  197. filedAndParticl = filedAndParticl + "," + (item.FieldId.ToString() + "-" + item.ParticleId.ToString());
  198. }
  199. if (filedAndParticl != "")
  200. {
  201. filedAndParticl = filedAndParticl + ",";
  202. }
  203. }
  204. DataTable dt = particledata.GetParticleListByIncA("area", filedAndParticl);
  205. //设置标签名称
  206. List<string> listName = new List<string>();
  207. //ListName
  208. for (int i = 0; i < dt.Rows.Count; i++)
  209. {
  210. if (Convert.ToInt32(dt.Rows[i]["TypeId"]) < 100)
  211. {
  212. continue;
  213. }
  214. listName.Add(dt.Rows[i]["TypeName"].ToString());
  215. }
  216. for (int i = 0; i < dt.Rows.Count; i++)
  217. {
  218. if (Convert.ToInt32(dt.Rows[i]["TypeId"]) > 100)
  219. {
  220. continue;
  221. }
  222. int index = FLID.IndexOf(Convert.ToInt32(dt.Rows[i]["TypeId"]));
  223. if (index == -1)
  224. {
  225. index = 7;
  226. }
  227. string name = NameList[index];
  228. if (listName.IndexOf(name) == -1)
  229. {
  230. listName.Add(name);
  231. }
  232. }
  233. chart.ListName = listName;
  234. //设置数据
  235. List<Item> listData = new List<Item>();
  236. //ListData
  237. for (int k = 0; k < dt.Rows.Count; k++)
  238. {
  239. string str = dt.Rows[k]["con"].ToString();
  240. string name = dt.Rows[k]["TypeName"].ToString();
  241. if (Convert.ToInt32(dt.Rows[k]["TypeId"]) < 100)
  242. {
  243. int index = FLID.IndexOf(Convert.ToInt32(dt.Rows[k]["TypeId"]));
  244. if (index == -1)
  245. {
  246. index = 7;
  247. }
  248. name = NameList[index];
  249. }
  250. Item item = new Item()
  251. {
  252. value = decimal.Round(decimal.Parse(str), 2).ToString(),
  253. name = name
  254. };
  255. listData.Add(item);
  256. }
  257. chart.ListData = listData;
  258. return chart;
  259. }
  260. /// <summary>
  261. /// 获取元素成分数据
  262. /// </summary>
  263. private Chartdate GetEComponentData(string path)
  264. {
  265. DataOperation.DataAccess.ParticleData particledata = new DataOperation.DataAccess.ParticleData(path);
  266. //创建新的图形数据源
  267. Chartdate chart = new Chartdate();
  268. chart.Title = m_ReportApp.m_reportname;
  269. chart.YName = m_str_AxisY;
  270. //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  271. //int sel = m_ReportApp.SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString());
  272. int sel = m_conditionChoose.m_SourceGridData.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  273. string filedAndParticl = "";
  274. if (sel == 1)
  275. {
  276. List<OTSIncAReportApp.DataOperation.Model.Particle> selectParticles = m_ReportApp.SelectedParticles;
  277. foreach (var item in selectParticles)
  278. {
  279. filedAndParticl = filedAndParticl + "," + (item.FieldId.ToString() + "-" + item.ParticleId.ToString());
  280. }
  281. if (filedAndParticl != "")
  282. {
  283. filedAndParticl = filedAndParticl + ",";
  284. }
  285. }
  286. DataTable dt = particledata.GetElementForArea(filedAndParticl);
  287. //设置标签名称
  288. List<string> listName = new List<string>();
  289. //ListName
  290. for (int i = 0; i < dt.Rows.Count; i++)
  291. {
  292. listName.Add(dt.Rows[i]["name"].ToString());
  293. }
  294. chart.ListName = listName;
  295. //设置数据
  296. List<Item> listData = new List<Item>();
  297. //ListData
  298. for (int k = 0; k < dt.Rows.Count; k++)
  299. {
  300. string str = dt.Rows[k]["earea"].ToString();
  301. try
  302. {
  303. Item item = new Item()
  304. {
  305. value = decimal.Round(decimal.Parse(str), 2).ToString(),
  306. name = dt.Rows[k]["name"].ToString()
  307. };
  308. listData.Add(item);
  309. }
  310. catch
  311. {
  312. Item item = new Item()
  313. {
  314. value = str,
  315. name = dt.Rows[k]["name"].ToString()
  316. };
  317. listData.Add(item);
  318. }
  319. }
  320. chart.ListData = listData;
  321. return chart;
  322. }
  323. /// <summary>
  324. /// 获取此尺寸分布图数据
  325. /// </summary>
  326. private Chartdate GetPSizeData(string path)
  327. {
  328. DataOperation.DataAccess.ParticleData particledata = new DataOperation.DataAccess.ParticleData(path);
  329. //创建新的图形数据源
  330. Chartdate chart = new Chartdate();
  331. chart.Title = m_ReportApp.m_reportname;
  332. chart.YName = m_str_AxisY;
  333. //设置标签名称
  334. List<string> listName = new List<string>();
  335. //获取粒级表
  336. string pathe = m_ReportApp.m_DataMgrFun.m_RptConfigFile.FileFolderSize + m_ReportApp.m_DataMgrFun.m_RptConfigFile.PartSizeFile;
  337. DataSet ds = DataOperation.DataAccess.XMLoperate.GetXml(pathe);
  338. string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
  339. for (int i = 0; i < sizestr.Split(',').Length - 1; i++)
  340. {
  341. if (sizestr.Split(',')[i].Length > 0)
  342. {
  343. double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
  344. double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
  345. listName.Add(d1.ToString() + "~" + d2.ToString());
  346. }
  347. }
  348. double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
  349. listName.Add(d.ToString() + "~MAX");
  350. chart.ListName = listName;
  351. //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  352. //int sel = m_ReportApp.SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString());
  353. int sel = m_conditionChoose.m_SourceGridData.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  354. string filedAndParticl = "";
  355. if (sel == 1)
  356. {
  357. List<OTSIncAReportApp.DataOperation.Model.Particle> selectParticles = m_ReportApp.SelectedParticles;
  358. foreach (var item in selectParticles)
  359. {
  360. filedAndParticl = filedAndParticl + "," + (item.FieldId.ToString() + "-" + item.ParticleId.ToString());
  361. }
  362. if (filedAndParticl != "")
  363. {
  364. filedAndParticl = filedAndParticl + ",";
  365. }
  366. }
  367. //idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE);
  368. //string con = m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString();
  369. string con = m_conditionChoose.m_SourceGridData.GetPropItemValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE).ToString();
  370. string po = "";
  371. switch (con)
  372. {
  373. case "DMAX":
  374. po = "DMAX";
  375. break;
  376. case "DMIN":
  377. po = "DMIN";
  378. break;
  379. case "Area":
  380. po = "Area";
  381. break;
  382. case "FERET":
  383. po = "DFERET";
  384. break;
  385. }
  386. DataTable dtp = particledata.GetParticleAll(filedAndParticl);
  387. //设置数据
  388. List<Item> listData = new List<Item>();
  389. //ListData
  390. for (int k = 0; k < listName.Count; k++)
  391. {
  392. string str = listName[k];
  393. string d1 = str.Split('~')[0];
  394. string d2 = str.Split('~')[1];
  395. if (d2 == "MAX")
  396. {
  397. d2 = "999";
  398. }
  399. DataRow[] datas = dtp.Select(getWhere(d2, d1, po));
  400. Item item = new Item()
  401. {
  402. value = datas.Count().ToString(),
  403. name = str
  404. };
  405. listData.Add(item);
  406. }
  407. chart.ListData = listData;
  408. return chart;
  409. }
  410. private string getWhere(string max, string min, string col)
  411. {
  412. return col + ">=" + min + " and " + col + "<=" + max;
  413. }
  414. #endregion
  415. #region echarts
  416. /// <summary>
  417. /// 通过m_list_chartstruct,组合json数据格式
  418. /// </summary>
  419. /// <returns></returns>
  420. private List<Chartdate> GetListJsonStrByChartStruct()
  421. {
  422. List<Chartdate> list = new List<Chartdate>();
  423. Chartdate chartdate = new Chartdate();
  424. switch (ComSel)
  425. {
  426. case "CommonlyUsedClassify":
  427. chartdate = GetCommonlyUsedClassifyData(m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FilePath);
  428. break;
  429. case "PComponent":
  430. chartdate = GetPComponentData(m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FilePath);
  431. break;
  432. case "EComponent":
  433. chartdate = GetEComponentData(m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FilePath);
  434. break;
  435. case "PSize":
  436. chartdate = GetPSizeData(m_DataMgr.resultFilesList[m_DataMgr.WorkingResult].FilePath);
  437. break;
  438. }
  439. list.Add(chartdate);
  440. return list;
  441. }
  442. /// <summary>
  443. /// 通过m_list_chartstruct,组合json数据格式
  444. /// </summary>
  445. /// <returns></returns>
  446. private ChartdateMore GetListJsonStr()
  447. {
  448. //int idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  449. //int sel = m_ReportApp.SourceGridData.ConditionItemList[idx].comboDownList.IndexOf(m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString());
  450. int sel = m_conditionChoose.m_SourceGridData.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  451. string filedAndParticl = "";
  452. if (sel == 1)
  453. {
  454. List<OTSIncAReportApp.DataOperation.Model.Particle> selectParticles = m_ReportApp.SelectedParticles;
  455. foreach (var item in selectParticles)
  456. {
  457. filedAndParticl = filedAndParticl + "," + (item.FieldId.ToString() + "-" + item.ParticleId.ToString());
  458. }
  459. if (filedAndParticl != "")
  460. {
  461. filedAndParticl = filedAndParticl + ",";
  462. }
  463. }
  464. DataOperation.DataAccess.ParticleData particledata = null;
  465. DataTable dt = new DataTable();
  466. ChartdateMore chart = new ChartdateMore();
  467. chart.Title = m_ReportApp.m_reportname;
  468. chart.YName = m_str_AxisY;
  469. List<string> listName = new List<string>();
  470. List<string> soursName = new List<string>();
  471. List<List<Item>> listDataMore = new List<List<Item>>();
  472. //idx = m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE);
  473. //string sou = m_ReportApp.SourceGridData.ConditionItemList[idx].itemVal.ToString();
  474. string sou = m_conditionChoose.m_SourceGridData.GetPropItemValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE).ToString();
  475. if (sou.Contains("+"))
  476. {
  477. for (int i = 0; i < sou.Split('+').Length; i++)
  478. {
  479. DataOperation.Model.ResultFile resultFile = m_DataMgr.resultFilesList.Find(s => s.FileName == sou.Split('+')[i]);
  480. if (resultFile == null)
  481. {
  482. continue;
  483. }
  484. soursName.Add(resultFile.FileName);
  485. particledata = new DataOperation.DataAccess.ParticleData(resultFile.FilePath);
  486. switch (ComSel)
  487. {
  488. case "CommonlyUsedClassify":
  489. break;
  490. case "PComponent":
  491. //创建新的图形数据源
  492. dt = particledata.GetParticleListByIncA("area", filedAndParticl);
  493. //设置标签名称
  494. for (int j = 0; j < dt.Rows.Count; j++)
  495. {
  496. if (Convert.ToInt32(dt.Rows[j]["TypeId"]) < 100)
  497. {
  498. continue;
  499. }
  500. string name = dt.Rows[j]["TypeName"].ToString();
  501. if (!listName.Contains(name))
  502. {
  503. listName.Add(name);
  504. }
  505. }
  506. for (int j = 0; j < dt.Rows.Count; j++)
  507. {
  508. if (Convert.ToInt32(dt.Rows[j]["TypeId"]) > 100)
  509. {
  510. continue;
  511. }
  512. int index = FLID.IndexOf(Convert.ToInt32(dt.Rows[j]["TypeId"]));
  513. if (index == -1)
  514. {
  515. index = 7;
  516. }
  517. string name = NameList[index];
  518. if (!listName.Contains(name))
  519. {
  520. listName.Add(name);
  521. }
  522. }
  523. //设置数据
  524. List<Item> listData = new List<Item>();
  525. //ListData
  526. for (int k = 0; k < dt.Rows.Count; k++)
  527. {
  528. string str = dt.Rows[k]["con"].ToString();
  529. string name = dt.Rows[k]["TypeName"].ToString();
  530. if (Convert.ToInt32(dt.Rows[k]["TypeId"]) < 100)
  531. {
  532. int index = FLID.IndexOf(Convert.ToInt32(dt.Rows[k]["TypeId"]));
  533. name = NameList[index];
  534. }
  535. Item item = new Item()
  536. {
  537. value = decimal.Round(decimal.Parse(str), 2).ToString(),
  538. name = name
  539. };
  540. listData.Add(item);
  541. }
  542. listDataMore.Add(listData);
  543. break;
  544. case "EComponent":
  545. //创建新的图形数据源
  546. dt = particledata.GetElementForArea(filedAndParticl);
  547. //ListName
  548. for (int j = 0; j < dt.Rows.Count; j++)
  549. {
  550. string name = dt.Rows[j]["name"].ToString();
  551. if (!listName.Contains(name))
  552. {
  553. listName.Add(name);
  554. }
  555. }
  556. //设置数据
  557. List<Item> listData1 = new List<Item>();
  558. //ListData
  559. for (int k = 0; k < dt.Rows.Count; k++)
  560. {
  561. string str = dt.Rows[k]["earea"].ToString();
  562. try
  563. {
  564. Item item = new Item()
  565. {
  566. value = decimal.Round(decimal.Parse(str), 2).ToString(),
  567. name = dt.Rows[k]["name"].ToString()
  568. };
  569. listData1.Add(item);
  570. }
  571. catch
  572. {
  573. Item item = new Item()
  574. {
  575. value = str,
  576. name = dt.Rows[k]["name"].ToString()
  577. };
  578. listData1.Add(item);
  579. }
  580. }
  581. listDataMore.Add(listData1);
  582. break;
  583. case "PSize":
  584. //获取粒级表
  585. string pathe = m_DataMgr.m_RptConfigFile.FileFolderSize + m_DataMgr.m_RptConfigFile.PartSizeFile;
  586. DataSet ds = DataOperation.DataAccess.XMLoperate.GetXml(pathe);
  587. string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
  588. List<string> temp = new List<string>();
  589. for (int j = 0; j < sizestr.Split(',').Length - 1; j++)
  590. {
  591. if (sizestr.Split(',')[j].Length > 0)
  592. {
  593. double d1 = Convert.ToDouble(sizestr.Split(',')[j]);
  594. double d2 = Convert.ToDouble(sizestr.Split(',')[j + 1]);
  595. string name = d1.ToString() + "~" + d2.ToString();
  596. temp.Add(name);
  597. if (!listName.Contains(name))
  598. {
  599. listName.Add(name);
  600. }
  601. }
  602. }
  603. double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
  604. string name1 = d.ToString() + "~MAX";
  605. temp.Add(name1);
  606. if (!listName.Contains(name1))
  607. {
  608. listName.Add(name1);
  609. }
  610. //string con = m_ReportApp.SourceGridData.ConditionItemList[m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE)].itemVal.ToString();
  611. string con = m_conditionChoose.m_SourceGridData.GetPropItemValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE).ToString();
  612. string po = "";
  613. switch (con)
  614. {
  615. case "DMAX":
  616. po = "DMAX";
  617. break;
  618. case "DMIN":
  619. po = "DMIN";
  620. break;
  621. case "Area":
  622. po = "Area";
  623. break;
  624. case "FERET":
  625. po = "DFERET";
  626. break;
  627. }
  628. DataTable dtp = particledata.GetParticleAll(filedAndParticl);
  629. //设置数据
  630. List<Item> listData2 = new List<Item>();
  631. //ListData
  632. for (int k = 0; k < temp.Count; k++)
  633. {
  634. string str = temp[k];
  635. string d1 = str.Split('~')[0];
  636. string d2 = str.Split('~')[1];
  637. if (d2 == "MAX")
  638. {
  639. d2 = "999";
  640. }
  641. DataRow[] datas = dtp.Select(getWhere(d2, d1, po));
  642. Item item = new Item()
  643. {
  644. value = datas.Count().ToString(),
  645. name = str
  646. };
  647. listData2.Add(item);
  648. }
  649. listDataMore.Add(listData2);
  650. break;
  651. }
  652. }
  653. }
  654. chart.ListName = listName;
  655. chart.SoursName = soursName;
  656. chart.ListData = listDataMore;
  657. return chart;
  658. }
  659. class Chartdate
  660. {
  661. public string Title { get; set; }
  662. public string YName { get; set; }
  663. public List<string> ListName { get; set; }
  664. public List<Item> ListData { get; set; }
  665. }
  666. class ChartdateMore
  667. {
  668. public string Title { get; set; }
  669. public string YName { get; set; }
  670. public List<string> ListName { get; set; }
  671. public List<string> SoursName { get; set; }
  672. public List<List<Item>> ListData { get; set; }
  673. }
  674. class Item
  675. {
  676. public string value { get; set; }
  677. public string name { get; set; }
  678. }
  679. //获取图片
  680. private void button1_Click(object sender, EventArgs e)
  681. {
  682. string str = GetPic();
  683. pic = str;
  684. //保存目录
  685. string dir = Path.Combine(Directory.GetCurrentDirectory(), "Resources/HTML/pic");
  686. //文件名称
  687. string fileName = "headdemo" + DateTime.Now.ToString("yyyyMMddHHmmssff");
  688. //保存文件所在站点位置
  689. string filePath = Path.Combine(dir, fileName);
  690. if (!System.IO.Directory.Exists(dir))
  691. System.IO.Directory.CreateDirectory(dir);
  692. //将Base64String转为图片并保存
  693. byte[] arr2 = Convert.FromBase64String(str.Substring(str.IndexOf(',') + 1));
  694. using (MemoryStream ms2 = new MemoryStream(arr2))
  695. {
  696. System.Drawing.Bitmap bmp2 = new System.Drawing.Bitmap(ms2);
  697. bmp2.Save(filePath + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
  698. }
  699. }
  700. /// <summary>
  701. /// 加载浏览器
  702. /// </summary>
  703. public void InitBrowser()
  704. {
  705. //加载网页
  706. if (m_ReportApp.browser == null || m_ReportApp.trans)
  707. {
  708. // 获取生成路径下网页文件的绝对路径
  709. string fileName = Path.Combine(Directory.GetCurrentDirectory(), url);
  710. //加载网页
  711. m_ReportApp.browser = new ChromiumWebBrowser(fileName);
  712. //禁止网页
  713. m_ReportApp.browser.MenuHandler = new MenuHandler();
  714. m_ReportApp.browser.Dock = DockStyle.Fill;
  715. m_ReportApp.js.MessageText = "";
  716. //添加网页到当前自定义控件
  717. this.Controls.Add(m_ReportApp.browser);
  718. //供页面调用以传递数据
  719. m_ReportApp.browser.RegisterJsObject("jsObj", m_ReportApp.js, false);
  720. //升级cef版本后新方法
  721. //CefSharpSettings.LegacyJavascriptBindingEnabled = true;
  722. //CefSharpSettings.WcfEnabled = true;
  723. //m_ReportApp.browser.JavascriptObjectRepository.Register("jsObj", m_ReportApp.js, isAsync: false, options: BindingOptions.DefaultBinder);
  724. //网页加载结束后调用事件
  725. m_ReportApp.browser.FrameLoadEnd += WebBrowser_FrameLoadEnd;
  726. }
  727. else
  728. {
  729. m_ReportApp.browser.ResetText();
  730. m_ReportApp.browser.Reload();
  731. m_ReportApp.browser.Refresh();
  732. //供页面调用以传递数据
  733. this.Controls.Add(m_ReportApp.browser);
  734. }
  735. if (m_ReportApp.timerKG)
  736. {
  737. timer1.Enabled = true;
  738. }
  739. }
  740. /// <summary>
  741. /// 页面加载结束后事件
  742. /// </summary>
  743. /// <param name="sender"></param>
  744. /// <param name="e"></param>
  745. private void WebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
  746. {
  747. if (e.Frame.IsMain)
  748. {
  749. //为页面图形提供数据参数
  750. string str = m_ReportApp.data;
  751. //执行网页脚本事件
  752. m_ReportApp.browser.ExecuteScriptAsync("showchart('" + str + "','" + m_ReportApp.type + "')");
  753. }
  754. }
  755. public string GetPic()
  756. {
  757. return js.MessageText;
  758. }
  759. //禁止网页操作,右键点击等
  760. class MenuHandler : CefSharp.IContextMenuHandler
  761. {
  762. void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model)
  763. {
  764. model.Clear();
  765. }
  766. bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags)
  767. {
  768. //throw new NotImplementedException();
  769. return false;
  770. }
  771. void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame)
  772. {
  773. //throw new NotImplementedException();
  774. }
  775. bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback)
  776. {
  777. return false;
  778. }
  779. }
  780. class JsEvent
  781. {
  782. public string MessageText { set; get; }
  783. public void ShowTest()
  784. {
  785. MessageBox.Show(MessageText);
  786. }
  787. }
  788. #endregion
  789. #region EChart导出图像委托调用部份
  790. public delegate void MyDelgate(string va);
  791. public event MyDelgate butclic;
  792. private void timer1_Tick(object sender, EventArgs e)
  793. {
  794. if (butclic == null)
  795. return;
  796. if (m_ReportApp.js == null)
  797. return;
  798. if (m_ReportApp.js.MessageText == null)
  799. return;
  800. if (m_ReportApp.js.MessageText != "")
  801. {
  802. butclic(m_ReportApp.js.MessageText);
  803. timer1.Enabled = false;
  804. m_ReportApp.timerKG = false;
  805. }
  806. }
  807. #endregion
  808. }
  809. }