InclusionProportion.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. using OTSCommon.Model;
  2. using OTSIncAReportApp.DataOperation.DataAccess;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using static OTSIncAReportApp.OTSReport_Export;
  10. namespace OTSIncAReportApp._1_UI.OTSReportExport.DataIntegration
  11. {
  12. /// <summary>
  13. /// 夹杂物占比
  14. /// </summary>
  15. class InclusionProportion
  16. {
  17. /// <summary>
  18. /// 夹杂物数据表
  19. /// </summary>
  20. /// <param name="str"></param>
  21. /// <param name="dt"></param>
  22. public DataTable GetINCAtable(string str, OTSReport_Export m_otsreport_export, c_TemplateClass m_mbszclass)
  23. {
  24. //根据sql条件,查询获取颗粒信息数据
  25. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  26. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  27. List<string> ClassName = new List<string>();
  28. DataTable getClass_dt = fielddata.GetAllClass();
  29. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  30. {
  31. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid")
  32. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  33. ClassName.Add("Default");
  34. else
  35. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  36. }
  37. //夹杂物面积比添加大类
  38. DataTable RawParticleData = InclusionAreaRatio_2(str, m_otsreport_export, m_mbszclass);
  39. //夹杂物面积比计算大类占比
  40. ProportionOfParticleArea(RawParticleData, ClassName, str, out DataTable dt);
  41. return dt;
  42. }
  43. /// <summary>
  44. /// 夹杂物大分类chart数据
  45. /// </summary>
  46. /// <param name="str"></param>
  47. /// <param name="m_mbszclass"></param>
  48. /// <param name="m_otsreport_export"></param>
  49. /// <returns></returns>
  50. public DataTable Get_incaPIC_classify(string str ,c_TemplateClass m_mbszclass, OTSReport_Export m_otsreport_export)
  51. {
  52. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  53. DataTable data = new DataTable();
  54. if (m_mbszclass.M_SY.int_xzkl == 0)
  55. {
  56. data = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息
  57. }
  58. else
  59. {
  60. DataTable AllInca = fielddata.GetAreaByAllIncA("");
  61. DataTable SelectParticl = SelectParticleData(m_otsreport_export);
  62. data = GetParticleListForParticlSize(SelectParticl, AllInca);
  63. }
  64. //去除物质分类(非夹杂物分类)
  65. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++)
  66. {
  67. for (int i = data.Rows.Count - 1; i >= 0; i--)
  68. {
  69. if (data.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString())
  70. {
  71. data.Rows.RemoveAt(i);
  72. }
  73. }
  74. }
  75. DataTable AreaInformationOfAllElements = ConSolidateInvalid(data);
  76. DataTable AllAnalysisDetails = new DataTable();
  77. AllAnalysisDetails.Columns.Add("Name");
  78. AllAnalysisDetails.Columns.Add("TypeId");
  79. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  80. AllAnalysisDetails.Columns.Add("Class");
  81. AllAnalysisDetails.Columns.Add("Cunt", typeof(double));
  82. for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++)
  83. {
  84. DataRow dr2 = AllAnalysisDetails.NewRow();
  85. dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString();
  86. dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]);
  87. dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString();
  88. dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]);
  89. if (AreaInformationOfAllElements.Rows[i]["GroupName"].ToString() == "")
  90. dr2["Class"] = "Default";
  91. else
  92. dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  93. //dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  94. AllAnalysisDetails.Rows.Add(dr2);
  95. }
  96. //按照list列表进行物质类排序,物质类中的元素分类按照面积的大小进行排序
  97. List<string> ClassName = new List<string>();
  98. DataTable getClass_dt = fielddata.GetAllClass();
  99. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  100. {
  101. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  102. ClassName.Add("Default");
  103. else
  104. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  105. }
  106. DataTable AreaRatio = new DataTable();
  107. AreaRatio.TableName = "InclusionAreaRatio";
  108. AreaRatio.Columns.Add("Class");
  109. AreaRatio.Columns.Add("Name");
  110. AreaRatio.Columns.Add("Area", typeof(double));
  111. AreaRatio.Columns.Add("inca_proportion");
  112. AreaRatio.Columns.Add("inca_FieldRatio");
  113. AreaRatio.Columns.Add("Cunt", typeof(int));
  114. //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一)
  115. double totalInclusionArea = Convert.ToDouble(decimal.Parse(AllAnalysisDetails.Compute("sum(Area)", "").ToString()));
  116. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  117. {
  118. DataRow dr2 = AreaRatio.NewRow();
  119. dr2["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  120. dr2["Name"] = AllAnalysisDetails.Rows[i]["Name"].ToString();
  121. dr2["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]);
  122. dr2["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / totalInclusionArea) * 100, 2);
  123. dr2["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  124. dr2["Cunt"] = AllAnalysisDetails.Rows[i]["Cunt"].ToString();
  125. AreaRatio.Rows.Add(dr2);
  126. }
  127. DataTable AreaRatio_dt = AreaRatio.Copy();
  128. AreaRatio_dt.Clear();
  129. for (int i = 0; i < ClassName.Count(); i++)
  130. {
  131. DataTable dt = AreaRatio.Copy();
  132. dt.Clear();
  133. for (int a = 0; a < AreaRatio.Rows.Count; a++)
  134. {
  135. if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  136. {
  137. dt.Rows.Add(AreaRatio.Rows[a].ItemArray);
  138. }
  139. }
  140. DataView dv = dt.DefaultView;
  141. dv.Sort = "Area DESC";
  142. DataTable dt_Element = dv.ToTable();
  143. for (int a = 0; a < dt_Element.Rows.Count; a++)
  144. {
  145. AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  146. }
  147. }
  148. DataTable AllAnalysisDetails1 = AreaRatio_dt.Copy();
  149. AllAnalysisDetails1.Clear();
  150. for (int i = 0; i < ClassName.Count; i++)
  151. {
  152. DataTable dt = AreaRatio_dt.Copy();
  153. dt.Clear();
  154. for (int a = 0; a < AreaRatio_dt.Rows.Count; a++)
  155. {
  156. if (AreaRatio_dt.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  157. {
  158. dt.Rows.Add(AreaRatio_dt.Rows[a].ItemArray);
  159. }
  160. }
  161. if (dt.Rows.Count > 0)
  162. {
  163. double totalInclusionArea2 = Convert.ToDouble(decimal.Parse(AreaRatio_dt.Compute("sum(Area)", "").ToString()));
  164. double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  165. int cunt = Convert.ToInt32(decimal.Parse(dt.Compute("sum(Cunt)", "").ToString()));
  166. DataRow dr3 = AllAnalysisDetails1.NewRow();
  167. dr3["Class"] = ClassName[i].ToString();
  168. dr3["Area"] = Math.Round(Area, 2);
  169. dr3["inca_proportion"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / totalInclusionArea2) * 100, 2);
  170. dr3["inca_FieldRatio"] = Math.Round((Convert.ToDouble(dt.Rows[0]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  171. dr3["Cunt"] = cunt;
  172. AllAnalysisDetails1.Rows.Add(dr3);
  173. }
  174. }
  175. return AllAnalysisDetails1;
  176. }
  177. /// <summary>
  178. /// 夹杂物细分类chart数据
  179. /// </summary>
  180. /// <param name="m_mbszclass"></param>
  181. /// <param name="m_otsreport_export"></param>
  182. /// <returns></returns>
  183. public DataTable Get_incaPIC_subdivision(c_TemplateClass m_mbszclass,OTSReport_Export m_otsreport_export)
  184. {
  185. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  186. DataTable data = new DataTable();
  187. if (m_mbszclass.M_SY.int_xzkl == 0)
  188. {
  189. data = fielddata.GetAreaByAllIncA("");//获取所有分类面积和数量信息
  190. }
  191. else
  192. {
  193. DataTable AllInca = fielddata.GetAreaByAllIncA("");
  194. DataTable SelectParticl = SelectParticleData(m_otsreport_export);
  195. data = GetParticleListForParticlSize(SelectParticl, AllInca);
  196. }
  197. return ConSolidateInvalid(data);
  198. }
  199. /// <summary>
  200. /// 判断是否有大分类,有为true
  201. /// </summary>
  202. /// <param name="m_otsreport_export"></param>
  203. /// <returns></returns>
  204. public bool IsThereAMajorClassification(OTSReport_Export m_otsreport_export)
  205. {
  206. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  207. DataTable getClass_dt = fielddata.GetAllClass();
  208. List<string> ClassName = new List<string>();
  209. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  210. {
  211. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid"
  212. && getClass_dt.Rows[i]["GroupName"].ToString() != "Not Identified")
  213. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  214. ClassName.Add("Default");
  215. else
  216. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  217. }
  218. if (ClassName.Count < 2)
  219. {
  220. return false;
  221. }
  222. else
  223. {
  224. return true;
  225. }
  226. }
  227. private DataTable ConSolidateInvalid(DataTable dt)
  228. {
  229. DataTable dt_invalid = dt.Clone();
  230. DataTable dt_no_invalid = dt.Clone();
  231. for (int i = 0; i < dt.Rows.Count; i++)
  232. {
  233. if (dt.Rows[i]["TypeName"].ToString() == "Invalid")
  234. {
  235. dt_invalid.Rows.Add(dt.Rows[i].ItemArray);
  236. }
  237. else
  238. {
  239. dt_no_invalid.Rows.Add(dt.Rows[i].ItemArray);
  240. }
  241. }
  242. return dt_no_invalid;
  243. }
  244. private DataTable GetParticleListForParticlSize(DataTable data, DataTable table)
  245. {
  246. DataTable dt_Partick = new DataTable();
  247. dt_Partick.Columns.Add("TypeId");
  248. dt_Partick.Columns.Add("TypeName");
  249. dt_Partick.Columns.Add("TypeColor");
  250. dt_Partick.Columns.Add("con");
  251. dt_Partick.Columns.Add("ar");
  252. dt_Partick.Columns.Add("max");
  253. dt_Partick.Columns.Add("Area", typeof(double));
  254. dt_Partick.Columns.Add("GroupName");
  255. List<string> typeName = new List<string>();
  256. for (int i = 0; i < data.Rows.Count; i++)
  257. {
  258. typeName.Add(data.Rows[i]["TypeId"].ToString());
  259. }
  260. typeName = typeName.Distinct().ToList();
  261. for (int i = 0; i < typeName.Count; i++)
  262. {
  263. DataTable dt = dt_Partick.Clone();
  264. for (int j = 0; j < data.Rows.Count; j++)
  265. {
  266. if (typeName[i].ToString() == data.Rows[j]["TypeId"].ToString())
  267. {
  268. DataRow row = dt.NewRow();
  269. row["TypeId"] = data.Rows[j]["TypeId"];
  270. row["TypeName"] = data.Rows[j]["TypeName"];
  271. row["TypeColor"] = data.Rows[j]["TypeColor"];
  272. row["Area"] = data.Rows[j]["Area"];
  273. dt.Rows.Add(row);
  274. }
  275. }
  276. DataRow dr = dt_Partick.NewRow();
  277. dr["TypeId"] = dt.Rows[0]["TypeId"].ToString();
  278. dr["TypeName"] = dt.Rows[0]["TypeName"].ToString();
  279. dr["TypeColor"] = dt.Rows[0]["TypeColor"].ToString();
  280. dr["con"] = dt.Rows.Count;
  281. dr["ar"] = dt.Compute("min(Area)", "");
  282. dr["max"] = dt.Compute("Max(Area)", "");
  283. dr["Area"] = dt.Compute("SUM(Area)", "");
  284. dt_Partick.Rows.Add(dr);
  285. }
  286. for (int i = 0; i < dt_Partick.Rows.Count; i++)
  287. {
  288. for (int j = 0; j < table.Rows.Count; j++)
  289. {
  290. if (dt_Partick.Rows[i]["TypeId"].ToString() == table.Rows[j]["TypeId"].ToString())
  291. {
  292. dt_Partick.Rows[i]["GroupName"] = table.Rows[j]["GroupName"];
  293. break;
  294. }
  295. }
  296. }
  297. return dt_Partick;
  298. }
  299. private DataTable SelectParticleData(OTSReport_Export m_otsreport_export)
  300. {
  301. List<Particle> selectParticles = m_otsreport_export.m_ReportApp.GetSelectedParticles();
  302. #region Datatable数据表格式
  303. DataTable dtUelect = new DataTable();
  304. dtUelect.Columns.Add("fieldid");
  305. dtUelect.Columns.Add("particleid");
  306. dtUelect.Columns.Add("AveGray");
  307. dtUelect.Columns.Add("RectLeft");
  308. dtUelect.Columns.Add("RectTop");
  309. dtUelect.Columns.Add("RectWidth");
  310. dtUelect.Columns.Add("RectHeight");
  311. dtUelect.Columns.Add("Area");
  312. dtUelect.Columns.Add("PosX");
  313. dtUelect.Columns.Add("PosY");
  314. dtUelect.Columns.Add("TypeId");
  315. dtUelect.Columns.Add("SegmentNum");
  316. dtUelect.Columns.Add("SEMPosX");
  317. dtUelect.Columns.Add("SEMPosY");
  318. dtUelect.Columns.Add("XrayId");
  319. dtUelect.Columns.Add("DMAX");
  320. dtUelect.Columns.Add("DMIN");
  321. dtUelect.Columns.Add("DPERP");
  322. dtUelect.Columns.Add("PERIMETER");
  323. dtUelect.Columns.Add("ORIENTATION");
  324. dtUelect.Columns.Add("DINSCR");
  325. dtUelect.Columns.Add("DMEAN");
  326. dtUelect.Columns.Add("DELONG");
  327. dtUelect.Columns.Add("DFERET");
  328. dtUelect.Columns.Add("TypeName");
  329. dtUelect.Columns.Add("TypeColor");
  330. #endregion
  331. for (int i = 0; i < selectParticles.Count; i++)
  332. {
  333. dtUelect.Rows.Add(selectParticles[i].FieldId, selectParticles[i].ParticleId, selectParticles[i].AveGray, selectParticles[i].RectLeft, selectParticles[i].RectTop, selectParticles[i].RectWidth, selectParticles[i].RectHeight, selectParticles[i].Area, selectParticles[i].PosX, selectParticles[i].PosX, selectParticles[i].TypeId, /*selectParticles[i].ElementNum,*/ selectParticles[i].SegmentNum, selectParticles[i].SEMPosX, selectParticles[i].SEMPosY, selectParticles[i].ParticleId, selectParticles[i].DMAX, selectParticles[i].DMIN, selectParticles[i].DPERP, selectParticles[i].PERIMETER, selectParticles[i].ORIENTATION, selectParticles[i].DINSCR, selectParticles[i].DMEAN, selectParticles[i].DELONG, selectParticles[i].DFERET, selectParticles[i].TypeName, selectParticles[i].TypeColor);
  334. }
  335. return dtUelect;
  336. }
  337. private DataTable InclusionAreaRatio_2(string str, OTSReport_Export m_otsreport_export, c_TemplateClass m_mbszclass)
  338. {
  339. //根据sql条件,查询获取颗粒信息数据
  340. ParticleData fielddata = new ParticleData(m_otsreport_export.m_ReportApp.m_rstDataMgr.ResultFilesList[m_otsreport_export.m_ReportApp.m_rstDataMgr.getSelectedIndex()].FilePath);
  341. DataTable AreaInformationOfAllElements = InvalidRemoval(fielddata.GetAreaByAllIncA(""));
  342. //去除物质分类(非夹杂物分类)
  343. for (int a = 0; a < m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass.Count; a++)
  344. {
  345. for (int i = AreaInformationOfAllElements.Rows.Count - 1; i >= 0; i--)
  346. {
  347. if (AreaInformationOfAllElements.Rows[i]["TypeName"].ToString() == m_mbszclass.M_KLLBXX.list_str_kllb_DeleteClass[a].ToString())
  348. {
  349. AreaInformationOfAllElements.Rows.RemoveAt(i);
  350. }
  351. }
  352. }
  353. DataTable AllAnalysisDetails = new DataTable();
  354. AllAnalysisDetails.Columns.Add("Name");
  355. AllAnalysisDetails.Columns.Add("TypeId");
  356. AllAnalysisDetails.Columns.Add("Area", typeof(double));
  357. AllAnalysisDetails.Columns.Add("Class");
  358. AllAnalysisDetails.Columns.Add("Cunt", typeof(double));
  359. for (int i = 0; i < AreaInformationOfAllElements.Rows.Count; i++)
  360. {
  361. DataRow dr2 = AllAnalysisDetails.NewRow();
  362. dr2["Name"] = AreaInformationOfAllElements.Rows[i]["TypeName"].ToString();
  363. dr2["Area"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["ar"]);
  364. dr2["TypeId"] = AreaInformationOfAllElements.Rows[i]["TypeId"].ToString();
  365. dr2["Cunt"] = Convert.ToDouble(AreaInformationOfAllElements.Rows[i]["con"]);
  366. dr2["Class"] = AreaInformationOfAllElements.Rows[i]["GroupName"].ToString();
  367. AllAnalysisDetails.Rows.Add(dr2);
  368. }
  369. List<string> ClassName = new List<string>();
  370. DataTable getClass_dt = fielddata.GetAllClass();
  371. for (int i = 0; i < getClass_dt.Rows.Count; i++)
  372. {
  373. if (getClass_dt.Rows[i]["GroupName"].ToString() != "NOT_INCLUTION" && getClass_dt.Rows[i]["GroupName"].ToString() != "Invalid")
  374. //ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  375. if (getClass_dt.Rows[i]["GroupName"].ToString() == "")
  376. ClassName.Add("Default");
  377. else
  378. ClassName.Add(getClass_dt.Rows[i]["GroupName"].ToString());
  379. }
  380. DataTable AreaRatio = new DataTable();
  381. AreaRatio.TableName = "InclusionAreaRatio";
  382. AreaRatio.Columns.Add("Class");
  383. AreaRatio.Columns.Add("subdivision");
  384. AreaRatio.Columns.Add("Area", typeof(double));
  385. AreaRatio.Columns.Add("inca_proportion");
  386. AreaRatio.Columns.Add("inca_FieldRatio");
  387. //获取夹杂物的总面积用于计算夹杂物类别的占比(gridview最后一个固定是未识别颗粒,要排除未识别颗粒所以for循环至grid view长度减一)
  388. int sumArea = 0;
  389. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  390. {
  391. sumArea = sumArea + Convert.ToInt32(AllAnalysisDetails.Rows[i]["Area"]);
  392. }
  393. for (int i = 0; i < AllAnalysisDetails.Rows.Count; i++)
  394. {
  395. DataRow dr = AreaRatio.NewRow();
  396. //dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  397. if (AllAnalysisDetails.Rows[i]["Class"].ToString() == "")
  398. dr["Class"] = "Default";
  399. else
  400. dr["Class"] = AllAnalysisDetails.Rows[i]["Class"].ToString();
  401. dr["subdivision"] = AllAnalysisDetails.Rows[i]["Name"].ToString();
  402. dr["Area"] = Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]);
  403. dr["inca_proportion"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / sumArea) * 100, 2);
  404. dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(AllAnalysisDetails.Rows[i]["Area"]) / Convert.ToDouble(str)) * 100, 4);
  405. AreaRatio.Rows.Add(dr);
  406. }
  407. DataTable AreaRatio_dt = AreaRatio.Copy();
  408. AreaRatio_dt.Clear();
  409. for (int i = 0; i < ClassName.Count(); i++)
  410. {
  411. DataTable dt = AreaRatio.Copy();
  412. dt.Clear();
  413. for (int a = 0; a < AreaRatio.Rows.Count; a++)
  414. {
  415. if (AreaRatio.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  416. {
  417. dt.Rows.Add(AreaRatio.Rows[a].ItemArray);
  418. }
  419. }
  420. DataView dv = dt.DefaultView;
  421. dv.Sort = "Area DESC";
  422. DataTable dt_Element = dv.ToTable();
  423. for (int a = 0; a < dt_Element.Rows.Count; a++)
  424. {
  425. AreaRatio_dt.Rows.Add(dt_Element.Rows[a].ItemArray);
  426. }
  427. }
  428. return AreaRatio_dt;
  429. }
  430. private bool ProportionOfParticleArea(DataTable dataTable, List<string> ClassName, string str, out DataTable dt_out)
  431. {
  432. DataTable AllAnalysisDetails = dataTable.Copy();
  433. AllAnalysisDetails.Clear();
  434. AllAnalysisDetails.TableName = "InclusionAreaRatio";
  435. for (int i = 0; i < ClassName.Count; i++)
  436. {
  437. DataTable dt = dataTable.Copy();
  438. dt.Clear();
  439. for (int a = 0; a < dataTable.Rows.Count; a++)
  440. {
  441. if (dataTable.Rows[a]["Class"].ToString() == ClassName[i].ToString())
  442. {
  443. dt.Rows.Add(dataTable.Rows[a].ItemArray);
  444. }
  445. }
  446. if (dt.Rows.Count > 0)
  447. {
  448. double totalInclusionArea = Convert.ToDouble(decimal.Parse(dataTable.Compute("sum(Area)", "").ToString()));
  449. double Area = Convert.ToDouble(decimal.Parse(dt.Compute("sum(Area)", "").ToString()));
  450. DataRow dr = AllAnalysisDetails.NewRow();
  451. dr["Class"] = ClassName[i].ToString();
  452. dr["Area"] = Math.Round(Area, 2);
  453. //Convert.ToDouble(decimal.Parse(dt.Compute("sum(e3)", "").ToString()));
  454. dr["inca_proportion"] = Math.Round((Convert.ToDouble(Area) / totalInclusionArea) * 100, 2);
  455. dr["inca_FieldRatio"] = Math.Round((Convert.ToDouble(Area) / Convert.ToDouble(str)) * 100, 4);
  456. AllAnalysisDetails.Rows.Add(dr);
  457. DataView dv = dt.DefaultView;
  458. dv.Sort = "Area DESC";
  459. DataTable dt_Area = dv.ToTable();
  460. for (int a = 0; a < dt_Area.Rows.Count; a++)
  461. {
  462. dt_Area.Rows[a]["Class"] = "";
  463. dt_Area.Rows[a]["Area"] = Math.Round(Convert.ToDouble(dt_Area.Rows[a]["Area"]), 2);
  464. AllAnalysisDetails.Rows.Add(dt_Area.Rows[a].ItemArray);
  465. }
  466. }
  467. }
  468. dt_out = AllAnalysisDetails.Copy();
  469. return true;
  470. }
  471. private DataTable InvalidRemoval(DataTable dt)
  472. {
  473. DataTable dataTable = dt.Copy();
  474. dataTable.Clear();
  475. for (int i = 0; i < dt.Rows.Count; i++)
  476. {
  477. if (Convert.ToInt32(dt.Rows[i]["TypeId"]) > 10)
  478. {
  479. dataTable.Rows.Add(dt.Rows[i].ItemArray);
  480. }
  481. }
  482. return dataTable;
  483. }
  484. }
  485. }