using MeasureThread;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace HOZProject
{
public class MeasureMsgManage
{
public enum measureType
{
Photo=0,
FIB=1,
PT=2
}
#region 线程消息处理,显示内容
///
/// 线程消息处理,显示内容
///
/// 主窗体对象
/// 消息对象
public static void ShowMsgContent(FormHOZMain formHOZ, ThreadStatusEventArgs args)
{
#region 判断线程是否停止
switch (args.Step_Code)
{
case "0-0":
//停止线程
if (formHOZ.m_BackgroundWorker.IsBusy)
{
formHOZ.m_BackgroundWorker.CancelAsync();
//是否关闭窗体的标识
if (formHOZ.IsClose)
{
formHOZ.Close();
}
}
break;
case "0-1":
//初始化失败
if (formHOZ.m_BackgroundWorker.IsBusy)
{
//修改切孔状态
formHOZ.ChangeCutHoleState(args.HoleName, (int)ThreadState.Failed);
}
break;
}
#endregion
//是否当前编号是流程中有数据的节点
if (IsCutHolePhotoInfo(formHOZ, args))
{
if (!args.Picture_Information.Picture_FullPath.Equals(""))
{
//显示状态信息
ShowStateMessage(formHOZ, args);
//设置图像
//FileStream fileStream = new FileStream(args.Picture_Information.Picture_FullPath, FileMode.Open, FileAccess.Read);
//formHOZ.pbImage.Image = Image.FromStream(fileStream);
//fileStream.Close();
//fileStream.Dispose();
formHOZ.pbImage.Image = GetFile(args.Picture_Information.Picture_FullPath);
//流程内容
double Work_Voltage = args.Picture_Information.Work_Voltage / 1000;
double Magnification = args.Picture_Information.Magnification;
double Work_Distance = args.Picture_Information.Work_Distance * 1000;
string semParaContent = "电压:" + Work_Voltage.ToString("f1") + "KV";
semParaContent += " 放大倍数:" + Magnification + "X";
semParaContent += " 工作距离:" + Work_Distance.ToString("f1") + "mm";
formHOZ.lblFlowContent.Text = semParaContent;
}
}
else
{
formHOZ.lblFlowContent.Text = string.Empty ;
}
//修改切孔中流程状态
ChageCutHoleFlowNodeState(formHOZ, args);
}
#region 将文件改换为内存流
public static MemoryStream ReadFile(string path)
{
if (!File.Exists(path))
return null;
using (FileStream file = new FileStream(path, FileMode.Open))
{
byte[] b = new byte[file.Length];
file.Read(b, 0, b.Length);
file.Close();
file.Dispose();
MemoryStream stream = new MemoryStream(b);
return stream;
}
}
///
/// 将内存流转为图片
///
///
///
public static Image GetFile(string path)
{
MemoryStream stream = ReadFile(path);
return stream == null ? null : Image.FromStream(stream);
}
#endregion
///
/// 显示状态信息
///
///
///
private static void ShowStateMessage(FormHOZMain formHOZ, ThreadStatusEventArgs args)
{
//显示状态信息
if (args.Message == "自动对焦")
{
formHOZ.lblStateMessage.Text = "正在对焦中...请等待";
}
else if (args.Message == "自动像散")
{
formHOZ.lblStateMessage.Text = "正在消像散中...请等待";
}
else if (args.Message == "FIB自动对焦")
{
formHOZ.lblStateMessage.Text = "正在FIB自动对焦中...请等待";
}
else
{
formHOZ.lblStateMessage.Text = "";
}
}
#endregion
#region 显示切孔流程中拍照信息
///
/// 是否当前编号是流程中有数据的节点
///
/// 主窗体对象
/// 线程参数
///
public static bool IsCutHolePhotoInfo(FormHOZMain formHOZ, ThreadStatusEventArgs args)
{
if (formHOZ.plPrarInfo.Controls.Count > 0)
{
foreach (Control item in formHOZ.plPrarInfo.Controls)
{
if (item is UserControl)
{
if (item.Name == args.HoleName)
{
UControl_ParaInfo uControl_ParaInfo = (UControl_ParaInfo)item;
TimeLineItem[] ParaItem = uControl_ParaInfo.TlItem;
foreach (TimeLineItem tlItem in ParaItem)
{
if (tlItem.Code == args.Step_Code && tlItem.IsData)
{
return true;
}
}
}
}
}
}
return false;
}
#endregion
#region 修改切孔中流程状态
///
/// 修改切孔中流程状态
///
/// 主窗体对象
/// 切孔名称
/// 流程编号
/// 状态
///
public static bool ChageCutHoleFlowNodeState(FormHOZMain formHOZ, ThreadStatusEventArgs args)
{
if (formHOZ.plPrarInfo.Controls.Count > 0)
{
foreach (Control item in formHOZ.plPrarInfo.Controls)
{
if (item is UserControl)
{
if (item.Name == args.HoleName)
{
UControl_ParaInfo uControl_ParaInfo = (UControl_ParaInfo)item;
TimeLineItem[] ParaItem = uControl_ParaInfo.TlItem;
foreach (TimeLineItem tlItem in ParaItem)
{
if (tlItem.Code == args.Step_Code)
{
tlItem.State = args.State?1:0;
break;
}
}
//更新进度条
uControl_ParaInfo.UpdateCurrentMeasureSchedule();
//重新绘制
uControl_ParaInfo.TimeLineInvalidate();
return true;
}
}
}
}
return false;
}
#endregion
}
}