EChart_Trianglediagram.cs 24 KB

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