using OTSCLRINTERFACE; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace OTSPartA_STDEditor { public partial class XrayContrastForm : Form { #region 全部变量 //数据库操作对象 //全局Xray 用于存储采集的Xray信息 byte[] xrayByteData = null; private SqlLiteClass m_sc = null; //Xray控件 UXrayControl xrayControl = null; UXrayControl xrayContrastControl = null; public DataRow dr = null; public DataTable dt = null; // 电镜设置对象 COTSControlFunExport m_cfun = null; // 连接状态 bool m_bConnectionState = false; //STD信息集合 public Dictionary STDDictionary = null; //国际化 Language lan; System.Collections.Hashtable table; #endregion /// /// [颜色:16进制转成RGB] /// /// 设置16进制颜色 [返回RGB] /// public static System.Drawing.Color colorHx16toRGB(string strHxColor) { try { if (strHxColor.Length == 0) {//如果为空 return System.Drawing.Color.FromArgb(255, 255, 204);//设为白色 } else {//转换颜色 return System.Drawing.Color.FromArgb(System.Int32.Parse(strHxColor.Substring(1, 2), System.Globalization.NumberStyles.AllowHexSpecifier), System.Int32.Parse(strHxColor.Substring(3, 2), System.Globalization.NumberStyles.AllowHexSpecifier), System.Int32.Parse(strHxColor.Substring(5, 2), System.Globalization.NumberStyles.AllowHexSpecifier)); } } catch {//设为白色 return System.Drawing.Color.FromArgb(255, 255, 204); } } public XrayContrastForm() { InitializeComponent(); } private void XrayContrastForm_Load(object sender, EventArgs e) { //加载Xray信息控件 xrayControl = new UXrayControl(); plXray.Controls.Add(xrayControl); xrayControl.Dock = DockStyle.Top; BindGrid_IncALib(); //比对 //GetCompMineralFun(); xrayContrastControl = new UXrayControl(); plXray.Controls.Add(xrayContrastControl); xrayContrastControl.Dock = DockStyle.Top; //国际化 lan = new Language(this); table = lan.GetNameTable(this.Name); } #region 绑定Grid等相关方法 /// /// 绑定STDGrid /// private void BindGrid_IncALib() { if (m_sc == null) { m_sc = new SqlLiteClass(); } //查询 //DataTable dtSelDB = m_sc.GetDTFormSysSTDBySQLString("select Name,Id,0 Color,'' Hardness,'' density,'' Conductivity,'' BSEValue,'' formula,'' Element,SPEC,RowIndex,0 ReducedValue from ClassifySTD order by Name"); //STDMinerals //DataTable dtSelDB = m_sc.GetDTFormSysSTDBySQLString("select 'C.StdName','C.StdId','C.Color','C.Hardness','C.Density','C.Electrical_conductivity','C.BSE','C.Formula','C.Element','M.SPEC' from ClassifySTD C,STDMinerals M WHERE C.StdId=M.id"); //STDMinerals DataTable dtSelDB = m_sc.GetDTFormSysSTDBySQLString("select StrName,StdId,Color,Hardness,Density,Electrical_conductivity,BSE,Formula,Element,SPEC,0 ReducedValue from ClassifySTD left join STDMinerals on ClassifySTD.StdId = STDMinerals.id"); //STDMinerals //绑定 BindDataGridView_dgV_IncALib(dtSelDB); //样式 SetDataGridViewStyleIncLib(); } /// /// 使用DataTable绑定Grid /// /// public void BindDataGridView_dgV_IncALib(DataTable dtSelDB) { dgV_IncALib.Rows.Clear(); dgV_IncALib.Columns.Clear(); //创建Grid的列 //名称 dgV_IncALib.Columns.Add("Name", "strName"); //编号 dgV_IncALib.Columns.Add("Code", "Code"); //代表色 dgV_IncALib.Columns.Add("Color", "Color"); //硬度 dgV_IncALib.Columns.Add("Hardness", "Hardness"); //密度 dgV_IncALib.Columns.Add("Density", "Density"); //导电性 dgV_IncALib.Columns.Add("Conductivity", "Conductivity"); //BSE dgV_IncALib.Columns.Add("BSEValue", "BSE"); //化学式 dgV_IncALib.Columns.Add("Formula", "Formula"); //元素 dgV_IncALib.Columns.Add("Element", "Element"); dgV_IncALib.Columns.Add("Xray", "Xray"); dgV_IncALib.Columns.Add("RowIndex", "RowIndex"); dgV_IncALib.Columns.Add("ReducedValue", "ReducedValue"); //添加完成列后,再对不需要显示的列进行隐藏 dgV_IncALib.Columns["Code"].Visible = false; dgV_IncALib.Columns["Color"].Visible = false; dgV_IncALib.Columns["Xray"].Visible = false; dgV_IncALib.Columns["RowIndex"].Visible = false; dgV_IncALib.Columns["ReducedValue"].Visible = false; //宽度 dgV_IncALib.Columns["Name"].Width = 140;//名称 dgV_IncALib.Columns["Code"].Width = 0;//编号 dgV_IncALib.Columns["Color"].Width = 0;//代表色 dgV_IncALib.Columns["Hardness"].Width = 80;//硬度 dgV_IncALib.Columns["Density"].Width = 80;//密度 dgV_IncALib.Columns["Conductivity"].Width = 60;//导电性 dgV_IncALib.Columns["BSEValue"].Width = 80;//BSE dgV_IncALib.Columns["Formula"].Width = 240;//化学式 dgV_IncALib.Columns["Element"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;//元素 dgV_IncALib.Columns["Xray"].Width = 0;//Xray dgV_IncALib.Columns["RowIndex"].Width = 0;//index dgV_IncALib.Columns["ReducedValue"].Width = 0;//相识比对值 //先设置一下头的高度,否则会太矮不好看 dgV_IncALib.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing; dgV_IncALib.ColumnHeadersHeight = 23; //设置数据 //克隆 查询出的数据结构 dt = dtSelDB.Clone(); foreach (KeyValuePair kv in STDDictionary) { byte[] xrayData = new byte[8000]; DataRow[] dr = dtSelDB.Select("STDId=" + kv.Key); if (dr != null) { if (dr.Length > 0) { if (dr[0]["SPEC"].GetType().ToString()!= "System.DBNull") { xrayData = (byte[])dr[0]["SPEC"]; } else { xrayData = new byte[2000]; } } } //添加至全局dt DataRow drSTD = dt.NewRow(); drSTD["StrName"] = kv.Value.StrName.ToString(); drSTD["StdId"] = kv.Key.ToString(); drSTD["Color"] = Convert.ToInt32(ParseRGB(colorHx16toRGB(kv.Value.Color))); drSTD["Hardness"] = kv.Value.Hardness.ToString(); drSTD["Density"] = kv.Value.Density.ToString(); drSTD["Electrical_conductivity"] = kv.Value.Electrical_conductivity.ToString(); drSTD["BSE"] = kv.Value.BSE.ToString(); drSTD["Formula"] = kv.Value.Formula.ToString(); drSTD["Element"] = kv.Value.Element.ToString(); drSTD["SPEC"] = xrayData; dt.Rows.Add(drSTD); } //设置数据 for (int i = 0; i < dt.Rows.Count; i++) { int add_rowindex = dgV_IncALib.Rows.Add(); dgV_IncALib.Rows[add_rowindex].Cells[0].Value = i.ToString(); dgV_IncALib.Rows[i].Cells[0].Value = add_rowindex; for (int k = 0; k < dt.Columns.Count; k++) { dgV_IncALib.Rows[i].Cells[k].Value = dt.Rows[i][k].ToString(); } } //设置颜色 for (int i = 0; i < dgV_IncALib.Rows.Count; i++) { //在该数据库中返回的颜色格式与正常的不同,需要在前面加#号 Color ls_c = colorValuetoRGB(dgV_IncALib[2, i].Value.ToString()); dgV_IncALib[0, i].Style.BackColor = ls_c; } } public void SortDataGridView_dgV_IncALib(DataTable dt) { dgV_IncALib.Rows.Clear(); dgV_IncALib.Columns.Clear(); //创建Grid的列 //名称 dgV_IncALib.Columns.Add("Name", "Name"); //编号 dgV_IncALib.Columns.Add("Code", "Code"); //代表色 dgV_IncALib.Columns.Add("Color", "Color"); //硬度 dgV_IncALib.Columns.Add("Hardness", "Hardness"); //密度 dgV_IncALib.Columns.Add("Density", "Density"); //导电性 dgV_IncALib.Columns.Add("Conductivity", "Conductivity"); //BSE dgV_IncALib.Columns.Add("BSEValue", "BSE"); //化学式 dgV_IncALib.Columns.Add("Formula", "Formula"); //元素 dgV_IncALib.Columns.Add("Element", "Element"); dgV_IncALib.Columns.Add("Xray", "Xray"); dgV_IncALib.Columns.Add("RowIndex", "RowIndex"); dgV_IncALib.Columns.Add("ReducedValue", "ReducedValue"); //添加完成列后,再对不需要显示的列进行隐藏 dgV_IncALib.Columns["Code"].Visible = false; dgV_IncALib.Columns["Color"].Visible = false; dgV_IncALib.Columns["Xray"].Visible = false; dgV_IncALib.Columns["RowIndex"].Visible = false; dgV_IncALib.Columns["ReducedValue"].Visible = false; //宽度 dgV_IncALib.Columns["Name"].Width = 140;//名称 dgV_IncALib.Columns["Code"].Width = 0;//编号 dgV_IncALib.Columns["Color"].Width = 0;//代表色 dgV_IncALib.Columns["Hardness"].Width = 80;//硬度 dgV_IncALib.Columns["Density"].Width = 80;//密度 dgV_IncALib.Columns["Conductivity"].Width = 60;//导电性 dgV_IncALib.Columns["BSEValue"].Width = 80;//BSE dgV_IncALib.Columns["Formula"].Width = 240;//化学式 dgV_IncALib.Columns["Element"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;//元素 dgV_IncALib.Columns["Xray"].Width = 0;//Xray dgV_IncALib.Columns["RowIndex"].Width = 0;//index dgV_IncALib.Columns["ReducedValue"].Width = 0;//相识比对值 //先设置一下头的高度,否则会太矮不好看 dgV_IncALib.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing; dgV_IncALib.ColumnHeadersHeight = 23; //设置数据 for (int i = 0; i < dt.Rows.Count; i++) { int add_rowindex = dgV_IncALib.Rows.Add(); dgV_IncALib.Rows[add_rowindex].Cells[0].Value = i.ToString(); dgV_IncALib.Rows[i].Cells[0].Value = add_rowindex; for (int k = 0; k < dt.Columns.Count; k++) { dgV_IncALib.Rows[i].Cells[k].Value = dt.Rows[i][k].ToString(); } } //设置颜色 for (int i = 0; i < dgV_IncALib.Rows.Count; i++) { //在该数据库中返回的颜色格式与正常的不同,需要在前面加#号 Color ls_c = colorValuetoRGB(dgV_IncALib[2, i].Value.ToString()); dgV_IncALib[0, i].Style.BackColor = ls_c; } } #region 自定义方法 /// /// [颜色:16进制转成RGB] /// /// 设置16进制颜色 [返回RGB] /// public System.Drawing.Color colorValuetoRGB(string strHxColor) { try { if (strHxColor.Length == 0) {//如果为空 return System.Drawing.Color.FromArgb(0, 0, 0);//设为黑色 } else { int colorValue = Convert.ToInt32(strHxColor); //转换颜色 return Color.FromArgb(colorValue % 256, (colorValue >> 8) % 256, (colorValue >> 16) % 256); } } catch (Exception) {//设为黑色 return System.Drawing.Color.FromArgb(0, 0, 0); } } /// /// 将颜色对象转换为uint /// /// /// public uint ParseRGB(Color color) { return (uint)(((uint)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R)); } #endregion #region 设置Grid样式 /// /// 设置夹杂物列表DataGridView样式 /// private void SetDataGridViewStyleIncLib() { //用户不能调整标题的高度 dgV_IncALib.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //用户不能调整 行高 dgV_IncALib.AllowUserToResizeRows = false; //改变行的高度; //Gview_gz.RowTemplate.Height = 20; //点击选择整行 dgV_IncALib.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //居中显示 //System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); //dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; //dgV_IncALib.DefaultCellStyle = dataGridViewCellStyle1; dgV_IncALib.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; //再次重覆禁用拖动表头高度,居然有效果了 dgV_IncALib.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; //设置grid可以复制 dgV_IncALib.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; //设置每列的宽度 //dgV_IncALib.Columns[1].Width = 40;//第一列序号的宽度设置一下吧,要不太丑 //设置序号列不排序 dgV_IncALib.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; for (int i = 0; i < dgV_IncALib.Columns.Count; i++) { dgV_IncALib.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; } //设置序号列不可以设置宽度 dgV_IncALib.Columns[0].Resizable = DataGridViewTriState.False; System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); dataGridViewCellStyle1.BackColor = System.Drawing.Color.LightCyan; dgV_IncALib.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; dgV_IncALib.BackgroundColor = System.Drawing.Color.White; dgV_IncALib.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; dgV_IncALib.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;//211, 223, 240 dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(211)))), ((int)(((byte)(223)))), ((int)(((byte)(240))))); dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); dataGridViewCellStyle2.ForeColor = System.Drawing.Color.Navy; dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; dgV_IncALib.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; dgV_IncALib.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; dgV_IncALib.EnableHeadersVisualStyles = false; dgV_IncALib.GridColor = System.Drawing.SystemColors.GradientInactiveCaption; dgV_IncALib.ReadOnly = true; dgV_IncALib.RowHeadersVisible = true; //建议改为true;为了以后显示序号。 dgV_IncALib.RowTemplate.Height = 23; dgV_IncALib.RowTemplate.ReadOnly = true; //居中 dgV_IncALib.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; dgV_IncALib.AllowUserToOrderColumns = false; } #endregion #endregion #region Xray比对 private void GetCompMineralFun(byte[] collectXrayData) { byte[] stdmineralclr = collectXrayData; List listOreTypeClr = new List(); foreach (DataRow item in dt.Rows) { if (item["SPEC"].GetType().ToString() != "System.DBNull") { listOreTypeClr.Add((byte[])item["SPEC"]); } else { listOreTypeClr.Add(new byte[2000]); } } //获取信息中的相识度 List returnValue = GetCompMineral(ref stdmineralclr, ref listOreTypeClr); //向DataTable中添加 for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i]["ReducedValue"] = returnValue[i]; } //重新排列 dt.DefaultView.Sort = "ReducedValue desc"; dt = dt.DefaultView.ToTable(); SortDataGridView_dgV_IncALib(dt); //设置选中DataGridView当前行 if (dgV_IncALib.Rows.Count > 0) { dgV_IncALib.Rows[0].Selected = true; xrayControl.Dr = dt.Rows[0]; //xrayControl.Dt = dt; xrayControl.Refresh(); } } // 在listOreTypeClr列表里找出和stdmineralclr相似的信息并返回 protected List GetCompMineral(ref byte[] stdmineralclr, ref List listOreTypeClr) { if (null == stdmineralclr || null == listOreTypeClr) { return null; } if (0 == listOreTypeClr.Count()) { return null; } int i = 0; List oretypeclr = new List(); List listOreTypeClr_cmp = new List(); // 计算余弦值 double dCosValue = 0; List lstIgnoreElementNames = new List(); for (i = 0; i < listOreTypeClr.Count; i++) { dCosValue = GetCosValue(0, ref lstIgnoreElementNames, stdmineralclr, listOreTypeClr[i]); dCosValue = 1000000 * dCosValue; oretypeclr.Add((int)dCosValue);// 将mineralid设置为余弦值 } return oretypeclr; } // 20190903:增加参数iStartChannel哪个位置开始比较, lstIgnoreChannel里面的通道不处理 // 20191128:变更lstIgnoreChannel参数为lstIgnoreElementNames protected double GetCosValue(int iStartChannel, ref List lstIgnoreElementNames, byte[] stdmineralclr1, byte[] stdmineralclr2) { int iXrayDataLen = stdmineralclr1.Length; List lstIgnoreChannel = new List(); if(stdmineralclr2==null) { return 0; } // 两者数据量不一致,返回0 if (iXrayDataLen != stdmineralclr2.Length) { return 0; } if (iStartChannel < 0 || iStartChannel >= iXrayDataLen) { return 1; } bool bignore = false; int j = 0; // 公式: (x1y1+x2y2+x3y3+...x2000y2000) / (sqrt(x1^2 + x2^2 + ...x2000^2) * sqrt(y1^2 + y2^2 + ...y2000^2)) double dotpro = 0; double d1 = 0; double d2 = 0; for (int i = iStartChannel; i < iXrayDataLen; i++) { bignore = false; for (j = 0; j < lstIgnoreChannel.Count(); j++) { if (lstIgnoreChannel[j] == i) { bignore = true; break; } } if (!bignore) { dotpro = dotpro + stdmineralclr1[i] * stdmineralclr2[i]; d1 = d1 + stdmineralclr1[i] * stdmineralclr1[i]; d2 = d2 + stdmineralclr2[i] * stdmineralclr2[i]; } } d1 = System.Math.Sqrt(d1); d2 = System.Math.Sqrt(d2); // return (0 == d1 || 0 == d2) ? 0 : dotpro / (d1 * d2); // 算法改进, 加上距离权重 if (0 == d1 || 0 == d2) { return 0; } double dresult = 0; dresult = (d1 < d2) ? d1 / d2 : d2 / d1; return 0.4 * dotpro / (d1 * d2) + 0.3 * dresult + 0.3 * GetStdEvp(iStartChannel, ref lstIgnoreChannel, stdmineralclr1, stdmineralclr2); } // 获取标准差 // 20190903:增加参数iStartChannel哪个位置开始比较, lstIgnoreChannel里面的通道不处理 double GetStdEvp(int iStartChannel, ref List lstIgnoreChannel, byte[] stdmineralclr1, byte[] stdmineralclr2) { int iXrayDataLen = stdmineralclr1.Length; // 两者数据量不一致,返回0 if (iXrayDataLen != stdmineralclr2.Length) { return 0; } if (iStartChannel < 0 || iStartChannel >= iXrayDataLen) { return 1; } bool bignore = false; int i = 0; int j = 0; int iSum1 = 0; int iSum2 = 0; double dAva1 = 0; double dAva2 = 0; double dSquare1 = 0; double dSquare2 = 0; List listdata1 = new List(); List listdata2 = new List(); // 求出能谱的平均值 for (i = iStartChannel; i < iXrayDataLen; i++) { bignore = false; for (j = 0; j < lstIgnoreChannel.Count(); j++) { if (lstIgnoreChannel[j] == i) { bignore = true; break; } } if (!bignore) { iSum1 = iSum1 + (int)stdmineralclr1[i]; listdata1.Add((int)stdmineralclr1[i]); iSum2 = iSum2 + (int)stdmineralclr2[i]; listdata2.Add((int)stdmineralclr2[i]); } } dAva1 = iSum1 / listdata1.Count(); dAva2 = iSum2 / listdata2.Count(); for (i = 0; i < listdata1.Count(); i++) { dSquare1 = dSquare1 + (listdata1[i] - dAva1) * (listdata1[i] - dAva1); dSquare2 = dSquare2 + (listdata2[i] - dAva1) * (listdata2[i] - dAva1); } dSquare1 = dSquare1 / listdata1.Count(); dSquare2 = dSquare2 / listdata2.Count(); dSquare1 = System.Math.Sqrt(dSquare1); dSquare2 = System.Math.Sqrt(dSquare2); dSquare1 = dSquare1 * (double)iSum2 / iSum1; // 归一化 return (dSquare1 < dSquare2) ? (dSquare1 / dSquare2) : (dSquare2 / dSquare1); } #endregion private void dgV_IncALib_CellClick(object sender, DataGridViewCellEventArgs e) { if (xrayByteData != null) { dgV_IncALib.ClearSelection(); //删除 if (e.RowIndex < 0) { return; } //将选择行的数据传递给Xray控件 xrayControl.Dr = dt.Rows[e.RowIndex]; //xrayControl.Dt = dt; xrayControl.Refresh(); //设置选中DataGridView当前行 dgV_IncALib.Rows[e.RowIndex].Selected = true; } } private void btnCollectXray_Click(object sender, EventArgs e) { try { string strTime = txtCollectTime.Text.Trim(); if (txtCollectTime.Equals("")) { showMessage(table["message1"].ToString()); txtCollectTime.Focus(); return; } if (!IsMatch(strTime, 1)) { showMessage(table["message2"].ToString()); txtCollectTime.Focus(); return; } if (Convert.ToInt32(strTime) < 100) { showMessage(table["message3"].ToString()); txtCollectTime.Focus(); return; } //获取Xray方法 // 电镜设置对象 xrayByteData = intToBytes(GetCollectXray(strTime), 0); DataRow dataRow = dt.NewRow(); dataRow["SPEC"] = xrayByteData; dataRow["Color"] = 0; xrayContrastControl.Dr = dataRow; xrayContrastControl.Dt = dt; xrayContrastControl.Refresh(); //比对 GetCompMineralFun(xrayByteData); //国际化 lan = new Language(this); //国际化后各表头居中显示 for (int i = 0; i < dgV_IncALib.Columns.Count; i++) { dgV_IncALib.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; } } catch (Exception ex) { throw ex; } } /// /// 获取采集当前的Xray信息 /// /// protected uint[] GetCollectXray(string strTime) { try { if (null == m_cfun) { m_cfun = COTSControlFunExport.GetControllerInstance(); } if (ConnectionSem(connectionEnumType.EDSOnlyPointXRay)) { if (EDSInit()) { int iSize = 2000; uint[] iXrayData = new uint[iSize]; //采集XRay数据 if (m_cfun.CollectSpectrum(uint.Parse(strTime), ref iXrayData)) { return iXrayData; } } } return null; } catch /*(Exception ex)*/ { return null; } finally { //EDS过程结束 //m_cfun.EDSFinishedInstance(); //关闭连接 DisConnectSem(connectionEnumType.EDSOnlyPointXRay); } } #region 连接与关闭设备 public bool ConnectionSem(connectionEnumType connectionType) { //获取连接电镜类型 string connTypeStr = GetConnectionType(connectionType); //连接电镜标识 bool bDisConnResult = false; //判断连接状态 if (!m_bConnectionState) { //连接电镜设置 bDisConnResult = m_cfun.ConncetSem(); } if (bDisConnResult) { m_bConnectionState = true; } else { m_bConnectionState = false; } return bDisConnResult; } public bool DisConnectSem(connectionEnumType disConnectType) { //获取关闭电镜类型 string connTypeStr = GetConnectionType(disConnectType); bool bDisConnResult = false; if (m_bConnectionState) { //bDisConnResult = m_cfun.DisConnectSem(); } if (bDisConnResult) { m_bConnectionState = false; } else { m_bConnectionState = true; } return bDisConnResult; } private string GetConnectionType(connectionEnumType connectionType) { string connString = string.Empty; switch (connectionType) { //设置单点采集文字内容 case connectionEnumType.EDSOnlyPointXRay: connString = "OnlyPointXRay"; break; //设置多点采集文字内容 case connectionEnumType.EDSMultiPointXRay: connString = "MultiPointXRay"; break; //设置面采集文字内容 case connectionEnumType.EDSAreaXRay: connString = "AreaXRay"; break; //设置图片 case connectionEnumType.ScanImage: connString = "Image"; break; default: break; } return connString; } /// /// EDS初始化 /// public bool EDSInit() { bool bResult = false; //线程调用 加载 bResult = m_cfun.EDSInit(); return bResult; } public enum connectionEnumType { EDSOnlyPointXRay = 0, EDSMultiPointXRay = 1, EDSAreaXRay = 2, ScanImage = 3 } #endregion #region int数组转byte数组 /// /// int数组转byte数组 /// /// 源int数组 /// 起始位置,一般为0 /// values protected byte[] intToBytes(uint[] src, int offset) { byte[] values = new byte[src.Length * 4]; for (int i = 0; i < src.Length; i++) { values[offset + 3] = (byte)((src[i] >> 24) & 0xFF); values[offset + 2] = (byte)((src[i] >> 16) & 0xFF); values[offset + 1] = (byte)((src[i] >> 8) & 0xFF); values[offset] = (byte)(src[i] & 0xFF); offset += 4; } return values; } protected int[] bytesToInt(byte[] src, int offset) { int[] values = new int[src.Length / 4]; for (int i = 0; i < values.Length; i++) { values[i] = BitConverter.ToInt32(src, offset); offset += 4; } return values; } #endregion /// /// 弹出提示 /// /// protected void showMessage(string strContent) { MessageBox.Show(strContent, table["message4"].ToString()); } #region 常用数据验证的封装,数字字符的验证 /// /// 常用数据验证的封装,数字字符的验证 /// /// 需要验证的数值【字符串,或者数字】 /// 类型为哪一个验证 /// 如果验证成功则返回True,否则返回false public bool IsMatch(string inputVal, int type) { switch (type) { case 0: return Regex.IsMatch(inputVal, @"^[1-9]d*$"); //匹配正整数 case 1: return Regex.IsMatch(inputVal, @"^-?\d+$"); //匹配整数 case 2: return Regex.IsMatch(inputVal, @"^[A-Za-z0-9]+$"); //匹配由数字和26个英文字母组成的字符串 case 3: return Regex.IsMatch(inputVal, @"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"); //匹配正浮点数 case 4: return Regex.IsMatch(inputVal, @"^[\u4e00-\u9fa5]{0,}$"); //匹配汉字 case 5: return Regex.IsMatch(inputVal, @"^[0-9]+(.[0-9]{1,3})?$"); //匹配1~3位小数的正实数 case 6: return Regex.IsMatch(inputVal, @"^[A-Za-z]+$"); //匹配英文字符 default: return true; } } #endregion } }