|
@@ -1,244 +1,244 @@
|
|
|
-using OTSCommon.Model;
|
|
|
-using OTSIncAReportGraph;
|
|
|
-using OTSIncAReportGraph.Controls;
|
|
|
-using System;
|
|
|
-using System.Collections.Generic;
|
|
|
-using System.Data;
|
|
|
-using System.Drawing;
|
|
|
-using System.Linq;
|
|
|
-using System.Text;
|
|
|
-using System.Threading.Tasks;
|
|
|
-using System.Windows.Forms;
|
|
|
-
|
|
|
-namespace OTSIncAReportApp._3_ServiceCenter
|
|
|
-{
|
|
|
- class OutPIC
|
|
|
- {
|
|
|
-
|
|
|
- //包含particle的field的列表对象
|
|
|
- public List<DisplayField> m_list_allDfield = null;
|
|
|
- public ResultFile resultFile = null;
|
|
|
- public SaveFileDialog sfd = null;
|
|
|
- public int type = 0;
|
|
|
- /// <summary>
|
|
|
- /// 获取每行图片的位置配合opencv方法使用
|
|
|
- /// </summary>
|
|
|
- /// <returns></returns>
|
|
|
- private List<DataTable> opencv_piclist()
|
|
|
- {
|
|
|
- List<DataTable> list_dt_picdata = new List<DataTable>();
|
|
|
- DataTable picDatat = new DataTable();
|
|
|
- picDatat.Columns.Add("X", typeof(double));
|
|
|
- picDatat.Columns.Add("Y", typeof(double));
|
|
|
- foreach (var f in m_list_allDfield)
|
|
|
- {
|
|
|
- DataRow dr = picDatat.NewRow();
|
|
|
- dr["X"] = f.Rect.X;
|
|
|
- dr["Y"] = f.Rect.Y;
|
|
|
- picDatat.Rows.Add(dr);
|
|
|
- }
|
|
|
- int y_max = Convert.ToInt32(picDatat.Compute("Max(Y)", "true"));
|
|
|
- int y_min = Convert.ToInt32(picDatat.Compute("Min(Y)", "true"));
|
|
|
- DataTable total_dt_X = picDatat.Copy();
|
|
|
- DataView dv_x = total_dt_X.DefaultView;
|
|
|
- DataView dv_x_2 = dv_x.ToTable(true, "X").DefaultView;
|
|
|
- dv_x_2.Sort = "X ASC";
|
|
|
- total_dt_X = dv_x_2.ToTable();
|
|
|
-
|
|
|
-
|
|
|
- DataTable total_dt_Y = picDatat.Copy();
|
|
|
- DataView dv_Y = total_dt_Y.DefaultView;
|
|
|
- DataView dv_Y_2 = dv_Y.ToTable(true, "Y").DefaultView;
|
|
|
- dv_Y_2.Sort = "Y ASC";
|
|
|
- total_dt_Y = dv_Y_2.ToTable();
|
|
|
-
|
|
|
-
|
|
|
- for (int i = 0; i < total_dt_Y.Rows.Count; i++)
|
|
|
- {
|
|
|
- NLog.LogManager.GetCurrentClassLogger().Info("Splice line"+i+1.ToString()+"of"+ total_dt_Y.Rows.Count.ToString()+".....");
|
|
|
- DataTable data = new DataTable();
|
|
|
- data.Columns.Add("mat", typeof(Bitmap));
|
|
|
- data.Columns.Add("X", typeof(double));
|
|
|
- for (int a = 0; a < total_dt_X.Rows.Count; a++)
|
|
|
- {
|
|
|
- DataRow dr2 = data.NewRow();
|
|
|
- Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].Rect.Width, (int)m_list_allDfield[0].Rect.Height);
|
|
|
- Graphics g = Graphics.FromImage(bitmap);
|
|
|
- g.Clear(Color.White);
|
|
|
- g.Dispose();
|
|
|
- dr2["mat"] = bitmap;
|
|
|
- dr2["X"] = total_dt_X.Rows[a]["X"];
|
|
|
- data.Rows.Add(dr2);
|
|
|
- }
|
|
|
- foreach (var f in m_list_allDfield)
|
|
|
- {
|
|
|
- if (total_dt_Y.Rows[i]["Y"].ToString() == f.Rect.Y.ToString())
|
|
|
- {
|
|
|
- for (int c = 0; c < data.Rows.Count; c++)
|
|
|
- {
|
|
|
- if (data.Rows[c]["X"].ToString() == f.Rect.X.ToString())
|
|
|
- {
|
|
|
- data.Rows[c]["mat"] = f.OriginalImage;
|
|
|
- data.Rows[c]["X"] = f.Rect.X;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- DataView dataView1 = data.DefaultView;
|
|
|
- dataView1.Sort = "X ASC";
|
|
|
- data = dataView1.ToTable();
|
|
|
-
|
|
|
-
|
|
|
- list_dt_picdata.Add(data);
|
|
|
- }
|
|
|
-
|
|
|
- return list_dt_picdata;
|
|
|
- }
|
|
|
- public void opencv_outpic(/*int type*/)
|
|
|
- {
|
|
|
- List<DataTable> list_dt_picdata = new List<DataTable>();
|
|
|
- if (type == (int)Outpic_enum.pic)
|
|
|
- {
|
|
|
- list_dt_picdata = opencv_piclist();
|
|
|
- }
|
|
|
- else
|
|
|
- if (type == (int)Outpic_enum.Render_pic)
|
|
|
- {
|
|
|
- list_dt_picdata = opencv_piclist_Render();
|
|
|
- }
|
|
|
-
|
|
|
- OpenCvSharp.Mat[] list_mats = new OpenCvSharp.Mat[list_dt_picdata.Count];
|
|
|
- NLog.LogManager.GetCurrentClassLogger().Info("Organize and splice all pictures......");
|
|
|
- for (int i = 0; i < list_dt_picdata.Count; i++)
|
|
|
- {
|
|
|
- OpenCvSharp.Mat[] mats = new OpenCvSharp.Mat[list_dt_picdata[i].Rows.Count];
|
|
|
- for (int a = 0; a < list_dt_picdata[i].Rows.Count; a++)
|
|
|
- {
|
|
|
- mats[a] = OpenCvSharp.Extensions.BitmapConverter.ToMat((Bitmap)list_dt_picdata[i].Rows[a]["mat"]);
|
|
|
- }
|
|
|
- OpenCvSharp.Mat pano = new OpenCvSharp.Mat();
|
|
|
- OpenCvSharp.Cv2.HConcat(mats, pano);
|
|
|
- list_mats[i] = pano;
|
|
|
-
|
|
|
- }
|
|
|
- NLog.LogManager.GetCurrentClassLogger().Info("Picture splicing completed.");
|
|
|
- NLog.LogManager.GetCurrentClassLogger().Info("Save to disk......");
|
|
|
- OpenCvSharp.Mat save_pano = new OpenCvSharp.Mat();
|
|
|
- OpenCvSharp.Cv2.VConcat(list_mats, save_pano);
|
|
|
- OpenCvSharp.Cv2.ImWrite(sfd.FileName, save_pano);
|
|
|
- NLog.LogManager.GetCurrentClassLogger().Info("Save complete.");
|
|
|
- }
|
|
|
-
|
|
|
- private List<DataTable> opencv_piclist_Render()
|
|
|
- {
|
|
|
- List<DataTable> list_dt_picdata = new List<DataTable>();
|
|
|
- DataTable picDatat = new DataTable();
|
|
|
- List<Field> fieldlist = resultFile.List_OTSField;
|
|
|
- picDatat.Columns.Add("X", typeof(double));
|
|
|
- picDatat.Columns.Add("Y", typeof(double));
|
|
|
- foreach (var f in m_list_allDfield)
|
|
|
- {
|
|
|
- DataRow dr = picDatat.NewRow();
|
|
|
- dr["X"] = f.Rect.X;
|
|
|
- dr["Y"] = f.Rect.Y;
|
|
|
- picDatat.Rows.Add(dr);
|
|
|
- }
|
|
|
- int y_max = Convert.ToInt32(picDatat.Compute("Max(Y)", "true"));
|
|
|
- int y_min = Convert.ToInt32(picDatat.Compute("Min(Y)", "true"));
|
|
|
- DataTable total_dt_X = picDatat.Copy();
|
|
|
- DataView dv_x = total_dt_X.DefaultView;
|
|
|
- DataView dv_x_2 = dv_x.ToTable(true, "X").DefaultView;
|
|
|
- dv_x_2.Sort = "X ASC";
|
|
|
- total_dt_X = dv_x_2.ToTable();
|
|
|
-
|
|
|
-
|
|
|
- DataTable total_dt_Y = picDatat.Copy();
|
|
|
- DataView dv_Y = total_dt_Y.DefaultView;
|
|
|
- DataView dv_Y_2 = dv_Y.ToTable(true, "Y").DefaultView;
|
|
|
- dv_Y_2.Sort = "Y ASC";
|
|
|
- total_dt_Y = dv_Y_2.ToTable();
|
|
|
-
|
|
|
-
|
|
|
- for (int i = 0; i < total_dt_Y.Rows.Count; i++)
|
|
|
- {
|
|
|
- NLog.LogManager.GetCurrentClassLogger().Info("Splice line" + i + 1.ToString() + "of" + total_dt_Y.Rows.Count.ToString() + ".....");
|
|
|
-
|
|
|
- DataTable data = new DataTable();
|
|
|
- data.Columns.Add("mat", typeof(Bitmap));
|
|
|
- data.Columns.Add("X", typeof(double));
|
|
|
- for (int a = 0; a < total_dt_X.Rows.Count; a++)
|
|
|
- {
|
|
|
- DataRow dr2 = data.NewRow();
|
|
|
- Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].Rect.Width, (int)m_list_allDfield[0].Rect.Height);
|
|
|
- Graphics g = Graphics.FromImage(bitmap);
|
|
|
- g.Clear(Color.White);
|
|
|
- g.Dispose();
|
|
|
- dr2["mat"] = bitmap;
|
|
|
- dr2["X"] = total_dt_X.Rows[a]["X"];
|
|
|
- data.Rows.Add(dr2);
|
|
|
- }
|
|
|
- foreach (var f in m_list_allDfield)
|
|
|
- {
|
|
|
- if (total_dt_Y.Rows[i]["Y"].ToString() == f.Rect.Y.ToString())
|
|
|
- {
|
|
|
- for (int c = 0; c < data.Rows.Count; c++)
|
|
|
- {
|
|
|
- if (data.Rows[c]["X"].ToString() == f.Rect.X.ToString())
|
|
|
- {
|
|
|
- Bitmap image = new Bitmap(f.OriginalImage.Width, f.OriginalImage.Height);
|
|
|
- Graphics g2 = Graphics.FromImage(image);
|
|
|
- g2.DrawImage(f.OriginalImage, 0, 0, f.OriginalImage.Width, f.OriginalImage.Height);
|
|
|
- Graphics graph_2 = Graphics.FromImage(image);
|
|
|
-
|
|
|
- for (int a = 0; a < fieldlist.Count; a++)
|
|
|
- {
|
|
|
- if (fieldlist[a].FieldID.ToString() == f.FieldID.ToString())
|
|
|
- {
|
|
|
- //先获取该Field中的所有Particle
|
|
|
- List<Particle> list_particle;
|
|
|
- list_particle = fieldlist[a].ParticleList;
|
|
|
- //再循环计算所有的Particle对象
|
|
|
- foreach (Particle particle in list_particle)
|
|
|
- {
|
|
|
- //创建DParticle颗粒
|
|
|
- DisplayParticle dp = new DisplayParticle(particle);
|
|
|
- List<Segment> list_seg;
|
|
|
- list_seg = particle.SegmentList;
|
|
|
- //创建颗粒分布图对应的类对象
|
|
|
- List<DisplaySegment> list_dsegment = new List<DisplaySegment>();
|
|
|
- //再循环取出里面所有的segment
|
|
|
- foreach (Segment seg in list_seg)
|
|
|
- {
|
|
|
- #region 创建DSegment对象,并将STD分析出的化合物颜色保存到DSegment对象中
|
|
|
-
|
|
|
- Point on_p = new Point() { X = seg.Start, Y = seg.Height };
|
|
|
- Point off_p = new Point() { X = seg.Start + seg.Length, Y = seg.Height };
|
|
|
- Pen npen = new Pen(dp.Color);
|
|
|
- graph_2.DrawLine(npen, on_p, off_p);
|
|
|
-
|
|
|
- #endregion
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- data.Rows[c]["mat"] = image;
|
|
|
- data.Rows[c]["X"] = f.Rect.X;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- DataView dataView1 = data.DefaultView;
|
|
|
- dataView1.Sort = "X ASC";
|
|
|
- data = dataView1.ToTable();
|
|
|
- list_dt_picdata.Add(data);
|
|
|
- }
|
|
|
-
|
|
|
- return list_dt_picdata;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+using OTSCommon.Model;
|
|
|
+using OTSIncAReportGraph;
|
|
|
+using OTSIncAReportGraph.Controls;
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Data;
|
|
|
+using System.Drawing;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using System.Windows.Forms;
|
|
|
+
|
|
|
+namespace OTSIncAReportApp._3_ServiceCenter
|
|
|
+{
|
|
|
+ class OutPIC
|
|
|
+ {
|
|
|
+
|
|
|
+ //包含particle的field的列表对象
|
|
|
+ public List<DisplayField> m_list_allDfield = null;
|
|
|
+ public ResultFile resultFile = null;
|
|
|
+ public SaveFileDialog sfd = null;
|
|
|
+ public int type = 0;
|
|
|
+ /// <summary>
|
|
|
+ /// 获取每行图片的位置配合opencv方法使用
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ private List<DataTable> opencv_piclist()
|
|
|
+ {
|
|
|
+ List<DataTable> list_dt_picdata = new List<DataTable>();
|
|
|
+ DataTable picDatat = new DataTable();
|
|
|
+ picDatat.Columns.Add("X", typeof(double));
|
|
|
+ picDatat.Columns.Add("Y", typeof(double));
|
|
|
+ foreach (var f in m_list_allDfield)
|
|
|
+ {
|
|
|
+ DataRow dr = picDatat.NewRow();
|
|
|
+ dr["X"] = f.Rect.X;
|
|
|
+ dr["Y"] = f.Rect.Y;
|
|
|
+ picDatat.Rows.Add(dr);
|
|
|
+ }
|
|
|
+ int y_max = Convert.ToInt32(picDatat.Compute("Max(Y)", "true"));
|
|
|
+ int y_min = Convert.ToInt32(picDatat.Compute("Min(Y)", "true"));
|
|
|
+ DataTable total_dt_X = picDatat.Copy();
|
|
|
+ DataView dv_x = total_dt_X.DefaultView;
|
|
|
+ DataView dv_x_2 = dv_x.ToTable(true, "X").DefaultView;
|
|
|
+ dv_x_2.Sort = "X ASC";
|
|
|
+ total_dt_X = dv_x_2.ToTable();
|
|
|
+
|
|
|
+
|
|
|
+ DataTable total_dt_Y = picDatat.Copy();
|
|
|
+ DataView dv_Y = total_dt_Y.DefaultView;
|
|
|
+ DataView dv_Y_2 = dv_Y.ToTable(true, "Y").DefaultView;
|
|
|
+ dv_Y_2.Sort = "Y ASC";
|
|
|
+ total_dt_Y = dv_Y_2.ToTable();
|
|
|
+
|
|
|
+
|
|
|
+ for (int i = 0; i < total_dt_Y.Rows.Count; i++)
|
|
|
+ {
|
|
|
+ NLog.LogManager.GetCurrentClassLogger().Info("Splice line"+i+1.ToString()+"of"+ total_dt_Y.Rows.Count.ToString()+".....");
|
|
|
+ DataTable data = new DataTable();
|
|
|
+ data.Columns.Add("mat", typeof(Bitmap));
|
|
|
+ data.Columns.Add("X", typeof(double));
|
|
|
+ for (int a = 0; a < total_dt_X.Rows.Count; a++)
|
|
|
+ {
|
|
|
+ DataRow dr2 = data.NewRow();
|
|
|
+ Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].Rect.Width, (int)m_list_allDfield[0].Rect.Height);
|
|
|
+ Graphics g = Graphics.FromImage(bitmap);
|
|
|
+ g.Clear(Color.White);
|
|
|
+ g.Dispose();
|
|
|
+ dr2["mat"] = bitmap;
|
|
|
+ dr2["X"] = total_dt_X.Rows[a]["X"];
|
|
|
+ data.Rows.Add(dr2);
|
|
|
+ }
|
|
|
+ foreach (var f in m_list_allDfield)
|
|
|
+ {
|
|
|
+ if (total_dt_Y.Rows[i]["Y"].ToString() == f.Rect.Y.ToString())
|
|
|
+ {
|
|
|
+ for (int c = 0; c < data.Rows.Count; c++)
|
|
|
+ {
|
|
|
+ if (data.Rows[c]["X"].ToString() == f.Rect.X.ToString())
|
|
|
+ {
|
|
|
+ data.Rows[c]["mat"] = f.OriginalImage;
|
|
|
+ data.Rows[c]["X"] = f.Rect.X;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ DataView dataView1 = data.DefaultView;
|
|
|
+ dataView1.Sort = "X ASC";
|
|
|
+ data = dataView1.ToTable();
|
|
|
+
|
|
|
+
|
|
|
+ list_dt_picdata.Add(data);
|
|
|
+ }
|
|
|
+
|
|
|
+ return list_dt_picdata;
|
|
|
+ }
|
|
|
+ public void opencv_outpic(/*int type*/)
|
|
|
+ {
|
|
|
+ List<DataTable> list_dt_picdata = new List<DataTable>();
|
|
|
+ if (type == (int)Outpic_enum.pic)
|
|
|
+ {
|
|
|
+ list_dt_picdata = opencv_piclist();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ if (type == (int)Outpic_enum.Render_pic)
|
|
|
+ {
|
|
|
+ list_dt_picdata = opencv_piclist_Render();
|
|
|
+ }
|
|
|
+
|
|
|
+ OpenCvSharp.Mat[] list_mats = new OpenCvSharp.Mat[list_dt_picdata.Count];
|
|
|
+ NLog.LogManager.GetCurrentClassLogger().Info("Organize and splice all pictures......");
|
|
|
+ for (int i = 0; i < list_dt_picdata.Count; i++)
|
|
|
+ {
|
|
|
+ OpenCvSharp.Mat[] mats = new OpenCvSharp.Mat[list_dt_picdata[i].Rows.Count];
|
|
|
+ for (int a = 0; a < list_dt_picdata[i].Rows.Count; a++)
|
|
|
+ {
|
|
|
+ mats[a] = OpenCvSharp.Extensions.BitmapConverter.ToMat((Bitmap)list_dt_picdata[i].Rows[a]["mat"]);
|
|
|
+ }
|
|
|
+ OpenCvSharp.Mat pano = new OpenCvSharp.Mat();
|
|
|
+ OpenCvSharp.Cv2.HConcat(mats, pano);
|
|
|
+ list_mats[i] = pano;
|
|
|
+
|
|
|
+ }
|
|
|
+ NLog.LogManager.GetCurrentClassLogger().Info("Picture splicing completed.");
|
|
|
+ NLog.LogManager.GetCurrentClassLogger().Info("Save to disk......");
|
|
|
+ OpenCvSharp.Mat save_pano = new OpenCvSharp.Mat();
|
|
|
+ OpenCvSharp.Cv2.VConcat(list_mats, save_pano);
|
|
|
+ OpenCvSharp.Cv2.ImWrite(sfd.FileName, save_pano);
|
|
|
+ NLog.LogManager.GetCurrentClassLogger().Info("Save complete.");
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<DataTable> opencv_piclist_Render()
|
|
|
+ {
|
|
|
+ List<DataTable> list_dt_picdata = new List<DataTable>();
|
|
|
+ DataTable picDatat = new DataTable();
|
|
|
+ List<Field> fieldlist = resultFile.List_OTSField;
|
|
|
+ picDatat.Columns.Add("X", typeof(double));
|
|
|
+ picDatat.Columns.Add("Y", typeof(double));
|
|
|
+ foreach (var f in m_list_allDfield)
|
|
|
+ {
|
|
|
+ DataRow dr = picDatat.NewRow();
|
|
|
+ dr["X"] = f.Rect.X;
|
|
|
+ dr["Y"] = f.Rect.Y;
|
|
|
+ picDatat.Rows.Add(dr);
|
|
|
+ }
|
|
|
+ int y_max = Convert.ToInt32(picDatat.Compute("Max(Y)", "true"));
|
|
|
+ int y_min = Convert.ToInt32(picDatat.Compute("Min(Y)", "true"));
|
|
|
+ DataTable total_dt_X = picDatat.Copy();
|
|
|
+ DataView dv_x = total_dt_X.DefaultView;
|
|
|
+ DataView dv_x_2 = dv_x.ToTable(true, "X").DefaultView;
|
|
|
+ dv_x_2.Sort = "X ASC";
|
|
|
+ total_dt_X = dv_x_2.ToTable();
|
|
|
+
|
|
|
+
|
|
|
+ DataTable total_dt_Y = picDatat.Copy();
|
|
|
+ DataView dv_Y = total_dt_Y.DefaultView;
|
|
|
+ DataView dv_Y_2 = dv_Y.ToTable(true, "Y").DefaultView;
|
|
|
+ dv_Y_2.Sort = "Y ASC";
|
|
|
+ total_dt_Y = dv_Y_2.ToTable();
|
|
|
+
|
|
|
+
|
|
|
+ for (int i = 0; i < total_dt_Y.Rows.Count; i++)
|
|
|
+ {
|
|
|
+ NLog.LogManager.GetCurrentClassLogger().Info("Splice line" + i + 1.ToString() + "of" + total_dt_Y.Rows.Count.ToString() + ".....");
|
|
|
+
|
|
|
+ DataTable data = new DataTable();
|
|
|
+ data.Columns.Add("mat", typeof(Bitmap));
|
|
|
+ data.Columns.Add("X", typeof(double));
|
|
|
+ for (int a = 0; a < total_dt_X.Rows.Count; a++)
|
|
|
+ {
|
|
|
+ DataRow dr2 = data.NewRow();
|
|
|
+ Bitmap bitmap = new Bitmap((int)m_list_allDfield[0].Rect.Width, (int)m_list_allDfield[0].Rect.Height);
|
|
|
+ Graphics g = Graphics.FromImage(bitmap);
|
|
|
+ g.Clear(Color.White);
|
|
|
+ g.Dispose();
|
|
|
+ dr2["mat"] = bitmap;
|
|
|
+ dr2["X"] = total_dt_X.Rows[a]["X"];
|
|
|
+ data.Rows.Add(dr2);
|
|
|
+ }
|
|
|
+ foreach (var f in m_list_allDfield)
|
|
|
+ {
|
|
|
+ if (total_dt_Y.Rows[i]["Y"].ToString() == f.Rect.Y.ToString())
|
|
|
+ {
|
|
|
+ for (int c = 0; c < data.Rows.Count; c++)
|
|
|
+ {
|
|
|
+ if (data.Rows[c]["X"].ToString() == f.Rect.X.ToString())
|
|
|
+ {
|
|
|
+ Bitmap image = new Bitmap(f.OriginalImage.Width, f.OriginalImage.Height);
|
|
|
+ Graphics g2 = Graphics.FromImage(image);
|
|
|
+ g2.DrawImage(f.OriginalImage, 0, 0, f.OriginalImage.Width, f.OriginalImage.Height);
|
|
|
+ Graphics graph_2 = Graphics.FromImage(image);
|
|
|
+
|
|
|
+ for (int a = 0; a < fieldlist.Count; a++)
|
|
|
+ {
|
|
|
+ if (fieldlist[a].FieldID.ToString() == f.FieldID.ToString())
|
|
|
+ {
|
|
|
+ //先获取该Field中的所有Particle
|
|
|
+ List<Particle> list_particle;
|
|
|
+ list_particle = fieldlist[a].ParticleList;
|
|
|
+ //再循环计算所有的Particle对象
|
|
|
+ foreach (Particle particle in list_particle)
|
|
|
+ {
|
|
|
+ //创建DParticle颗粒
|
|
|
+ DisplayParticle dp = new DisplayParticle(particle);
|
|
|
+ List<Segment> list_seg;
|
|
|
+ list_seg = particle.SegmentList;
|
|
|
+ //创建颗粒分布图对应的类对象
|
|
|
+ List<DisplaySegment> list_dsegment = new List<DisplaySegment>();
|
|
|
+ //再循环取出里面所有的segment
|
|
|
+ foreach (Segment seg in list_seg)
|
|
|
+ {
|
|
|
+ #region 创建DSegment对象,并将STD分析出的化合物颜色保存到DSegment对象中
|
|
|
+
|
|
|
+ Point on_p = new Point() { X = seg.Start, Y = seg.Height };
|
|
|
+ Point off_p = new Point() { X = seg.Start + seg.Length, Y = seg.Height };
|
|
|
+ Pen npen = new Pen(dp.Color);
|
|
|
+ graph_2.DrawLine(npen, on_p, off_p);
|
|
|
+
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ data.Rows[c]["mat"] = image;
|
|
|
+ data.Rows[c]["X"] = f.Rect.X;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ DataView dataView1 = data.DefaultView;
|
|
|
+ dataView1.Sort = "X ASC";
|
|
|
+ data = dataView1.ToTable();
|
|
|
+ list_dt_picdata.Add(data);
|
|
|
+ }
|
|
|
+
|
|
|
+ return list_dt_picdata;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|