using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MeasureData;
using FileManager;
using System.Xml;
namespace HOZProject
{
public partial class UControl_ParaInfo : UserControl
{
#region 成员变量
///
/// 开始时间
///
private string startTime;
///
/// 结束时间
///
private string endTime;
///
/// 状态
///
private int state;
///
/// 位置
///
private SemPosition position;
private bool isSwitch;
private string cutHoleName;
private FormHOZMain formHOZMain;
private TimeLineItem[] tlItem = null;
private UCTimeLine uCTimeLine = null;
public FormHOZMain FormHOZMainObject { get => formHOZMain; set => formHOZMain = value; }
public string StartTime { get => startTime; set => startTime = value; }
public string EndTime { get => endTime; set => endTime = value; }
public int State { get => state; set => state = value; }
public SemPosition Position { get => position; set => position = value; }
public string CutHoleName { get => cutHoleName; set => cutHoleName = value; }
public bool IsSwitch { get => isSwitch; set => isSwitch = value; }
public TimeLineItem[] TlItem { get => tlItem; set => tlItem = value; }
#endregion
public UControl_ParaInfo(FormHOZMain formHOZ)
{
InitializeComponent();
FormHOZMainObject = formHOZ;
//显示测量流程
ShowMeasureFlow();
}
#region 显示开始与结束时间
public void ShowTime()
{
if (StartTime == "0001/1/1 0:00:00")
{
lblShowStartTime.Text = "";
}
else
{
lblShowStartTime.Text = StartTime;
}
if (EndTime == "0001/1/1 0:00:00")
{
lblShowEndTime.Text = "";
}
else
{
lblShowEndTime.Text = EndTime;
}
}
#endregion
#region 当前进度
public void UpdateCurrentMeasureSchedule()
{
if (TlItem != null)
{
//完成状态数量
int finishCount = 0;
//未完成状态数量
int unFinishedCount = 0;
foreach (TimeLineItem item in TlItem)
{
if (item.State>0)
{
finishCount++;
}
switch (FormHOZMainObject.m_MeasureType)
{
case (int)MeasureMsgManage.measureType.Photo:
if (item.Type.ToUpper() == "PT" || item.Type.ToUpper() == "FIB")
{
continue;
}
else
{
unFinishedCount++;
}
break;
case (int)MeasureMsgManage.measureType.FIB:
if (item.Type.ToUpper() == "PT")
{
continue;
}
else
{
unFinishedCount++;
}
break;
case (int)MeasureMsgManage.measureType.PT:
unFinishedCount = TlItem.Length;
break;
}
}
try
{
if (lblShowState.Text == "失败")
{
pbMeasure.Value = 100;
lblCompletedAmount.Text = "100%";
}
else
{
int pbValue = (int)((float)finishCount / (float)unFinishedCount * 100);
pbMeasure.Value = pbValue;
lblCompletedAmount.Text = pbValue + "%";
}
}
//try
//{
// int pbValue = (int)((float)finishCount / (float)unFinishedCount*100);
// pbMeasure.Value = pbValue;
// lblCompletedAmount.Text = pbValue + "%";
//}
catch (Exception)
{
pbMeasure.Value = 0;
}
}
}
#endregion
#region 隐藏属性层
private void btnClose_Click(object sender, EventArgs e)
{
FormHOZMainObject.plPrarInfo.Visible = false;
}
#endregion
#region 重绘时间轴
///
/// 重绘时间轴
///
public void TimeLineInvalidate()
{
plTimeLine.Invalidate();
uCTimeLine.Invalidate();
}
#endregion
#region 显示切孔参数信息
///
/// 显示切孔参数信息
///
public void ShowParaInfo()
{
int multiple = 1000;
//设置Position参数
lblX.Text = (Position.X * multiple).ToString("f2");
lblY.Text = (Position.Y * multiple).ToString("f2");
lblZ.Text = (Position.Z * multiple).ToString("f2");
lblR.Text = Position.R.ToString();
lblT.Text = Position.T.ToString();
lblM.Text = (Position.M * multiple).ToString();
try
{
DateTime dtst = Convert.ToDateTime(StartTime);
if (dtst.Year != System.DateTime.Now.Year)
{
lblShowStartTime.Text = "";
}
else
{
lblShowStartTime.Text = StartTime;
}
}
catch
{
lblShowStartTime.Text = "";
}
try
{
DateTime dtet = Convert.ToDateTime(EndTime);
if (dtet.Year != System.DateTime.Now.Year)
{
lblShowEndTime.Text = "";
}
else
{
lblShowEndTime.Text = EndTime;
}
}
catch
{
lblShowEndTime.Text = "";
}
//设置切孔状态
switch (State)
{
//准备
case (int)MeasureThread.ThreadState.Ready:
//修改切孔状态
lblShowState.Text = "准备";
break;
//等待
case (int)MeasureThread.ThreadState.Waiting:
//修改切孔状态
lblShowState.Text = "等待";
break;
//进行中
case (int)MeasureThread.ThreadState.InProcess:
//修改切孔状态
lblShowState.Text = "进行中";
break;
//完成
case (int)MeasureThread.ThreadState.Success:
//修改切孔状态
lblShowState.Text = "完成";
break;
//失败
case (int)MeasureThread.ThreadState.Failed:
lblShowState.Text = "失败";
break;
}
lblCutHoleName.Text = CutHoleName;
CkIsSwitch.Checked = IsSwitch;
}
#endregion
#region 绑定流程信息
///
/// 绑定流程信息
///
///
private void ShowMeasureFlow()
{
if (TlItem == null)
{
TlItem = GetMeasureFlowStructInfo();
}
if (TlItem != null)
{
ShowUCTimeLine(TlItem);
}
}
public void ShowUCTimeLine(TimeLineItem[] tlItem)
{
if (plTimeLine.Controls.Count == 0)
{
uCTimeLine = new UCTimeLine(tlItem, FormHOZMainObject.m_MeasureType);
uCTimeLine.Dock = DockStyle.Fill;
plTimeLine.Controls.Add(uCTimeLine);
}
}
private TimeLineItem[] GetMeasureFlowStructInfo()
{
string xmlfullname = Application.StartupPath + @"\MeasureXML\MeasureStructXml.xml";
XmlNodeList nodeList = XmlManager.GetXmlMeasureFlowNodeInfo(xmlfullname);
if (nodeList != null)
{
return XmlConvertTimeListItem(nodeList);
}
return null;
}
private TimeLineItem[] XmlConvertTimeListItem(XmlNodeList nodeList)
{
List timeLineList = new List();
for (int i = 0; i < nodeList.Count; i++)
{
if (Convert.ToBoolean(nodeList[i].Attributes["IsShow"].Value))
{
TimeLineItem tlItem = new TimeLineItem();
tlItem.Details = nodeList[i].Attributes["Details"].Value;
tlItem.Code = nodeList[i].Attributes["Code"].Value;
tlItem.State = -1;
tlItem.Title = nodeList[i].Attributes["Title"].Value;
tlItem.IsData = Convert.ToBoolean(nodeList[i].Attributes["IsData"].Value);
tlItem.Type = nodeList[i].Attributes["Type"].Value;
tlItem.IsShow = Convert.ToBoolean(nodeList[i].Attributes["IsShow"].Value);
tlItem.Index = Convert.ToInt32(nodeList[i].Attributes["Index"].Value);
timeLineList.Add(tlItem);
}
}
TimeLineItem[] timeLineItem = new TimeLineItem[timeLineList.Count];
//按照Index进行升序
timeLineItem = timeLineList.OrderBy(i => i.Index).ToArray();
//清空时间轴列表
timeLineList.Clear();
return timeLineItem;
}
#endregion
#region 关闭按钮 鼠标操作事件
private void pbClose_MouseEnter(object sender, EventArgs e)
{
pbClose.BackgroundImage = global::HOZProject.Properties.Resources.Exit;
}
private void pbClose_MouseLeave(object sender, EventArgs e)
{
pbClose.BackgroundImage = global::HOZProject.Properties.Resources.Exit;
}
#endregion
#region 设置切孔是否检测
private void CkIsSwitch_CheckedChanged(object sender, EventArgs e)
{
//设置切孔是否检测
List cutHoles = formHOZMain.m_MeasureFile.ListCutHole;
foreach (CutHole item in cutHoles)
{
if (item.HoleName == CutHoleName)
{
item.SWITCH = CkIsSwitch.Checked;
//是否已保存
if (formHOZMain.IsSave)
{
//保存测量文件
formHOZMain.m_MeasureFile.Save();
}
break;
}
}
}
#endregion
}
}