//时间：
//作者：
//功能：单元测试功能

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Configuration;

using System.IO;
using SmartSEMControl;
using FileManager;
using System.Xml;
using MeasureData;
using WebManager;
using Extender;

namespace HOZProject
{
    public partial class FormUnitControl : Form
    {
        #region 系统参数
        //全局只有一个fatorySEM
        static FactoryHardware factorySEM = FactoryHardware.Instance;
        ISEMControl iSEM = factorySEM.ISEM;
        //static FactoryHardware factorySEM = null;
        //ISEMControl iSEM = null;

        public XmlManager xmg = new XmlManager();

        
        private String path = Directory.GetCurrentDirectory();
        private int st_flag = 0;

        WebResult wr = new WebResult(ConfigurationManager.AppSettings["WebServerIP"].ToString(),
                       ConfigurationManager.AppSettings["WebServerPort"].ToString(),
                       ConfigurationManager.AppSettings["WebServerUrl"].ToString());

        String[] sT;
        String[] firms;
        Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        #endregion

        #region 构造函数
        public FormUnitControl()
        {
            InitializeComponent();

            Control.CheckForIllegalCrossThreadCalls = false;

            //if(iSEM.ConnectStatus())
            //{
            //    float ret = iSEM.GetFIBIMAGING();
            //    if(ret==0)
            //    {
            //        btnSEM.BackColor = Color.Lime;
            //    }
            //    else if(ret==1)
            //    {
            //        btnFIB.BackColor = Color.Lime;
            //        panelFIB.Visible = true;
            //    }
            //    else if(ret==2)
            //    {
            //        btnMILL.BackColor = Color.Lime;
            //    }
            //}
            ////Calling Notification for updated status
            //CZEMApi.Notify += new _EMApiEvents_NotifyEventHandler(CZEMApi_Notify);
            //CZEMApi.NotifyWithCurrentValue += new _EMApiEvents_NotifyWithCurrentValueEventHandler(CZEMApi_NotifyWithCurrentValue);
            //加载参数

        }
        #endregion
        
        #region 缩放Get
        private void btnenlargeGet_Click(object sender, EventArgs e)
        {

            float ret = iSEM.GetMagnification();
            if (float.IsNaN(ret))
            {
                txtenlargeSet.Text = "NaN";
                txtenlargeSet.Enabled = false;
                btnenlargeSet.Enabled = false;
            }
            else
            {
                txtenlargeSet.Text = ret.ToString();
                btnenlargeSet.Enabled = true;
            }
        }
        #endregion

