using Microsoft.Office.Core;
using OpenCvSharp;
using Resources;
using SmartCoalApplication.Annotation;
using SmartCoalApplication.Annotation.Enum;
using SmartCoalApplication.Annotation.Measure;
using SmartCoalApplication.AutomaticMeasurement.Model;
using SmartCoalApplication.Base;
using SmartCoalApplication.Base.AutoMeasure;
using SmartCoalApplication.Base.CommTool;
using SmartCoalApplication.Base.FunctionModel;
using SmartCoalApplication.Base.MeasureModel;
using SmartCoalApplication.Core;
using SmartCoalApplication.Core.CustomControl;
using SmartCoalApplication.Core.DbOpreate.DbModel;
using SmartCoalApplication.PluginAssemblys;
using SmartCoalApplication.Resources;
using SPCwebServiceDll;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Dynamic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using static SmartCoalApplication.AutomaticMeasurement.Model.SpcApiSchemesModel;
using Excel = Microsoft.Office.Interop.Excel;
namespace SmartCoalApplication.AutomaticMeasurement
{
public partial class ResultsView : PdnBaseForm
{
///
/// 分析结果图集合
///
private List resultMatList = new List();
///
/// 分析结果图集合
///
private List realResultMatList = new List();
private MeasureInfoModel infoModel = new MeasureInfoModel();
///
/// 图像面板
///
private DocumentWorkspaceWindow documentWorkspace;
private Bitmap bitmap;
private AppWorkspace appWorkspace;
private CommonControlButtons commonControlButtons;
private int selectedNum = 0;
private MeasureMaintenanceType measureMaintenanceType;
private MeasureMaintenanceTreeData measureMaintenanceTypeList;
private Dictionary> pidRuleDic;
private Dictionary> LineShowDic = new Dictionary>();
private int successNum = 0;
private int failNum = 0;
private string filePath;
private Dictionary graphicsListDic = new Dictionary();
//像素跟踪窗口
private PixelTrackingDialog pixelTrackingDialog;
private bool pixelTrackingEnabled = false;
///
/// hint 提示信息
///
private ToolTip toolTip;
///
/// SPC接口 字段配置方案
///
private SpcApiSchemesModel spcApiSchemesModel = new SpcApiSchemesModel();
///
/// 公式符号
///
private string[] symbolArray = new string[] { "+", "-", "*", "/" };
private Dictionary _listHoleType;
private NameRuleListDetails thisNameRuleListDetails;
private bool isSPCItemNull = false;
private List hasDelResultMatList = new List();
///
/// 辅助线的横线和竖线
///
private GraphicsPath path, path1;
internal ResultsView(MeasureInfoModel infoModel, List measureInfoResultModels, AppWorkspace appWorkspace, BeingExecuted beingExecuted, Dictionary _listHoleType)
{
this.resultMatList.AddRange(measureInfoResultModels);
this.realResultMatList.AddRange(measureInfoResultModels);
this.infoModel = infoModel;
InitializeComponent();
InitializeComponent2();
this._listHoleType = _listHoleType;
this.FormClosing += new FormClosingEventHandler(ResultsViewClosing);
this.comboStatus.Items.AddRange(new object[] {
PdnResources.GetString("NewWhole"),
PdnResources.GetString("NewNormal"),
PdnResources.GetString("NewAbnormal")});
InitializeCombo();
this.Icon = PdnInfo.AppIcon;
this.filePath = beingExecuted.filePath;
this.measureMaintenanceType = beingExecuted.measureMaintenanceType;
this.pidRuleDic = beingExecuted.pidRuleDic;
#region [组织应该展示的线 去除不应该展示的线]
foreach (var item in this.measureMaintenanceType.MeasureMaintenanceTreeFourthDataList)
{
if (this.LineShowDic.ContainsKey(item.HoleTypeId))
{
foreach (var item2 in item.FormulaExpressionLineID)
{
if (!this.LineShowDic[item.HoleTypeId].Contains(item2))
{
this.LineShowDic[item.HoleTypeId].Add(item2);
}
}
}
else
{
List list = new List();
foreach (var item2 in item.FormulaExpressionLineID)
{
if (!list.Contains(item2))
{
list.Add(item2);
}
}
this.LineShowDic.Add(item.HoleTypeId, list);
}
}
foreach (var item in resultMatList)
{
List removeList = new List();
if (this.LineShowDic.ContainsKey(item.parentId))
{
foreach (var item2 in item.dataInforList)
{
if (!this.LineShowDic[item.parentId].Contains(item2.ID))
{
removeList.Add(item2);
}
}
foreach (var item2 in removeList)
{
item.dataInforList.Remove(item2);
}
}
}
#endregion [组织应该展示的线 去除不应该展示的线]
measureInfoResultModels.Clear();
beingExecuted.Close();
beingExecuted.Dispose();
infoModel = null;
GC.Collect();
this.appWorkspace = appWorkspace;
#region [搜索项下拉选]
string filePath;
if (Program.instance.configModel.Language == 1)
{
filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\basicTreeDataSimple.xml";
}
else
{
filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\basicTreeDataTraditional.xml";
}
if (System.IO.File.Exists(filePath))
{
MeasureMaintenanceTreeSpecificData measureMaintenanceTreeSpecificData = new MeasureMaintenanceTreeSpecificData();
measureMaintenanceTreeSpecificData.MeasureMaintenanceTreeSpecificDataId = "0";
measureMaintenanceTreeSpecificData.MeasureMaintenanceTreeSpecificName = "全部";
List measureMaintenanceTypes = new List() { measureMaintenanceTreeSpecificData };
measureMaintenanceTypeList = XmlSerializeHelper.DESerializer(FileOperationHelper.ReadStringFromFile(filePath, FileMode.Open));
var selectedList = resultMatList.GroupBy(m => m.parentId);
foreach (var item in selectedList)
{
MeasureMaintenanceTreeSpecificData sonData;
this.appWorkspace.RecursionGetData(item.Key, measureMaintenanceTypeList.MeasureMaintenanceTreeDataList, out sonData);
if (sonData != null)
{
measureMaintenanceTypes.Add(sonData);
}
}
this.comboClassification.SelectedIndexChanged -= new System.EventHandler(this.comboClassification_SelectedIndexChanged);
comboClassification.DataSource = measureMaintenanceTypes;
comboClassification.DisplayMember = "MeasureMaintenanceTreeSpecificName";
this.comboClassification.SelectedIndexChanged += new System.EventHandler(this.comboClassification_SelectedIndexChanged);
}
#endregion [搜索项下拉选]
#region [图片集合初始化]
InitPicList();
#endregion [图片集合初始化]
#region [图像面板相关]
//
//初始化图像控件
//
this.documentWorkspace = new DocumentWorkspaceWindow(this.appWorkspace, 1);
this.documentWorkspace.Cursor = Cursors.Default;
this.documentWorkspace.Dock = DockStyle.Fill;
//this.documentWorkspace.HookMouseEvents();
this.documentWorkspace.Visible = true;
//this.documentWorkspace.panel.Click += new EventHandler(this.documentWorkspace_panel_Click);
//this.documentWorkspace.panel.MouseDown += new MouseEventHandler(this.documentWorkspace_panel_MouseDown);
//this.documentWorkspace.panel.Paint += new PaintEventHandler(this.panelPaint);
this.documentWorkspace.panel.MouseMove += new MouseEventHandler(this.documentWorkspace_panel_MouseMove);
this.documentWorkspace.panel.MouseWheel += new MouseEventHandler(this.documentWorkspace_panel_MouseWheel);
this.documentWorkspace.panel.MouseUp += new MouseEventHandler(this.documentWorkspace_panel_MouseUp);
this.groupBox4.Controls.Add(this.documentWorkspace);
PdnBaseForm.RegisterFormHotKey(Keys.Delete, OnDeleteHotKeyPressed);
#endregion [图像面板相关]
this.commonControlButtons = new CommonControlButtons(this.documentWorkspace.Width - 25);
this.commonControlButtons.Dock = DockStyle.Top;
this.commonControlButtons.Height = 30;
this.commonControlButtons.HideZoomToWindowAndActualSize();
this.commonControlButtons.ShowRight();
this.groupBox4.Controls.Add(commonControlButtons);
InitCommonButtonEvent();
label3.Visible = false;
label4.Visible = false;
label5.Visible = false;
this.Resize += new EventHandler(DialogResize);
this.Shown += new EventHandler(shownMethod);
this.toolTip = new ToolTip();
var oldNameRuleListDetails = Program.instance.fileNameRule.NameRuleList.Where(m => m.ID == this.measureMaintenanceType.NameRuleID).FirstOrDefault();
this.yuLan(oldNameRuleListDetails);
}
public void yuLan(NameRuleListDetails nameRuleListDetails)
{
if (nameRuleListDetails == null)
{
this.textBox5.Text = DateTime.Now.ToString("yyyyMMddhhmmss") + "切片报告.xls";
return;
}
string ruleName = string.Empty;
string ruleGain = string.Empty;
if (this.measureMaintenanceType.ruleMessage != null)
{
ruleName = this.measureMaintenanceType.ruleMessage.ruleName;
ruleGain = this.measureMaintenanceType.ruleMessage.ruleGain.ToString();
}
else
{
List list = Program.instance.mic_rulersAll;
var ruler = list.Where(m => m.id.Equals(Program.instance.configModel.RulerId)).FirstOrDefault();
if (ruler != null)
{
ruleName = ruler.ruler_name;
ruleGain = ruler.gain_multiple.ToString();
}
}
NamingRuleHelper namingRuleHelper = new NamingRuleHelper();
this.textBox5.Text = namingRuleHelper.GetNameFromXml(nameRuleListDetails, ruleName, ruleGain, this.measureMaintenanceType, "") + ".xls";
}
private void ResultsViewClosing(object sender, FormClosingEventArgs e)
{
this.realResultMatList.Clear();
this.resultMatList.Clear();
this.hasDelResultMatList.Clear();
GC.Collect();
}
private void InitializeComponent2()
{
this.Text = PdnResources.GetString("NewResultsView");
this.groupBox1.Text = PdnResources.GetString("NewOperation");
this.checkBox2.Text = PdnResources.GetString("NewDisplayDrawingRange");
this.checkBox1.Text = PdnResources.GetString("NewOpenReport");
this.checkBox3.Text = PdnResources.GetString("ResultView.checkBox3"); // 开启像素追踪
this.button1.Text = PdnResources.GetString("ResultView.button1"); // 再次分析
this.button2.Text = PdnResources.GetString("ResultView.button2"); // 绘制范围
this.button3.Text = PdnResources.GetString("ResultView.button3"); // 全选
this.button4.Text = PdnResources.GetString("ResultView.button4"); // 全不选
this.button5.Text = PdnResources.GetString("ResultView.button5"); // 反选
this.button6.Text = PdnResources.GetString("ResultView.button6"); // 命名规则
this.buttonGenerateReport.Text = PdnResources.GetString("NewGenerateReport"); // 生成报告
this.label2.Text = PdnResources.GetString("NewStatus") + ":";
this.label1.Text = PdnResources.GetString("NewClassification") + ":";
this.groupBox2.Text = PdnResources.GetString("Newlist");
this.groupBox3.Text = PdnResources.GetString("NewAddSketchLine");
this.groupBox4.Text = PdnResources.GetString("NewPicture");
this.checkBox4.Text = PdnResources.GetString("ResultView.checkBox4");
this.button7.Text = PdnResources.GetString("NewSelectTemplate");
}
private void documentWorkspace_panel_MouseWheel(object sender, MouseEventArgs e)
{
}
private void shownMethod(object sender, EventArgs e)
{
#region [默认选中]
int choose = 0;
foreach (var item in this.resultMatList)
{
if (item.dataInforList.Where(m => m.value == 0).ToList().Count() > 0)
{
choose = this.resultMatList.IndexOf(item);
break;
}
}
if (this.listView1.Items.Count > 0)
{
this.listView1.Focus();
//滚动到指定的行位置
this.listView1.EnsureVisible(choose);
this.listView1.Items[choose].Focused = true;
this.listView1.Items[choose].Selected = true;
if (choose == 0)
{
listView1_SelectedIndexChanged(null, null);
}
}
#endregion [默认选中]
}
private void DialogResize(object sender, EventArgs e)
{
this.commonControlButtons.reset(this.documentWorkspace.Width - 25);
}
private bool OnDeleteHotKeyPressed(Keys keys)
{
if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
{
return false;
}
if (this.listView1.SelectedItems.Count > 1) {
var index = this.listView1.SelectedItems[0].Index;
this.listView1.Items[index].Focused = true;
}
if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
{
string id = this.listView1.FocusedItem.Tag.ToString();
var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
int index = 0;
if (result != null)
{
index = this.resultMatList.IndexOf(result);
}
if (this.documentWorkspace.GraphicsList != null && this.documentWorkspace.GraphicsList.Count > 0)
{
var list = this.resultMatList[index].dataInforList.Where(m => m.deleteFlag == 2).ToList();
for (int i = this.documentWorkspace.GraphicsList.Count - 1; i >= 0; i--)
{
if (this.documentWorkspace.GraphicsList[i].objectType != DrawClass.Measure)
{
continue;
}
if (this.documentWorkspace.GraphicsList[i].Selected == true)
{
var data = list.Where(m => m.aliasName == ((MeasureDrawObject)this.documentWorkspace.GraphicsList[i]).aliasName).FirstOrDefault();
if (data != null)
{
int dataIndex = list.IndexOf(data);
list[dataIndex].value = 0;
list[dataIndex].deleteFlag = 1;
list[dataIndex].point1 = new System.Drawing.Point(0, 0);
list[dataIndex].point2 = new System.Drawing.Point(0, 0);
this.documentWorkspace.GraphicsList.RemoveObj(this.documentWorkspace.GraphicsList[i]);
}
}
}
InitButtonList();
}
this.successNum = this.resultMatList[index].dataInforList.Where(m => m.value != 0).Count();
this.failNum = this.resultMatList[index].dataInforList.Where(m => m.value == 0).Count();
label4.Text = $"已绘制{this.successNum}条";
label5.Text = $"剩余{this.failNum}条";
#region [重置列表]
//this.imageList1.Images.Clear();
//this.listView1.Items.Clear();
//InitPicList();
//this.listView1.Focus();
////滚动到指定的行位置
//this.listView1.EnsureVisible(index);
//this.listView1.Items[index].Focused = true;
//this.listView1.Items[index].Selected = true;
this.listView1.Items[index].BackColor = this.resultMatList[index].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
this.listView1.Refresh();
#endregion [重置列表]
this.documentWorkspace.Refresh();
}
return true;
}
#region 公共按钮
private void InitCommonButtonEvent()
{
this.commonControlButtons.zoomInButton.Click += new EventHandler(zoomInButton_Click);
this.commonControlButtons.zoomOutButton.Click += new EventHandler(zoomOutButton_Click);
this.commonControlButtons.zoomToWindowButton.Click += new EventHandler(zoomToWindowButton_Click);
this.commonControlButtons.actualSizeButton.Click += new EventHandler(actualSizeButton_Click);
this.commonControlButtons.pointerButton.Click += new EventHandler(pointerButton_Click);
this.commonControlButtons.mobileModeButton.Click += new EventHandler(mobileModeButton_Click);
this.commonControlButtons.zoomInFirst.Click += new EventHandler(zoomInFirst_Click);
this.commonControlButtons.zoomInLast.Click += new EventHandler(zoomInLast_Click);
this.commonControlButtons.zoomInNext.Click += new EventHandler(zoomInNext_Click);
this.commonControlButtons.zoomInZuihou.Click += new EventHandler(zoomInZuihou_Click);
}
private void zoomInFirst_Click(object sender, EventArgs e)
{
if (listView1.Items.Count > 0)
{
listView1.Focus();
listView1.SelectedItems.Clear();
//滚动到指定的行位置
this.listView1.EnsureVisible(0);
this.listView1.Items[0].Focused = true;
this.listView1.Items[0].Selected = true;
}
}
private void zoomInLast_Click(object sender, EventArgs e)
{
if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
{
return;
}
if (this.listView1.SelectedItems.Count > 1)
{
var index = this.listView1.SelectedItems[0].Index;
this.listView1.SelectedItems.Clear();
this.listView1.Items[index].Focused = true;
this.listView1.Items[index].Selected = true;
}
if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
{
int index = this.listView1.FocusedItem.Index;
if (index != 0)
{
listView1.Focus();
listView1.SelectedItems.Clear();
//滚动到指定的行位置
this.listView1.EnsureVisible(index - 1);
this.listView1.Items[index - 1].Focused = true;
this.listView1.Items[index - 1].Selected = true;
}
}
}
private void zoomInNext_Click(object sender, EventArgs e)
{
if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
{
return;
}
if (this.listView1.SelectedItems.Count > 1)
{
var index = this.listView1.SelectedItems[this.listView1.SelectedItems.Count - 1].Index;
this.listView1.SelectedItems.Clear();
this.listView1.Items[index].Focused = true;
this.listView1.Items[index].Selected = true;
}
if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
{
if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
{
int index = this.listView1.FocusedItem.Index;
if (index != this.listView1.Items.Count - 1)
{
listView1.Focus();
listView1.SelectedItems.Clear();
//滚动到指定的行位置
this.listView1.EnsureVisible(index + 1);
this.listView1.Items[index + 1].Focused = true;
this.listView1.Items[index + 1].Selected = true;
}
}
}
}
private void zoomInZuihou_Click(object sender, EventArgs e)
{
if (listView1.Items.Count > 0)
{
listView1.Focus();
listView1.SelectedItems.Clear();
//滚动到指定的行位置
this.listView1.EnsureVisible(this.listView1.Items.Count - 1);
this.listView1.Items[this.listView1.Items.Count - 1].Focused = true;
this.listView1.Items[this.listView1.Items.Count - 1].Selected = true;
}
}
private void zoomInButton_Click(object sender, EventArgs e)
{
if (this.bitmap != null)
this.documentWorkspace.ZoomIn();
}
private void zoomOutButton_Click(object sender, EventArgs e)
{
if (this.bitmap != null)
this.documentWorkspace.ZoomOut();
}
private void zoomToWindowButton_Click(object sender, EventArgs e)
{
this.documentWorkspace.ZoomBasis = ZoomBasis.FitToWindow;
}
private void actualSizeButton_Click(object sender, EventArgs e)
{
this.documentWorkspace.ZoomBasis = ZoomBasis.ScaleFactor;
this.documentWorkspace.ScaleFactor = ScaleFactor.OneToOne;
}
private void pointerButton_Click(object sender, EventArgs e)
{
this.documentWorkspace.ActiveTool = Annotation.Enum.DrawToolType.Pointer;
}
private void mobileModeButton_Click(object sender, EventArgs e)
{
this.documentWorkspace.ActiveTool = Annotation.Enum.DrawToolType.MoveMode;
}
#endregion 公共按钮
//下拉列表初始化
private void InitializeCombo()
{
this.comboStatus.SelectedIndexChanged -= new System.EventHandler(this.comboStatus_SelectedIndexChanged);
comboStatus.SelectedIndex = 0;
this.comboStatus.SelectedIndexChanged += new System.EventHandler(this.comboStatus_SelectedIndexChanged);
}
public void InitPicList()
{
//初始化图片列表
for (int i = 0; i < this.resultMatList.Count; i++)
{
Mat mat = new Mat();
Cv2.CvtColor(this.resultMatList[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Tag = this.resultMatList[i].ID;
this.listView1.Items[i].Text = this.resultMatList[i].fileName;
this.listView1.Items[i].BackColor = this.resultMatList[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
mat.Dispose();
}
}
///
/// 创建缩略图
///
public Bitmap CreateThumbnail(Mat mat)
{
Bitmap origin = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
Bitmap bitmap;
if (origin.Width > origin.Height)
{
bitmap = MakeThumbnail(origin, 90, 90, "W");
}
else if (origin.Height > origin.Width)
{
bitmap = MakeThumbnail(origin, 90, 90, "H");
}
else
{
bitmap = MakeThumbnail(origin, 90, 90, "W");
}
return bitmap;
}
///
/// 生成缩略图
///
/// 源图片
/// 缩略图宽度
/// 缩略图高度
/// 生成缩略图的方式
public static Bitmap MakeThumbnail(Image originalImage, int width, int height, string mode)
{
int towidth = width;
int toheight = height;
int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;
switch (mode)
{
case "HW"://指定高宽缩放(可能变形)
break;
case "W"://指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H"://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
case "Cut"://指定高宽裁减(不变形)
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}
break;
default:
break;
}
//新建一个bmp图片
Bitmap bitmap = new System.Drawing.Bitmap(towidth, toheight);
//新建一个画板
Graphics g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//清空画布并以透明背景色填充
g.Clear(Color.Transparent);
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
new Rectangle(x, y, ow, oh),
GraphicsUnit.Pixel);
return bitmap;
}
///
/// 改变图片选择
///
///
///
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
{
string id = this.listView1.FocusedItem.Tag.ToString();
var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
int index = 0;
if (result != null)
{
index = this.resultMatList.IndexOf(result);
}
label3.Visible = true;
label4.Visible = true;
label5.Visible = true;
Mat mat = new Mat();
Cv2.CvtColor(this.resultMatList[index].resultMat, mat, ColorConversionCodes.BGRA2BGR);
if (pixelTrackingDialog != null)
{
pixelTrackingDialog.Mat = mat;
}
this.bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
Document document = Document.FromMat(mat);
this.documentWorkspace.Document = document;
this.documentWorkspace.Visible = true;
label3.Text = $"共{this.resultMatList[index].allLineNum}条输出线";
this.successNum = this.resultMatList[index].dataInforList.Where(m => m.value != 0).Count();
this.failNum = this.resultMatList[index].dataInforList.Where(m => m.value == 0).Count();
label4.Text = $"已绘制{this.successNum}条";
label5.Text = $"剩余{this.failNum}条";
InitButtonList();
#region [往面板上绘制测量线]
this.documentWorkspace.GraphicsList.Clear();
DrawLine(index);
if (checkBox2.Checked)
{
if (this.resultMatList[index].GraphicsListList.Count > 0)
{
this.resultMatList[index].GraphicsListList[0].canMove = false;
GraphicsList graphicsList = new GraphicsList();
graphicsList.Add(this.resultMatList[index].GraphicsListList[0].Clone(this.documentWorkspace));
graphicsList[0].Selected = false;
this.documentWorkspace.GraphicsList.Add(graphicsList[0]);
}
this.documentWorkspace.Refresh();
}
#endregion [往面板上绘制测量线]
}
else
{
label3.Visible = false;
label4.Visible = false;
label5.Visible = false;
}
}
private void DrawLine(int index)
{
var list = this.resultMatList[index].dataInforList;
this.documentWorkspace.GraphicsList.Clear();
List lines = new List();
foreach (var item in list)
{
if (item.value == 0)
{
continue;
}
double unit = 1;
if (this.pidRuleDic.ContainsKey(this.resultMatList[index].parentId))
{
if (this.pidRuleDic[this.resultMatList[index].parentId].ContainsKey(this.resultMatList[index].fileName))
{
unit = this.pidRuleDic[this.resultMatList[index].parentId][this.resultMatList[index].fileName];
}
}
this.appWorkspace.setUnitNum(unit);
var point1 = item.point1;
var point2 = item.point2;
switch (item.drawType)
{
case "MeasureLine":
MeasureLine line = new MeasureLine(this.documentWorkspace, point1, point2, item.aliasName, unit);
line.moved = true;
line.ISurfaceBox = this.documentWorkspace;
lines.Add(line);
break;
case "MeasureVLine":
MeasureVLine vline = new MeasureVLine(this.documentWorkspace, point1, point2, item.aliasName, unit);
vline.moved = true;
vline.ISurfaceBox = this.documentWorkspace;
lines.Add(vline);
break;
case "MeasureHLine":
MeasureHLine hline = new MeasureHLine(this.documentWorkspace, point1, point2, item.aliasName, unit);
hline.moved = true;
hline.ISurfaceBox = this.documentWorkspace;
lines.Add(hline);
break;
}
}
this.documentWorkspace.GraphicsList.AddRange(lines);
this.documentWorkspace.GraphicsList.UnselectAll();
this.documentWorkspace.Refresh();
}
///
/// 生成失败线的按钮
///
private void InitButtonList()
{
this.panel2.Controls.Clear();
string id = this.listView1.FocusedItem.Tag.ToString();
var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
int dataIndex = 0;
if (result != null)
{
dataIndex = this.resultMatList.IndexOf(result);
}
var list = this.resultMatList[dataIndex].dataInforList.Where(m => m.value.Equals(0)).ToList();
//var list = this.resultMatList[dataIndex].dataInforList;
int index = 0;
foreach (var item in list)
//for (int i = list.Count - 1; i >= 0; i--)
{
if (item.value.Equals(0))
{
//int index = list.IndexOf(item);
Button button = new Button();
if (index == 0)
{
button.Location = new System.Drawing.Point(17, 35);
}
else
{
button.Location = new System.Drawing.Point(17, 35 + 23 * index + 10 * index);
}
button.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
button.Name = item.drawType + (index + 1).ToString();
button.Size = new System.Drawing.Size(75, 23);
button.TabIndex = 0;
button.Tag = item.aliasName;
if (this.resultMatList[dataIndex].parentId.Equals("100209"))
{
button.Text = "曡構";
}
else
{
button.Text = item.name;
}
button.UseVisualStyleBackColor = true;
button.Click += new System.EventHandler(this.buttonShanchu_Click);
panel2.Controls.Add(button);
index++;
}
//var item = list[i];
}
}
private bool checkIsNum(string num)
{
try
{
int strNum = Convert.ToInt32(num);
return true;
}
catch (Exception)
{
return false;
}
}
private void buttonShanchu_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
this.selectedNum = Convert.ToInt32(button.Name.Substring(button.Name.Length - 1, 1));
var drawTypeName = button.Name.Substring(0, button.Name.Length - 1);
if(checkIsNum(drawTypeName.Substring(drawTypeName.Length - 1, 1)))
{
drawTypeName = drawTypeName.Substring(0, drawTypeName.Length - 1);
this.selectedNum = Convert.ToInt32(button.Name.Substring(button.Name.Length - 2, 2));
}
//this.pixelTrackingEnabled = false;
this.appWorkspace.setAliasName(button.Tag.ToString());
switch (drawTypeName)
{
case "MeasureLine":
this.documentWorkspace.activeTool = DrawToolType.MeasureLine;
break;
case "MeasureVLine":
this.documentWorkspace.activeTool = DrawToolType.MeasureVLine;
break;
case "MeasureHLine":
this.documentWorkspace.activeTool = DrawToolType.MeasureHLine;
break;
}
}
private void documentWorkspace_panel_MouseUp(object sender, MouseEventArgs e)
{
if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
{
return;
}
if (this.listView1.SelectedItems.Count > 1)
{
var index = this.listView1.SelectedItems[0].Index;
this.listView1.Items[index].Focused = true;
}
if (this.selectedNum == 0)
{
string id = this.listView1.FocusedItem.Tag.ToString();
var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
int index = 0;
if (result != null)
{
index = this.resultMatList.IndexOf(result);
}
if (this.documentWorkspace.GraphicsList != null && this.documentWorkspace.GraphicsList.Count > 0)
{
var list = this.resultMatList[index].dataInforList.Where(m => m.deleteFlag == 2).ToList();
for (int i = this.documentWorkspace.GraphicsList.Count - 1; i >= 0; i--)
{
if (this.documentWorkspace.GraphicsList[i].objectType != DrawClass.Measure)
{
continue;
}
var data = list.Where(m => m.aliasName == ((MeasureDrawObject)this.documentWorkspace.GraphicsList[i]).aliasName).FirstOrDefault();
if (data != null)
{
MeasureDrawObject measureDrawObject = (MeasureDrawObject)this.documentWorkspace.GraphicsList[i];
int dataIndex = list.IndexOf(data);
list[dataIndex].value = measureDrawObject.length;
list[dataIndex].point1 = new System.Drawing.Point(Convert.ToInt32(measureDrawObject.startPoint.X), Convert.ToInt32(measureDrawObject.startPoint.Y));
list[dataIndex].point2 = new System.Drawing.Point(Convert.ToInt32(measureDrawObject.endPoint.X), Convert.ToInt32(measureDrawObject.endPoint.Y));
}
}
}
}
else
{
string id = this.listView1.FocusedItem.Tag.ToString();
var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
int dataIndex = 0;
if (result != null)
{
dataIndex = this.resultMatList.IndexOf(result);
}
var list = this.resultMatList[dataIndex].dataInforList.Where(m => m.value.Equals(0)).ToList();
//var list = this.resultMatList[dataIndex].dataInforList;
if (this.documentWorkspace.GraphicsList.Count == 0)
{
return;
}
if(list == null || list.Count == 0)
{
return;
}
var gra = (DrawObject)this.documentWorkspace.GraphicsList[0];
DataInfor data = new DataInfor();
data.name = list[this.selectedNum - 1].name;
data.aliasName = list[this.selectedNum - 1].aliasName;
data.point1 = new System.Drawing.Point((int)gra.startPoint.X, (int)gra.startPoint.Y);
data.point2 = new System.Drawing.Point((int)gra.endPoint.X, (int)gra.endPoint.Y);
data.value = gra.length;
data.drawType = list[this.selectedNum - 1].drawType;
data.ID = list[this.selectedNum - 1].ID;
int index = this.resultMatList[dataIndex].dataInforList.IndexOf(list[this.selectedNum - 1]);
this.resultMatList[dataIndex].dataInforList.RemoveAt(index);
this.resultMatList[dataIndex].dataInforList.Insert(index, data);
if (data.value != 0)
{
this.selectedNum = 0;
}
this.successNum = this.resultMatList[dataIndex].dataInforList.Where(m => m.value != 0).Count();
this.failNum = this.resultMatList[dataIndex].dataInforList.Where(m => m.value == 0).Count();
label4.Text = $"已绘制{this.successNum}条";
label5.Text = $"剩余{this.failNum}条";
InitButtonList();
//this.imageList1.Images.Clear();
//this.listView1.Items.Clear();
//InitPicList();
//this.listView1.Focus();
////滚动到指定的行位置
//this.listView1.EnsureVisible(dataIndex);
//this.listView1.Items[dataIndex].Focused = true;
//this.listView1.Items[dataIndex].Selected = true;
this.listView1.Items[dataIndex].BackColor = this.resultMatList[dataIndex].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
this.listView1.Refresh();
}
}
///
/// 不可点击空白区域
///
///
///
private void listView1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (listView1.SelectedItems.Count > 0)
{
}
else if (listView1.SelectedItems.Count <= 0)//点击空白区
{
if (this.listView1.FocusedItem != null)
{
ListViewItem item = this.listView1.GetItemAt(e.X, e.Y);
if (item == null)
{
this.listView1.FocusedItem.Selected = true;
}
}
}
}
}
///
/// 分类选择
///
///
///
// TODO:筛选bug
private void comboClassification_SelectedIndexChanged(object sender, EventArgs e)
{
MeasureMaintenanceTreeSpecificData data = (MeasureMaintenanceTreeSpecificData)comboClassification.SelectedItem;
this.listView1.Items.Clear();
this.imageList1.Images.Clear();
this.documentWorkspace.Visible = false;
int index = comboStatus.SelectedIndex;
this.resultMatList.Clear();
if (data.MeasureMaintenanceTreeSpecificDataId.Equals("0"))
{
switch (index)
{
case 0:
this.resultMatList.AddRange(this.realResultMatList);
InitPicList();
break;
case 1:
List list = this.realResultMatList.Where(m => m.dataInforList.Where(n => n.value == 0).Count() == 0).ToList();
//初始化图片列表
for (int i = 0; i < list.Count; i++)
{
MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
measureInfoResultModel.ID = list[i].ID;
measureInfoResultModel.allLineNum = list[i].allLineNum;
measureInfoResultModel.dataInforList = list[i].dataInforList;
measureInfoResultModel.failNum = list[i].failNum;
measureInfoResultModel.fileName = list[i].fileName;
measureInfoResultModel.GraphicsListList = list[i].GraphicsListList;
measureInfoResultModel.imgStatus = list[i].imgStatus;
measureInfoResultModel.isConductive = list[i].isConductive;
measureInfoResultModel.isFanweibuchang = list[i].isFanweibuchang;
measureInfoResultModel.isErzhichuli = list[i].isErzhichuli;
measureInfoResultModel.OriginalImage = list[i].OriginalImage;
measureInfoResultModel.parentId = list[i].parentId;
measureInfoResultModel.resultMat = list[i].resultMat;
measureInfoResultModel.successNum = list[i].successNum;
this.resultMatList.Add(measureInfoResultModel);
Mat mat = new Mat();
Cv2.CvtColor(list[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].Tag = list[i].ID;
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Text = list[i].fileName;
this.listView1.Items[i].BackColor = list[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
}
break;
case 2:
List list1 = this.realResultMatList.Where(m => m.dataInforList.Where(n => n.value == 0).Count() != 0).ToList(); ;
//初始化图片列表
for (int i = 0; i < list1.Count; i++)
{
MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
measureInfoResultModel.ID = list1[i].ID;
measureInfoResultModel.allLineNum = list1[i].allLineNum;
measureInfoResultModel.dataInforList = list1[i].dataInforList;
measureInfoResultModel.failNum = list1[i].failNum;
measureInfoResultModel.fileName = list1[i].fileName;
measureInfoResultModel.GraphicsListList = list1[i].GraphicsListList;
measureInfoResultModel.imgStatus = list1[i].imgStatus;
measureInfoResultModel.isConductive = list1[i].isConductive;
measureInfoResultModel.isFanweibuchang = list1[i].isFanweibuchang;
measureInfoResultModel.isErzhichuli = list1[i].isErzhichuli;
measureInfoResultModel.OriginalImage = list1[i].OriginalImage;
measureInfoResultModel.parentId = list1[i].parentId;
measureInfoResultModel.resultMat = list1[i].resultMat;
measureInfoResultModel.successNum = list1[i].successNum;
this.resultMatList.Add(measureInfoResultModel);
Mat mat = new Mat();
Cv2.CvtColor(list1[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].Tag = list1[i].ID;
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Text = list1[i].fileName;
this.listView1.Items[i].BackColor = list1[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
}
break;
}
}
else
{
switch (index)
{
case 0:
List list2 = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId)).ToList(); ;
//初始化图片列表
for (int i = 0; i < list2.Count; i++)
{
MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
measureInfoResultModel.ID = list2[i].ID;
measureInfoResultModel.allLineNum = list2[i].allLineNum;
measureInfoResultModel.dataInforList = list2[i].dataInforList;
measureInfoResultModel.failNum = list2[i].failNum;
measureInfoResultModel.fileName = list2[i].fileName;
measureInfoResultModel.GraphicsListList = list2[i].GraphicsListList;
measureInfoResultModel.imgStatus = list2[i].imgStatus;
measureInfoResultModel.isConductive = list2[i].isConductive;
measureInfoResultModel.isFanweibuchang = list2[i].isFanweibuchang;
measureInfoResultModel.isErzhichuli = list2[i].isErzhichuli;
measureInfoResultModel.OriginalImage = list2[i].OriginalImage;
measureInfoResultModel.parentId = list2[i].parentId;
measureInfoResultModel.resultMat = list2[i].resultMat;
measureInfoResultModel.successNum = list2[i].successNum;
this.resultMatList.Add(measureInfoResultModel);
Mat mat = new Mat();
Cv2.CvtColor(list2[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].Tag = list2[i].ID;
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Text = list2[i].fileName;
this.listView1.Items[i].BackColor = list2[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
}
break;
case 1:
List list = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId) && m.dataInforList.Where(n => n.value == 0).Count() == 0).ToList(); ;
//初始化图片列表
for (int i = 0; i < list.Count; i++)
{
MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
measureInfoResultModel.ID = list[i].ID;
measureInfoResultModel.allLineNum = list[i].allLineNum;
measureInfoResultModel.dataInforList = list[i].dataInforList;
measureInfoResultModel.failNum = list[i].failNum;
measureInfoResultModel.fileName = list[i].fileName;
measureInfoResultModel.GraphicsListList = list[i].GraphicsListList;
measureInfoResultModel.imgStatus = list[i].imgStatus;
measureInfoResultModel.isConductive = list[i].isConductive;
measureInfoResultModel.isFanweibuchang = list[i].isFanweibuchang;
measureInfoResultModel.isErzhichuli = list[i].isErzhichuli;
measureInfoResultModel.OriginalImage = list[i].OriginalImage;
measureInfoResultModel.parentId = list[i].parentId;
measureInfoResultModel.resultMat = list[i].resultMat;
measureInfoResultModel.successNum = list[i].successNum;
this.resultMatList.Add(measureInfoResultModel);
Mat mat = new Mat();
Cv2.CvtColor(list[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].Tag = list[i].ID;
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Text = list[i].fileName;
this.listView1.Items[i].BackColor = list[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
}
break;
case 2:
List list1 = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId) && m.dataInforList.Where(n => n.value == 0).Count() != 0).ToList();
//初始化图片列表
for (int i = 0; i < list1.Count; i++)
{
MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
measureInfoResultModel.ID = list1[i].ID;
measureInfoResultModel.allLineNum = list1[i].allLineNum;
measureInfoResultModel.dataInforList = list1[i].dataInforList;
measureInfoResultModel.failNum = list1[i].failNum;
measureInfoResultModel.fileName = list1[i].fileName;
measureInfoResultModel.GraphicsListList = list1[i].GraphicsListList;
measureInfoResultModel.imgStatus = list1[i].imgStatus;
measureInfoResultModel.isConductive = list1[i].isConductive;
measureInfoResultModel.isFanweibuchang = list1[i].isFanweibuchang;
measureInfoResultModel.isErzhichuli = list1[i].isErzhichuli;
measureInfoResultModel.OriginalImage = list1[i].OriginalImage;
measureInfoResultModel.parentId = list1[i].parentId;
measureInfoResultModel.resultMat = list1[i].resultMat;
measureInfoResultModel.successNum = list1[i].successNum;
this.resultMatList.Add(measureInfoResultModel);
Mat mat = new Mat();
Cv2.CvtColor(list1[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].Tag = list1[i].ID;
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Text = list1[i].fileName;
this.listView1.Items[i].BackColor = list1[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
}
break;
}
}
this.bitmap = null;
}
///
/// 状态选择
///
///
///
private void comboStatus_SelectedIndexChanged(object sender, EventArgs e)
{
int index = comboStatus.SelectedIndex;
this.listView1.Items.Clear();
this.imageList1.Images.Clear();
this.documentWorkspace.Visible = false;
this.resultMatList.Clear();
MeasureMaintenanceTreeSpecificData data = (MeasureMaintenanceTreeSpecificData)comboClassification.SelectedItem;
switch (index)
{
case 0:
List list2;
if (data.MeasureMaintenanceTreeSpecificDataId.Equals("0"))
{
list2 = this.realResultMatList;
}
else
{
list2 = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId)).ToList();
}
//初始化图片列表
for (int i = 0; i < list2.Count; i++)
{
MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
measureInfoResultModel.ID = list2[i].ID;
measureInfoResultModel.allLineNum = list2[i].allLineNum;
measureInfoResultModel.dataInforList = list2[i].dataInforList;
measureInfoResultModel.failNum = list2[i].failNum;
measureInfoResultModel.fileName = list2[i].fileName;
measureInfoResultModel.GraphicsListList = list2[i].GraphicsListList;
measureInfoResultModel.imgStatus = list2[i].imgStatus;
measureInfoResultModel.isConductive = list2[i].isConductive;
measureInfoResultModel.isFanweibuchang = list2[i].isFanweibuchang;
measureInfoResultModel.isErzhichuli = list2[i].isErzhichuli;
measureInfoResultModel.OriginalImage = list2[i].OriginalImage;
measureInfoResultModel.parentId = list2[i].parentId;
measureInfoResultModel.resultMat = list2[i].resultMat;
measureInfoResultModel.successNum = list2[i].successNum;
this.resultMatList.Add(measureInfoResultModel);
Mat mat = new Mat();
Cv2.CvtColor(list2[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].Tag = list2[i].ID;
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Text = list2[i].fileName;
this.listView1.Items[i].BackColor = list2[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
}
break;
case 1:
List list;
if (data.MeasureMaintenanceTreeSpecificDataId.Equals("0"))
{
list = this.realResultMatList.Where(m => m.dataInforList.Where(n => n.value == 0).Count() == 0).ToList();
}
else
{
list = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId) && m.dataInforList.Where(n => n.value == 0).Count() == 0).ToList();
}
//初始化图片列表
for (int i = 0; i < list.Count; i++)
{
MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
measureInfoResultModel.ID = list[i].ID;
measureInfoResultModel.allLineNum = list[i].allLineNum;
measureInfoResultModel.dataInforList = list[i].dataInforList;
measureInfoResultModel.failNum = list[i].failNum;
measureInfoResultModel.fileName = list[i].fileName;
measureInfoResultModel.GraphicsListList = list[i].GraphicsListList;
measureInfoResultModel.imgStatus = list[i].imgStatus;
measureInfoResultModel.isConductive = list[i].isConductive;
measureInfoResultModel.isFanweibuchang = list[i].isFanweibuchang;
measureInfoResultModel.isErzhichuli = list[i].isErzhichuli;
measureInfoResultModel.OriginalImage = list[i].OriginalImage;
measureInfoResultModel.parentId = list[i].parentId;
measureInfoResultModel.resultMat = list[i].resultMat;
measureInfoResultModel.successNum = list[i].successNum;
this.resultMatList.Add(measureInfoResultModel);
Mat mat = new Mat();
Cv2.CvtColor(list[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].Tag = list[i].ID;
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Text = list[i].fileName;
this.listView1.Items[i].BackColor = list[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
}
break;
case 2:
List list1;
if (data.MeasureMaintenanceTreeSpecificDataId.Equals("0"))
{
list1 = this.realResultMatList.Where(m => m.dataInforList.Where(n => n.value == 0).Count() != 0).ToList();
}
else
{
list1 = this.realResultMatList.Where(m => m.parentId.Equals(data.MeasureMaintenanceTreeSpecificDataId) && m.dataInforList.Where(n => n.value == 0).Count() != 0).ToList();
}
//初始化图片列表
for (int i = 0; i < list1.Count; i++)
{
MeasureInfoResultModel measureInfoResultModel = new MeasureInfoResultModel();
measureInfoResultModel.ID = list1[i].ID;
measureInfoResultModel.allLineNum = list1[i].allLineNum;
measureInfoResultModel.dataInforList = list1[i].dataInforList;
measureInfoResultModel.failNum = list1[i].failNum;
measureInfoResultModel.fileName = list1[i].fileName;
measureInfoResultModel.GraphicsListList = list1[i].GraphicsListList;
measureInfoResultModel.imgStatus = list1[i].imgStatus;
measureInfoResultModel.isConductive = list1[i].isConductive;
measureInfoResultModel.isFanweibuchang = list1[i].isFanweibuchang;
measureInfoResultModel.isErzhichuli = list1[i].isErzhichuli;
measureInfoResultModel.OriginalImage = list1[i].OriginalImage;
measureInfoResultModel.parentId = list1[i].parentId;
measureInfoResultModel.resultMat = list1[i].resultMat;
measureInfoResultModel.successNum = list1[i].successNum;
this.resultMatList.Add(measureInfoResultModel);
Mat mat = new Mat();
Cv2.CvtColor(list1[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + i, CreateThumbnail(mat));
this.listView1.Items.Add("", i);
this.listView1.Items[i].Tag = list1[i].ID;
this.listView1.Items[i].ImageIndex = i;
this.listView1.Items[i].Text = list1[i].fileName;
this.listView1.Items[i].BackColor = list1[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
}
break;
}
this.bitmap = null;
}
///
/// 生成报告
///
///
///
private void buttonGenerateReport_Click(object sender, EventArgs e)
{
if (listView1.Items.Count == 0)
{
MessageBox.Show(PdnResources.GetString("NewNoDataGenerateReport") + "!");
return;
}
if (string.IsNullOrEmpty(measureMaintenanceType.templateFilePath) || !System.IO.File.Exists(measureMaintenanceType.templateFilePath))
{
MessageBox.Show(PdnResources.GetString("NoTemplateSelected"));
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Excel文件|*.xls;*.xlsx";
dialog.Title = "选择模板";
dialog.Multiselect = false; //该值确定是否可以选择多个文件
if (dialog.ShowDialog() != DialogResult.OK)
{
return;
}
string file = dialog.FileName;
measureMaintenanceType.templateFilePath = file;
}
#region [上传数据库组织数据]
bool needUploadData = false;
bool needSPCUploadData = false;
//配置文档中关于接口的相关配置项
string userName = Program.instance.configModel.UserName;
string passWord = Program.instance.configModel.PassWord;
string equId = Program.instance.configModel.EquId;
string groupId = Program.instance.configModel.GroupId;
string funId = Program.instance.configModel.FunId;
string funId2 = Program.instance.configModel.FunId2;
string funId3 = Program.instance.configModel.FunId3;
string createdate = DateTime.Now.ToString("yyyy-MM-dd");
string mainID = Guid.NewGuid().ToString();
string paraname = "ID|Name| RulerName| RulerPixelLength| RulerPhysicalLength| PartNo| UseFactory|OrderNum|Laboratory|BatchNumber|Shift|ProcessType|Level1| ElectroplatingLine|Unit|Remark ";
string rulerName = this.measureMaintenanceType.ruleMessage == null ? string.Empty : this.measureMaintenanceType.ruleMessage.ruleName;
decimal rulerPhysicalLength = this.measureMaintenanceType.ruleMessage == null ? 0 : this.measureMaintenanceType.ruleMessage.physicalLength;
float rulerPixelLength = this.measureMaintenanceType.ruleMessage == null ? 0 : this.measureMaintenanceType.ruleMessage.pixelLength;
if (string.IsNullOrEmpty(this.measureMaintenanceType.measureMaintenanceContent))
{
this.measureMaintenanceType.measureMaintenanceContent = "默認備註";
}
//实验室需要的数据字段,一个主表两个子表。有递进关系
string paravalue = $"{mainID}|{this.measureMaintenanceType.measureMaintenanceName}|{rulerName}|{rulerPixelLength}|{rulerPhysicalLength}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[3].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[5].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[2].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[6].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[1].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[4].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[7].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[8].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceBasicDataList[9].measureMaintenanceBasicDataValue}|{this.measureMaintenanceType.measureMaintenanceContent}";
string paraname2 = "ID|MainId|HoleType|TestItem|SpecificationCondition|scnum|scrangegreatenum|Judgment ";
string paraname3 = "ID|Name|Value|FilePath|DataId|MainId ";
#endregion [上传数据库组织数据]
//SPC上传
switch (Program.instance.configModel.autoSPCUpload)
{
case 1:
needSPCUploadData = true;
if (string.IsNullOrEmpty(this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue))
{
ResultViewItemNo resultViewItemNo = new ResultViewItemNo(this);
resultViewItemNo.StartPosition = FormStartPosition.CenterParent;
resultViewItemNo.ShowDialog();
return;
}
break;
case 2:
needSPCUploadData = false;
break;
case 3:
if (!this.isSPCItemNull)
{
DialogResult result = MessageBox.Show(PdnResources.GetString("UpdateSpc"), PdnResources.GetString("NewTips"), MessageBoxButtons.OKCancel);
if (result == DialogResult.OK)
{
needSPCUploadData = true;
if (string.IsNullOrEmpty(this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue))
{
ResultViewItemNo resultViewItemNo = new ResultViewItemNo(this);
resultViewItemNo.StartPosition = FormStartPosition.CenterParent;
resultViewItemNo.ShowDialog();
return;
}
}
}
break;
}
//实验室上传
switch (Program.instance.configModel.autoUpload)
{
case 1:
needUploadData = true;
try
{
var resultData = webServiceDll.ws.sendDataToSerGrp(userName, passWord, equId, groupId, funId, paraname, paravalue, createdate);
writeLog(resultData, "0003上传回参");
}
catch (Exception ex)
{
writeLog(ex.Message);
}
break;
case 2:
needUploadData = false;
break;
case 3:
DialogResult result = MessageBox.Show(PdnResources.GetString("NewUploadDatabase") + "?", PdnResources.GetString("NewTips"), MessageBoxButtons.OKCancel);
if (result == DialogResult.OK)
{
needUploadData = true;
try
{
var resultData = webServiceDll.ws.sendDataToSerGrp(userName, passWord, equId, groupId, funId, paraname, paravalue, createdate);
writeLog(resultData, "0003上传回参");
}
catch (Exception ex)
{
writeLog(ex.Message);
}
}
break;
}
string fileName = DateTime.Now.ToString("yyyyMMddhhmmss") + "切片报告.xls";
#region [命名规则]
string ruleName = string.Empty;
string ruleGain = string.Empty;
if (this.measureMaintenanceType.ruleMessage != null)
{
ruleName = this.measureMaintenanceType.ruleMessage.ruleName;
ruleGain = this.measureMaintenanceType.ruleMessage.ruleGain.ToString();
}
else
{
List list = Program.instance.mic_rulersAll;
var ruler = list.Where(m => m.id.Equals(Program.instance.configModel.RulerId)).FirstOrDefault();
if (ruler != null)
{
ruleName = ruler.ruler_name;
ruleGain = ruler.gain_multiple.ToString();
}
}
NamingRuleHelper namingRuleHelper = new NamingRuleHelper();
if (this.thisNameRuleListDetails == null)
{
if (!string.IsNullOrEmpty(this.measureMaintenanceType.NameRuleID))
{
NameRuleListDetails nameRuleListDetails = Program.instance.fileNameRule.NameRuleList.Where(m => m.ID == this.measureMaintenanceType.NameRuleID).FirstOrDefault();
if (nameRuleListDetails != null)
{
fileName = namingRuleHelper.GetNameFromXml(nameRuleListDetails, ruleName, ruleGain, this.measureMaintenanceType, this.filePath) + ".xls";
if (nameRuleListDetails.isContinue)
{
nameRuleListDetails.NowNumber += 1;
}
string stageModelXml = XmlSerializeHelper.XmlSerialize(Program.instance.fileNameRule);
FileOperationHelper.WriteStringToFile(stageModelXml, Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\FileNameRule.xml", FileMode.Create);
}
}
}
else
{
fileName = namingRuleHelper.GetNameFromXml(this.thisNameRuleListDetails, ruleName, ruleGain, this.measureMaintenanceType, this.filePath) + ".xls";
if (this.thisNameRuleListDetails.isContinue)
{
this.thisNameRuleListDetails.NowNumber += 1;
}
}
if (string.IsNullOrEmpty(fileName) || fileName.Equals(".xls"))
{
fileName = DateTime.Now.ToString("yyyyMMddhhmmss") + "切片报告.xls";
}
#endregion
string path = this.filePath + "\\" + fileName;
string temp = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\TempFile";
if (!System.IO.Directory.Exists(temp))
{
System.IO.Directory.CreateDirectory(temp);
}
string tempFilePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\TempFile\\" + fileName;
//List thisResultMatList = new List();
//for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
//{
// int index = this.listView1.SelectedItems[i].Index;
// thisResultMatList.Add(this.resultMatList[index]);
//}
ProgressThreadProcClass procClass = new ProgressThreadProcClass();
int itemCount = 100;
ProgressThreadProcClass.IFileTransferProgressEvents progressEvents = new ProgressThreadProcClass.IFileTransferProgressEvents();
System.Threading.ThreadStart copyThreadProc =
delegate ()
{
#region [对公式进行赋值]
MeasureInfoExportModel measureInfoExportModel = OrganizeResultData(this.resultMatList);
#endregion [对公式进行赋值]
#region [组织数据 开整!]
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workBook = excelApp.Workbooks.Open(this.measureMaintenanceType.templateFilePath);
try
{
Excel.Names wbNames = workBook.Names;
int columnValue = 0;
int rowValue = 0;
int dataColumnValue = 0;
int dataCowValue = 0;
//根据单元格名称放值
foreach (var item in this.measureMaintenanceType.measureMaintenanceBasicDataList)
{
int index = this.measureMaintenanceType.measureMaintenanceBasicDataList.IndexOf(item);
foreach (Excel.Name n in wbNames)
{
if (n.Name.Equals(item.measureMaintenanceBasicDataPosition))
{
n.RefersToRange.Value = item.measureMaintenanceBasicDataValue;
if (item.measureMaintenanceBasicDataIndex == 10)
{
n.RefersToRange.Value = $"{DateTime.Now.Year}年{DateTime.Now.Month}月{DateTime.Now.Day}日";
}
}
if (n.Name.Equals("Value1"))
{
dataColumnValue = n.RefersToRange.Column;
dataCowValue = n.RefersToRange.Row + 1;
}
if (n.Name.Equals("Judgment"))
{
columnValue = n.RefersToRange.Column;
rowValue = n.RefersToRange.Row;
}
}
}
DataTable dataTable = new DataTable();
var workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Worksheets[1];
Excel.Range range = workSheet.Range["Judgment"];
if (this.measureMaintenanceType.outputPicturesNum > 5)
{
double width = Convert.ToDouble(((Excel.Range)workSheet.Columns[columnValue - 1]).ColumnWidth);
for (int i = 6; i <= this.measureMaintenanceType.outputPicturesNum; i++)
{
#region [添加列]
range.EntireColumn.Insert(Excel.XlInsertShiftDirection.xlShiftToRight, Excel.XlInsertFormatOrigin.xlFormatFromRightOrBelow);
workSheet.Cells[rowValue, columnValue] = i.ToString();
workBook.Names.Add($"Value{i}", workSheet.Cells[rowValue, columnValue], true);
((Excel.Range)workSheet.Columns[columnValue]).ColumnWidth = width;
//合并单元格
Excel.Range range1 = workSheet.Range[workSheet.Cells[rowValue, columnValue], workSheet.Cells[rowValue + 1, columnValue]];
range1.Merge(0);
columnValue++;
#endregion [添加列]
}
}
#region [分组铺数据]
var HoleTypeList = measureInfoExportModel.measureInfoExportDataModelList;
int realDataRowValue = dataCowValue;
int secondRowValue = dataCowValue + 1;
int firstRowValue = dataCowValue + 1;
Excel.Range range2 = workSheet.Range["Standard"];
int dataIndex = 1;
Dictionary> spcDataList = new Dictionary>();
foreach (var item in HoleTypeList)
{
this.Invoke(new Action(() =>
{
progressEvents.SetStringProgress(PdnResources.GetString("Dealing") + dataIndex + PdnResources.GetString("GeCeLiangFenLiangZhong"));
}));
List dynamicList = new List();
int rowIndex = -1;
foreach (var item2 in item.itemTypeList)
{
string dataId = Guid.NewGuid().ToString();
int index = -1;
foreach (var item3 in item2.LineDataList)
{
int realDataColumnValue = dataColumnValue;
//添加1行
range2.EntireRow.Insert(Excel.XlInsertShiftDirection.xlShiftDown, Excel.XlInsertFormatOrigin.xlFormatFromRightOrBelow);
#region [量测位置]
workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1] = item3.name;
workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
Excel.Range range3 = workSheet.Range[workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1], workSheet.Cells[realDataRowValue + 1, dataColumnValue - 1]];
range3.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
#endregion [量测位置]
#region [数据]
string douData = "0";
//如果是最大值 最小值 平均值 则只取一个值
if (item3.isMaxOrMin)
{
switch (item3.typeCase)
{
case 1:
douData = Math.Round(item3.value.Max(), Program.instance.decimalPlaces).ToString();
break;
case 2:
douData = Math.Round(item3.value.Min(), Program.instance.decimalPlaces).ToString();
break;
case 3:
douData = Math.Round(item3.value.Average(), Program.instance.decimalPlaces).ToString();
break;
}
workSheet.Cells[realDataRowValue + 1, realDataColumnValue] = douData;
dynamic dy = new ExpandoObject();
dy.name = item3.name;
dy.dataId = dataId;
dy.dataType = 1;
dy.testItems = item2.TestItems;
dy.value = workSheet.Cells[realDataRowValue + 1, realDataColumnValue];
dynamicList.Add(dy);
if (spcDataList.ContainsKey(item2.TestItems))
{
spcDataList[item2.TestItems].Add(dy);
}
else
{
spcDataList.Add(item2.TestItems, new List() { dy });
}
workSheet.Cells[realDataRowValue + 1, realDataColumnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[realDataRowValue + 1, realDataColumnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
//合并单元格
Excel.Range range15 = workSheet.Range[workSheet.Cells[realDataRowValue + 1, realDataColumnValue], workSheet.Cells[realDataRowValue + 1, realDataColumnValue + (this.measureMaintenanceType.outputPicturesNum - 1)]];
double doubleData = Convert.ToDouble(douData);
if (!outOk(doubleData, item2.Specification))
{
range15.Cells.Interior.Color = Color.FromArgb(0, 0, 255).ToArgb();
}
range15.Merge(0);
range15.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
realDataRowValue++;
}
else
{
foreach (var item4 in item3.value)
{
workSheet.Cells[realDataRowValue + 1, realDataColumnValue] = item4;
workSheet.Cells[realDataRowValue + 1, realDataColumnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[realDataRowValue + 1, realDataColumnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
Excel.Range range1 = workSheet.Range[workSheet.Cells[realDataRowValue + 1, realDataColumnValue], workSheet.Cells[realDataRowValue + 1, realDataColumnValue]];
dynamic dy = new ExpandoObject();
dy.name = item3.name;
dy.dataId = dataId;
dy.testItems = item2.TestItems;
dy.dataType = 2;
dy.value = item4;
dy.imgIndex = item3.value.IndexOf(item4);
dynamicList.Add(dy);
if (spcDataList.ContainsKey(item2.TestItems))
{
spcDataList[item2.TestItems].Add(dy);
}
else
{
spcDataList.Add(item2.TestItems, new List() { dy });
}
if (item3.NgValue.Contains(item4))
{
if (double.IsInfinity(item4) || double.IsNaN(item4))
{
workSheet.Cells[realDataRowValue + 1, realDataColumnValue] = "error";
workSheet.Cells[realDataRowValue + 1, realDataColumnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[realDataRowValue + 1, realDataColumnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
range1 = workSheet.Range[workSheet.Cells[realDataRowValue + 1, realDataColumnValue], workSheet.Cells[realDataRowValue + 1, realDataColumnValue]];
}
range1.Cells.Interior.Color = Color.FromArgb(0, 0, 255).ToArgb();
}
range1.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
realDataColumnValue++;
}
realDataRowValue++;
}
#endregion [数据]
index++;
rowIndex++;
}
#region [规格]
var spec = item2.Specification;
string data = string.Empty;
string SpecificationCondition = "Unconditional";
decimal SpecificationCOnditionNum = 0;
decimal SpecificationCOnditionRangeGreateNum = 0;
List list = new List();
if (!string.IsNullOrEmpty(spec) && !spec.Contains("-"))
{
list = spec.Split('X').ToList();
if (list.Count == 2)
{
list[0] = list[0].Replace("<=", "LQ").Replace("<", "L");
list[1] = list[1].Replace("<=", "LQ").Replace("<", "L");
if (string.IsNullOrEmpty(list[0]) && string.IsNullOrEmpty(list[1]))
{
}
else if (string.IsNullOrEmpty(list[0]))
{
if (list[1].Contains("LQ"))
{
data = $"{list[1].Replace("LQ", "<=")}";
SpecificationCondition = "LessEqual";
SpecificationCOnditionNum = Convert.ToDecimal(list[1].Replace("LQ", ""));
}
else
{
data = $"{list[1].Replace("L", "<")}";
SpecificationCondition = "Less";
SpecificationCOnditionNum = Convert.ToDecimal(list[1].Replace("L", ""));
}
}
else if (string.IsNullOrEmpty(list[1]))
{
if (list[0].Contains("LQ"))
{
data = $"{list[0].Replace("LQ", "<=")}";
SpecificationCondition = "GreaterEqual";
SpecificationCOnditionNum = Convert.ToDecimal(list[0].Replace("LQ", ""));
}
else
{
data = $"{list[0].Replace("L", "<")}";
SpecificationCondition = "Greater";
SpecificationCOnditionNum = Convert.ToDecimal(list[0].Replace("L", ""));
}
}
else
{
data = $"{spec.Replace("<=", "").Replace("<", "").Replace("X", "~")}";
SpecificationCondition = "Range";
SpecificationCOnditionNum = Convert.ToDecimal(list[0].Replace("LQ", "").Replace("L", ""));
SpecificationCOnditionRangeGreateNum = Convert.ToDecimal(list[1].Replace("LQ", "").Replace("L", ""));
}
}
}
workSheet.Cells[secondRowValue, dataColumnValue - 2] = data;
workSheet.Cells[secondRowValue, dataColumnValue - 2].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[secondRowValue, dataColumnValue - 2].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
//合并单元格
Excel.Range range5 = workSheet.Range[workSheet.Cells[secondRowValue, dataColumnValue - 2], workSheet.Cells[secondRowValue + index, dataColumnValue - 2]];
range5.Merge(0);
range5.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
#endregion [规格]
#region [检测项目]
workSheet.Cells[secondRowValue, dataColumnValue - 3] = item2.TestItems;
workSheet.Cells[secondRowValue, dataColumnValue - 3].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[secondRowValue, dataColumnValue - 3].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
//合并单元格
Excel.Range range4 = workSheet.Range[workSheet.Cells[secondRowValue, dataColumnValue - 3], workSheet.Cells[secondRowValue + index, dataColumnValue - 3]];
range4.Merge(0);
range4.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
#endregion [检测项目]
#region [判断]
string resultData;
string Judgment = "N/A";
if (!string.IsNullOrEmpty(spec) && !spec.Equals("-") && item.matList.Count != 0)
{
resultData = "V";
if (!item2.isOk)
{
workSheet.Cells[secondRowValue, columnValue + 1] = resultData;
workSheet.Cells[secondRowValue, columnValue + 1].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[secondRowValue, columnValue + 1].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
Judgment = "NG";
}
else
{
workSheet.Cells[secondRowValue, columnValue] = resultData;
workSheet.Cells[secondRowValue, columnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[secondRowValue, columnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
Judgment = "OK";
}
//合并单元格
Excel.Range range8 = workSheet.Range[workSheet.Cells[secondRowValue, columnValue], workSheet.Cells[secondRowValue + index, columnValue]];
range8.Merge(0);
range8.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
//合并单元格
Excel.Range range9 = workSheet.Range[workSheet.Cells[secondRowValue, columnValue + 1], workSheet.Cells[secondRowValue + index, columnValue + 1]];
range9.Merge(0);
range9.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
}
else
{
resultData = "N/A";
workSheet.Cells[secondRowValue, columnValue] = resultData;
workSheet.Cells[secondRowValue, columnValue].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[secondRowValue, columnValue].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
//合并单元格
Excel.Range range7 = workSheet.Range[workSheet.Cells[secondRowValue, columnValue], workSheet.Cells[secondRowValue + index, columnValue + 1]];
range7.Merge(0);
range7.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
}
#endregion [判断]
#region [上传数据库]
if (needUploadData)
{
string paravalue2 = string.Empty;
paravalue2 = $"{dataId}|{mainID}|{item.HoleType}|{item2.TestItems}|{SpecificationCondition}|{SpecificationCOnditionNum}|{SpecificationCOnditionRangeGreateNum}|{Judgment}";
try
{
var result1 = webServiceDll.ws.sendDataToSerGrp(userName, passWord, equId, groupId, funId2, paraname2, paravalue2, createdate);
writeLog(result1, "0004上传回参");
}
catch (Exception ex)
{
writeLog(ex.Message);
}
}
#endregion [上传数据库]
secondRowValue += (index + 1);
}
#region [孔型]
workSheet.Cells[firstRowValue, dataColumnValue - 4] = item.HoleType;
workSheet.Cells[firstRowValue, dataColumnValue - 4].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
workSheet.Cells[firstRowValue, dataColumnValue - 4].VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
//合并单元格
Excel.Range range6 = workSheet.Range[workSheet.Cells[firstRowValue, dataColumnValue - 4], workSheet.Cells[firstRowValue + rowIndex, dataColumnValue - 4]];
range6.Merge(0);
range6.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
#endregion [孔型]
#region [图片]
List pathList = new List();
//合并单元格
Excel.Range range10 = workSheet.Range["Dan"];
int lastCol = range10.Column;
Excel.Range range11 = workSheet.Range[workSheet.Cells[firstRowValue, columnValue + 2], workSheet.Cells[firstRowValue + rowIndex, lastCol + 1]];
range11.Merge(0);
range11.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
float PicLeft, PicTop, PicWidth, PicHeight;
int haltWidth = Convert.ToInt32(range11.Width / ((item.matList.Count) == 0 ? 1 : item.matList.Count));
int Index = 0;
foreach (var mat in item.matList)
{
this.Invoke(new Action(() =>
{
progressEvents.SetStringProgress((PdnResources.GetString("Dealing") + dataIndex + PdnResources.GetString("GeCeLiangFenLiangZhong") + ",第" + (Index + 1) + "/" + item.matList.Count + PdnResources.GetString("Image")));
}));
string ImgPath = SaveAllImage(mat, item.GraphicsListList[Index]);
pathList.Add(ImgPath);
PicWidth = (float)(5.2d / 0.035d);
PicTop = Convert.ToSingle(range11.Top);
PicLeft = Convert.ToSingle(range11.Left + PicWidth * Index + 10);
PicHeight = (float)(3.6d / 0.035d);
//workSheet.Shapes.AddPicture2(ImgPath, MsoTriState.msoFalse, MsoTriState.msoTrue, PicLeft, PicTop, PicWidth, PicHeight, MsoPictureCompress.msoPictureCompressFalse);
workSheet.Shapes.AddPicture(ImgPath, MsoTriState.msoFalse, MsoTriState.msoTrue, PicLeft, PicTop, PicWidth, PicHeight);
Index++;
}
firstRowValue += (rowIndex + 1);
#endregion [图片]
#region [上传数据库]
if (needUploadData)
{
try
{
#region [上传FTP]
string ftpStr = DateTime.Now.ToString("yyyyMMdd");
try
{
FTPWebsiteHelper fTPWebsiteHelper = new FTPWebsiteHelper();
fTPWebsiteHelper.ftpPath = Program.instance.configModel.FTPURL;
fTPWebsiteHelper.ftpUserID = Program.instance.configModel.FTPUserName;
fTPWebsiteHelper.ftpPassword = Program.instance.configModel.FTPPassword;
//fTPWebsiteHelper.ftpPath = "ftp://127.0.0.1";
//fTPWebsiteHelper.ftpUserID = "admin";
//fTPWebsiteHelper.ftpPassword = "123456";
foreach (var file in pathList)
{
fTPWebsiteHelper.UpLoadFile(file);
}
ftpStr = fTPWebsiteHelper.ftpStr;
}
catch (Exception ex)
{
writeLog(ex.Message, "FTP错误");
}
#endregion [上传FTP]
foreach (dynamic dy in dynamicList)
{
string dataFilePath = string.Empty;
if (dy.dataType == 1)
{
//foreach (var file in pathList)
//{
// FileInfo fileInf = new FileInfo(file);
// dataFilePath += $"{Program.instance.configModel.FTPFilePath + "/" + fileInf.Name},";
//}
}
else
{
FileInfo fileInf = new FileInfo(pathList[dy.imgIndex]);
dataFilePath = $"{Program.instance.configModel.FTPFilePath + "/" + ftpStr + "/" + fileInf.Name}";
}
string paravalue3 = $"{Guid.NewGuid().ToString()}| {dy.name}|{dy.value}|{dataFilePath}|{dy.dataId}|{mainID}";
var result2 = webServiceDll.ws.sendDataToSerGrp(userName, passWord, equId, groupId, funId3, paraname3, paravalue3, createdate);
//writeLog(result2, "0004上传回参");
}
}
catch (Exception ex)
{
writeLog(ex.Message);
}
}
#endregion [上传数据库]
dataIndex++;
}
#endregion [分组铺数据]
//SPC上传
#region [上传数据库]
if (needSPCUploadData)
{
Scheme schemeModel = getSpcApiSetting();
if (schemeModel != null)
{
try
{
//通过“料号获取SPC管制清单”
var rs = ws.getctrlitem(this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue /*料号*/);
string daStr = DateTime.Now.ToString("yyyy-MM-dd HH:ss");
if (rs.msg.Contains("OK"))
{
int spcDataIndex = 0;
foreach (var spcData in rs.ds.Tables[0].Rows)
{
string dateStr = string.Empty;//时间
string dataStr = string.Empty;//数据
var filegroup = rs.ds.Tables[0].Rows[spcDataIndex]["filegroup"].ToString();//SPC群組
var filename = rs.ds.Tables[0].Rows[spcDataIndex]["filename"].ToString();//SPC檔案
var ctrlitem = rs.ds.Tables[0].Rows[spcDataIndex]["ctrlitem"].ToString();//管制项目
var spsize = rs.ds.Tables[0].Rows[spcDataIndex]["spsize"].ToString();//切片数量
//系统中“电镀线别”为空直接退出
if (string.IsNullOrEmpty(this.measureMaintenanceType.measureMaintenanceBasicDataList[8].measureMaintenanceBasicDataValue))
{
break;
}
//SPC檔案中不包括“电镀线别”
if (!filename.Contains(this.measureMaintenanceType.measureMaintenanceBasicDataList[8].measureMaintenanceBasicDataValue /*电镀线别*/))
{
spcDataIndex++;
continue;
}
spcDataIndex++;
int count = Convert.ToInt32(spsize);
int needCount = 0;//需要的检测项目数量
var dataList = spcDataList.Values.ToList();//当前检测项目及测量数据信息
foreach (var item in dataList)
{
foreach (dynamic dy in item)//从SPC檔案筛选出当前使用的检测项目及测量数据(SPC檔案包含全部检测项目,需要挑选中使用的)
{
if (!filename.Contains(dy.testItems))
{
continue;
}
if (needCount >= count)
{
break;
}
dateStr += $"{daStr}|";//系统当前时间
dataStr += $"{dy.value}|";//测量值
needCount++;
}
}
//如果筛选出来的检测项目数量小于切片数量.余下的切片对应的数据设置为0。
if (needCount < count)
{
for (int i = 1; i <= (count - needCount); i++)
{
dateStr += $"{daStr}|";
dataStr += $"{0}|";
}
}
dateStr = dateStr.Remove(dateStr.Length - 1, 1);
dataStr = dataStr.Remove(dataStr.Length - 1, 1);
writeLog(count.ToString() + "和" + dateStr + "和" + dataStr, "SPC上传接口参数展示");
var interfacePassWord = Program.instance.configModel.interfacePassWord;
//根据配置文件组织数据
int t = 0;
List paraList = new List();
foreach (Item item in schemeModel.items)
{
try
{
t = int.Parse(item.filedNum.Trim());
paraList.Add(measureMaintenanceType.measureMaintenanceBasicDataList[t - 1].measureMaintenanceBasicDataValue);
}
catch (Exception)
{
paraList.Add("");
continue;
}
}
//var result = ws.spcapi(interfacePassWord, "filegroup", "filename", "ctrlitem", "dateStr", "dataStr", "count", paraList[0], paraList[1], paraList[2], paraList[3], paraList[4], paraList[5], paraList[6], paraList[7], paraList[8], paraList[9], paraList[10], paraList[11], paraList[12], paraList[13], paraList[14], paraList[15], paraList[16], paraList[17], paraList[18], paraList[19]);
var result = ws.spcapi(interfacePassWord, filegroup.ToString(), filename.ToString(), ctrlitem.ToString(), dateStr, dataStr, count.ToString(), paraList[0], paraList[1], paraList[2], paraList[3], paraList[4], paraList[5], paraList[6], paraList[7], paraList[8], paraList[9], paraList[10], paraList[11], paraList[12], paraList[13], paraList[14], paraList[15], paraList[16], paraList[17], paraList[18], paraList[19]);
//if (result.Contains("NG"))
//{
// writeLog( result, "SPC上传接口错误");
//}
writeLog(result, "SPC上传接口调用结果反馈");
}
}
else
{
writeLog(rs.msg, "SPC-料号获取SPC管制清单方法错误");
}
}
catch (Exception ex)
{
writeLog(ex.Message, "SPC下拉接口错误");
}
}
else
{
writeLog("请检测配置文档", "SPC配置返回空");
}
}
#endregion
object nothing = Type.Missing;
workBook.SaveAs(tempFilePath, nothing, nothing, nothing, nothing, nothing,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, nothing, nothing, nothing, nothing, nothing);
}
catch (Exception ex)
{
writeLog(ex.Message);
}
finally
{
if (excelApp != null)
{
if (excelApp != null && workBook != null)
workBook.Close(false);
excelApp.Quit();
OfficeFileHandleHelper.Kill(excelApp);
}
progressEvents.EndOperation(OperationResult.Finished);
}
#endregion [组织数据 开整!]
};
procClass.StartProgressAction(this, itemCount, copyThreadProc, progressEvents, null);
string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\TempImg";
#region [复制文件到另一个文件夹]
try
{
FileOperationHelper.CopyFile(tempFilePath, this.filePath, "", true);
Directory.Delete(temp, true);
}
catch (Exception ex)
{
}
#endregion [复制文件到另一个文件夹]
try
{
if (Directory.Exists(filePath))
{
Directory.Delete(filePath, true);
}
}
catch (Exception ex)
{
}
if (checkBox1.Checked)
{
if (!OfficeFileHandleHelper.OpenOfficeFile(path))
MessageBox.Show(PdnResources.GetString("Menu.Fileopenfailed.Text"));
}
this.isSPCItemNull = false;
MessageBox.Show(PdnResources.GetString("NewExportSucceeded"));
}
///
/// 读取SPCApi配置方案
///
private Scheme getSpcApiSetting()
{
string filePath;
filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\SpcApiSchemes.xml";
if (System.IO.File.Exists(filePath))
{
spcApiSchemesModel = XmlSerializeHelper.DESerializer(FileOperationHelper.ReadStringFromFile(filePath, FileMode.Open));
if (spcApiSchemesModel.schemes.Count > 0)
{
Scheme schemeModel = new Scheme();
int cnt = 0;
foreach (Scheme scheme in spcApiSchemesModel.schemes)
{
if (scheme.isUse)
{
cnt = cnt + 1;
schemeModel = scheme;
}
}
if (cnt == 1)
{
if ( schemeModel.items.Count == 20)
{
return schemeModel;
}
else
{
writeLog("栏位总数必须为20!", "SPC上传接口错误");
return null;
}
}
else
{
writeLog("接口数据项配置错误,无启用方案或启用方案不唯一!", "SPC上传接口错误");
return null;
}
}
else
{
writeLog("接口数据项配置错误,未找到可用配置!", "SPC上传接口错误");
return null;
}
}
else
{
writeLog("配置文件不存在!","SPC上传接口错误");
return null;
}
}
///
/// 组织最终导出数据
///
private MeasureInfoExportModel OrganizeResultData(List thisResultMatList)
{
MeasureInfoExportModel measureInfoExportModel = new MeasureInfoExportModel();
var HoleTypeList = this.measureMaintenanceType.MeasureMaintenanceTreeFourthDataList.GroupBy(m => m.HoleType);
#region [先整理下整体的数据]
#region [特殊处理下叠构]
var resList = thisResultMatList.Where(m => m.parentId.Equals("100209")).ToList();
if (resList.Count > 0)
{
foreach (var item in resList)
{
List nameList = item.dataInforList.Select(m => m.name).ToList();
var ls = item.dataInforList.OrderBy(m => m.point1.Y).ToList();
for (int i = 0; i < ls.Count(); i++)
{
ls[i].name = nameList[i];
}
}
thisResultMatList.RemoveAll(m => m.parentId.Equals("100209"));
thisResultMatList.AddRange(resList);
}
#endregion [特殊处理下叠构]
var dataList = HoleTypeList.ToList();
for (int i = dataList.Count - 1; i >= 0; i--)
{
var data = dataList[i];
var resultDataList = thisResultMatList.Where(m => m.parentId.Equals(data.First().HoleTypeId)).ToList();
var a = Math.Ceiling(Convert.ToDouble(resultDataList.Count()) / Convert.ToDouble(this.measureMaintenanceType.outputPicturesNum));
if (a > 0)
{
for (int j = 1; j <= a; j++)
{
dataList.Insert(i + j, data);
}
dataList.RemoveAt(i);
}
}
#endregion [先整理下整体的数据]
string name = string.Empty;
int startNum = 0;
foreach (var item in dataList)
{
MeasureInfoExportDataModel measureInfoExportDataModel = new MeasureInfoExportDataModel();
measureInfoExportDataModel.HoleType = item.Key;
measureInfoExportDataModel.HoleTypeId = item.FirstOrDefault().HoleTypeId;
var resultDataList = thisResultMatList.Where(m => m.parentId.Equals(measureInfoExportDataModel.HoleTypeId)).ToList();
if (name.Equals(item.Key))
{
startNum++;
}
else
{
name = item.Key;
startNum = 0;
}
resultDataList = resultDataList.Skip(this.measureMaintenanceType.outputPicturesNum * startNum).Take(this.measureMaintenanceType.outputPicturesNum).ToList();
//添加图片及名称
foreach (var result in resultDataList)
{
var list = result.dataInforList;
List lines = new List();
GraphicsList graphicsList = new GraphicsList();
if (result.GraphicsListList != null)
{
for (int i = 0; i < result.GraphicsListList.Count; i++)
{
graphicsList.Add(result.GraphicsListList[i]);
}
}
if (checkBox2.Checked)
{
if (graphicsList.Count > 0)
{
graphicsList[0].Selected = false;
lines.Add(graphicsList[0]);
}
graphicsList = new GraphicsList();
}
else {
graphicsList = new GraphicsList();
}
//if (result.GraphicsListList != null)
//{
// if (checkBox2.Checked)
// {
// if (result.GraphicsListList.Count > 0)
// {
// lines.Add(result.GraphicsListList[0]);
// }
// }
// result.GraphicsListList = new GraphicsList();
//}
//else
//{
// result.GraphicsListList = new GraphicsList();
//}
var documentWorkspace1 = new DocumentWorkspaceWindow(this.appWorkspace);
Document document = Document.FromMat(result.resultMat);
documentWorkspace1.Document = document;
double unit = 1;
if (this.pidRuleDic.ContainsKey(result.parentId))
{
if (this.pidRuleDic[result.parentId].ContainsKey(result.fileName))
{
unit = this.pidRuleDic[result.parentId][result.fileName];
}
}
foreach (var draw in list)
{
if (draw.value == 0)
{
continue;
}
switch (draw.drawType)
{
case "MeasureLine":
MeasureLine line = new MeasureLine(documentWorkspace1, draw.point1, draw.point2, draw.aliasName, unit);
line.moved = true;
line.ISurfaceBox = documentWorkspace1;
lines.Add(line);
break;
case "MeasureVLine":
MeasureVLine vline = new MeasureVLine(documentWorkspace1, draw.point1, draw.point2, draw.aliasName, unit);
vline.moved = true;
vline.ISurfaceBox = documentWorkspace1;
lines.Add(vline);
break;
case "MeasureHLine":
MeasureHLine hline = new MeasureHLine(documentWorkspace1, draw.point1, draw.point2, draw.aliasName, unit);
hline.moved = true;
hline.ISurfaceBox = documentWorkspace1;
lines.Add(hline);
break;
}
}
graphicsList.AddRange(lines);
measureInfoExportDataModel.matList.Add(result.resultMat);
measureInfoExportDataModel.fileNameList.Add(result.fileName);
measureInfoExportDataModel.GraphicsListList.Add(graphicsList);
}
var itemTypeList = item.GroupBy(m => m.TestItems);
foreach (var item2 in itemTypeList)
{
ItemType itemType = new ItemType();
itemType.TestItems = item2.Key;
itemType.Specification = item2.FirstOrDefault().Specification;
itemType.isOk = true;
foreach (var item3 in item2)
{
LineData lineData = new LineData();
lineData.name = item3.FormulaName;
lineData.isOk = true;
lineData.isMaxOrMin = (item3.FormulaExpression.Contains("最大值") || item3.FormulaExpression.Contains("最小值") || item3.FormulaExpression.Contains("平均值"));
if (item3.FormulaExpression.Contains("最大值"))
{
lineData.typeCase = 1;
}
else if (item3.FormulaExpression.Contains("最小值"))
{
lineData.typeCase = 2;
}
else if (item3.FormulaExpression.Contains("平均值"))
{
lineData.typeCase = 3;
}
//计算结果
foreach (var data in resultDataList)
{
double result;
double unit = 1;
if (this.pidRuleDic.ContainsKey(data.parentId))
{
if (this.pidRuleDic[data.parentId].ContainsKey(data.fileName))
{
unit = this.pidRuleDic[data.parentId][data.fileName];
}
}
outPutResult(data.dataInforList, lineData.isMaxOrMin, item3.FormulaExpression, unit, lineData.typeCase, out result);
result = Math.Round(result, Program.instance.decimalPlaces);
lineData.value.Add(result);
if (double.IsInfinity(result) || double.IsNaN(result))
{
lineData.NgValue.Add(result);
lineData.isOk = false;
itemType.isOk = false;
}
else {
if (!outOk(result, item3.Specification))
{
lineData.NgValue.Add(result);
lineData.isOk = false;
itemType.isOk = false;
}
}
}
itemType.LineDataList.Add(lineData);
}
measureInfoExportDataModel.itemTypeList.Add(itemType);
}
measureInfoExportModel.measureInfoExportDataModelList.Add(measureInfoExportDataModel);
}
return measureInfoExportModel;
}
///
/// 返回公式所得值
///
///
///
///
///
private double outPutResult(List dataInforList, bool isMaxOrMin, string formula, double unit, int typeCase, out double result)
{
if (isMaxOrMin)
{
var str = formula.Split('\\').ToList();
str.RemoveAt(str.Count - 1);
List resultList = new List();
foreach (var everyStr in str)
{
var data = dataInforList.Where(m => m.aliasName.Equals(everyStr)).FirstOrDefault();
if (data != null)
{
resultList.Add(data.value * unit);
}
else
{
resultList.Add(0);
}
}
switch (typeCase)
{
case 1:
result = resultList.Max();
break;
case 2:
result = resultList.Min();
break;
case 3:
result = resultList.Average();
break;
default:
result = 0;
break;
}
}
else
{
foreach (var item in dataInforList)
{
if (formula.Contains(item.aliasName))
{
formula = formula.Replace(item.aliasName, (item.value * unit).ToString());
}
}
if (formula.Contains("["))
{
result = getResult(formula);
}
else {
result = Convert.ToDouble(FormulaHelper.CaleByFormule(formula));
}
}
return result;
}
///
/// 获取绝对值
///
private double getResult(string formula)
{
formula = formula.Replace("[", "Math.abs(").Replace("]", ")");
double res = Math.Abs(Convert.ToDouble(FormulaHelper.CaleByFormule(formula)));
return res;
}
///
/// 计算单个绝对值
/// 传出绝对值结尾的下一个字符的位置pos
/// 并返回绝对值计算结果
///
///
///
private string calcuAbsVal(string formula, out int pos)
{
string result = "";
bool inBra = false;
int braCount = 0;
pos = 0;
int i = 1;
while(i < formula.Length)
{
if(formula[i] == '[')
{
return calcuAbsVal(formula.Substring(i), out i);
}
else if (formula[i] == ']')
{
// 记录该绝对值结束的位置
pos = i + 1;
string temp = FormulaHelper.CaleByFormule(formula.Substring(1, i));
if(Convert.ToDouble(temp) < 0)
{
temp = temp.Replace("-", "");
}
return temp;
}
}
return FormulaHelper.CaleByFormule(result);
}
///
/// 返回是否合格
///
///
private bool outOk(double result, string specification)
{
specification = specification.Replace("<=", "LQ").Replace("<", "L");
List list;
if (!string.IsNullOrEmpty(specification))
{
if (specification.Contains('-'))
{
return true;
}
list = specification.Split('X').ToList();
if (list.Count == 2)
{
if (string.IsNullOrEmpty(list[0]))
{
if (list[1].Contains("LQ"))
{
return result <= Convert.ToDouble(list[1].Replace("LQ", ""));
}
else {
return result < Convert.ToDouble(list[1].Replace("L", ""));
}
}
else if (string.IsNullOrEmpty(list[1]))
{
if (list[0].Contains("LQ"))
{
return result >= Convert.ToDouble(list[0].Replace("LQ", ""));
}
else
{
return result > Convert.ToDouble(list[0].Replace("L", ""));
}
}
else
{
bool right = true;
bool left = true;
if (list[1].Contains("LQ"))
{
right = result <= Convert.ToDouble(list[1].Replace("LQ", ""));
}
else
{
right = result < Convert.ToDouble(list[1].Replace("L", ""));
}
if (list[0].Contains("LQ"))
{
left = result >= Convert.ToDouble(list[0].Replace("LQ", ""));
}
else
{
left = result > Convert.ToDouble(list[0].Replace("L", ""));
}
return right && left;
}
}
else
{
return true;
}
}
return true;
}
///
/// 保存图片到本地
///
///
private string SaveAllImage(Mat mat, GraphicsList graphicsList)
{
string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\TempImg\\";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
Graphics graphics = Graphics.FromImage(bitmap);
if (graphicsList != null && graphicsList.Count > 0)
{
graphicsList.DrawPicture(graphics);
}
string fileName = filePath + Guid.NewGuid().ToString() + ".jpg";
ImageCodecInfo icf = GdiPlusFileType.GetImageCodecInfo(ImageFormat.Jpeg);
EncoderParameters parms = new EncoderParameters(1);
EncoderParameter parm;
if (Program.instance.isCompression)
{
parm = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 50L);
}
else
{
parm = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 75L);
}
parms.Param[0] = parm;
bitmap.Save(fileName, icf, parms);
return fileName;
}
///
/// 显示绘制范围
///
///
///
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
this.documentWorkspace.GraphicsList.DeleteAllView();
if (this.listView1.FocusedItem != null && this.listView1.FocusedItem.Selected)
{
if (checkBox2.Checked)
{
string id = this.listView1.FocusedItem.Tag.ToString();
var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
int dataIndex = 0;
if (result != null)
{
dataIndex = this.resultMatList.IndexOf(result);
}
if (this.resultMatList[dataIndex].GraphicsListList.Count > 0)
{
this.resultMatList[dataIndex].GraphicsListList[0].canMove = false;
GraphicsList graphicsList = new GraphicsList();
graphicsList.Add(this.resultMatList[dataIndex].GraphicsListList[0].Clone(this.documentWorkspace));
graphicsList[0].Selected = false;
this.documentWorkspace.GraphicsList.Add(graphicsList[0]);
}
}
else
{
this.documentWorkspace.GraphicsList.DeleteAllView();
}
this.documentWorkspace.Refresh();
}
}
private void writeLog(string error, string typeName = "")
{
string filePath = Application.StartupPath + "\\Config\\" + Program.instance.SettingPrefix + "\\ErrorLog";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
using (StreamWriter sw = new StreamWriter(filePath + "\\" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + typeName + "log.txt"))
{
sw.WriteLine(error);
}
}
///
/// 开启像素跟踪
///
///
///
private void checkBox3_CheckedChanged(object sender, EventArgs e)
{
if (checkBox3.Checked)
{
pixelTrackingDialog = (PixelTrackingDialog)Application.OpenForms["PixelTrackingDialog"];//尝试获取已经弹出的窗口对象
if (pixelTrackingDialog == null)
{
pixelTrackingDialog = new PixelTrackingDialog(this.appWorkspace);
}
this.pixelTrackingEnabled = true;
this.pixelTrackingDialog.TransferEvent += checkBox3Change;
FloatingFormMethod.ShowResultFloatForm(this, pixelTrackingDialog, this.appWorkspace);
}
else
{
pixelTrackingDialog = (PixelTrackingDialog)Application.OpenForms["PixelTrackingDialog"];//尝试获取已经弹出的窗口对象
this.pixelTrackingEnabled = false;
if (pixelTrackingDialog != null)
{
pixelTrackingDialog.Close();
}
}
}
private void checkBox3Change()
{
this.checkBox3.Checked = false;
}
///
/// 像素跟踪
/// 需要增加标记,在进行比如图像旋转等直接在当前
/// 面板进行图像大小变化操作的,需要停止像素跟踪,
/// 处理完成之后在恢复,否则可能会导致读取内存异常
///
///
public void SetImageAndData(System.Drawing.Point location, DocumentView doc)
{
if (this.pixelTrackingDialog != null)
{
this.pixelTrackingDialog.SetImageAndData(location, doc);
}
}
private DateTime _time;
private void documentWorkspace_panel_MouseMove(object sender, MouseEventArgs e)
{
if (this.pixelTrackingEnabled && this.pixelTrackingDialog != null)
{
if ((DateTime.Now - _time).TotalMilliseconds > 20)
{
this.SetImageAndData(this.documentWorkspace.CalcPixelPoint(e.Location), this.documentWorkspace);
_time = DateTime.Now;
}
}
int count = this.documentWorkspace.GraphicsList.SelectionCount;
if (count == 1)
{
DrawObject drawObject = this.documentWorkspace.GraphicsList.Selection.ToList()[0];
if (drawObject.objectType == DrawClass.Measure) {
MeasureDrawObject measureDrawObject = (MeasureDrawObject)drawObject;
RectangleF rectangle = measureDrawObject.GetBoundingBox();
Rectangle newRectangle;
switch (measureDrawObject.drawToolType) {
case DrawToolType.MeasureLine:
newRectangle = new Rectangle((int)(rectangle.X - 20), (int)(rectangle.Y - 20), (int)(rectangle.Width + 20), (int)(rectangle.Height + 20));
break;
case DrawToolType.MeasureHLine:
newRectangle = new Rectangle((int)(rectangle.X - 20), (int)(rectangle.Y - 20), (int)(rectangle.Width + 20), 40);
break;
case DrawToolType.MeasureVLine:
newRectangle = new Rectangle((int)(rectangle.X - 20), (int)(rectangle.Y - 20), 40, (int)(rectangle.Height + 20));
break;
default:
newRectangle = new Rectangle((int)(rectangle.X - 20), (int)(rectangle.Y - 20), 40, (int)(rectangle.Height + 20));
break;
}
if (newRectangle.Contains(this.documentWorkspace.CalcPixelPoint(e.Location)))
{
string name = this.appWorkspace.getRealName(this.measureMaintenanceTypeList.MeasureMaintenanceTreeDataList, measureDrawObject.aliasName);
this.toolTip.Show(name, this.documentWorkspace, new System.Drawing.Point(e.Location.X + 10, e.Location.Y + 10));
}
else
{
this.toolTip.Hide(this.documentWorkspace);
}
}
}
}
///
/// 绘制范围
///
///
///
private void button2_Click(object sender, EventArgs e)
{
if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
{
return;
}
List bitmaps = new List();
List nameList = new List();
Dictionary imgGraphicsList = new Dictionary();
Dictionary ImgisConductive = new Dictionary();
Dictionary ImgisFanweibuchang = new Dictionary();
Dictionary ImgisErzhichuli = new Dictionary();
Dictionary needShowDaoDianbu = new Dictionary();
Dictionary needShowFanweibuchang = new Dictionary();
Dictionary needShowErzhichuli = new Dictionary();
Dictionary correspondNum = new Dictionary();
for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
{
var index = this.listView1.SelectedItems[i].Index;
Bitmap bitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(this.resultMatList[index].resultMat);
bitmaps.Add(bitmap);
nameList.Add(this.listView1.SelectedItems[i].Text);
bool show;
bool showFanweibuchang;
bool showErzhichuli;
string id = this.resultMatList[index].parentId;
MeasureMaintenanceTreeSpecificData data;
this.appWorkspace.RecursionGetData(id, this.measureMaintenanceTypeList.MeasureMaintenanceTreeDataList, out data);
if (data.MeasureMaintenanceTreeSpecificDataParentId == "9")
{
show = true;
}
else
{
show = false;
}
if (data.MeasureMaintenanceTreeSpecificDataParentId == "10"
&& data.MeasureMaintenanceTreeSpecificDataId == "100300")
{
showFanweibuchang = true;
}
else
{
showFanweibuchang = false;
}
if (true && data.MeasureMaintenanceTreeSpecificDataParentId == "7"
&& data.MeasureMaintenanceTreeSpecificDataId == "100176")
{
showErzhichuli = true;
}
else
{
showErzhichuli = false;
}
GraphicsList graphicsList = new GraphicsList();
for (int j = 0; j < this.resultMatList[index].GraphicsListList.Count; j++)
{
if (this.resultMatList[index].GraphicsListList[j].drawToolType == DrawToolType.ViewRectangle)
{
graphicsList.Add(this.resultMatList[index].GraphicsListList[j]);
}
}
needShowDaoDianbu.Add(index, show);
needShowFanweibuchang.Add(index, showFanweibuchang);
needShowErzhichuli.Add(index, showErzhichuli);
imgGraphicsList.Add(index, graphicsList);
ImgisConductive.Add(index, this.resultMatList[index].isConductive);
ImgisFanweibuchang.Add(index, this.resultMatList[index].isFanweibuchang);
ImgisErzhichuli.Add(index, this.resultMatList[index].isErzhichuli);
correspondNum.Add(i, index);
}
ResultsViewRange from2 = new ResultsViewRange(bitmaps, nameList, this, this.appWorkspace, imgGraphicsList, ImgisConductive, needShowDaoDianbu, ImgisFanweibuchang, needShowFanweibuchang, ImgisErzhichuli, needShowErzhichuli, correspondNum);
from2.StartPosition = FormStartPosition.CenterParent;
from2.ShowDialog();
}
public void getList(Dictionary dataList)
{
foreach (var item in dataList)
{
this.resultMatList[item.Key].GraphicsListList = item.Value;
var result = this.realResultMatList.Where(m => m.ID == this.resultMatList[item.Key].ID).FirstOrDefault();
if (result != null)
{
result.GraphicsListList = item.Value;
}
}
}
public void getBoolList(Dictionary dataList)
{
foreach (var item in dataList)
{
this.resultMatList[item.Key].isConductive = item.Value;
var result = this.realResultMatList.Where(m => m.ID == this.resultMatList[item.Key].ID).FirstOrDefault();
if (result != null)
{
result.isConductive = item.Value;
}
}
}
public void getErzhichuliList(Dictionary dataList)
{
foreach (var item in dataList)
{
this.resultMatList[item.Key].isErzhichuli = item.Value;
var result = this.realResultMatList.Where(m => m.ID == this.resultMatList[item.Key].ID).FirstOrDefault();
if (result != null)
{
result.isErzhichuli = item.Value;
}
}
}
public void getFanweibuchangList(Dictionary dataList)
{
foreach (var item in dataList)
{
this.resultMatList[item.Key].isFanweibuchang = item.Value;
var result = this.realResultMatList.Where(m => m.ID == this.resultMatList[item.Key].ID).FirstOrDefault();
if (result != null)
{
result.isFanweibuchang = item.Value;
}
}
}
public void getMatList(Dictionary bitmapData)
{
foreach (var item in bitmapData)
{
this.resultMatList[item.Key].resultMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(item.Value);
this.imageList1.Images[item.Key] = CreateThumbnail(this.resultMatList[item.Key].resultMat);
for (int i = 0; i < this.resultMatList[item.Key].dataInforList.Count; i++)
{
this.resultMatList[item.Key].dataInforList[i].point1 = new System.Drawing.Point(0, 0);
this.resultMatList[item.Key].dataInforList[i].point2 = new System.Drawing.Point(0, 0);
this.resultMatList[item.Key].dataInforList[i].value = 0;
}
this.listView1.Refresh();
}
this.listView1_SelectedIndexChanged(null, null);
}
///
/// 再次分析
///
///
///
// TODO:bug
private void button1_Click(object sender, EventArgs e)
{
this.documentWorkspace.activeTool = DrawToolType.Pointer;
if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
{
return;
}
List indexList = new List();
for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
{
int index = this.listView1.SelectedItems[i].Index;
indexList.Add(index);
}
ProgressThreadProcClass procClass = new ProgressThreadProcClass();
int itemCount = 100;
ProgressThreadProcClass.IFileTransferProgressEvents progressEvents = new ProgressThreadProcClass.IFileTransferProgressEvents();
System.Threading.ThreadStart copyThreadProc =
delegate ()
{
for (int i = 0; i < indexList.Count; i++)
{
var resultMat = this.resultMatList[indexList[i]];
string className = InvariantData.path_auto + $".{this._listHoleType[resultMat.parentId]}";
GraphicsList graphicsList = resultMat.GraphicsListList;
bool isErzhichuli = resultMat.isErzhichuli;
bool isFanweibuchang = resultMat.isFanweibuchang;
bool isConductive = resultMat.isConductive;
bool position = resultMat.isPosition;
var currentParam = (AutoMeasureAnalysis)Assembly.Load(InvariantData.auto_Data).CreateInstance(className);
Mat thisMat = resultMat.resultMat.Clone();
currentParam.setErzhichuli(isErzhichuli);
currentParam.setFanweibuchang(isFanweibuchang);
currentParam.setBool(isConductive);
currentParam.setIsNewSuanfa(position);
try
{
GraphicsList newGraphicsList = new GraphicsList();
for (int j = 0; j < resultMat.GraphicsListList.Count; j++)
{
if (resultMat.GraphicsListList[j].drawToolType == DrawToolType.ViewRectangle)
{
newGraphicsList.Add(resultMat.GraphicsListList[j]);
}
}
if (newGraphicsList.Count == 0)
{
currentParam.Compute(thisMat, false, 0, 0);
}
else
{
int X = (int)newGraphicsList[0].Rectangle.X;
int Y = (int)newGraphicsList[0].Rectangle.Y;
int reWidth = (int)newGraphicsList[0].Rectangle.Width;
int reHeight = (int)newGraphicsList[0].Rectangle.Height;
Bitmap newBitmap = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(thisMat);
if (newGraphicsList[0].Rectangle.Contains(new RectangleF(0, 0, newBitmap.Width, newBitmap.Height)))
{
X = 0;
Y = 0;
reWidth = newBitmap.Width;
reHeight = newBitmap.Height;
}
else
{
if (newGraphicsList[0].Rectangle.IntersectsWith(new RectangleF(0, 0, newBitmap.Width, newBitmap.Height)))
{
RectangleF rectangleF = new RectangleF(newGraphicsList[0].Rectangle.X, newGraphicsList[0].Rectangle.Y,newGraphicsList[0].Rectangle.Width, newGraphicsList[0].Rectangle.Height);
rectangleF.Intersect(new RectangleF(0, 0, newBitmap.Width, newBitmap.Height));
X = (int)rectangleF.X;
Y = (int)rectangleF.Y;
reWidth = (int)rectangleF.Width;
reHeight = (int)rectangleF.Height;
}
}
Mat mat = new Mat(thisMat, new Rect(X, Y, reWidth, reHeight));
currentParam.Compute(mat, true, X, Y);
}
}
catch (Exception ex)
{
}
resultMat.resultMat = thisMat;
resultMat.allLineNum = currentParam.number;
resultMat.successNum = currentParam.success;
resultMat.failNum = currentParam.wrongNumber;
resultMat.dataInforList.Clear();
List listdata = new List();
foreach (var dataInfo in currentParam.dataInfors)
{
DataInfor dataInfor = new DataInfor();
dataInfor.drawType = dataInfo.drawType;
dataInfor.value = dataInfo.value;
dataInfor.point1 = dataInfo.point1;
dataInfor.point2 = dataInfo.point2;
dataInfor.name = dataInfo.name;
dataInfor.aliasName = dataInfo.aliasName;
dataInfor.ID = dataInfo.ID;
dataInfor.deleteFlag = dataInfo.deleteFlag;
listdata.Add(dataInfor);
}
resultMat.dataInforList.AddRange(listdata);
}
progressEvents.EndOperation(OperationResult.Finished);
};
procClass.StartProgressAction(this, itemCount, copyThreadProc, progressEvents, null);
for (int i = 0; i < this.listView1.SelectedItems.Count; i++)
{
var index = this.listView1.SelectedItems[i].Index;
this.listView1.SelectedItems[i].BackColor = this.resultMatList[index].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
if (i == 0)
{
this.listView1.Items[index].Focused = true;
}
}
this.listView1.Refresh();
#region [组织应该展示的线 去除不应该展示的线]
foreach (var item in resultMatList)
{
List removeList = new List();
if (this.LineShowDic.ContainsKey(item.parentId))
{
foreach (var item2 in item.dataInforList)
{
if (!this.LineShowDic[item.parentId].Contains(item2.ID))
{
removeList.Add(item2);
}
}
foreach (var item2 in removeList)
{
item.dataInforList.Remove(item2);
}
}
}
#endregion [组织应该展示的线 去除不应该展示的线]
listView1_SelectedIndexChanged(null, null);
}
///
/// 全选
///
///
///
private void button3_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.listView1.Items.Count; i++)
{
this.listView1.Items[i].Selected = true;
if (i == 0)
{
this.listView1.Items[i].Focused = true;
}
}
}
///
/// 全不选
///
///
///
private void button4_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.listView1.Items.Count; i++)
{
this.listView1.Items[i].Selected = false;
if (i == 0)
{
this.listView1.Items[i].Selected = true;
this.listView1.Items[i].Focused = true;
}
}
}
///
/// 反选
///
///
///
private void button5_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.listView1.Items.Count; i++)
{
this.listView1.Items[i].Selected = !this.listView1.Items[i].Selected;
}
if (this.listView1.SelectedItems.Count > 0)
{
this.listView1.SelectedItems[0].Focused = true;
this.listView1_SelectedIndexChanged(null, null);
}
}
///
/// 命名规则
///
///
///
private void button6_Click(object sender, EventArgs e)
{
//NameRuleListDetails nameRuleListDetails = new NameRuleListDetails();
//if (this.thisNameRuleListDetails == null)
//{
// if (!string.IsNullOrEmpty(this.measureMaintenanceType.NameRuleID))
// {
// var oldNameRuleListDetails = Program.instance.fileNameRule.NameRuleList.Where(m => m.ID == this.measureMaintenanceType.NameRuleID).FirstOrDefault();
// if (oldNameRuleListDetails != null)
// {
// nameRuleListDetails.ContinueNumber = oldNameRuleListDetails.ContinueNumber;
// nameRuleListDetails.DigitNum = oldNameRuleListDetails.DigitNum;
// nameRuleListDetails.ID = oldNameRuleListDetails.ID;
// nameRuleListDetails.isContinue = oldNameRuleListDetails.isContinue;
// nameRuleListDetails.Name = oldNameRuleListDetails.Name;
// nameRuleListDetails.NameFormat = oldNameRuleListDetails.NameFormat;
// nameRuleListDetails.NowNumber = oldNameRuleListDetails.NowNumber;
// nameRuleListDetails.Text = oldNameRuleListDetails.Text;
// nameRuleListDetails.ZTextOne = oldNameRuleListDetails.ZTextOne;
// nameRuleListDetails.ZTextTwo = oldNameRuleListDetails.ZTextTwo;
// }
// }
//}
//else {
// nameRuleListDetails = this.thisNameRuleListDetails;
//}
using (ResultViewNameRule2 af = new ResultViewNameRule2(this,this.measureMaintenanceType))
{
af.StartPosition = FormStartPosition.CenterScreen;
af.ShowDialog();
}
}
public void NameRuleCallBack(NameRuleListDetails nameRuleListDetails)
{
if(nameRuleListDetails != null)
this.measureMaintenanceType.NameRuleID = nameRuleListDetails.ID;
if (nameRuleListDetails != null)
this.thisNameRuleListDetails = nameRuleListDetails;
this.yuLan(nameRuleListDetails);
}
public void itemNumCallBack(string itemNum)
{
this.measureMaintenanceType.measureMaintenanceBasicDataList[0].measureMaintenanceBasicDataValue = itemNum;
this.isSPCItemNull = true;
buttonGenerateReport_Click(null, null);
}
///
/// 选择模板
///
///
///
private void button7_Click(object sender, EventArgs e)
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "Excel文件|*.xls;*.xlsx";
dialog.Title = "选择模板";
dialog.Multiselect = false; //该值确定是否可以选择多个文件
if (dialog.ShowDialog() != DialogResult.OK)
{
return;
}
string file = dialog.FileName;
measureMaintenanceType.templateFilePath = file;
MessageBox.Show("模板更换成功!");
}
///
/// 图片删除
///
///
///
private void button8_Click(object sender, EventArgs e)
{
if (this.listView1.SelectedItems == null || this.listView1.SelectedItems.Count == 0)
{
return;
}
this.listView1.SelectedIndexChanged -= listView1_SelectedIndexChanged;
for (int i = this.listView1.SelectedItems.Count - 1; i >= 0; i--)
{
string id = this.listView1.SelectedItems[i].Tag.ToString();
var result = this.resultMatList.Where(m => m.ID == id).FirstOrDefault();
if (result != null)
{
this.hasDelResultMatList.Add(result);
this.resultMatList.Remove(result);
var realresult = this.realResultMatList.Where(m => m.ID == id).FirstOrDefault();
if (realresult != null)
{
this.realResultMatList.Remove(realresult);
}
}
this.listView1.Items.Remove(this.listView1.SelectedItems[i]);
}
this.listView1.SelectedIndexChanged += listView1_SelectedIndexChanged;
if (this.listView1.Items.Count > 0)
{
this.listView1.Items[0].Focused = true;
this.listView1.Items[0].Selected = true;
this.listView1_SelectedIndexChanged(null, null);
}
else
{
this.documentWorkspace.Visible = false;
if (panel2.Controls != null)
{
foreach (Control c in panel2.Controls)
{
c.Visible = false;
}
}
}
this.listView1.Refresh();
}
///
/// 图片恢复
///
///
///
private void button9_Click(object sender, EventArgs e)
{
int count = this.listView1.Items.Count;
this.hasDelResultMatList.Reverse();
for (int i = 0; i < this.hasDelResultMatList.Count; i++)
{
Mat mat = new Mat();
Cv2.CvtColor(this.hasDelResultMatList[i].resultMat, mat, ColorConversionCodes.BGRA2BGR);
this.imageList1.Images.Add("img" + count, CreateThumbnail(mat));
this.listView1.Items.Add("", count);
this.listView1.Items[count].ImageIndex = count;
this.listView1.Items[count].Tag = this.hasDelResultMatList[i].ID;
this.listView1.Items[count].Text = this.hasDelResultMatList[i].fileName;
this.listView1.Items[count].BackColor = this.hasDelResultMatList[i].dataInforList.Where(m => m.value == 0).FirstOrDefault() == null ? Color.White : Color.Red;
count++;
mat.Dispose();
this.resultMatList.Add(this.hasDelResultMatList[i]);
this.realResultMatList.Add(this.hasDelResultMatList[i]);
}
comboClassification_SelectedIndexChanged(sender, e);
comboStatus_SelectedIndexChanged(sender, e);
this.listView1.Refresh();
this.hasDelResultMatList.Clear();
}
///
/// 勾选辅助线
///
///
///
private void checkBox4_CheckedChanged(object sender, EventArgs e)
{
this.documentWorkspace.auxiliaryLineEnabled = !this.documentWorkspace.auxiliaryLineEnabled;
if (this.documentWorkspace.auxiliaryLineEnabled)
{
this.documentWorkspace.girdLineColour = Program.instance.configModel.girdLineColour;
this.documentWorkspace.girdLineStyle = Program.instance.configModel.girdLineStyle;
this.documentWorkspace.girdLineWidth = Program.instance.configModel.girdLineWidth;
}
this.documentWorkspace.Refresh();
}
public string getMeasureMaintenanceTypeID()
{
return this.measureMaintenanceType.NameRuleID;
}
///
/// 结果预览
///
///
///
private void button10_Click(object sender, EventArgs e)
{
string titleName = measureMaintenanceType.measureMaintenanceName;
#region [组织预览数据]
MeasureInfoExportModel measureInfoExportModel = OrganizePreviewResultData(this.resultMatList);
#endregion
ResultViewPreview resultViewPreview = new ResultViewPreview(this,titleName, this.measureMaintenanceType.outputPicturesNum, measureInfoExportModel);
resultViewPreview.StartPosition = FormStartPosition.CenterParent;
resultViewPreview.ShowDialog();
}
///
/// 组织预览数据
///
private MeasureInfoExportModel OrganizePreviewResultData(List thisResultMatList)
{
MeasureInfoExportModel measureInfoExportModel = new MeasureInfoExportModel();
var HoleTypeList = this.measureMaintenanceType.MeasureMaintenanceTreeFourthDataList.GroupBy(m => m.HoleType);
#region [先整理下整体的数据]
#region [特殊处理下叠构]
var resList = thisResultMatList.Where(m => m.parentId.Equals("100209")).ToList();
if (resList.Count > 0)
{
foreach (var item in resList)
{
List nameList = item.dataInforList.Select(m => m.name).ToList();
var ls = item.dataInforList.OrderBy(m => m.point1.Y).ToList();
for (int i = 0; i < ls.Count(); i++)
{
ls[i].name = nameList[i];
}
}
thisResultMatList.RemoveAll(m => m.parentId.Equals("100209"));
thisResultMatList.AddRange(resList);
}
#endregion [特殊处理下叠构]
var dataList = HoleTypeList.ToList();
for (int i = dataList.Count - 1; i >= 0; i--)
{
var data = dataList[i];
var resultDataList = thisResultMatList.Where(m => m.parentId.Equals(data.First().HoleTypeId)).ToList();
var a = Math.Ceiling(Convert.ToDouble(resultDataList.Count()) / Convert.ToDouble(this.measureMaintenanceType.outputPicturesNum));
if (a > 0)
{
for (int j = 1; j <= a; j++)
{
dataList.Insert(i + j, data);
}
dataList.RemoveAt(i);
}
}
#endregion [先整理下整体的数据]
string name = string.Empty;
int startNum = 0;
foreach (var item in dataList)
{
MeasureInfoExportDataModel measureInfoExportDataModel = new MeasureInfoExportDataModel();
measureInfoExportDataModel.HoleType = item.Key;
measureInfoExportDataModel.HoleTypeId = item.FirstOrDefault().HoleTypeId;
var resultDataList = thisResultMatList.Where(m => m.parentId.Equals(measureInfoExportDataModel.HoleTypeId)).ToList();
if (name.Equals(item.Key))
{
startNum++;
}
else
{
name = item.Key;
startNum = 0;
}
resultDataList = resultDataList.Skip(this.measureMaintenanceType.outputPicturesNum * startNum).Take(this.measureMaintenanceType.outputPicturesNum).ToList();
var itemTypeList = item.GroupBy(m => m.TestItems);
foreach (var item2 in itemTypeList)
{
ItemType itemType = new ItemType();
itemType.TestItems = item2.Key;
itemType.Specification = item2.FirstOrDefault().Specification;
itemType.isOk = true;
foreach (var item3 in item2)
{
LineData lineData = new LineData();
lineData.name = item3.FormulaName;
lineData.isOk = true;
lineData.isMaxOrMin = (item3.FormulaExpression.Contains("最大值") || item3.FormulaExpression.Contains("最小值") || item3.FormulaExpression.Contains("平均值"));
if (item3.FormulaExpression.Contains("最大值"))
{
lineData.typeCase = 1;
}
else if (item3.FormulaExpression.Contains("最小值"))
{
lineData.typeCase = 2;
}
else if (item3.FormulaExpression.Contains("平均值"))
{
lineData.typeCase = 3;
}
//计算结果
foreach (var data in resultDataList)
{
double result;
double unit = 1;
if (this.pidRuleDic.ContainsKey(data.parentId))
{
if (this.pidRuleDic[data.parentId].ContainsKey(data.fileName))
{
unit = this.pidRuleDic[data.parentId][data.fileName];
}
}
outPutResult(data.dataInforList, lineData.isMaxOrMin, item3.FormulaExpression, unit, lineData.typeCase, out result);
result = Math.Round(result, Program.instance.decimalPlaces);
lineData.value.Add(result);
lineData.matIndex.Add(this.resultMatList.IndexOf(data));
if (double.IsInfinity(result) || double.IsNaN(result))
{
lineData.NgValue.Add(result);
lineData.isOk = false;
itemType.isOk = false;
}
else
{
if (!outOk(result, item3.Specification))
{
lineData.NgValue.Add(result);
lineData.isOk = false;
itemType.isOk = false;
}
}
}
itemType.LineDataList.Add(lineData);
}
measureInfoExportDataModel.itemTypeList.Add(itemType);
}
measureInfoExportModel.measureInfoExportDataModelList.Add(measureInfoExportDataModel);
}
return measureInfoExportModel;
}
public void returnMatView(int index)
{
for (int i = 0; i < this.listView1.Items.Count; i++)
{
this.listView1.Items[i].Selected = false;
}
this.listView1.Focus();
//滚动到指定的行位置
this.listView1.EnsureVisible(index);
this.listView1.Items[index].Focused = true;
this.listView1.Items[index].Selected = true;
}
}
}