EChart_Trianglediagram.cs 24 KB

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