        #region 缩放Set
        private void btnenlargeSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtenlargeSet.Text, out set))
            {
                iSEM.SetMagnification(set);
            }

        }
        #endregion

        #region 焦距Get
        private void btnWDGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetWorkingDistance();
            if (float.IsNaN(ret))
            {
                txtWDSet.Text = "NaN";
                txtWDSet.Enabled = false;
                btnWDSet.Enabled = false;
            }
            else
            {
                txtWDSet.Text = ret.ToString();
                btnWDSet.Enabled = true;
            }
        }
        #endregion

        #region 焦距Set
        private void btnWDSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtWDSet.Text, out set))
            {
                iSEM.SetWorkingDistance(set);
            }
        }
        #endregion

        #region 亮度Get
        private void btnBrightnessGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetBrightness();
            if (float.IsNaN(ret))
            {
                txtBrightnessSet.Text = "NaN";
                txtBrightnessSet.Enabled = false;
                btnBrightnessSet.Enabled = false;
            }
            else
            { 
                txtBrightnessSet.Text = ret.ToString();
                btnBrightnessSet.Enabled = true;
            }
        }
        #endregion

        #region 亮度Set
        private void btnBrightnessSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtBrightnessSet.Text, out set))
            {
                iSEM.SetBrightness(set);
            }
        }
        #endregion

        #region 对比度Get
        private void btnContrastGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetContrast();
            if (float.IsNaN(ret))
            {
                txtContrastSet.Text = "NaN";
                txtContrastSet.Enabled = false;
                btnContrastSet.Enabled = false;
            }
            else
            {
                txtContrastSet.Text = ret.ToString();
                btnContrastSet.Enabled = true;
            }
        }
        #endregion

        #region 对比度Set
        private void btnContrastSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtContrastSet.Text, out set))
            {
                iSEM.SetContrast(set);
            }
        }
        #endregion

        #region 消像散X Get
        private void btnAstigmatismXGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetAstigmatismX();
            if (float.IsNaN(ret))
            {
                txtAstigmatismXSet.Text = "NaN";
                txtAstigmatismXSet.Enabled = false;
                btnAstigmatismXSet.Enabled = false;
            }
            else
            {
                txtAstigmatismXSet.Text = ret.ToString();
                btnAstigmatismXSet.Enabled = true;
            }
        }
        #endregion

        #region 消像散X Set
        private void btnAstigmatismXSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtAstigmatismXSet.Text, out set))
            {
                iSEM.SetAstigmatismX(set);
            }
        }
        #endregion

        #region 消像散Y Get
        private void btnAstigmatismYGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetAstigmatismY();
            if (float.IsNaN(ret))
            {
                txtAstigmatismYSet.Text = "NaN";
                txtAstigmatismYSet.Enabled = false;
                btnAstigmatismYSet.Enabled = false;
            }
            else
            {
                txtAstigmatismYSet.Text = ret.ToString();
                btnAstigmatismYSet.Enabled = true;
            }
        }
        #endregion

        #region 消像散Y Set
        private void btnAstigmatismYSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtAstigmatismYSet.Text, out set))
            {
                iSEM.SetAstigmatismY(set);
            }
        }

        #endregion

        #region 角度补偿Get
        private void btnTiltAngleGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetTiltAngle();
            if (float.IsNaN(ret))
            {
                txtTiltAngleSet.Text = "NaN";
                txtTiltAngleSet.Enabled = false;
                btnTiltAngleSet.Enabled = false;
            }
            else
            {
                txtTiltAngleSet.Text = ret.ToString();
                btnTiltAngleSet.Enabled = true;
            }
        }
        #endregion

        #region 角度补偿Set
        private void btnTiltAngleSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtTiltAngleSet.Text, out set))
            {
                //iSEM.SetTiltAngleOn();
                iSEM.SetTiltAngle(set);
            }
        }
        #endregion

        #region 抓取图像
        private void btnGrabImage_Click(object sender, EventArgs e)
        {
            
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Title = "图像保存位置：";
            sfd.FileName = "test.tif";
            sfd.Filter = "TIF文件|*.tif";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                string fn = sfd.FileName;
                iSEM.GrabImage(fn, 0, 0, 1024, 768, 0);
            }
        }
        #endregion

        #region ScanRotate Get
        private void btnScanRotationGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetScanRotation();
            if (float.IsNaN(ret))
            {
                txtScanRotationSet.Text = "NaN";
                txtScanRotationSet.Enabled = false;
                btnScanRotationSet.Enabled = false;
            }
            else
            {
                txtScanRotationSet.Text = ret.ToString();
                btnScanRotationSet.Enabled = true;
            }
        }
        #endregion

        #region ScanRotate Set
        private void btnScanRotationSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtScanRotationSet.Text, out set))
            {
                //iSEM.SetScanRotationOn();
                iSEM.SetScanRotation(set);
            }
        }
        #endregion

        #region PixelSize Get
        private void btnPixelSizeGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetPixelSize();
            if (float.IsNaN(ret))
            {
                lblPixelSizeGet.Text = "NaN";
            }
            else
            {
                lblPixelSizeGet.Text = ret.ToString();
            }
        }
        #endregion

        #region 电子束
        private void btnTiltCorrXGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetBeamShiftX();
            if (float.IsNaN(ret))
            {
                txtTiltCorrX.Text = "NaN";
                txtTiltCorrX.Enabled = false;
                btnTiltCorrXSet.Enabled = false;
            }
            else
            {
                txtTiltCorrX.Text = ret.ToString();
                btnTiltCorrXSet.Enabled = true;
            }
        }

        private void btnTiltCorrXSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtTiltCorrX.Text, out set))
            {
                iSEM.SetBeamShiftX(set);
            }
        }

        private void btnTiltCorrYGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetBeamShiftY();
            if (float.IsNaN(ret))
            {
                txtTiltCorrY.Text = "NaN";
                txtTiltCorrY.Enabled = false;
                btnTiltCorrYSet.Enabled = false;
            }
            else
            {
                txtTiltCorrY.Text = ret.ToString();
                btnTiltCorrYSet.Enabled = true;
            }
        }

        private void btnTiltCorrYSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtTiltCorrY.Text, out set))
            {
                iSEM.SetBeamShiftY(set);
            }
        }
        #endregion

        #region 开启电压
        private void btnOpenVoltage_Click(object sender, EventArgs e)
        {
            iSEM.CmdOpenVoltage();
        }
        #endregion

        #region 关闭电压
        private void btnCloseVoltage_Click(object sender, EventArgs e)
        {
            iSEM.CmdCloseVoltage();
        }
        #endregion

        #region 电子束校正
        private void btnTiltCorr_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetTiltCorrection();
            if (float.IsNaN(ret))
            {
                btnTiltCorr.BackColor = Color.Red;
            }
            else
            {
                if(ret==0)
                {
                    btnTiltCorr.BackColor = Color.Blue;
                    iSEM.SetTiltCorrectionOn();
                    btnTiltCorr.Text = "电子束状态：On";
                }
                else
                {
                    btnTiltCorr.BackColor = Color.Lime;
                    iSEM.SetTiltCorrectionOff();
                    btnTiltCorr.Text = "电子束状态：Off";
                }
            }
        }
        #endregion  

        #region 样品台位置获取
        private void btnStageGetX_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetStageAtX();
            if (float.IsNaN(ret))
            {
                lblStageX.Text = "NaN";
            }
            else
            {
                lblStageX.Text = ret.ToString();
            }
        }

        private void btnStageGetY_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetStageAtY();
            if (float.IsNaN(ret))
            {
                lblStageY.Text = "NaN";
            }
            else
            {
                lblStageY.Text = ret.ToString();
            }
        }

        private void btnStageGetZ_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetStageAtZ();
            if (float.IsNaN(ret))
            {
                lblStageZ.Text = "NaN";
            }
            else
            {
                lblStageZ.Text = ret.ToString();
            }
        }

        private void btnStageGetT_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetStageAtT();
            if (float.IsNaN(ret))
            {
                lblStageT.Text = "NaN";
            }
            else
            {
                lblStageT.Text = ret.ToString();
            }
        }

        private void btnStageGetR_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetStageAtR();
            if (float.IsNaN(ret))
            {
                lblStageR.Text = "NaN";
            }
            else
            {
                lblStageR.Text = ret.ToString();
            }
        }

        private void btnStageGetM_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetStageAtM();
            if (float.IsNaN(ret))
            {
                lblStageM.Text = "NaN";
            }
            else
            {
                lblStageM.Text = ret.ToString();
            }
        }
        #endregion

        #region 样品台位置设置
        private void btnStageSetX_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtStageX.Text, out set))
            {
                iSEM.SetStageGotoX(set);
            }
        }

        private void btnStageSetY_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtStageY.Text, out set))
            {
                iSEM.SetStageGotoY(set);
            }
        }

        private void btnStageSetZ_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtStageZ.Text, out set))
            {
                iSEM.SetStageGotoZ(set);
            }
        }

        private void btnStageSetT_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtStageT.Text, out set))
            {
                iSEM.SetStageGotoT(set);
            }
        }

        private void btnStageSetR_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtStageR.Text, out set))
            {
                iSEM.SetStageGotoR(set);
            }
        }

        private void btnStageSetM_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtStageM.Text, out set))
            {
                iSEM.SetStageGotoM(set);
            }
        }
        #endregion

        #region 获取样品台位置数组
        private void btnGetStagePosition_Click(object sender, EventArgs e)
        {
            float[] pt = iSEM.GetStagePosition();
            if (!float.IsNaN(pt[0]))
            {
                lblStageX.Text = pt[0].ToString();
            }
            if (!float.IsNaN(pt[1]))
            {
                lblStageY.Text = pt[1].ToString();
            }
            if (!float.IsNaN(pt[2]))
            {
                lblStageZ.Text = pt[2].ToString();
            }
            if (!float.IsNaN(pt[3]))
            {
                lblStageT.Text = pt[3].ToString();
            }
            if (!float.IsNaN(pt[4]))
            {
                lblStageR.Text = pt[4].ToString();
            }
            if (!float.IsNaN(pt[5]))
            {
                lblStageM.Text = pt[5].ToString();
            }
        }
        #endregion

        #region 窗体关闭
        private void FormUnitControl_FormClosing(object sender, FormClosingEventArgs e)
        {
            if(iSEM!=null)
            {
                iSEM.Dispose();
            }
        }
        #endregion

        #region 宏文件
        private void btnCMDMCF_Click(object sender, EventArgs e)
        {
            iSEM.CMDMCFFilename("OPTON");
        }
        #endregion

        #region 读取Xml文件
        private void btnReadXml_Click(object sender, EventArgs e)
        {
            MeasureFile mf = new MeasureFile();

            XmlDocument doc = new XmlDocument();
            doc.Load("test_opton.msf");//载入xml文件
            XmlNode root = doc.SelectSingleNode("XMLData");

            mf.Serialize(false, doc, root);

            doc.Save("test_opton.msf");
        }
        #endregion

        #region 写入Xml文件
        private void btnWriteXml_Click(object sender, EventArgs e)
        {
            MeasureFile mf = new MeasureFile();

            mf.FileName = path + "\\test_opton.msf";
            mf.FilePath = path;

            CutHole ch = new CutHole();
            //ch.OPT = Operation.Image;
            ch.START = System.DateTime.Now;
            ch.END = System.DateTime.Now.AddHours(2);
            ch.STATE = State.Success;
            ch.SWITCH = true;

            SemPosition sp = new SemPosition();
            sp.X = 11;
            sp.Y = 22;
            sp.Z = 33;
            sp.T = 44;
            sp.R = 55;
            sp.M = 66;

            ch.Position = sp;

            mf.ListCutHole.Add(ch);

            ch = new CutHole();
            //ch.OPT = Operation.Image;
            ch.START = System.DateTime.Now;
            ch.END = System.DateTime.Now.AddHours(2);
            ch.STATE = State.Success;
            ch.SWITCH = true;

            sp = new SemPosition();
            sp.X = 12;
            sp.Y = 34;
            sp.Z = 56;
            sp.T = 78;
            sp.R = 90;
            sp.M = 55;

            ch.Position = sp;

            mf.ListCutHole.Add(ch);

            MeasureParam md = new MeasureParam();
            md.SampleName = "aaaaaa";
            md.PT = true;
            md.PTTemp = "bbbbb";
            md.FIBTemp = "cccc";
            md.FocusMode = 2;

            mf.MParam = md;

            mf.New();
            //XmlDocument doc = new XmlDocument();
            //doc.Load(mf.FilePath+"\\" + mf.FileName);//载入xml文件

            //XmlNode root = doc.SelectSingleNode("XMLData");

            //mf.Serialize(true, doc, root);

            //doc.Save("test.aaa");

        }
        #endregion

        #region SEM模式
        private void btnSEM_Click(object sender, EventArgs e)
        {
            if(iSEM.CmdFIBModeSEM())
            {
                btnFIB.BackColor = SystemColors.Control;
                btnSEM.BackColor = Color.Lime;
                btnMILL.BackColor = SystemColors.Control;
                panelFIB.Visible = false;
            } 
        }
        #endregion

        #region FIB模式
        private void btnFIB_Click(object sender, EventArgs e)
        {
            if(iSEM.CmdFIBModeFIB())
            {
                btnFIB.BackColor = Color.Lime;
                btnSEM.BackColor = SystemColors.Control;
                btnMILL.BackColor = SystemColors.Control;
                panelFIB.Visible = true;
            }
        }
        #endregion

        #region MILL模式
        private void btnMILL_Click(object sender, EventArgs e)
        {
            if(iSEM.CmdFIBModeMILL())
            {
                btnFIB.BackColor = SystemColors.Control;
                btnSEM.BackColor = SystemColors.Control;
                btnMILL.BackColor = Color.Lime;
            }
        }
        #endregion

        #region 自动对焦1
        private void btnAutoFocus1_Click(object sender, EventArgs e)
        {
            //抓图1
            iSEM.GrabImage(path + "\\test1.tif", 0, 0, 1024, 768, 0);
            if (File.Exists(path + "\\test1.tif"))
            {
                FileStream fileStream = new FileStream(path + "\\test1.tif", FileMode.Open, FileAccess.Read);
                pictureBox1.Image = Image.FromStream(fileStream);
                fileStream.Close();
                fileStream.Dispose();
            }
            Thread.Sleep(1000);
            iSEM.CmdAutoFocusCoarse();
            btnAutoFocus1.BackColor = Color.Red;
            st_flag = 1;
            Thread.Sleep(1000);
            Thread thread = new Thread(AutoFunction);
            thread.Start();
        }
        #endregion

        #region 自动函数监测线程
        private void AutoFunction()
        {
            float ret = 111;
            Boolean state = false;
            while(true)
            {
                Thread.Sleep(1000);
                ret = iSEM.GetAutoFunction();
                if(ret==0)
                {
                    if (st_flag == 1 && state == true)
                    {
                        btnAutoFocus1.BackColor = Color.Lime;
                        Thread.Sleep(1000);
                        //抓图1
                        iSEM.GrabImage(path + "\\test2.tif", 0, 0, 1024, 768, 0);
                        if (File.Exists(path + "\\test2.tif"))
                        {
                            FileStream fileStream = new FileStream(path + "\\test2.tif", FileMode.Open, FileAccess.Read);
                            pictureBox2.Image = Image.FromStream(fileStream);
                            fileStream.Close();
                            fileStream.Dispose();
                        }
                        break;
                    }
                    else if(st_flag==2 && state)
                    {
                        btnAutoFocus2.BackColor = Color.Lime;
                        Thread.Sleep(1000);
                        //抓图1
                        iSEM.GrabImage(path + "\\test2.tif", 0, 0, 1024, 768, 0);
                        if (File.Exists(path + "\\test2.tif"))
                        {
                            FileStream fileStream = new FileStream(path + "\\test2.tif", FileMode.Open, FileAccess.Read);
                            pictureBox2.Image = Image.FromStream(fileStream);
                            fileStream.Close();
                            fileStream.Dispose();
                        }
                        break;
                    }
                    else if (st_flag == 3)
                    {
                        btnAutoBrightness.BackColor = Color.Lime;
                        Thread.Sleep(1000);
                        //抓图1
                        iSEM.GrabImage(path + "\\test2.tif", 0, 0, 1024, 768, 0);
                        if (File.Exists(path + "\\test2.tif"))
                        {
                            FileStream fileStream = new FileStream(path + "\\test2.tif", FileMode.Open, FileAccess.Read);
                            pictureBox2.Image = Image.FromStream(fileStream);
                            fileStream.Close();
                            fileStream.Dispose();
                        }
                        break;
                    }
                    else if (st_flag == 4)
                    {
                        btnAutoContrast.BackColor = Color.Lime;
                        Thread.Sleep(1000);
                        //抓图1
                        iSEM.GrabImage(path + "\\test2.tif", 0, 0, 1024, 768, 0);
                        if (File.Exists(path + "\\test2.tif"))
                        {
                            FileStream fileStream = new FileStream(path + "\\test2.tif", FileMode.Open, FileAccess.Read);
                            pictureBox2.Image = Image.FromStream(fileStream);
                            fileStream.Close();
                            fileStream.Dispose();
                        }
                        break;
                    }
                    else if (st_flag == 5)
                    {
                        btnAutoBrightness.BackColor = Color.Lime;
                        btnAutoContrast.BackColor = Color.Lime;
                        btnAutoBC.BackColor = Color.Lime;
                        Thread.Sleep(1000);
                        //抓图1
                        iSEM.GrabImage(path + "\\test2.tif", 0, 0, 1024, 768, 0);
                        if (File.Exists(path + "\\test2.tif"))
                        {
                            FileStream fileStream = new FileStream(path + "\\test2.tif", FileMode.Open, FileAccess.Read);
                            pictureBox2.Image = Image.FromStream(fileStream);
                            fileStream.Close();
                            fileStream.Dispose();
                        }
                        break;
                    }
                    else if (st_flag == 6 && state)
                    {
                        btnAutoBCCancle.BackColor = Color.Lime;
                        Thread.Sleep(1000);
                        //抓图1
                        iSEM.GrabImage(path + "\\test2.tif", 0, 0, 1024, 768, 0);
                        if (File.Exists(path + "\\test2.tif"))
                        {
                            FileStream fileStream = new FileStream(path + "\\test2.tif", FileMode.Open, FileAccess.Read);
                            pictureBox2.Image = Image.FromStream(fileStream);
                            fileStream.Close();
                            fileStream.Dispose();
                        }
                        break;
                    }
                    else if (st_flag == 7 && state)
                    {
                        btnAutoStig.BackColor = Color.Lime;
                        Thread.Sleep(1000);
                        //抓图1
                        iSEM.GrabImage(path + "\\test2.tif", 0, 0, 1024, 768, 0);
                        if (File.Exists(path + "\\test2.tif"))
                        {
                            FileStream fileStream = new FileStream(path + "\\test2.tif", FileMode.Open, FileAccess.Read);
                            pictureBox2.Image = Image.FromStream(fileStream);
                            fileStream.Close();
                            fileStream.Dispose();
                        }
                        break;
                    }

                    ////抓图1
                    //iSEM.GrabImage(path + "\\test2.tif", 0, 0, 1024, 768, 0);
                    //if (File.Exists(path + "\\test2.tif"))
                    //{
                    //    FileStream fileStream = new FileStream(path + "\\test2.tif", FileMode.Open, FileAccess.Read);
                    //    pictureBox2.Image = Image.FromStream(fileStream);
                    //    fileStream.Close();
                    //    fileStream.Dispose();
                    //}

                    
                }
                else if(ret>0 && ret<12)
                {
                    state = true;
                }
            }
        }
        #endregion

        #region 自动对焦2
        private void btnAutoFocus2_Click(object sender, EventArgs e)
        {
            //抓图1
            iSEM.GrabImage(path + "\\test1.tif", 0, 0, 1024, 768, 0);
            if (File.Exists(path + "\\test1.tif"))
            {
                FileStream fileStream = new FileStream(path + "\\test1.tif", FileMode.Open, FileAccess.Read);
                pictureBox1.Image = Image.FromStream(fileStream);
                fileStream.Close();
                fileStream.Dispose();
            }
            Thread.Sleep(1000);
            iSEM.CmdAutoFocusFine();
            btnAutoFocus2.BackColor = Color.Red;
            st_flag = 2;
            Thread.Sleep(1000);
            Thread thread = new Thread(AutoFunction);
            thread.Start();
        }
        #endregion

        #region 自动亮度、对比度
        private void btnAutoBrightness_Click(object sender, EventArgs e)
        {
            //抓图1
            iSEM.GrabImage(path + "\\test1.tif", 0, 0, 1024, 768, 0);
            if (File.Exists(path + "\\test1.tif"))
            {
                FileStream fileStream = new FileStream(path + "\\test1.tif", FileMode.Open, FileAccess.Read);
                pictureBox1.Image = Image.FromStream(fileStream);
                fileStream.Close();
                fileStream.Dispose();
            }
            Thread.Sleep(1000);
            iSEM.SetAutoVideoBrightness();
            btnAutoBrightness.BackColor = Color.Red;
            st_flag = 3;
            Thread.Sleep(1000);
            Thread thread = new Thread(AutoFunction);
            thread.Start();
        }

        private void btnAutoContrast_Click(object sender, EventArgs e)
        {
            //抓图1
            iSEM.GrabImage(path + "\\test1.tif", 0, 0, 1024, 768, 0);
            if (File.Exists(path + "\\test1.tif"))
            {
                FileStream fileStream = new FileStream(path + "\\test1.tif", FileMode.Open, FileAccess.Read);
                pictureBox1.Image = Image.FromStream(fileStream);
                fileStream.Close();
                fileStream.Dispose();
            }
            Thread.Sleep(1000);
            iSEM.SetAutoVideoContrast();
            btnAutoContrast.BackColor = Color.Red;
            st_flag = 4;
            Thread.Sleep(1000);
            Thread thread = new Thread(AutoFunction);
            thread.Start();
        }

        private void btnAutoBC_Click(object sender, EventArgs e)
        {
            //抓图1
            iSEM.GrabImage(path + "\\test1.tif", 0, 0, 1024, 768, 0);
            if (File.Exists(path + "\\test1.tif"))
            {
                FileStream fileStream = new FileStream(path + "\\test1.tif", FileMode.Open, FileAccess.Read);
                pictureBox1.Image = Image.FromStream(fileStream);
                fileStream.Close();
                fileStream.Dispose();
            }
            Thread.Sleep(1000);
            iSEM.SetAutoVideoBrightnessAndContrast();
            btnAutoBrightness.BackColor = Color.Red;
            btnAutoContrast.BackColor = Color.Red;
            btnAutoBC.BackColor = Color.Red;
            st_flag = 5;
            Thread.Sleep(1000);
            Thread thread = new Thread(AutoFunction);
            thread.Start();
        }

        private void btnAutoBCCancle_Click(object sender, EventArgs e)
        {
            iSEM.SetAutoVideoOff();
            btnAutoBCCancle.BackColor = Color.Red;
            st_flag = 6;
            Thread.Sleep(1000);
            Thread thread = new Thread(AutoFunction);
            thread.Start();
        }
        #endregion

        #region 自动消像散
        private void btnAutoStig_Click(object sender, EventArgs e)
        {
            //抓图1
            iSEM.GrabImage(path + "\\test1.tif", 0, 0, 1024, 768, 0);
            if (File.Exists(path + "\\test1.tif"))
            {
                FileStream fileStream = new FileStream(path + "\\test1.tif", FileMode.Open, FileAccess.Read);
                pictureBox1.Image = Image.FromStream(fileStream);
                fileStream.Close();
                fileStream.Dispose();
            }
            Thread.Sleep(1000);
            iSEM.CmdAutoStig();
            btnAutoStig.BackColor = Color.Red;
            st_flag = 7;
            Thread.Sleep(1000);
            Thread thread = new Thread(AutoFunction);
            thread.Start();
        }
        #endregion

        #region FIB缩放Get
        private void btnFIBMagGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetFIBMagnification();
            if (float.IsNaN(ret))
            {
                txtFIBMag.Text = "NaN";
                txtFIBMag.Enabled = false;
                btnFIBMagSet.Enabled = false;
            }
            else
            {
                txtFIBMag.Text = ret.ToString();
                btnFIBMagSet.Enabled = true;
            }
        }
        #endregion

        #region FIB缩放Set
        private void btnFIBMagSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtFIBMag.Text, out set))
            {
                iSEM.SetFIBMagnification(set);
            }
        }
        #endregion

        #region FIB焦距Get
        private void btnFIBWDGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetFIBObjectivePotential();
            if (float.IsNaN(ret))
            {
                txtFIBWD.Text = "NaN";
                txtFIBWD.Enabled = false;
                btnFIBWDSet.Enabled = false;
            }
            else
            {
                txtFIBWD.Text = ret.ToString();
                btnFIBWDSet.Enabled = true;
            }
        }
        #endregion

        #region FIB焦距Set
        private void btnFIBWDSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtFIBWD.Text, out set))
            {
                iSEM.SetFIBObjectivePotential(set);
            }
        }
        #endregion

        #region FIB电子束移动
        private void btnFIBBeamShiftXGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetFIBBeamShiftX();
            if (float.IsNaN(ret))
            {
                txtFIBBeamShiftX.Text = "NaN";
                txtFIBBeamShiftX.Enabled = false;
                btnFIBBeamShiftXSet.Enabled = false;
            }
            else
            {
                txtFIBBeamShiftX.Text = ret.ToString();
                btnFIBBeamShiftXSet.Enabled = true;
            }
        }

        private void btnFIBBeamShiftXSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtFIBBeamShiftX.Text, out set))
            {
                iSEM.SetFIBBeamShiftX(set);
            }
        }

        private void btnFIBBeamShiftYGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetFIBBeamShiftY();
            if (float.IsNaN(ret))
            {
                txtFIBBeamShiftY.Text = "NaN";
                txtFIBBeamShiftY.Enabled = false;
                btnFIBBeamShiftYSet.Enabled = false;
            }
            else
            {
                txtFIBBeamShiftY.Text = ret.ToString();
                btnFIBBeamShiftYSet.Enabled = true;
            }
        }

        private void btnFIBBeamShiftYSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtFIBBeamShiftY.Text, out set))
            {
                iSEM.SetFIBBeamShiftY(set);
            }
        }
        #endregion

        #region 执行宏文件
        private void btnMCF_Click(object sender, EventArgs e)
        {
            OpenFileDialog sfd = new OpenFileDialog();
            sfd.Title = "选择宏文件：";
            sfd.InitialDirectory = @"C:\ProgramData\Carl Zeiss\SmartSEM\User\Default";
            sfd.Filter = "MLF文件|*.MLF";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                //string fn = Path.GetFileNameWithoutExtension(sfd.FileName).ToUpper();
                iSEM.SetRemoteMLFPath(@"\\192.168.1.197\wq\");
                iSEM.CMDMCFFilename(sfd.FileName);
            }
        }
        #endregion

        #region FIB消像散
        private void btnFIBAstigmatismXGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetFIBAstigmatismX();
            if (float.IsNaN(ret))
            {
                txtFIBAstigmatismX.Text = "NaN";
                txtFIBAstigmatismX.Enabled = false;
                btnFIBAstigmatismXSet.Enabled = false;
            }
            else
            {
                txtFIBAstigmatismX.Text = ret.ToString();
                btnFIBAstigmatismXSet.Enabled = true;
            }
        }

        private void btnFIBAstigmatismXSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtFIBAstigmatismX.Text, out set))
            {
                iSEM.SetFIBAstigmatismX(set);
            }
        }

        private void btnFIBAstigmatismYGet_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetFIBAstigmatismY();
            if (float.IsNaN(ret))
            {
                txtFIBAstigmatismY.Text = "NaN";
                txtFIBAstigmatismY.Enabled = false;
                btnFIBAstigmatismYSet.Enabled = false;
            }
            else
            {
                txtFIBAstigmatismY.Text = ret.ToString();
                btnFIBAstigmatismYSet.Enabled = true;
            }
        }

        private void btnFIBAstigmatismYSet_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtFIBAstigmatismY.Text, out set))
            {
                iSEM.SetFIBAstigmatismY(set);
            }
        }
        #endregion

        #region 移动样品台XY
        private void btnMoveXY_Click(object sender, EventArgs e)
        {
            float setx = 0;
            float sety = 0;
            if (!float.TryParse(txtStageX.Text, out setx))
            {
                return;
            }
            if(!float.TryParse(txtStageY.Text,out sety))
            {
                return;
            }
            btnMoveXY.BackColor = Color.Red;
            iSEM.MoveStageXY(setx, sety);
            Thread.Sleep(500);
            Thread th = new Thread(MoveStagexy);
            th.Start();
        }

        private void MoveStagexy()
        {
            float ret = 111;
            while(true)
            {
                ret = iSEM.GetStageIs();
                if(ret==0)
                {
                    btnMoveXY.BackColor = Color.Lime;
                    break;
                }
            }
        }

        #endregion

        #region 获取分辨率
        private void btnImageStoreGet_Click(object sender, EventArgs e)
        {
            int[] ret = iSEM.GetImageStore();
            lblImageStore.Text = ret[0].ToString() + "*" + ret[1].ToString();
        }
        #endregion

        #region 设置分辨率
        private void btnImageStoreSet_Click(object sender, EventArgs e)
        {
            if (cmbImageStore.SelectedIndex > -1 && cmbImageStore.SelectedIndex < 12)
            {
                iSEM.SetImageStore(cmbImageStore.SelectedIndex);
            }
        }
        #endregion

        #region 样品台急停
        private void btnAbort_Click(object sender, EventArgs e)
        {
            iSEM.CmdStageAbort();
        }
        #endregion

        private void btnLive_Click(object sender, EventArgs e)
        {
            iSEM.ImageLive();
        }

        private void btnFrozen_Click(object sender, EventArgs e)
        {
            iSEM.ImageFrozen();
        }

        private void btnExeEly_Click(object sender, EventArgs e)
        {
            OpenFileDialog sfd = new OpenFileDialog();
            sfd.Title = "选择ELY文件：";
            //sfd.InitialDirectory = @"C:\ProgramData\Carl Zeiss\SmartSEM\User\Default";
            sfd.Filter = "ELY文件|*.ELY";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                iSEM.SetRemoteELYPath(@"\\192.168.1.197\wq\");
                iSEM.CmdFIBLoadELY(sfd.FileName);
            } 
        }

        private void btnExeEly2_Click(object sender, EventArgs e)
        {
            iSEM.CmdFIBEXPOSUREELY();
        }

        private void btnFIBStatus_Click(object sender, EventArgs e)
        {
            btnFIBStatus.Text = iSEM.GetFIBMode().ToString();
        }


        private void btnPost1_Click(object sender, EventArgs e)
        {
            float degree = 0;
            int direction = 0;
            int state = 0;
            wr.Img_OffsetAngle_Direction(txtaddr.Text,Convert.ToInt32(txtTypee.Text),txtfirm.Text, out degree, out direction, out state);
            lbldegree1.Text = degree.ToString("0.0");
            lbldirection1.Text = direction.ToString();
            lblstate1.Text = state.ToString();
        }

        private void btnPost2_Click(object sender, EventArgs e)
        {
            float offsetx1 = 0;
            float offsety1 = 0;
            float offsetx2 = 0;
            float offsety2 = 0;
            int state = 0;
            wr.Img_Cut_Position(txtaddr.Text, Convert.ToInt32(txtTypee.Text), txtfirm.Text, out offsetx1, out offsety1, out offsetx2, out offsety2, out state);
            lbllocationx1.Text = offsetx1.ToString("0.0");
            lbllocationy1.Text = offsety1.ToString("0.0");
            lbllocationx2.Text = offsetx2.ToString("0.0");
            lbllocationy2.Text = offsety2.ToString("0.0");
            lblstate2.Text = state.ToString();
        }

        private void btnPost3_Click(object sender, EventArgs e)
        {
            int state = 0;
            wr.Img_Cut_Success(txtaddr.Text, txtaddr2.Text, out state);
            lblstate3.Text = state.ToString();
        }

        private void btnPost4_Click(object sender, EventArgs e)
        {
            float offsetx = 0;
            float offsety = 0;
            int state = 0;
            wr.Img_Trapezoid_Top_Center_Position(txtaddr.Text, out offsetx, out offsety, out state);
            lbltopcx.Text = offsetx.ToString("0.0");
            lbltopcy.Text = offsety.ToString("0.0");
            lblstate4.Text = state.ToString();
        }

        private void btnPost5_Click(object sender, EventArgs e)
        {
            List<string> filenames = new List<string>();
            filenames.Add("1111111");
            filenames.Add("2222222");
            filenames.Add("3333333");
            lblfocuspath.Text = wr.Img_Auto_Focus(filenames);
        }

        private void btnPost6_Click(object sender, EventArgs e)
        {
            List<string> filenames = new List<string>();
            filenames.Add("1111111");
            filenames.Add("2222222");
            filenames.Add("3333333");
            lblstigpath.Text = wr.Img_Auto_Focus(filenames);
        }

        private void btnPost7_Click(object sender, EventArgs e)
        {
            float degree = 0;
            int direction = 0;
            int state = 0;
            //wr.Img_Center_Position_OffsetAngle_Direction(txtaddr.Text, out degree, out direction, out state);
            //lblcenterx.Text = offsetx.ToString("0.0");
            //lblcentery.Text = offsety.ToString("0.0");
            lbldegree2.Text = degree.ToString();
            lbldirection2.Text = direction.ToString();
            lblstate7.Text = state.ToString();
        }

        private void btnPost9_Click(object sender, EventArgs e)
        {
            int state = 0;
            wr.Img_Measure_Size(txtaddr.Text, txtaddr2.Text,0.000001f,0.000002f,"D:\\", Convert.ToInt32(txtTypee.Text), txtfirm.Text,out state);
            lblstate9.Text = state.ToString();
        }

        private void btnScanRotationSetLock_Click(object sender, EventArgs e)
        {
            iSEM.SetScanRotationOff();
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            iSEM.SetTiltAngleOff();
        }

        private void btnTiltAngleSetOn_Click(object sender, EventArgs e)
        {
            iSEM.SetTiltAngleOn();
        }

        private void btnScanRotationSetOn_Click(object sender, EventArgs e)
        {
            iSEM.SetScanRotationOn();
        }

        private void btnExeEly3_Click(object sender, EventArgs e)
        {
            iSEM.CmdFIBSTARTELY();
        }

        private void btnCreateConfig_Click(object sender, EventArgs e)
        {
            MeasureParam cfm = new MeasureParam();
            cfm.Is_Photograph = chkWIsP.Checked;
            cfm.PT = chkWPT.Checked;
            cfm.PTTemp = txtWPTF.Text;
            cfm.FIBTemp = txtWFIBF.Text;
            cfm.Stretch_Magnification = Convert.ToSingle(cbbWLZ.Text);
            cfm.Location_Magnification = Convert.ToSingle(cbbWQGF.Text);
            cfm.Location_Voltage = Convert.ToSingle(cbbWQGD.Text);
            cfm.Photograph_Magnification = Convert.ToSingle(cbbWPZF.Text);
            cfm.Photograph_Voltage = Convert.ToSingle(cbbWPZD.Text);
            if(cbbWXZ.SelectedIndex==0)
            {
                cfm.Correction_Angle = 36;
            }
            else
            {
                cfm.Correction_Angle = 54;
            }
            
            cfm.SampleName = cbbWYP.Text;
            cfm.Firm = cbbWCS.Text;

            ConfigFile cf = new ConfigFile(cfm);
            
            cf.Save(@"E:\test.cfg");

            List<String> _sT = sT.ToList();
            if(_sT.IndexOf(cbbWYP.Text)<0)
            {
                _sT.Add(cbbWYP.Text);
                sT = _sT.ToArray();
                string wsT = "";
                for(int i=0;i<sT.Length;i++)
                {
                    wsT += sT[i] + ",";
                }
                wsT = wsT.Substring(0, wsT.Length - 1);
                config.AppSettings.Settings["Sample_Type"].Value = wsT;
            }
            List<String> _firms = firms.ToList();
            if (_firms.IndexOf(cbbWCS.Text) < 0)
            {
                _firms.Add(cbbWCS.Text);
                firms = _firms.ToArray();
                string wFirms = "";
                for (int i = 0; i < firms.Length; i++)
                {
                    wFirms += firms[i] + ",";
                }
                wFirms = wFirms.Substring(0, wFirms.Length - 1);
                config.AppSettings.Settings["Firm"].Value = wFirms;
            }
            config.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");//重新加载新的配置文件   
            reloadconfig();
        }

        private void btnReadConfig_Click(object sender, EventArgs e)
        {
            MeasureParam cfm = new MeasureParam();
            ConfigFile cf = new ConfigFile(cfm);
            cf.Read(@"E:\test.cfg");
            chkRIsP.Checked = cfm.Is_Photograph;
            chkRPT.Checked = cfm.PT;
            txtRPTF.Text = cfm.PTTemp;
            txtRFIBF.Text = cfm.FIBTemp;
            txtRLZ.Text = cfm.Stretch_Magnification.ToString();
            txtRQGF.Text = cfm.Location_Magnification.ToString();
            txtRQGD.Text = cfm.Location_Voltage.ToString();
            txtRPZF.Text = cfm.Photograph_Magnification.ToString();
            txtRPZD.Text = cfm.Photograph_Voltage.ToString();
            txtRXZ.Text = cfm.Correction_Angle.ToString();
            txtRYP.Text = cfm.SampleName;
            txtRCS.Text = cfm.Firm;

        }

        private void FormUnitControl_Load(object sender, EventArgs e)
        {
            reloadconfig();
            cbbWYP.SelectedIndex = 0;
            cbbWCS.SelectedIndex = 0;
            cbbWXZ.SelectedIndex = 0;

            this.chart1.Series[0].Points.Clear();
            
        }

        private void reloadconfig()
        {
            String sample_Type = ConfigurationManager.AppSettings["Sample_Type"];
            String firm = ConfigurationManager.AppSettings["Firm"];
            sT = sample_Type.Split(',');
            cbbWYP.Items.Clear();
            for (int i = 0; i < sT.Length; i++)
            {
                cbbWYP.Items.Add(sT[i]);
            }
            
            firms = firm.Split(',');
            cbbWCS.Items.Clear();
            for (int i = 0; i < firms.Length; i++)
            {
                cbbWCS.Items.Add(firms[i]);
            }
            
        }


        
        private void btnPsFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog sfd = new OpenFileDialog();
            sfd.Title = "选择位置文件：";
            //sfd.InitialDirectory = @"C:\ProgramData\Carl Zeiss\SmartSEM\User\Default";
            sfd.Filter = "TXT文件|*.TXT";
            if (sfd.ShowDialog() == DialogResult.OK)
            {
                //Console.WriteLine(sfd.FileName);

                StreamReader sr = new StreamReader(sfd.FileName, Encoding.Default);
                String line = "";
                sr.ReadLine();
                sr.ReadLine();
                sr.ReadLine();
                sr.ReadLine();
                line = sr.ReadLine();
                sr.Close();
                sr.Dispose();
                String[] lines = line.Split(',');
                double x = Convert.ToDouble(lines[1]);
                double y = Convert.ToDouble(lines[2]);
                chart1.Series[0].Points.AddXY(x, y);
                chart1.Series[0].Points[0].Label = x.ToString("0.000") + "," + y.ToString("0.000");
            }
        }

        private void btnrect_Click(object sender, EventArgs e)
        {
            this.chart1.Series[0].Points.Clear();
            List<double> xpoints = new List<double>();
            List<double> ypoints = new List<double>();
            //排列数
            int rag = Convert.ToInt32(txtarray.Text);
            //间距
            float dist = Convert.ToSingle(txtdistance.Text);
            //中心点x,y轴坐标
            float cx = Convert.ToSingle(txtx.Text);
            float cy = Convert.ToSingle(txty.Text);
            //所有点集合
            List<PointF> ptfs = new List<PointF>();
            ptfs = AnalysisPosition(cx, cy, Convert.ToSingle(txtsample1x.Text),
                Convert.ToSingle(txtsample1y.Text), dist, rag);

            for(int i=0;i<ptfs.Count;i++)
            {
                chart1.Series[0].Points.AddXY(ptfs[i].X, ptfs[i].Y);
                chart1.Series[0].Points[chart1.Series[0].Points.Count - 1].Label = ptfs[i].X.ToString("0.000") + "," + ptfs[i].Y.ToString("0.000");
            }
            ////求样品1的水平角度
            //double angle = 0;

            ////xpoints.Add(Math.Pow(Math.Pow(Convert.ToDouble(txtx.Text), 2) + Math.Pow(Convert.ToDouble(txty.Text), 2), 0.5));
            ////ypoints.Add(Math.Pow(Math.Pow(Convert.ToDouble(txtx.Text), 2) + Math.Pow(Convert.ToDouble(txty.Text), 2), 0.5));
            //xpoints.Add(Convert.ToDouble(txtsample1x.Text));
            //ypoints.Add(Convert.ToDouble(txtsample1y.Text));

            ////计算第一个点与X轴的交角度数
            //angle = Math.Atan2(ypoints[0] - cy, cx - xpoints[0]) * 180 / Math.PI;
            //lblPs1.Text = angle.ToString("0.0");

            ////这里是求与第一个点横向排列的其他点的移动角度
            ////就是按45度向左向右移动的度
            //angle = 45 - angle;
            //angle = angle * Math.PI / 180;

            //txtsample1x.Text = xpoints[0].ToString("0.000");
            //txtsample1y.Text = ypoints[0].ToString("0.000");

            //chart1.Series[0].Points.AddXY(xpoints[0], ypoints[0]);
            //chart1.Series[0].Points[chart1.Series[0].Points.Count - 1].Label = xpoints[0].ToString("0.000") + "," + ypoints[0].ToString("0.000");

            //double tx = 0;
            //double ty = 0;
            //for (int j = 0; j < rag; j++)
            //{
            //    //计算每行第一个点的坐标
            //    if(j>0)
            //    {
            //        tx = dist * j * Math.Sin(angle);
            //        ty = dist * j * Math.Cos(angle);
            //        xpoints.Add(tx + xpoints[0]);
            //        ypoints.Add(ypoints[0] - ty);
            //        chart1.Series[0].Points.AddXY(xpoints[xpoints.Count-1], ypoints[ypoints.Count-1]);
            //        chart1.Series[0].Points[chart1.Series[0].Points.Count - 1].Label = xpoints[xpoints.Count - 1].ToString("0.000") + "," + ypoints[ypoints.Count - 1].ToString("0.000");
            //    }
            //    //计算每行其他点的坐标
            //    for (int i = 1; i < rag; i++)
            //    {
            //        tx = dist * i * Math.Cos(angle);
            //        ty = dist * i * Math.Sin(angle);
            //        xpoints.Add(tx + xpoints[j * rag]);
            //        ypoints.Add(ty + ypoints[j * rag]);
            //        chart1.Series[0].Points.AddXY(xpoints[xpoints.Count - 1], ypoints[ypoints.Count - 1]);
            //        chart1.Series[0].Points[chart1.Series[0].Points.Count - 1].Label = xpoints[xpoints.Count - 1].ToString("0.000") + "," + ypoints[ypoints.Count - 1].ToString("0.000");
            //    }
            //}
        }

        /// <summary>
        /// 分析点坐标
        /// </summary>
        /// <param name="centerX">中心点X轴坐标</param>
        /// <param name="centerY">中心点Y轴坐标</param>
        /// <param name="firstX">第一个点X轴坐标</param>
        /// <param name="firstY">第一个点Y轴坐标</param>
        /// <param name="distance">点与点的距离</param>
        /// <param name="rag">行、列数</param>
        /// <param name="ptsx">计算生成所有X轴坐标</param>
        /// <param name="ptsy">计算生成所有Y轴坐标</param>
        public List<PointF> AnalysisPosition(float centerX, float centerY, float firstX, float firstY, float distance, int rag)
        {
            //求样品1的水平角度
            double angle = 0;

            //清空所有点信息
            List<float> ptsx = new List<float>();
            List<float> ptsy = new List<float>();
            //将第一个点加入到点信息中
            ptsx.Add(firstX);
            ptsy.Add(firstY);

            //计算第一个点与X轴的交角度数
            angle = Math.Atan2(ptsy[0] - centerY, centerX - ptsx[0]) * 180 / Math.PI;

            //这里是求与第一个点横向排列的其他点的移动角度
            //就是按45度向左向右移动的度
            angle = 45 - angle;
            angle = angle * Math.PI / 180;

            float tx = 0;
            float ty = 0;
            for (int j = 0; j < rag; j++)
            {
                //计算每行第一个点的坐标
                if (j > 0)
                {
                    tx = (float)(distance * j * Math.Sin(angle));
                    ty = (float)(distance * j * Math.Cos(angle));
                    ptsx.Add(tx + ptsx[0]);
                    ptsy.Add(ptsy[0] - ty);
                }
                //计算每行其他点的坐标
                for (int i = 1; i < rag; i++)
                {
                    tx = (float)(distance * i * Math.Cos(angle));
                    ty = (float)(distance * i * Math.Sin(angle));
                    ptsx.Add(tx + ptsx[j * rag]);
                    ptsy.Add(ty + ptsy[j * rag]);
                }
            }
            List<PointF> pts = new List<PointF>();
            for (int i = 0; i < ptsx.Count; i++)
            {
                //增加的点
                PointF pf = new PointF();
                pf.X = ptsx[i];
                pf.Y = ptsy[i];
                pts.Add(pf);
            }
            return pts;
        }



        private void btn30_Click(object sender, EventArgs e)
        {
            txtsample1x.Text = "21.7";
            txtsample1y.Text = "90";
            btnrect_Click(null, null);
        }

        private void btn45_Click(object sender, EventArgs e)
        {
            txtsample1x.Text = "29.65";
            txtsample1y.Text = "100.35";
            btnrect_Click(null, null);
        }

        private void btn60_Click(object sender, EventArgs e)
        {
            txtsample1x.Text = "40";
            txtsample1y.Text = "108.3";
            btnrect_Click(null, null);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            float ret = iSEM.GetSEMVoltage();
            if (float.IsNaN(ret))
            {
                txtVoltage.Text = "NaN";
                txtVoltage.Enabled = false;
                button2.Enabled = false;
            }
            else
            {
                txtVoltage.Text = ret.ToString();
                button2.Enabled = true;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            float set = 0;
            if (float.TryParse(txtVoltage.Text, out set))
            {
                iSEM.SetSEMVoltage(set);
            }
        }

        /// 图像拉直算法
        /// </summary>
        /// <param name="Slope">倾斜角度</param>
        /// <param name="x0">圆心坐标x</param>
        /// <param name="y0">圆心坐标y</param>
        /// <param name="x1">倾斜情况下帧图的坐标x</param>
        /// <param name="y1">倾斜情况下帧图的坐标y</param>
        /// <param name="Hx">复位到原位置需要移动的x值(返回值)</param>
        /// <param name="Hy">复位到原位置需要移动的y值(返回值)</param>
        /// <returns></returns>
        public bool Straightening(float Slope, float x0, float y0, float x1, float y1, ref float Hx, ref float Hy)
        {
            try
            {
                float xr = x1 - x0;//倾斜图到中心的距离差x
                float yr = y1 - y0;//倾斜图到中心的距离差y
                float R =(float)Math.Sqrt(xr * xr + yr * yr);//圆心到倾斜图的长度
                //double D = 2 * R * Math.Sin(ScanRotation / 2);//倾斜图与矫正图底边的长度
                float k = (float)(Math.Atan(yr / xr) / Math.PI * 180);//x1,y1的直角三角形圆心角度
                float k_S = k - Slope;//通过夹角差求x2,y2
                //int y2 = (int)Math.Round(Math.Sin(Math.PI / (180 / k_S)) * R);
                //int x2 = (int)Math.Round(Math.Cos(Math.PI / (180 / k_S)) * R);

                float y2 = (float)(Math.Sin(Math.PI / (180 / k_S)) * R);
                float x2 = (float)(Math.Cos(Math.PI / (180 / k_S)) * R);

                if (Slope > 0 || Slope < 0)
                {
                    Hx = x0 + x2;
                    Hy = y0 + y2;
                }
                else
                {
                    Hx = 0;
                    Hy = 0;
                }

                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }


        private void button3_Click(object sender, EventArgs e)
        {
            float x1 = 0, y1 = 0;
            Straightening(45, 48.156f, 49.968f, (float)31.679, (float)58.870, ref x1, ref y1);
            button3.Text = x1.ToString("0.00") + "\n" + y1.ToString("0.00");
        }

        private void btntest_Click(object sender, EventArgs e)
        {
            //FileStream fs = new FileStream(txtaddr.Text, FileMode.Create, FileAccess.Write);
            //StreamWriter sw = new StreamWriter(fs);
            //sw.WriteLine("aaaa");
            //sw.Close();
            //sw.Dispose();
            //fs.Close();
            //fs.Dispose();
            File.Copy(txtaddr2.Text, txtaddr.Text, true);
        }

        private void button4_Click(object sender, EventArgs e)
        {

            iSEM.SetWorkingDistance(0.006f);
            Thread.Sleep(8000);
            iSEM.GrabImage("D:\\HOZ1.0\\6.tif", 0, 0, 1024, 768, 0);
            Thread.Sleep(3000);
            iSEM.SetWorkingDistance(0.007f);
            Thread.Sleep(8000);
            iSEM.GrabImage("D:\\HOZ1.0\\7.tif", 0, 0, 1024, 768, 0);
            Thread.Sleep(3000);
            iSEM.SetWorkingDistance(0.0073f);
            Thread.Sleep(8000);
            iSEM.GrabImage("D:\\HOZ1.0\\73.tif", 0, 0, 1024, 768, 0);
            Thread.Sleep(3000);
        }

        //移动到像素位置
        bool MoveToPix(float sx,float sy,float xc, float yc,float ps,out float nx,out float ny)
        {
  
            int width = 1024/2;
            int height = 768/2;

            float deltX = (xc - (float)width) * ps;
            float deltY = (yc - (float)height) * ps;

            float xpCur = sx;
            float ypCur = sy;

            float xpNew = xpCur - deltX;
            float ypNew = ypCur - deltY;

            nx = xpNew;
            ny = ypNew;
            //if (deltX > 10)//使用移动样品台实现
            //{
            //    if (!iSEM.SetStageGotoX(xpNew))
            //    {
            //        return false;
            //    }

            //    //判断是否移动完成
            //    while (true)
            //    {
            //        Thread.Sleep(5000);
            //        if (iSEM.GetStageIs() == 0)
            //        {
            //            break;
            //        }
            //    }
            //    //arg.Message = "移动到新x" + xpNew.ToString() + "位置失败";
            //    //arg.State = true;
            //    //SendMsg("1-7");
            //}
            //else//使用移动光束实现
            //{
            //    float beamX = deltX * (float)0.66;
            //    if (!iSEM.SetBeamShiftX(beamX))
            //    {
            //        return false;
            //    }
            //}

            //if (deltY > 10)//使用移动样品台实现
            //{
            //    if (!iSEM.SetStageGotoY(ypNew))
            //    {
            //        return false;
            //    }

            //    //判断是否移动完成
            //    while (true)
            //    {
            //        Thread.Sleep(5000);
            //        if (iSEM.GetStageIs() == 0)
            //        {
            //            break;
            //        }
            //    }
            //}
            //else//使用移动光束实现
            //{
            //    float beamY = deltY * (float)0.671;
            //    if (!iSEM.SetBeamShiftY(beamY))
            //    {
            //        return false;
            //    }
            //}

            return true;
        }

        private void btnimgv_Click(object sender, EventArgs e)
        {
            float sx = 0, sy = 0;
            float x1 = 0, y1 = 0;
            float nx = 0, ny = 0;
            float ps = 0;
            sx = Convert.ToSingle(txtstagenx.Text);
            sy = Convert.ToSingle(txtstageny.Text);
            x1 = Convert.ToSingle(txtimgx.Text);
            y1 = Convert.ToSingle(txtimgy.Text);
            ps = Convert.ToSingle(txtps.Text);
            MoveToPix(sx,sy,x1, y1, ps,out nx,out ny);

            txtstagevx.Text = nx.ToString("0.000000");
            txtstagevy.Text = ny.ToString("0.000000");

        }

        private void btnPost8_Click(object sender, EventArgs e)
        {
            System.Drawing.Point pt1, pt2;
            float mag1 = 0, mag2 = 0;
            int state = 0;
            //wr.Img_Two_Region_Position(txtaddr.Text, Convert.ToInt32(txtTypee.Text), txtfirm.Text, out pt1, out mag1, out pt2, out mag2, out state);
            //if(state==1)
            //{
            //    lblcenter1.Text = pt1.X.ToString() + "," + pt1.Y.ToString();
            //    lblcenter2.Text = pt2.X.ToString() + "," + pt2.Y.ToString();
            //    lblMag1.Text = mag1.ToString();
            //    lblMag2.Text = mag2.ToString();
            //    lblstate8.Text = state.ToString();
            //}
            //else
            //{
            //    lblstate8.Text = "0";
            //    lblcenter1.Text = "";
            //    lblcenter2.Text = "";
            //    lblMag1.Text = "";
            //    lblMag2.Text = "";
            //}
        }

        List<List<Segment>> listFeature = new List<List<Segment>>();
        private void btnEDS_Click(object sender, EventArgs e)
        {
            List<System.Drawing.Point> listPoints = new List<System.Drawing.Point>();
            int state = 0;
            //wr.EDS_Param("aaaaa", out listPoints, out listFeature, out state);
            lblEDS.Text = state.ToString();
            if (state == 1)
            {
                listbPoints.Items.Clear();
                foreach (Point pt in listPoints)
                {
                    listbPoints.Items.Add(pt.X.ToString() + "," + pt.Y.ToString());
                }
                listbAreas.Items.Clear();
                listbArea.Items.Clear();
                int i = 1;
                foreach (List<Segment> ls in listFeature)
                {
                    listbAreas.Items.Add("第" + i.ToString() + "个面");
                    i++;
                }
                if (listbAreas.Items.Count > 0)
                {
                    listbAreas.SelectedIndex = 0;
                    //List<Segment> listSegment = new List<Segment>();
                    //listSegment = listFeature[0];
                    //foreach (Segment sm in listSegment)
                    //{
                    //    listbArea.Items.Add(sm.X.ToString() + "," + sm.Y.ToString() + "," + sm.Length.ToString());
                    //}
                }
            }
        }

        private void listbAreas_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                listbArea.Items.Clear();
                List<Segment> listSegment = new List<Segment>();
                listSegment = listFeature[listbAreas.SelectedIndex];
                foreach (Segment sm in listSegment)
                {
                    listbArea.Items.Add(sm.X.ToString() + "," + sm.Y.ToString() + "," + sm.Length.ToString());
                }
            }
            catch { }
        }
    }
}
