EChart_Trianglediagram.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. using CefSharp;
  2. using CefSharp.WinForms;
  3. using Newtonsoft.Json;
  4. using OTSCommon.Model;
  5. using OTSIncAReportApp.DataOperation.DataAccess;
  6. using OTSIncAReportApp.OTSDataMgrFunction;
  7. using OTSIncAReportApp.OTSSampleReportInfo;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Data;
  11. using System.Drawing;
  12. using System.IO;
  13. using System.Runtime.Serialization;
  14. using System.Windows.Forms;
  15. namespace OTSIncAReportApp.Control_ECharts
  16. {
  17. /// <summary>
  18. /// 三元相图EChart版
  19. /// </summary>
  20. public partial class EChart_Trianglediagram : UserControl
  21. {
  22. #region 变量定义
  23. public List<string> m_list_string_sizelevel; //图例中:颗粒粒级字符列表
  24. public List<string> m_old_list_string_sizelevel;//图例中,颗粒粒级字符列表,未处理格式的,从底层拿出来的原始格式
  25. public List<string> m_list_string_samplename;//图例中:样品名字符列表
  26. public string Template { get; set; }
  27. public int condition = -1;
  28. /// <summary>
  29. /// 全局函数,与json数据对应的类结构
  30. /// </summary>
  31. List<TriangleJsonClass> m_list_trianglejsonclass = null;
  32. string url = "CefSharp\\Resources/HTML/charts.html";
  33. frmReportApp m_ReportApp;
  34. frmReportConditionChoose m_condition;
  35. ResultDataMgr m_DataMgr;
  36. private bool ReportExporting = false;
  37. public bool Report { set; get; }
  38. /// <summary>
  39. /// 判断颗粒范围(true全部颗粒,false选择颗粒)
  40. /// </summary>
  41. public bool ParticleRange { set; get; }
  42. #endregion
  43. #region 构造函数及窗体加载
  44. /// <summary>
  45. /// 三角图,构造函数
  46. /// </summary>
  47. /// <param name="in_sec">传入,委托类对象</param>
  48. /// <param name="in_Cotsreportprojfilemgrclr">传入,项目管理类对象</param>
  49. public EChart_Trianglediagram(frmReportApp ReportApp)
  50. {
  51. m_list_trianglejsonclass = new List<TriangleJsonClass>();
  52. m_list_string_sizelevel = new List<string>();
  53. m_list_string_samplename = new List<string>();
  54. m_old_list_string_sizelevel = new List<string>();
  55. m_ReportApp = ReportApp;
  56. m_condition = ReportApp.m_conditionChoose;
  57. m_DataMgr = ReportApp.m_rstDataMgr;
  58. InitializeComponent();
  59. }
  60. /// <summary>
  61. /// 三角图,构造函数
  62. /// </summary>
  63. /// <param name="in_sec">传入,委托类对象</param>
  64. /// <param name="in_Cotsreportprojfilemgrclr">传入,项目管理类对象</param>
  65. public EChart_Trianglediagram(frmReportApp ReportApp, string Templates)
  66. {
  67. m_list_trianglejsonclass = new List<TriangleJsonClass>();
  68. m_list_string_sizelevel = new List<string>();
  69. m_list_string_samplename = new List<string>();
  70. m_old_list_string_sizelevel = new List<string>();
  71. Template = Templates;
  72. m_ReportApp = ReportApp;
  73. m_condition = ReportApp.m_conditionChoose;
  74. m_DataMgr = ReportApp.m_rstDataMgr;
  75. ReportExporting = true;
  76. InitializeComponent();
  77. }
  78. private void EChart_Trianglediagram_Load(object sender, EventArgs e)
  79. {
  80. string template = Template;
  81. if (template == "")
  82. { //三元相图模板
  83. template = m_condition.m_conditionData.GetPropItemDisplayValueByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.TRIO_CHART_TYPE).ToString();
  84. }
  85. //获取粒级表
  86. string pathtpf = Application.StartupPath + "\\Config\\ProData\\DefaultTriTemplateFile.tpf";
  87. List<string> nameList = new List<string>();
  88. DataSet ds = XMLoperate.GetXmlData(pathtpf, "XMLData");
  89. DataTable dt = ds.Tables["Member"];
  90. string TemplateName = "";
  91. //遍历第一层节点
  92. foreach (DataRow element in dt.Rows)
  93. {
  94. TemplateName = element["TemplateName"].ToString();
  95. if (TemplateName == template)
  96. {
  97. string Element = element["Element"].ToString();
  98. nameList.Add(Element.Split('.')[0]);
  99. nameList.Add(Element.Split('.')[1]);
  100. nameList.Add(Element.Split('.')[2]);
  101. break;
  102. }
  103. }
  104. //将所有的测量结果名添加到list中
  105. m_list_string_samplename.Clear();
  106. string sou = "";
  107. int sel = 0;
  108. if (Report)
  109. {
  110. sou = m_DataMgr.ResultFilesList[m_DataMgr.getSelectedIndex()].anotherFileName.ToString();
  111. if(ParticleRange)
  112. {
  113. sel = 0;
  114. }
  115. else
  116. {
  117. sel = 1;
  118. }
  119. }
  120. else
  121. {
  122. sou = m_condition.m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE].itemDisplayVal.ToString();
  123. //判断颗粒范围(全部颗粒或者选择颗粒)
  124. sel = m_ReportApp.m_conditionChoose.m_conditionData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  125. }
  126. Report = false;
  127. if (sou.Contains("+"))
  128. {
  129. if (m_ReportApp.more)
  130. {
  131. m_ReportApp.trans = false;
  132. }
  133. else
  134. {
  135. m_ReportApp.trans = true;
  136. }
  137. for (int i = 0; i < sou.Split('+').Length; i++)
  138. {
  139. ResultFile resultFile = m_DataMgr.ResultFilesList.Find(s => s.anotherFileName == sou.Split('+')[i]);
  140. if (resultFile == null)
  141. {
  142. continue;
  143. }
  144. TriangleJsonClass cl = GettriangleJsonClass(resultFile.FilePath, resultFile.anotherFileName, nameList, TemplateName,sel);
  145. m_list_trianglejsonclass.Add(cl);
  146. }
  147. }
  148. else
  149. {
  150. if (!m_ReportApp.more)
  151. {
  152. m_ReportApp.trans = false;
  153. }
  154. else
  155. {
  156. m_ReportApp.trans = true;
  157. }
  158. m_ReportApp.more = false;
  159. ResultFile resultFile;
  160. int index = (int)m_condition.m_CurrentConditions[OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE].itemVal;
  161. if (ReportExporting)
  162. {
  163. resultFile = m_DataMgr.ResultFilesList[m_DataMgr.getSelectedIndex()];
  164. }
  165. else
  166. {
  167. //resultFile = m_DataMgr.ResultFilesList[m_DataMgr.GetWorkingResult()];
  168. resultFile = m_DataMgr.ResultFilesList[index];
  169. }
  170. ReportExporting = false;
  171. TriangleJsonClass cl = GettriangleJsonClass(resultFile.FilePath, resultFile.anotherFileName, nameList, TemplateName,sel);
  172. m_list_trianglejsonclass.Add(cl);
  173. }
  174. //使用EChart进行显示
  175. if (m_list_trianglejsonclass.Count > 1)
  176. {
  177. List<Chartdate> list = new List<Chartdate>();
  178. for (int i = 0; i < m_list_trianglejsonclass.Count; i++)
  179. {
  180. //拼写Json数据
  181. Chartdate list_json_str = SpellTriangleJson(m_list_trianglejsonclass[i]);
  182. list.Add(list_json_str);
  183. }
  184. url = "CefSharp\\Resources/HTML/chartsMore.html";
  185. m_ReportApp.data = JsonConvert.SerializeObject(list);
  186. }
  187. else
  188. {
  189. //拼写Json数据
  190. Chartdate list_json_str = SpellTriangleJson(m_list_trianglejsonclass[0]);
  191. url = "CefSharp\\Resources/HTML/charts.html";
  192. m_ReportApp.data = JsonConvert.SerializeObject(list_json_str);
  193. }
  194. InitBrowser();
  195. }
  196. private TriangleJsonClass GettriangleJsonClass(string path, string name, List<string> nameList, string templatename,int sel)
  197. {
  198. TriangleJsonClass triangleJsonClass = new TriangleJsonClass();
  199. m_list_string_samplename.Add(name);
  200. List<string> list_string_sort = new List<string>();
  201. List<double[]> list_point_sort = new List<double[]>();
  202. DataTable particles = GetParticles(path, nameList,sel);
  203. foreach (DataRow item in particles.Rows)
  204. {
  205. if (item["particleLocation"].ToString() == "0,0,0")
  206. {
  207. continue;
  208. }
  209. list_string_sort.Add(item["sizeLevel"].ToString());
  210. double top = Convert.ToDouble(item["top"]);
  211. double left = Convert.ToDouble(item["left"]);
  212. double right = Convert.ToDouble(item["right"]);
  213. //x=right+top/2,y=(√3/2)*top
  214. double Y = 0.866 * top * 100;
  215. double X = (right + top / 2) * 100;
  216. double[] point = { Math.Round(X, 2), Math.Round(Y) };
  217. list_point_sort.Add(point);
  218. }
  219. triangleJsonClass = new TriangleJsonClass()
  220. {
  221. Samplename = name,
  222. TopName = templatename.Split('.')[0],
  223. LeftName = templatename.Split('.')[1],
  224. RightName = templatename.Split('.')[2],
  225. ListPartSize = list_string_sort,
  226. ListPointF = list_point_sort
  227. };
  228. return triangleJsonClass;
  229. }
  230. //获取颗粒信息
  231. private DataTable GetParticles(string filepath, List<string> nameList,int sel)
  232. {
  233. ParticleData particledata = new ParticleData(filepath);
  234. //设置标签名称
  235. List<string> listName = new List<string>();
  236. //获取粒级表
  237. string pathe = m_DataMgr.m_RptConfigFile.PartSizeFileFolder + m_DataMgr.m_RptConfigFile.PartSizeFile;
  238. DataSet ds = XMLoperate.GetXml(pathe);
  239. string sizestr = ds.Tables[0].Rows[0]["Sizes"].ToString();
  240. for (int i = 0; i < sizestr.Split(',').Length - 1; i++)
  241. {
  242. if (sizestr.Split(',')[i].Length > 0)
  243. {
  244. double d1 = Convert.ToDouble(sizestr.Split(',')[i]);
  245. double d2 = Convert.ToDouble(sizestr.Split(',')[i + 1]);
  246. listName.Add(d1.ToString() + "~" + d2.ToString());
  247. }
  248. }
  249. double d = Convert.ToDouble(sizestr.Split(',')[sizestr.Split(',').Length - 1]);
  250. listName.Add(d.ToString() + "~MAX");
  251. //int sel = m_ReportApp.m_conditionChoose.m_SourceGridData.GetComboDownListIndexByItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  252. //int sel = m_condition.SourceGridData.ConditionItemList[m_ReportApp.m_DataMgrFun.GetPropIndexByPropItemName(m_ReportApp.SourceGridData.ConditionItemList, OTSSampleReportInfo.OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE)].comboDownList.IndexOf(m_ReportApp.SourceGridData.ConditionItemList[1].itemVal.ToString());
  253. //int sel = m_condition.m_SourceGridData.GetPropIndexByPropItemName(OTS_REPORT_PROP_GRID_ITEMS.DATA_SOURCE_TYPE);
  254. string filedAndParticl = "";
  255. string po = "";
  256. string con = "";
  257. int row = m_condition.m_conditionData.ConditionItemList.Count;
  258. if (condition != -1)
  259. {
  260. List<string> li = new List<string>() { "DMAX", "DMIN", "Area", "FERET" };
  261. con = li[condition];
  262. }
  263. else
  264. {
  265. if (row < 4)
  266. {
  267. con = "DMAX";
  268. }
  269. else
  270. {
  271. con = m_condition.m_conditionData.GetPropItemDisplayValueByPropItemName( OTS_REPORT_PROP_GRID_ITEMS.SIZE_CAL_METHOD_TYPE).ToString();
  272. }
  273. }
  274. switch (con)
  275. {
  276. case "DMAX":
  277. po = "DMAX";
  278. break;
  279. case "DMIN":
  280. po = "DMIN";
  281. break;
  282. case "ECD":
  283. po = "Area";
  284. break;
  285. case "FERET":
  286. po = "DFERET";
  287. break;
  288. }
  289. //particledata.GetParticleAllHaveXray("");
  290. //DataTable dtp = particledata.GetParticleHaveXray(filedAndParticl);//旧
  291. DataTable dtp = particledata.GetParticleAllHaveXray(filedAndParticl);//新
  292. //创建一个临时表
  293. DataTable ret_dt = new DataTable();
  294. //然后额外存放三列,用于存放拆分后三个顶点的值
  295. ret_dt.Columns.Add("sizeLevel");
  296. ret_dt.Columns.Add("particleLocation");
  297. ret_dt.Columns.Add("top");
  298. ret_dt.Columns.Add("left");
  299. ret_dt.Columns.Add("right");
  300. ret_dt.Columns.Add("Color_position");
  301. for (int k = 0; k < listName.Count; k++)
  302. {
  303. string str = listName[k];
  304. string d1 = str.Split('~')[0];
  305. string d2 = str.Split('~')[1];
  306. if (d2 == "MAX")
  307. {
  308. d2 = "999";
  309. }
  310. DataRow[] datas = dtp.Select(getWhere(d2, d1, po));
  311. foreach (var item in datas)
  312. {
  313. DataRow dr = ret_dt.NewRow();
  314. dr["sizeLevel"] = str;
  315. string element = item["Element"].ToString();
  316. string strRet = getStrRet(nameList, element);
  317. dr["particleLocation"] = strRet;
  318. dr["top"] = strRet.Split(',')[0];
  319. dr["left"] = strRet.Split(',')[1];
  320. dr["right"] = strRet.Split(',')[2];
  321. dr["Color_position"] = k.ToString();
  322. ret_dt.Rows.Add(dr);
  323. }
  324. }
  325. return ret_dt;
  326. }
  327. private string getWhere(string max, string min, string col)
  328. {
  329. return col + ">=" + min + " and " + col + "<=" + max;
  330. }
  331. private string getStrRet(List<string> template, string element)
  332. {
  333. List<string> name = new List<string>()
  334. { "h","he",
  335. "li","be","b","c","n","o","f","ne",
  336. "na","mg","al","si","p","s","cl","ar",
  337. "k","ca","sc","ti","v","cr","mn","fe","co","ni","cu","zn","ga","ge","as","se","br","kr",
  338. "rb","sr","y","zr","nb","mo","tc","ru","rh","pd","ag","cd","in","sn","sb","te","i","xe",
  339. "cs","ba","la",
  340. "ce","pr","nd","pm","sm","eu","gd","tb","dy","ho","er","tm","yb","lu",
  341. "hf","ta","w","re","os","ir","pt","au","hg","tl","pb","bi","po","at","rn",
  342. "fr","ra","ac",
  343. "th","pa","u","np","pu","am","cm","bk","cf","es","fm","md","no","lr"
  344. };
  345. List<double> value = new List<double>()
  346. { 1.008,4.003,
  347. 6.941,9.012,10.811,12.011,14.007,15.999,18.998,20.180,
  348. 22.990,24.305,26.982,28.086,30.974,32.066,35.453,39.948,
  349. 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,
  350. 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,
  351. 132.905,137.33,138.906,
  352. 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,
  353. 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,
  354. 223.00,226.025,227.028,
  355. 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
  356. };
  357. double d_ASum = 0;
  358. double d_BSum = 0;
  359. double d_CSum = 0;
  360. string aElements = template[0];
  361. string bElements = template[1];
  362. string cElements = template[2];
  363. foreach (var item in element.Split(';'))
  364. {
  365. if (item.Contains(aElements + "-"))
  366. {
  367. if (aElements != "")
  368. {
  369. d_ASum = Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(aElements.ToLower())];
  370. }
  371. }
  372. for (int i = 0; i < bElements.Split(',').Length; i++)
  373. {
  374. string e = bElements.Split(',')[i];
  375. if (item.Contains(e + "-"))
  376. {
  377. d_BSum = d_BSum + Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(e.ToLower())];
  378. }
  379. }
  380. if (item.Contains(cElements + "-"))
  381. {
  382. if (cElements != "")
  383. d_CSum = Convert.ToDouble(item.Split('-')[1]) / value[name.IndexOf(cElements.ToLower())];
  384. }
  385. }
  386. double allNums = d_ASum + d_BSum + d_CSum;
  387. string strRet = "";
  388. if ((allNums) == 0)
  389. {
  390. strRet = "0,0,0";
  391. }
  392. else
  393. {
  394. double aPercent = 0, bPercent = 0, cPercent = 0;
  395. if (d_ASum != 0)
  396. {
  397. aPercent = d_ASum / allNums;
  398. }
  399. if (d_BSum != 0)
  400. {
  401. bPercent = d_BSum / allNums;
  402. }
  403. if (d_CSum != 0)
  404. {
  405. cPercent = d_CSum / allNums;
  406. }
  407. strRet = aPercent.ToString() + "," + bPercent.ToString() + "," + cPercent.ToString();
  408. }
  409. return strRet;
  410. }
  411. class Chartdate
  412. {
  413. public string Samplename { get; set; }
  414. public string LeftName { get; set; }
  415. public string RightName { get; set; }
  416. public string TopName { get; set; }
  417. public List<string> ListPartSize { get; set; }
  418. public List<List<double[]>> ListPoint { get; set; }
  419. }
  420. #endregion
  421. #region echarts
  422. //定义图片
  423. //JsEvent js;
  424. //定义图片base64
  425. public string pic { get; set; }
  426. //定义图形类型
  427. public string type { get; set; }
  428. //获取图片
  429. private void button1_Click(object sender, EventArgs e)
  430. {
  431. //string str = GetPic();
  432. //pic = str;
  433. }
  434. /// <summary>
  435. /// 加载浏览器
  436. /// </summary>
  437. public void InitBrowser()
  438. {
  439. //加载网页
  440. if (m_ReportApp.browser_trio == null || m_ReportApp.trans)
  441. {
  442. // 获取生成路径下网页文件的绝对路径
  443. string fileName = Path.Combine(Directory.GetCurrentDirectory(), url);
  444. //加载网页
  445. m_ReportApp.browser_trio = new ChromiumWebBrowser(fileName);
  446. //禁止网页
  447. m_ReportApp.browser_trio.MenuHandler = new MenuHandler();
  448. m_ReportApp.browser_trio.Dock = DockStyle.Fill;
  449. //添加网页到当前自定义控件
  450. this.Controls.Add(m_ReportApp.browser_trio);
  451. m_ReportApp.js.MessageText = "";
  452. //供页面调用以传递数据
  453. m_ReportApp.browser_trio.RegisterJsObject("jsObj", m_ReportApp.js, false);
  454. //升级cef版本后新方法
  455. //CefSharpSettings.LegacyJavascriptBindingEnabled = true;
  456. //CefSharpSettings.WcfEnabled = true;
  457. //m_ReportApp.browser_trio.JavascriptObjectRepository.Register("jsObj", m_ReportApp.js, isAsync: false, options: BindingOptions.DefaultBinder);
  458. //网页加载结束后调用事件
  459. m_ReportApp.browser_trio.FrameLoadEnd += WebBrowser_FrameLoadEnd;
  460. }
  461. else
  462. {
  463. m_ReportApp.browser_trio.ResetText();
  464. m_ReportApp.browser_trio.Reload();
  465. m_ReportApp.browser_trio.Refresh();
  466. //供页面调用以传递数据
  467. this.Controls.Add(m_ReportApp.browser_trio);
  468. }
  469. if (m_ReportApp.timerKG)
  470. {
  471. timer1.Enabled = true;
  472. }
  473. }
  474. /// <summary>
  475. /// 页面加载结束后事件
  476. /// </summary>
  477. /// <param name="sender"></param>
  478. /// <param name="e"></param>
  479. private void WebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
  480. {
  481. if (e.Frame.IsMain)
  482. {
  483. //为页面图形提供数据参数
  484. string str = m_ReportApp.data;
  485. //执行网页脚本事件
  486. m_ReportApp.browser_trio.ExecuteScriptAsync("showchart('" + str + "','','triangle')");
  487. }
  488. }
  489. //public string GetPic()
  490. //{
  491. // return js.MessageText;
  492. //}
  493. //禁止网页操作,右键点击等
  494. class MenuHandler : CefSharp.IContextMenuHandler
  495. {
  496. void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model)
  497. {
  498. model.Clear();
  499. }
  500. bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags)
  501. {
  502. //throw new NotImplementedException();
  503. return false;
  504. }
  505. void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame)
  506. {
  507. //throw new NotImplementedException();
  508. }
  509. bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback)
  510. {
  511. return false;
  512. }
  513. }
  514. class JsEvent
  515. {
  516. public string MessageText { set; get; }
  517. public void ShowTest()
  518. {
  519. MessageBox.Show(MessageText);
  520. }
  521. }
  522. #endregion
  523. #region 自定义方法
  524. /// <summary>
  525. /// 拼写json数据
  526. /// </summary>
  527. /// <returns></returns>
  528. private Chartdate SpellTriangleJson(TriangleJsonClass in_trianglejsonclass)
  529. {
  530. Chartdate chart = new Chartdate();
  531. chart.LeftName = in_trianglejsonclass.LeftName;
  532. chart.RightName = in_trianglejsonclass.RightName;
  533. chart.TopName = in_trianglejsonclass.TopName;
  534. chart.Samplename = in_trianglejsonclass.Samplename;
  535. List<string> str_listpartsize = new List<string>();
  536. List<List<double[]>> str_listpoint = new List<List<double[]>>();
  537. for (int i = 0; i < in_trianglejsonclass.ListPartSize.Count; i++)
  538. {
  539. //如果未包含该粒级
  540. if (!str_listpartsize.Contains(in_trianglejsonclass.ListPartSize[i]))
  541. {
  542. //第一步先添加该粒级
  543. str_listpartsize.Add(in_trianglejsonclass.ListPartSize[i]);
  544. }
  545. }
  546. //第二步再添加所有该粒级对应的坐标,到一个分组中
  547. for (int i = 0; i < str_listpartsize.Count; i++)
  548. {
  549. List<double[]> point = new List<double[]>();
  550. for (int k = 0; k < in_trianglejsonclass.ListPointF.Count; k++)
  551. {
  552. if (str_listpartsize[i] == in_trianglejsonclass.ListPartSize[k])
  553. {
  554. point.Add(in_trianglejsonclass.ListPointF[k]);
  555. }
  556. }
  557. str_listpoint.Add(point);
  558. }
  559. chart.ListPartSize = str_listpartsize;
  560. chart.ListPoint = str_listpoint;
  561. return chart;
  562. }
  563. #endregion
  564. #region EChart导出图像委托调用部份
  565. public delegate void MyDelgate(string va);
  566. public event MyDelgate butclic;
  567. private void timer1_Tick(object sender, EventArgs e)
  568. {
  569. if (butclic == null)
  570. return;
  571. if (m_ReportApp.js == null)
  572. return;
  573. if (m_ReportApp.js.MessageText == null)
  574. return;
  575. if (m_ReportApp.js.MessageText != "")
  576. {
  577. butclic(m_ReportApp.js.MessageText);
  578. timer1.Enabled = false;
  579. m_ReportApp.timerKG = false;
  580. m_ReportApp.js.MessageText = "";
  581. }
  582. }
  583. [DataContract]
  584. public class TriangleJsonClass
  585. {
  586. [DataMember]
  587. public string Samplename { set; get; }
  588. [DataMember]
  589. public string TopName { set; get; }
  590. [DataMember]
  591. public string LeftName { set; get; }
  592. [DataMember]
  593. public string RightName { set; get; }
  594. [DataMember]
  595. public List<string> ListPartSize { set; get; }
  596. [DataMember]
  597. public List<double[]> ListPointF { set; get; }
  598. }
  599. #endregion
  600. }
  601. }