Newer
Older
laserPTZ_CS / insertForm / CtrlRealTime.cs
wangxitong on 11 Sep 132 KB first commit
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Drawing.Drawing2D;
using laserPTZ.insertForm;
using System.Runtime.InteropServices;
using System.IO;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System.Threading;
using laserPTZ.AI;
using System.Diagnostics;


namespace laserPTZ
{
    public partial class CtrlRealTime : UserControl
    {
        [DllImport("User32.dll")]
        public extern static System.IntPtr GetDC(System.IntPtr hWnd);
        [DllImport("User32.dll")]
        static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern bool InvalidateRect(IntPtr hWnd, IntPtr lpRect, bool bErase);
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hRegion, uint flags);

        public string monitorId = "";
        string monitorName = "";
        public int m_lRealHandle = -1;
        public static int rt_lRealHandle = -1;
        public static int rt_lBackHandle = -1;
        public int m_lUserID = -1;
        public string ip = "";
        public string port = "";
        public string devType = "";
        CHCNetSDK.NET_DVR_CRUISE_POINT[] points;
        public static CtrlRealTime ctrlRealTime;
        int speed = 4;
        public bool presetAdding = false;
        public static System.Threading.Timer timer1 = null;

        string rtspUrl;
        public static bool left = false;
        public static bool up = false;
        public static bool right = false;
        public static bool down = false;
        public MTransparentFrom _tranForm = new MTransparentFrom();
        public static int index;
        public CtrlRealTime(string _trspUrl, int activeIndex)
        {
            try
            {
                InitializeComponent();
                ctrlRealTime = this;
                rtspUrl = _trspUrl;
                index = activeIndex;
                switch (CtrlHome.pictureBoxIndex)
                {
                    case 1:
                        {
                            m_lRealHandle = CtrlHome.m_lRealHandle1;
                            m_lUserID = CtrlHome.m_lUserID1;
                            break;
                        }
                    case 2:
                        {
                            m_lRealHandle = CtrlHome.m_lRealHandle2;
                            m_lUserID = CtrlHome.m_lUserID2;
                            break;
                        }
                    case 3:
                        {
                            m_lRealHandle = CtrlHome.m_lRealHandle3;
                            m_lUserID = CtrlHome.m_lUserID3;
                            break;
                        }
                    case 4:
                        {
                            m_lRealHandle = CtrlHome.m_lRealHandle4;
                            m_lUserID = CtrlHome.m_lUserID4;
                            break;
                        }
                    default: break;
                }
                halfDashboardUc1.MaxValue = 99999;
                halfDashboardUc1.MinValue = 0;
                chart1.Series["Series1"].XValueMember = "logTime";
                chart1.Series["Series1"].YValueMembers = "concentration";
                chart1.Series["Series1"].MarkerStyle = MarkerStyle.Circle;//线条上的数据点标志类型
                chart1.Series["Series1"].MarkerSize = 3;  //标志大小
                speed = 4;
                track_speed.Value = 4;
                ip = CtrlHome.moniterArr[activeIndex]["deviceIp"].ToString();
                port = CtrlHome.moniterArr[activeIndex]["devicePort"].ToString();
                monitorId = CtrlHome.moniterArr[activeIndex]["monitorPointId"].ToString();
                monitorName = CtrlHome.moniterArr[activeIndex]["monitorPointName"].ToString();
                labelDevName.Text = CtrlHome.moniterArr[activeIndex]["monitorPointName"].ToString();
                devType = CtrlHome.moniterArr[activeIndex]["type"].ToString();

                // 全局
                txt_therod.Text = "";
                txt_allAngle.Text = "";
                txt_allSpeed.Text = "";
                txt_allStop.Text = "";
               
                int width = FormMain.formMain.panel_insert.Width;
                int height = FormMain.formMain.panel_insert.Height;
                this.Width = width;
                this.Height = height;
                panel_chart.Size = new Size(panel_chart.Width, (int)(0.3 * height));
                panel_direction.Size = new Size(panel_chart.Width, (int)(0.335 * height));
                panel_alarm.Size = new Size(panel_chart.Width, (int)(0.335 * height));
               
                panel_direction.Location = new Point(19, (int)(0.303 * height) + 7);
                panel_alarm.Location = new Point(19, (int)(0.640 * height) + 7);
                panel_video.Location = new Point(560, 7);

                panel_ptz.Width = panel_video.Width - panel4.Width - 20;
                panel_manControl.Width = (int)(panel_ptz.Width * 0.92);
                panel_manControl.Location = new Point((int)(0.03 * panel_ptz.Width), 0);

                //panel_manControl.Width = panel_video.Width;
                //panel_therod.Width = panel_manControl.Width;
                //panel_therod.Location = new Point( (int)(panel_therod.Location.X * 1.2), panel_therod.Location.Y);

                radio_ptz.Checked = true;
                therod_checked = false;

                checkVersion();

                initDataGridView();
                initListAllPointView();
            }
            catch (Exception e) {}
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    Thread.Sleep(200);
                    this.Invoke(new EventHandler(delegate
                    {
                        preview();
                        getLineList();
                        getDataGridViewData();
                    }));
                }
                catch (Exception e){ }
                finally
                {
                    Point p = new Point(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width - pictureBox1.Width / 2 - 80, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height / 2 - 135); // 0,0 是左上角
                    _tranForm.Location = p;
                    _tranForm.Size = this.Size;
                    _tranForm.Owner = this.ParentForm;
                    _tranForm.Dock = DockStyle.Fill;
                    _tranForm.Show();
                    _tranForm.BringToFront();
                }
            })).Start();
        }
        public void checkVersion()
        {
            bool isShow;
            if(devType ==  "0") //奥瑞德
            {
                isShow = false;
            }
            else 
            {
                isShow = true;
            }
            label12.Visible = isShow;
            label14.Visible = isShow;
            label6.Visible = isShow;
            panel14.Visible = isShow;
            panel15.Visible = isShow;
            panel8.Visible = isShow;
            txt_speed.Visible = isShow;
            txt_presetStop.Visible = isShow;
            txt_presetThreshold.Visible = isShow;

            label8.Visible = isShow;
            label10.Visible = isShow;
            label15.Visible = isShow;
            panel2.Visible = isShow;
            panel3.Visible = isShow;
            panel10.Visible = isShow;
            label16.Visible = isShow;
            txt_allSpeed.Visible = isShow;
            txt_allStop.Visible = isShow;
            label12.Visible = isShow;
            txt_allAngle.Visible = isShow;
        }
        public void initDev(int activeIndex)
        {
            try
            {
                index = activeIndex;
                switch (CtrlHome.pictureBoxIndex)
                {
                    case 1:
                        {
                            m_lRealHandle = CtrlHome.m_lRealHandle1;
                            m_lUserID = CtrlHome.m_lUserID1;
                            break;
                        }
                    case 2:
                        {
                            m_lRealHandle = CtrlHome.m_lRealHandle2;
                            m_lUserID = CtrlHome.m_lUserID2;
                            break;
                        }
                    case 3:
                        {
                            m_lRealHandle = CtrlHome.m_lRealHandle3;
                            m_lUserID = CtrlHome.m_lUserID3;
                            break;
                        }
                    case 4:
                        {
                            m_lRealHandle = CtrlHome.m_lRealHandle4;
                            m_lUserID = CtrlHome.m_lUserID4;
                            break;
                        }
                    default: break;
                }
                speed = 4;
                track_speed.Value = 4;
                ip = CtrlHome.moniterArr[activeIndex]["deviceIp"].ToString();
                port = CtrlHome.moniterArr[activeIndex]["devicePort"].ToString();
                monitorId = CtrlHome.moniterArr[activeIndex]["monitorPointId"].ToString();
                monitorName = CtrlHome.moniterArr[activeIndex]["monitorPointName"].ToString();
                labelDevName.Text = CtrlHome.moniterArr[activeIndex]["monitorPointName"].ToString();
                devType = CtrlHome.moniterArr[activeIndex]["type"].ToString();
                txt_therod.Text = CtrlHome.moniterArr[activeIndex]["high"].ToString().Substring(0, 4);
            }
            catch (Exception e) { }
            finally
            {
                btn_exeAngle.Enabled = true;
                btn_cruiseStart.Enabled = true;
                btn_toPreset.Enabled = true;
                panel_up.Enabled = true;
                panel_left.Enabled = true;
                panel_right.Enabled = true;
                panel_down.Enabled = true;
                panel_manControl.Enabled = true;
                radio_ptz.Checked = true;
                panel1.BackgroundImage = Properties.Resources.bakground;
                txt_line.Text = "";
                txt_preset.Text = "";
                txt_directionAngle.Text = "";
                txt_pitchAngle.Text = "";
                txt_directionAngle.SetPlaceholder();
                txt_pitchAngle.SetPlaceholder();

                txt_speed.Text = "30";
                txt_presetStop.Text = "3";
                txt_presetThreshold.Text = "5000";
                txt_allSpeed.Text = "";
                txt_allStop.Text = "";
                txt_allAngle.Text = "";
                tog_clean.Checked = false;
                tog_switch.Checked = false;
                list_allPoint.DataSource = null;
                selectLineValue = "";
                selectPresetValue = "";
                LineArr = null;
                PresetArr = null;

                checkVersion();

                new Thread(new ThreadStart(() =>
                {
                    try
                    {
                        this.Invoke(new EventHandler(delegate
                        {
                            preview();
                            getLineList();
                            getDataGridViewData();
                        }));
                    }
                    catch (Exception e) { }
                    finally
                    {
                        Point p = new Point(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width - pictureBox1.Width/2 - 80, System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height / 2 - 135); // 0,0 是左上角
                        _tranForm.Location = p;
                        _tranForm.Size = this.Size;
                        _tranForm.Owner = this.ParentForm;
                        _tranForm.Dock = DockStyle.Fill;
                        _tranForm.Show();
                        _tranForm.BringToFront();
                    }
                })).Start();
            }
        }

        public void initChart()
        {
            chart1.Series["Series1"].Points.Clear();
            Series series = chart1.Series["Series1"];
            chart1.DataSource = null;
            chart1.Series["Series1"].XValueMember = "logTime";
            chart1.Series["Series1"].YValueMembers = "concentration";

            chart1.Series["Series1"].MarkerStyle = MarkerStyle.Circle;//线条上的数据点标志类型
            chart1.Series["Series1"].MarkerSize = 3;  //标志大小
            if (FormMain.gasDictionary.Keys.Contains(ip))
            {
                FormMain.formMain.changeRealTimeChart(FormMain.gasDictionary[ip]);
            }

            chart1.Invalidate();
        }

        private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            bool handle;
            if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.Equals(DBNull.Value)) handle = true;
            else
            {
                handle = false;
                e.Cancel = handle;
            }
        }

        private void List_alllPoint_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            bool handle;
            if (list_allPoint.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.Equals(DBNull.Value)) handle = true;
            else
            {
                handle = false;
                e.Cancel = handle;
            }
        }

        private void AimAt(object sender, MouseEventArgs e)
        {
            //59.8
            //765, 443
            double width = pictureBox1.Width;
            double height = pictureBox1.Height;
            //double angleD = (double)((e.X-382.5) / 382.5) * 29.9;
            //double angleP = (double)((e.Y-221.5) / 221.5) * (29.9 * 443 / 765);

            double angleD = (double)((e.X - (width/2)) / (width/2)) * 29.9;
            double angleP = (double)((e.Y - (height/2)) / (height/2)) * (29.9 * height / width);

            if (devType != "1") { angleP *= -1; }
            double horizontalAngle = Convert.ToDouble(label_angleD.Text) + angleD;
            double verticalAngle = Convert.ToDouble(label_angleP.Text) + angleP;
            if (horizontalAngle < 0 || horizontalAngle > 360) return;
            if (verticalAngle < -90 || verticalAngle > 90) return;
            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/toPosition" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&horizontalAngle=" + horizontalAngle.ToString() + "&verticalAngle=" + verticalAngle.ToString();
            string result = Http.http(conStr, "GET", null);
            if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False"){}
        }

        // 获取甲烷浓度
        private void getValue()
        {
            int re = -1;
            try
            {
                if (ConfigHelper.GetAppConfig("controlType") == "1")
                {
                    uint pUser = 0;
                    CHCNetSDK.NET_DVR_SERIALSTART_V40 lpSerialStart = new CHCNetSDK.NET_DVR_SERIALSTART_V40();
                    lpSerialStart.dwSerialType = 2;
                    lpSerialStart.bySerialNum = 1;
                    lpSerialStart.byRes = new byte[0];
                    unsafe
                    {
                        CHCNetSDK.SERIALDATACALLBACK serialDataCallBack = new CHCNetSDK.SERIALDATACALLBACK(cbSerialDataCallBack);

                        //建立通道
                        re = CHCNetSDK.NET_DVR_SerialStart(m_lUserID, 2, serialDataCallBack, pUser);
                        if (re == -1)
                        {
                            uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                            //MessageBox.Show("与云台建立透明通道失败:" + iLastErr);
                            return;
                        }
                    }


                    string msg = "FF 01 00 90 01 00";
                    byte[] buf = strToHexByte(msg);
                    //byte[] buf = { 0xff, 0x01, 0x00, 0x4b, 0x03, 0xe8, 0x37 };
                    unsafe
                    {
                        //发送指令
                        fixed (byte* p = &buf[0])
                        {
                            bool re2 = CHCNetSDK.NET_DVR_SerialSend(re, 1, p, (uint)buf.Length);
                            if (!re2)
                            {
                                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                                MessageBox.Show("甲烷浓度错误: " + iLastErr);
                                return;
                            }
                        }
                    }
                }
                else
                {
                    //换成webScoket形式
                }
            }
            catch (Exception ex)
            { }
            finally
            {
                if (re != -1)
                {
                }
            }
        }

        // 获取实时角度
        private void getAngle()
        {
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                int re = -1;
                try
                {
                    CHCNetSDK.SERIALDATACALLBACK serialDataCallBack = new CHCNetSDK.SERIALDATACALLBACK(cbSerialDataCallBack);
                    uint pUser = 0;
                    CHCNetSDK.NET_DVR_SERIALSTART_V40 lpSerialStart = new CHCNetSDK.NET_DVR_SERIALSTART_V40();
                    lpSerialStart.dwSerialType = 2;
                    lpSerialStart.bySerialNum = 1;
                    lpSerialStart.byRes = new byte[0];

                    //建立通道
                    re = CHCNetSDK.NET_DVR_SerialStart(m_lUserID, 2, serialDataCallBack, pUser);
                    if (re == -1)
                    {
                        uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                        //MessageBox.Show("与云台建立透明通道失败:" + iLastErr);
                        return;
                    }

                    //查询水平角度                
                    byte[] buf1 = { 0xFF, 0x01, 0x00, 0x51, 0x00, 0x00, 0x52 };
                    unsafe
                    {
                        //发送指令
                        fixed (byte* p = &buf1[0])
                        {

                            bool re2 = CHCNetSDK.NET_DVR_SerialSend(re, 1, p, (uint)buf1.Length);

                            if (!re2)
                            {
                                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                                MessageBox.Show("查询水平角度失败:" + iLastErr);
                                return;
                            }

                        }
                    }

                    //查询垂直角度
                    byte[] buf2 = { 0xFF, 0x01, 0x00, 0x53, 0x00, 0x00, 0x54 };
                    unsafe
                    {
                        //发送指令
                        fixed (byte* p = &buf2[0])
                        {
                            bool re2 = CHCNetSDK.NET_DVR_SerialSend(re, 1, p, (uint)buf2.Length);

                            if (!re2)
                            {
                                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                                MessageBox.Show("查询垂直角度失败:" + iLastErr);
                                return;
                            }
                        }
                    }
                    string msg = "FF 01 00 90 01 00";
                    byte[] buf = strToHexByte(msg);
                    //byte[] buf = { 0xff, 0x01, 0x00, 0x4b, 0x03, 0xe8, 0x37 };
                    unsafe
                    {
                        //发送指令
                        fixed (byte* p = &buf[0])
                        {
                            bool re2 = CHCNetSDK.NET_DVR_SerialSend(re, 1, p, (uint)buf.Length);
                            if (!re2)
                            {
                                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                                MessageBox.Show("甲烷浓度错误: " + iLastErr);
                                CHCNetSDK.NET_DVR_SerialStop(re);
                                return;
                            }
                        }
                    }
                    //CHCNetSDK.NET_DVR_SerialStop(re);
                }
                catch (Exception e)
                { }
                finally
                {
                    if (re != -1)
                    {
                        //CHCNetSDK.NET_DVR_SerialStop(re);
                    }
                }
            }
            else
            {
                //替换成webScoket形式获取
            }
        }
        public JArray LineArr;
        public JArray PresetArr;
        // 获取巡航列表
        public void getLineList()
        {
            txt_line.Text = "";
            selectLineValue = "";
            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/getLines" + "?deviceIp=" + ip;
            string result = Http.http(conStr, "GET", null);
            if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
            {
                LogHelper.WriteLog("获取巡航列表失败");
            }
            else
            {
                cbBox_lineList.Items.Clear();
                cb_allLine.Items.Clear();
                JObject json = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
                LineArr = JArray.Parse(json["data"].ToString());
                if (json["data"].ToString() != "[]")
                {
                    for (int i = 0; i < LineArr.Count; i++)
                    {
                        cbBox_lineList.Items.Add(LineArr[i]["selectName"].ToString());
                        cb_allLine.Items.Add(LineArr[i]["selectName"].ToString());
                    }
                    if (LineArr.Count!=0)
                    {
                        cbBox_lineList.SelectedIndex = 0;
                        cb_allLine.SelectedIndex = 0;
                    }
                    else
                    {
                        cbBox_lineList.SelectedItem = null;
                        cb_allLine.SelectedItem = null;
                    }
                }
            }
            getPresetList();
        }
        public string selectLineValue = "";
        public string selectPresetValue = "";

        // 获取巡航点
        public void getPresetList()
        {
            txt_preset.Text = "";
            selectPresetValue = "";
            if (txt_line.Text == "")
            {
                cbBox_presetList.Items.Clear();
                return;
            }
            if (cbBox_lineList.SelectedItem == null) return;
            selectLineValue = findSelectValue(LineArr, cbBox_lineList.SelectedItem.ToString()); 
            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/getPoints" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip
                + "&cruiseRoute=" + selectLineValue;
            string result = Http.http(conStr, "GET", null);
            if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
            else
            {
                cbBox_presetList.Items.Clear();
                JObject json = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
                PresetArr = JArray.Parse(json["data"].ToString());
                if (json["data"].ToString() != "[]")
                {
                    for (int i = 0; i < PresetArr.Count; i++)
                    {
                        cbBox_presetList.Items.Add(PresetArr[i]["selectName"].ToString());
                    }
                }
            }
        }
        
        private unsafe void cbSerialDataCallBack(int lSerialHandle, IntPtr pRecvDataBuffer, uint dwBufSize, uint dwUser)
        {
            unsafe
            {
                byte[] b = new byte[7];
                Marshal.Copy(pRecvDataBuffer, b, 0, 7);

                float angleD = (float)(Convert.ToInt32(Convert.ToString(b[4])) * 256 + Convert.ToInt32(Convert.ToString(b[5]))) / 100;

                //水平角度
                if (Convert.ToString(b[0]) == "255" && Convert.ToString(b[1]) == "1" && Convert.ToString(b[2]) == "0" && Convert.ToString(b[3]) == "89")
                {
                    coordinateUc1.Value = angleD;
                    label_angleD.Text = Convert.ToString(angleD);
                    //coordinateUc1.DrawPin(coordinateUc1.CreateGraphics());
                    coordinateUc1.Refresh();
                }
                //垂直角度
                else if (Convert.ToString(b[0]) == "255" && Convert.ToString(b[1]) == "1" && Convert.ToString(b[2]) == "0" && Convert.ToString(b[3]) == "91")
                {
                    angleD = (Convert.ToInt32(Convert.ToString(b[4])) * 256 + Convert.ToInt32(Convert.ToString(b[5])));
                    if (angleD > 18000)
                    {
                        halfCoordinateUc1.value = (36000 - angleD) / 100;
                        label_angleP.Text = Convert.ToString((36000 - angleD) / 100);
                    }
                    else
                    {
                        halfCoordinateUc1.value = (0 - angleD) / 100;
                        label_angleP.Text = Convert.ToString((0 - angleD) / 100);
                    }


                    halfCoordinateUc1.Refresh();

                    //CHCNetSDK.NET_DVR_SerialStop(lSerialHandle);
                    //getDataType = -1;
                }
                // 甲烷浓度、报警值
                else if (Convert.ToString(b[0]) == "83" && Convert.ToString(b[1]) == "84")
                {
                    byte[] v = new byte[35];
                    Marshal.Copy(pRecvDataBuffer, v, 0, 35);
                    string value = Encoding.ASCII.GetString(v);
                    //MessageBox.Show("CH4浓度:"+ value);
                    CHCNetSDK.NET_DVR_SerialStop(lSerialHandle);

                }

                if (dwBufSize == 3)
                {
                    CHCNetSDK.NET_DVR_SerialStop(lSerialHandle);
                }
                //getDataType = -1;


            }
        }

        public void initListAllPointView()
        {
            try
            {
                if (list_allPoint.Rows.Count != 0) list_allPoint.Rows.Clear();
                if (list_allPoint.Columns.Count != 0) list_allPoint.Columns.Clear();

                Panel panel = new Panel();
                panel.BackColor = Color.FromArgb(41, 42, 73);
                panel.Size = new Size((int)(list_allPoint.Width * 0.95), 24);
                panel.Location = new Point(0, 0);
                list_allPoint.Controls.Add(panel);

                Label col1 = new Label();
                col1.Text = "预置点";
                col1.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col1.ForeColor = Color.White;
                col1.BackColor = Color.FromArgb(41, 42, 73);
                col1.Location = new Point(38, 0);
                list_allPoint.Controls.Add(col1);
                col1.BringToFront();

                Label col2 = new Label();
                col2.Text = "阈值ppm·m";
                col2.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col2.ForeColor = Color.White;
                col2.BackColor = Color.FromArgb(41, 42, 73);
                col2.Location = new Point(145, 0);
                list_allPoint.Controls.Add(col2);
                col2.BringToFront();

                Label col3 = new Label();
                col3.Text = "位置";
                col3.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col3.ForeColor = Color.White;
                col3.BackColor = Color.FromArgb(41, 42, 73);
                col3.Location = new Point(300, 0);
                list_allPoint.Controls.Add(col3);
                col3.BringToFront();

                DataTable pointDatas = new DataTable("Datas");
                pointDatas.Rows.Clear();
                //pointDatas.Columns.Add("id", Type.GetType("System.String"));
                pointDatas.Columns.Add("serialName", Type.GetType("System.String"));
                pointDatas.Columns.Add("alarmValue", Type.GetType("System.String"));
                pointDatas.Columns.Add("position", Type.GetType("System.String"));
                list_allPoint.DataSource = pointDatas;

                //list_allPoint.Columns[0].Visible = false;
                list_allPoint.Columns[1].HeaderText = "预置点";
                list_allPoint.Columns[2].HeaderText = "阈值";
                list_allPoint.Columns[3].HeaderText = "位置";

                //list_allPoint.Columns[0].Width = 50;
                list_allPoint.Columns[1].Width = 120;
                list_allPoint.Columns[2].Width = 50;
                list_allPoint.Columns[3].Width = 80;

                list_allPoint.Columns[0].ReadOnly = true;
                list_allPoint.Columns[1].ReadOnly = true;
                list_allPoint.Columns[2].ReadOnly = true;
                list_allPoint.Columns[3].ReadOnly = true;
            }
            catch (Exception ex)
            {

            }
        }

        public void initDataGridView()
        {
            try
            {
                if (dataGridView1.Rows.Count != 0) dataGridView1.Rows.Clear();
                if(dataGridView1.Columns.Count != 0) dataGridView1.Columns.Clear();

                int height = panel_alarm.Height;
                int width = panel_alarm.Width;

                Panel panel = new Panel();
                panel.BackColor = Color.FromArgb(41, 42, 73);
                panel.Size = new Size((int)(width * 0.95), 24);
                panel.Location = new Point(0, 0);
                dataGridView1.Controls.Add(panel);
                //panel.BringToFront();

                Label col1 = new Label();
                col1.Text = "报警时间";
                col1.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col1.ForeColor = Color.White;
                col1.BackColor = Color.FromArgb(41, 42, 73);
                col1.Location = new Point(31, 0);
                dataGridView1.Controls.Add(col1);
                col1.BringToFront();

                Label col2 = new Label();
                col2.Text = "浓度ppm·m";
                col2.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col2.ForeColor = Color.White;
                col2.BackColor = Color.FromArgb(41, 42, 73);
                col2.Location = new Point(110, 0);
                dataGridView1.Controls.Add(col2);
                col2.BringToFront();

                Label col3 = new Label();
                col3.Text = "报警方位";
                col3.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col3.ForeColor = Color.White;
                col3.BackColor = Color.FromArgb(41, 42, 73);
                col3.Location = new Point(200, 0);
                dataGridView1.Controls.Add(col3);
                col3.BringToFront();

                Label col4 = new Label();
                col4.Text = "报警事件";
                col4.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col4.ForeColor = Color.White;
                col4.BackColor = Color.FromArgb(41, 42, 73);
                col4.Location = new Point(295, 0);
                dataGridView1.Controls.Add(col4);
                col4.BringToFront();

                Label col5 = new Label();
                col5.Text = "操作";
                col5.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col5.ForeColor = Color.White;
                col5.BackColor = Color.FromArgb(41, 42, 73);
                col5.Location = new Point(425, 0);
                dataGridView1.Controls.Add(col5);
                col5.BringToFront();

                Label col6 = new Label();
                col6.Text = "";
                col6.Font = new Font("微软雅黑", 10.5f, FontStyle.Bold);
                col6.ForeColor = Color.White;
                col6.BackColor = Color.FromArgb(41, 42, 73);
                col6.Location = new Point(460, 0);
                dataGridView1.Controls.Add(col6);

                DataTable alarmDatas = new DataTable("Datas");
                alarmDatas.Rows.Clear();
                alarmDatas.Columns.Add("id", Type.GetType("System.String"));
                alarmDatas.Columns.Add("alarmTime", Type.GetType("System.String"));
                alarmDatas.Columns.Add("alarmValue", Type.GetType("System.String"));
                alarmDatas.Columns.Add("alarmDirection", Type.GetType("System.String"));
                alarmDatas.Columns.Add("alarmContent", Type.GetType("System.String"));
                alarmDatas.Columns.Add("消警", Type.GetType("System.String"));
                alarmDatas.Columns.Add("定位", Type.GetType("System.String"));
                alarmDatas.Columns.Add("录像", Type.GetType("System.String"));
                dataGridView1.DataSource = alarmDatas;
               
                dataGridView1.Columns[0].Visible = false;
                dataGridView1.Columns[1].HeaderText = "时间";
                dataGridView1.Columns[2].HeaderText = "浓度";
                dataGridView1.Columns[3].HeaderText = "方位";
                dataGridView1.Columns[4].HeaderText = "事件";
                dataGridView1.Columns[5].HeaderText = "消警";
                dataGridView1.Columns[6].HeaderText = "定位";
                dataGridView1.Columns[7].HeaderText = "录像";

                dataGridView1.Columns[0].Width = 50;
                dataGridView1.Columns[1].Width = 120;
                dataGridView1.Columns[2].Width = 50;
                dataGridView1.Columns[3].Width = 80;
                dataGridView1.Columns[4].Width = 100;

                dataGridView1.Columns[0].ReadOnly = true;
                dataGridView1.Columns[1].ReadOnly = true;
                dataGridView1.Columns[2].ReadOnly = true;
                dataGridView1.Columns[3].ReadOnly = true;
         
                dataGridView1.Columns[5].Width = 35;
                dataGridView1.AutoGenerateColumns = false;
                dataGridView1.Columns[5].ReadOnly = true;

                dataGridView1.Columns[6].Width = 35;
                dataGridView1.AutoGenerateColumns = false;
                dataGridView1.Columns[6].ReadOnly = true;
              
                dataGridView1.Columns[7].Width = 35;
                dataGridView1.AutoGenerateColumns = false;
                dataGridView1.Columns[7].ReadOnly = true;
            }
            catch (Exception ex)
            {
                
            }
        }
        public static bool refresh = false;
        public static JArray jar1;
        public void getDataGridViewData()
        {
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    if (refresh) return;
                    else refresh = true;
                    string timeNow = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    string timeStart = DateTime.Now.AddMinutes(-31).ToString("yyyy-MM-dd HH:mm:ss");
                    dataGridView1.DataSource = null;
                    string query = "?keyword=" + monitorName + "&" + "startTime=" + timeStart + "&" + "endTime=" + timeNow + "&" + "offset=1&limit=100";
                    string result = Http.http("http://" + ConfigHelper.GetAppConfig("server").Trim() + "/alarm/listNowPage" + query, "POST", null);
                    if (result == "")
                    {
                        //MessageBox.Show("服务器错误,获取报警列表失败");
                        label_datagridResult.Text = "服务器错误,获取报警列表失败";
                        label_datagridResult.ForeColor = Color.OrangeRed;
                        label_datagridResult.Visible = true;
                        refresh = false;
                        return;
                    }
                    JObject json = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
                    if (((JObject)JsonConvert.DeserializeObject(json["data"].ToString()))["rows"].ToString() == "[]")
                    {
                        label_datagridResult.Text = "无报警数据";
                        label_datagridResult.ForeColor = Color.DimGray;
                        label_datagridResult.Visible = true;
                        refresh = false;
                        return;
                    }
                    label_datagridResult.Visible = false;

                    jar1 = JArray.Parse(((JObject)JsonConvert.DeserializeObject(json["data"].ToString()))["rows"].ToString());
                    if (((JObject)JsonConvert.DeserializeObject(json["data"].ToString()))["rows"].ToString() != "[]")
                    {
                        DataTable alarmDatas = new DataTable("Datas");
                        alarmDatas.Columns.Add("id", Type.GetType("System.String"));
                        alarmDatas.Columns.Add("alarmTime", Type.GetType("System.String"));
                        alarmDatas.Columns.Add("alarmValue", Type.GetType("System.String"));
                        alarmDatas.Columns.Add("alarmDirection", Type.GetType("System.String"));
                        alarmDatas.Columns.Add("alarmContent", Type.GetType("System.String"));
                        alarmDatas.Columns.Add("消警", Type.GetType("System.String"));
                        alarmDatas.Columns.Add("定位", Type.GetType("System.String"));
                        alarmDatas.Columns.Add("录像", Type.GetType("System.String"));

                        for (int i = 0; i < jar1.Count; i++)
                        {
                            if (jar1[i].Contains("id")) return;
                            string id = jar1[i]["id"].ToString();
                            string alarmValue = jar1[i]["alarmValue"].ToString();
                            string alarmTime = jar1[i]["alarmTime"].ToString();
                            string alarmDirection = jar1[i]["alarmDirection"].ToString() + "," + jar1[i]["alarmPitch"].ToString();
                            string alarmContent = jar1[i]["alarmContent"].ToString();
                            alarmDatas.Rows.Add(new object[] { id, alarmTime, alarmValue, alarmDirection, alarmContent, "消警", "定位", "录像" });
                        }
                        if (alarmDatas == null || alarmDatas.Rows.Count == 0 || jar1.Count != alarmDatas.Rows.Count)
                        {
                            refresh = false;
                            return;
                        }
                        dataGridView1.DataSource = alarmDatas;
                        refresh = false;
                    }
                    refresh = false;
                }
                catch (Exception ex)
                {
                    //initDataGridView();
                    refresh = false;
                }
            })).Start();
        }

        public void getPointsViewData()
        {
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    list_allPoint.DataSource = null;
                    if (cb_allLine.SelectedItem == null) return;
                    string result = Http.http("http://" + ConfigHelper.GetAppConfig("server").Trim() + "/observ/list" + 
                        "?monitorId=" + monitorId + "&" + "lineNum=" + findSelectValue(LineArr, cb_allLine.SelectedItem.ToString()), "POST", null);
                    if (result == ""){ return; }
                    JObject json = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
                    if (json["data"].ToString() == "[]") { return; }

                    jar1 = JArray.Parse(json["data"].ToString());

                    DataTable pointDatas = new DataTable("Datas");
                    //pointDatas.Columns.Add("id", Type.GetType("System.String"));
                    pointDatas.Columns.Add("serialName", Type.GetType("System.String"));
                    pointDatas.Columns.Add("alarmValue", Type.GetType("System.String"));
                    pointDatas.Columns.Add("position", Type.GetType("System.String"));

                    for (int i = 0; i < jar1.Count; i++)
                    {
                        if (jar1[i].Contains("id")) return;
                        //string id = jar1[i]["id"].ToString();
                        string alarmValue = jar1[i]["alarmValue"].ToString();
                        string serialName = jar1[i]["serialName"].ToString();
                        string position = jar1[i]["direction"].ToString() + "," + jar1[i]["pitch"].ToString();
                        pointDatas.Rows.Add(new object[] { serialName, alarmValue, position });
                    }
                    list_allPoint.DataSource = pointDatas;

                    /*if (((JObject)JsonConvert.DeserializeObject(json["data"].ToString()))["rows"].ToString() != "[]")
                    {
                      
                    }*/
                }
                catch (Exception ex) { }
            })).Start();
        }

        int count = 0;
        private void drawLine(OpenCvSharp.Mat image)
        {
            int x = image.Width / 2;
            int y = image.Height / 2;

            OpenCvSharp.Point p1 = new OpenCvSharp.Point(x - 40, y - 30);
            OpenCvSharp.Point p2 = new OpenCvSharp.Point(x - 20, y - 30);

            OpenCvSharp.Cv2.Line(image, p1, p2, new OpenCvSharp.Scalar(33, 33, 133, 255), 2);

            OpenCvSharp.Point p3 = new OpenCvSharp.Point(x - 40, y - 30);
            OpenCvSharp.Point p4 = new OpenCvSharp.Point(x - 40, y - 10);

            OpenCvSharp.Cv2.Line(image, p3, p4, new OpenCvSharp.Scalar(33, 33, 133, 255), 2);


            OpenCvSharp.Point p5 = new OpenCvSharp.Point(x + 40, y - 30);
            OpenCvSharp.Point p6 = new OpenCvSharp.Point(x + 20, y - 30);

            OpenCvSharp.Cv2.Line(image, p5, p6, new OpenCvSharp.Scalar(33, 33, 133, 255), 2);

            OpenCvSharp.Point p7 = new OpenCvSharp.Point(x + 40, y - 30);
            OpenCvSharp.Point p8 = new OpenCvSharp.Point(x + 40, y - 10);

            OpenCvSharp.Cv2.Line(image, p7, p8, new OpenCvSharp.Scalar(33, 33, 133, 255), 2);

            OpenCvSharp.Point p9 = new OpenCvSharp.Point(x + 40, y + 30);
            OpenCvSharp.Point p10 = new OpenCvSharp.Point(x + 20, y + 30);

            OpenCvSharp.Cv2.Line(image, p9, p10, new OpenCvSharp.Scalar(33, 33, 133, 255), 2);

            OpenCvSharp.Point p11 = new OpenCvSharp.Point(x + 40, y + 30);
            OpenCvSharp.Point p12 = new OpenCvSharp.Point(x + 40, y + 10);

            OpenCvSharp.Cv2.Line(image, p11, p12, new OpenCvSharp.Scalar(33, 33, 133, 255), 2);

            OpenCvSharp.Point p13 = new OpenCvSharp.Point(x - 40, y + 30);
            OpenCvSharp.Point p14 = new OpenCvSharp.Point(x - 20, y + 30);

            OpenCvSharp.Cv2.Line(image, p13, p14, new OpenCvSharp.Scalar(33, 33, 133, 255), 2);

            OpenCvSharp.Point p15 = new OpenCvSharp.Point(x - 40, y + 30);
            OpenCvSharp.Point p16 = new OpenCvSharp.Point(x - 40, y + 10);

            OpenCvSharp.Cv2.Line(image, p15, p16, new OpenCvSharp.Scalar(33, 33, 133, 255), 2);
            ScoketClient.drawLabel(image, label_gasValue.Text);

        }

        public void preview()
        {
            try
            {
                // 如果已经正在回放,先停止回放;暂停实时播放
                if (rt_lRealHandle >= 0)
                {
                    CHCNetSDK.NET_DVR_StopRealPlay(rt_lRealHandle);
                    rt_lRealHandle = -1;
                }
                CHCNetSDK.NET_DVR_StopPlayBack(rt_lBackHandle);
            }
            catch (Exception ex) { }
            CHCNetSDK.NET_DVR_PREVIEWINFO lpPreviewInfo = new CHCNetSDK.NET_DVR_PREVIEWINFO();
            lpPreviewInfo.hPlayWnd = pictureBox1.Handle;//预览窗口
            lpPreviewInfo.lChannel = CtrlHome.hasNVR == "0" ? Int16.Parse("1") : CtrlHome.iChannelNum[index];//预te览的设备通道
            lpPreviewInfo.dwStreamType = uint.Parse(CtrlHome.flow);//码流类型:0-主码流,1-子码流,2-码流3,3-码流4,以此类推
            lpPreviewInfo.dwLinkMode = 0;//连接方式:0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP 
            lpPreviewInfo.bBlocked = true; //0- 非阻塞取流,1- 阻塞取流
            lpPreviewInfo.dwDisplayBufNum = 1; //播放库播放缓冲区最大缓冲帧数
            lpPreviewInfo.byProtoType = 0;
            lpPreviewInfo.byPreviewMode = 0;

            IntPtr pUser = new IntPtr();//用户数据
            //打开预览 Start live view 
            rt_lRealHandle = CtrlHome.hasNVR == "0" ?
                CHCNetSDK.NET_DVR_RealPlay_V40(m_lUserID, ref lpPreviewInfo, null, pUser) :
                CHCNetSDK.NET_DVR_RealPlay_V40(CtrlHome.userIdNVR, ref lpPreviewInfo, null, pUser);
            if (rt_lRealHandle < 0)
            {
                return;
            }
 

        }

        private System.Windows.Forms.Panel LoadingPanel = new System.Windows.Forms.Panel();

        private void radio_ptz_CheckedChanged(object sender, EventArgs e)
        {
            if (radio_ptz.Checked == true)
            {
                radio_ptz.ForeColor = Color.White;
                bak_ptz.BackgroundImage = Properties.Resources.标题框;
                radio_vedio.ForeColor = Color.Black;
                bak_vedio.BackgroundImage = null;
                radio_therod.ForeColor = Color.Black;
                bak_therod.BackgroundImage = null;


                radio_vedio.Checked = false;
                radio_therod.Checked = false;

                panel_ptz.Visible = true;
                panel_manControl.Visible = true;
                panel_videoControl.Visible = false;
                panel_therod.Visible = false;
            }
        }

        private void radio_vedio_CheckedChanged(object sender, EventArgs e)
        {
            if (radio_vedio.Checked == true)
            {
                radio_vedio.ForeColor = Color.White;
                bak_vedio.BackgroundImage = Properties.Resources.标题框;
                radio_ptz.ForeColor = Color.Black;
                bak_ptz.BackgroundImage = null;
                radio_therod.ForeColor = Color.Black;
                bak_therod.BackgroundImage = null;

                radio_ptz.Checked = false;
                radio_therod.Checked = false;

                panel_ptz.Visible = false;
                panel_manControl.Visible = false;
                panel_videoControl.Visible = true;
                panel_therod.Visible = false;
            }
        }

        public string allHigh = "", allSpeed = "", allStop = "", allAngle = "";
        public bool therod_checked = false;

        private void radio_therod_CheckedChanged(object sender, EventArgs e)
        {
            therod_checked = radio_therod.Checked;
            if (radio_therod.Checked == true)
            {
                panel_ptz.Visible = false;
                panel_manControl.Visible = false;
                panel_videoControl.Visible = false;
                panel_therod.Visible = true;

                radio_therod.ForeColor = Color.White;
                bak_therod.BackgroundImage = Properties.Resources.标题框;
                radio_ptz.ForeColor = Color.Black;
                bak_ptz.BackgroundImage = null;
                radio_vedio.ForeColor = Color.Black;
                bak_vedio.BackgroundImage = null;

                radio_vedio.Checked = false;
                radio_ptz.Checked = false;
               
                txt_therod.Text = "";
                txt_allAngle.Text = "";
                txt_allSpeed.Text = "";
                txt_allStop.Text = "";

                allHigh = "";
                allSpeed = "";
                allStop = "";
                allAngle = "";

                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/alarm/alarmRule" + "?monitorId=" + monitorId;
                string result = Http.http(conStr, "GET", null);
                JObject json = (JObject)JsonConvert.DeserializeObject(result);
                if (result == "" || json["success"].ToString() == "False")
                { }
                else
                {
                    JObject data = (JObject)JsonConvert.DeserializeObject(json["data"].ToString());

                    allHigh = data["high"].ToString();
                    allSpeed = data["speed"].ToString();
                    allStop = data["stopTime"].ToString();

                    txt_therod.Text = data["high"].ToString();
                    txt_allSpeed.Text = data["speed"].ToString();
                    txt_allStop.Text = data["stopTime"].ToString();
                    if (data["angle"].ToString() != "" && System.Text.RegularExpressions.Regex.IsMatch(data["angle"].ToString(), @"^\d+$"))
                    {
                        txt_allAngle.Text = (Convert.ToDouble( data["angle"].ToString() ) / 10).ToString();
                        allAngle = txt_allAngle.Text;
                    }
                }
            }
        }

        private void panel21_Paint(object sender, PaintEventArgs e)
        {

        }

        private void panel_left_Click(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                runOneAngle("left");
                return;
            }
            left = !left;
            if (left)
            {
                panel1.BackgroundImage = Properties.Resources.left;
                new Thread(new ThreadStart(() =>
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() +
                    "/HCNet/controlWithSpeed" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=left&isStop=0&speed=" + speed;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                })).Start();
            }
            else
            {
                panel1.BackgroundImage = Properties.Resources.bakground;
                new Thread(new ThreadStart(() =>
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() +
                    "/HCNet/controlWithSpeed" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=left&isStop=1&speed=" + speed;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                    Thread.Sleep(100);
                    getAngle();
                })).Start();
            }
        }
        private void panel_right_Click(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                runOneAngle("right");
                return;
            }
            right = !right;
            if (right)
            {
                panel1.BackgroundImage = Properties.Resources.right;
                new Thread(new ThreadStart(() =>
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=right&isStop=0&speed=" + speed;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                })).Start();
            }
            else
            {
                panel1.BackgroundImage = Properties.Resources.bakground;
                new Thread(new ThreadStart(() =>
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=right&isStop=1&speed=" + speed;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                    Thread.Sleep(100);
                    getAngle();
                })).Start();
            }
        }
        private void panel_up_Click(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                runOneAngle("up");
                return;
            }
            up = !up;
            if (up)
            {
                panel1.BackgroundImage = Properties.Resources.up;
                new Thread(new ThreadStart(() =>
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=up&isStop=0&speed=" + speed;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                })).Start();
            }
            else
            {
                panel1.BackgroundImage = Properties.Resources.bakground;
                new Thread(new ThreadStart(() =>
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=up&isStop=1&speed=" + speed;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                    Thread.Sleep(100);
                    getAngle();
                })).Start();
            }
        }
        private void panel_down_Click(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                runOneAngle("down");
                return;
            }
            down = !down;
            if (down)
            {
                panel1.BackgroundImage = Properties.Resources.down;
                new Thread(new ThreadStart(() =>
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=down&isStop=0&speed=" + speed;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                })).Start();
            }
            else
            {
                panel1.BackgroundImage = Properties.Resources.bakground;
                new Thread(new ThreadStart(() =>
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=down&isStop=1&speed=" + speed;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                    Thread.Sleep(100);
                    getAngle();
                })).Start();
            }
        }

        // 转小角度
        public void runOneAngle(string position)
        {
            double horizontalAngle = Convert.ToDouble(label_angleD.Text);
            double verticalAngle = Convert.ToDouble(label_angleP.Text);

            if (position == "up")
            {
                if (devType == "1") { verticalAngle -= 1; }         
                else { verticalAngle += 1; }
            }
            else if (position == "down")
            {
                if (devType == "1") { verticalAngle += 1; }
                else { verticalAngle -= 1; }
            }

            else if (position == "left") horizontalAngle -= 1;
            else if (position == "right") horizontalAngle += 1;
            if (horizontalAngle < 0 || horizontalAngle > 360) return;
            if (verticalAngle < -90 || verticalAngle > 90) return;
            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/toPosition" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&horizontalAngle=" + horizontalAngle.ToString() + "&verticalAngle=" + verticalAngle.ToString();
            string result = Http.http(conStr, "GET", null);
            if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
            {

            }
        }

        //向上
        private void panel_up_MouseDown(object sender, MouseEventArgs e)
        {

            panel1.BackgroundImage = Properties.Resources.up;
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                CHCNetSDK.NET_DVR_PTZControlWithSpeed(m_lRealHandle, CHCNetSDK.TILT_UP, 0, (uint)3);
                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                if (iLastErr > 0) MessageBox.Show("操作失败:" + iLastErr);
            }
            else
            {
                //new Thread(new ThreadStart(() =>
                //{
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" +
                m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=up&isStop=0&speed=" + speed;

                Http.http(conStr, "GET", null);
                /*string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                { }
            })).Start();*/

            }
        }

        private void panel_up_MouseUp(object sender, MouseEventArgs e)
        {
            panel1.BackgroundImage = Properties.Resources.bakground;
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                CHCNetSDK.NET_DVR_PTZControlWithSpeed(m_lRealHandle, CHCNetSDK.TILT_UP, 1, (uint)3);

            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" +
                    m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=up&isStop=1&speed=" + speed;

                Http.http(conStr, "GET", null);
                //string result = Http.http(conStr, "GET", null);

            }
            /*new Thread(new ThreadStart(() =>
            {
                Thread.Sleep(100);
                getAngle();
            })).Start();*/

        }

        //向右
        private void panel_right_MouseDown(object sender, MouseEventArgs e)
        {
            panel1.BackgroundImage = Properties.Resources.right;
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                CHCNetSDK.NET_DVR_PTZControlWithSpeed(m_lRealHandle, CHCNetSDK.PAN_RIGHT, 0, (uint)3);
            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" +
                m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=right&isStop=0&speed=" + speed;

                Http.http(conStr, "GET", null);
            }
        }

        private void panel_right_MouseUp(object sender, MouseEventArgs e)
        {
            panel1.BackgroundImage = Properties.Resources.bakground;
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {

                CHCNetSDK.NET_DVR_PTZControlWithSpeed(m_lRealHandle, CHCNetSDK.PAN_RIGHT, 1, (uint)3);
            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" +
                    m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=right&isStop=1&speed=" + speed;

                Http.http(conStr, "GET", null);

            }

        }

        //向下
        private void panel_down_MouseDown(object sender, MouseEventArgs e)
        {
            panel1.BackgroundImage = Properties.Resources.down;
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                CHCNetSDK.NET_DVR_PTZControlWithSpeed(m_lRealHandle, CHCNetSDK.TILT_DOWN, 0, (uint)3);
            }
            else
            {
                //new Thread(new ThreadStart(() =>
                //{
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" +
                m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=down&isStop=0&speed=" + speed;
                Http.http(conStr, "GET", null);
                /*string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                })).Start();*/
            }
        }

        private void panel_down_MouseUp(object sender, MouseEventArgs e)
        {
            panel1.BackgroundImage = Properties.Resources.bakground;
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {

                CHCNetSDK.NET_DVR_PTZControlWithSpeed(m_lRealHandle, CHCNetSDK.TILT_DOWN, 1, (uint)3);

            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" +
                    m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=down&isStop=1&speed=" + speed;

                Http.http(conStr, "GET", null);
                /*string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {

                }*/
            }
            /*new Thread(new ThreadStart(() =>
            {
                Thread.Sleep(100);
                getAngle();
            })).Start();*/
        }

        //向左
        private void panel_left_MouseDown(object sender, MouseEventArgs e)
        {
            panel1.BackgroundImage = Properties.Resources.left;
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {

                CHCNetSDK.NET_DVR_PTZControlWithSpeed(m_lRealHandle, CHCNetSDK.PAN_LEFT, 0, (uint)3);
            }
            else
            {
                //new Thread(new ThreadStart(() =>
                //{
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" +
                m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=left&isStop=0&speed=" + speed;

                Http.http(conStr, "GET", null);
                /*string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                })).Start();*/

            }
        }

        private void panel_left_MouseUp(object sender, MouseEventArgs e)
        {
            panel1.BackgroundImage = Properties.Resources.bakground;
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {

                CHCNetSDK.NET_DVR_PTZControlWithSpeed(m_lRealHandle, CHCNetSDK.PAN_LEFT, 1, (uint)3);

            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/controlWithSpeed" + "?userId=" +
                    m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=left&isStop=1&speed=" + speed;
                Http.http(conStr, "GET", null);
                /*string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {

                }*/
            }
            /*new Thread(new ThreadStart(() =>
            {
                Thread.Sleep(100);
                getAngle();
            })).Start();*/
        }

        private void btn_cruiseStart_Click(object sender, EventArgs e)
        {
            if (checkInputbyCheck(false))
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/cruise" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=start"
                 + "&cruiseRoute=" + selectLineValue + "&interval=" + ConfigHelper.GetAppConfig("interval").Trim();
                string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {
                    MessageBox.Show("巡航开启失败");
                }
                else
                {
                    MessageBox.Show("巡航开启成功");
                }
            }
        }

        private void Btn_cruiseStop_Click(object sender, EventArgs e)
        {
            //if (checkInputbyCheck(false))
            //{
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/cruise" +
                    "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=stop";
                string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {
                    MessageBox.Show("巡航停止失败");
                }
                else
                {
                    MessageBox.Show("巡航停止成功");
                }
            //}
        }

        private void btn_reset_Click(object sender, EventArgs e)
        {
            int re = -1;
            try
            {
                panel1.BackgroundImage = Properties.Resources.bakground;
                if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                {
                    int size = 1024;
                    byte[] buffer = new byte[1024];
                    uint pUser = 0;
                    CHCNetSDK.NET_DVR_SERIALSTART_V40 lpSerialStart = new CHCNetSDK.NET_DVR_SERIALSTART_V40();
                    lpSerialStart.dwSerialType = 2;
                    lpSerialStart.bySerialNum = 1;
                    lpSerialStart.byRes = new byte[0];
                    unsafe
                    {
                        CHCNetSDK.SERIALDATACALLBACK serialDataCallBack = new CHCNetSDK.SERIALDATACALLBACK(cbSerialDataCallBack);


                        //建立通道

                        re = CHCNetSDK.NET_DVR_SerialStart(m_lUserID, 2, serialDataCallBack, pUser);
                        if (re == -1)
                        {
                            uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                            //MessageBox.Show("与云台建立透明通道失败:" + iLastErr);
                            return;
                        }
                    }

                    // 水平角度                         
                    string msg = "FF 01 00 4b 00 00";
                    byte[] buf = strToHexByte(msg);
                    unsafe
                    {
                        //发送指令
                        fixed (byte* p = &buf[0])
                        {
                            bool re2 = CHCNetSDK.NET_DVR_SerialSend(re, 1, p, (uint)buf.Length);
                            if (!re2)
                            {
                                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                                MessageBox.Show("error code= " + iLastErr);
                                return;
                            }
                        }
                    }


                    // 垂直角度            
                    msg = "FF 01 00 4d 00 00";
                    buf = strToHexByte(msg);
                    unsafe
                    {
                        //发送指令
                        fixed (byte* p = &buf[0])
                        {
                            bool re2 = CHCNetSDK.NET_DVR_SerialSend(re, 1, p, (uint)buf.Length);
                            if (!re2)
                            {
                                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                                MessageBox.Show("error code= " + iLastErr);
                                return;
                            }
                        }
                    }
                }
                else
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/toPosition" + "?userId=" +
                        m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&horizontalAngle=0&verticalAngle=0";
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    { }
                }
            }
            catch (Exception ex)
            { }
            finally
            {
                if (re != -1) CHCNetSDK.NET_DVR_SerialStop(re);

                new Thread(new ThreadStart(() => {
                    Thread.Sleep(8000);
                    getAngle();
                })).Start();

            }


        }

        /*private void btn_clean_Click(object sender, EventArgs e)
        {
            try
            {
                if (btn_clean.Text == "清洁镜头")
                {
                    btn_clean.Text = "停止清洁";
                    if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                    {
                        CHCNetSDK.NET_DVR_PTZControl(m_lRealHandle, CHCNetSDK.WIPER_PWRON, 0);
                    }
                    else
                    {
                        string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/control" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=clean&isStop=0";
                        string result = Http.http(conStr, "GET", null);
                        if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                        {

                        }
                    }
                    new Thread(new ThreadStart(() =>
                    {
                        Thread.Sleep(40000);
                        btn_clean.Text = "清洁镜头";
                    })).Start();
                }
                else if (btn_clean.Text == "停止清洁")
                {
                    btn_clean.Text = "清洁镜头";
                    if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                    {
                        CHCNetSDK.NET_DVR_PTZControl(m_lRealHandle, CHCNetSDK.WIPER_PWRON, 1);
                    }
                    else
                    {
                        string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/control" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=clean&isStop=1";
                        string result = Http.http(conStr, "GET", null);
                        if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                        {

                        }
                    }
                }
            }
            catch (Exception ex)
            {

            }

        }*/

        private void btn_toPreset_Click(object sender, EventArgs e)
        {
            if (checkInputbyCheck(true))
            {
                disableBtn();
                panel1.BackgroundImage = Properties.Resources.bakground;
                if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                {
                    bool re = false;
                    re = CHCNetSDK.NET_DVR_PTZPreset(m_lRealHandle, CHCNetSDK.GOTO_PRESET, Convert.ToUInt32(txt_preset.Text));

                }
                else
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/preset" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip 
                    + "&command=toPreset&presetIndex=" + selectPresetValue + "&cruiseRoute=" + selectLineValue
                    + "&cruiseName=" + txt_line.Text + "&presetName=" + txt_preset.Text;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    {

                    }
                }

                new Thread(new ThreadStart(() =>
                {
                    Thread.Sleep(5000);
                    getAngle();
                })).Start();
            }
        }
        public void disableBtn()
        {
            new Thread(new ThreadStart(() =>
            {
                panel_manControl.Enabled = false;
                Thread.Sleep(3000);
                panel_manControl.Enabled = true;

                /*btn_exeAngle.Enabled = false;
                btn_cruiseStart.Enabled = false;
                btn_toPreset.Enabled = false;
                panel_up.Enabled = false;
                panel_left.Enabled = false;
                panel_right.Enabled = false;
                panel_down.Enabled = false;

                btn_exeAngle.Enabled = true;
                btn_cruiseStart.Enabled = true;
                btn_toPreset.Enabled = true;
                panel_up.Enabled = true;
                panel_left.Enabled = true;
                panel_right.Enabled = true;
                panel_down.Enabled = true;*/
            })).Start();
        }

        private void btn_exeAngle_Click(object sender, EventArgs e)
        {
            
            int re = -1;
            try
            {
                if (txt_directionAngle.Text.Trim() == "" || txt_pitchAngle.Text.Trim() == "")
                {
                    MessageBox.Show("请输入角度值");
                    return;
                }
                if (txt_directionAngle.Text.Trim() != "")
                {
                    if (Convert.ToDouble(txt_directionAngle.Text.Trim()) < 0 || Convert.ToDouble(txt_directionAngle.Text.Trim()) > 360)
                    {
                        MessageBox.Show("请输入正确的水平角度");
                        return;
                    }
                }
                if (txt_pitchAngle.Text.Trim() != "")
                {
                    if (Convert.ToDouble(txt_pitchAngle.Text.Trim()) < -90 || Convert.ToDouble(txt_pitchAngle.Text.Trim()) > 90)
                    {
                        MessageBox.Show("请输入正确的垂直角度");
                        return;
                    }
                }

                disableBtn();
                panel1.BackgroundImage = Properties.Resources.bakground;
                if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                {
                    uint pUser = 0;
                    CHCNetSDK.NET_DVR_SERIALSTART_V40 lpSerialStart = new CHCNetSDK.NET_DVR_SERIALSTART_V40();
                    lpSerialStart.dwSerialType = 2;
                    lpSerialStart.bySerialNum = 1;
                    lpSerialStart.byRes = new byte[0];
                    unsafe
                    {
                        CHCNetSDK.SERIALDATACALLBACK serialDataCallBack = new CHCNetSDK.SERIALDATACALLBACK(cbSerialDataCallBack);

                        //建立通道
                        re = CHCNetSDK.NET_DVR_SerialStart(m_lUserID, 2, serialDataCallBack, pUser);
                        if (re == -1)
                        {
                            uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                            //MessageBox.Show("与云台建立透明通道失败:" + iLastErr);
                            return;
                        }
                    }
                    // 水平角度
                    if (txt_directionAngle.Text.Trim() != "")
                    {
                        double angleD = Convert.ToDouble(txt_directionAngle.Text.Trim()) * (short)(100);
                        string angle = Convert.ToInt16(angleD).ToString("x8");
                        string msg = "FF 01 00 4B " + angle.Substring(angle.Length - 4, 2) + " " + angle.Substring(angle.Length - 2, 2);

                        byte[] buf = strToHexByte(msg);
                        //byte[] buf = { 0xff, 0x01, 0x00, 0x4b, 0x03, 0xe8, 0x37 };
                        unsafe
                        {
                            //发送指令
                            fixed (byte* p = &buf[0])
                            {
                                bool re2 = CHCNetSDK.NET_DVR_SerialSend(re, 1, p, (uint)buf.Length);
                                if (!re2)
                                {
                                    uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                                    MessageBox.Show("error code= " + iLastErr);
                                    return;
                                }
                            }
                        }
                    }

                    // 垂直角度
                    if (txt_pitchAngle.Text.Trim() != "")
                    {
                        string angle = ""; //(Convert.ToDouble(txt_pitchAngle.Text.Trim()) * (short)(100)).ToString("x8");
                        string msg = "";
                        if (Convert.ToDouble(txt_pitchAngle.Text.Trim()) < 0)
                        {
                            double angleD = Math.Abs(Convert.ToDouble(txt_pitchAngle.Text.Trim()) * (short)(100));
                            angle = Convert.ToInt16(angleD).ToString("x8");
                            //angle = Math.Abs((Convert.ToInt16(txt_pitchAngle.Text.Trim()) * (short)(100))).ToString("x8");
                        }
                        else
                        {
                            double angleD = Convert.ToDouble(txt_pitchAngle.Text.Trim()) * (short)(100);
                            angle = (36000 - Convert.ToInt16(angleD)).ToString("x8");
                            //angle = (36000 - Convert.ToInt16(txt_pitchAngle.Text.Trim()) * (short)(100)).ToString("x8");
                        }
                        //if (txt_directionAngle.Text.Trim() != "")
                        //{
                        //    msg = "FF 01 00 4A " + angle.Substring(angle.Length - 4, 2) + " " + angle.Substring(angle.Length - 2, 2);
                        //}
                        //else
                        {
                            msg = "FF 01 00 4D " + angle.Substring(angle.Length - 4, 2) + " " + angle.Substring(angle.Length - 2, 2);
                        }
                        byte[] buf = strToHexByte(msg);
                        //byte[] buf = { 0xff, 0x01, 0x00, 0x4d, 0x03, 0xe8, 0x39 };
                        unsafe
                        {
                            //发送指令
                            fixed (byte* p = &buf[0])
                            {
                                bool re2 = CHCNetSDK.NET_DVR_SerialSend(re, 1, p, (uint)buf.Length);
                                if (!re2)
                                {
                                    uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                                    MessageBox.Show("error code= " + iLastErr);
                                    return;
                                }
                            }
                        }

                    }
                }
                else
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/toPosition" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&horizontalAngle=" + txt_directionAngle.Text.Trim() + "&verticalAngle=" + txt_pitchAngle.Text.Trim();
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    {

                    }
                }
            }
            catch (Exception ex)
            { }
            finally
            {
                if (re != -1) CHCNetSDK.NET_DVR_SerialStop(re);
                new Thread(new ThreadStart(() => {
                    Thread.Sleep(6000);
                    getAngle();
                })).Start();

            }

        }

        /// <summary>
        /// 字符串转16进制字节数组
        /// </summary>
        /// <param name="hexString"></param>
        /// <returns></returns>
        private static byte[] strToHexByte(string hexString)
        {
            string[] arr = hexString.Split(' ');
            string st = (Convert.ToInt32(arr[1], 16) + Convert.ToInt32(arr[2], 16) + Convert.ToInt32(arr[3], 16) + Convert.ToInt32(arr[4], 16) + Convert.ToInt32(arr[5], 16)).ToString("x8");
            hexString = hexString + " " + st.Substring(st.Length - 2, 2);

            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString += "0";
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }

        private void btn_presetAdd_Click(object sender, EventArgs e)
        {
            try
            {
                if((cbBox_lineList.Items.Count >= 5  && !cbBox_lineList.Items.Contains(txt_line.Text.Trim())) ||
                    (cbBox_presetList.Items.Count >=200 && !cbBox_presetList.Items.Contains(txt_preset.Text.Trim())))
                {
                    MessageBox.Show("云台支持5条巡航线,每条巡航线支持200个巡航点");
                    return;
                }
                if (txt_line.Text.Trim() == "")
                {
                    MessageBox.Show("请输入巡航号");
                    return;
                }
                if (txt_preset.Text.Trim() == "")
                {
                    MessageBox.Show("请输入预置点号");
                    return;
                }
                if (!checkParam()) return;

                if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                {
                    //设置预置点
                    bool re = false;
                    re = CHCNetSDK.NET_DVR_PTZPreset(m_lRealHandle, CHCNetSDK.SET_PRESET, Convert.ToUInt32(txt_preset.Text));

                    //将预置点加入巡航路径
                    re = false;
                    re = CHCNetSDK.NET_DVR_PTZCruise(m_lRealHandle, CHCNetSDK.FILL_PRE_SEQ, 1, Convert.ToByte(txt_preset.Text), Convert.ToByte(txt_preset.Text));

                    //设置巡航速度
                    re = false;
                    re = CHCNetSDK.NET_DVR_PTZCruise(m_lRealHandle, CHCNetSDK.SET_SEQ_SPEED, 1, Convert.ToByte(txt_preset.Text), Convert.ToByte(txt_speed.Text));

                    re = false;
                    //设置停顿时间
                    re = CHCNetSDK.NET_DVR_PTZCruise(m_lRealHandle, CHCNetSDK.SET_SEQ_DWELL, 1, Convert.ToByte(txt_preset.Text), Convert.ToByte(txt_presetStop.Text));

                    getPresetList();
                    MessageBox.Show("添加成功!");
                }
                else
                {
                    string line = "", preset = "";
                    if (cbBox_lineList.Items.Contains(txt_line.Text.Trim()))
                    {
                        line = selectLineValue;
                    }
                    if(cbBox_presetList.Items.Contains(txt_preset.Text.Trim()))
                    {
                        MessageBox.Show("当前已存在" + txt_preset.Text + "巡航点,请重新输入。");
                        return;
                    }
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/preset" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle +
                    "&deviceIp=" + ip + "&command=presetAdd&" + 
                    "&cruiseRoute=" + line + "&presetIndex=" + preset +
                    "&cruiseName=" + txt_line.Text + "&presetName=" + txt_preset.Text +
                    "&speed=" + txt_speed.Text + "&stopTime=" + txt_presetStop.Text + "&direction=" + label_angleD.Text +
                    "&pitch=" + label_angleP.Text + "&alarmValue=" + txt_presetThreshold.Text;
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                    {
                        MessageBox.Show("添加失败");
                    }
                    else
                    {
                        MessageBox.Show("添加成功");
                        getLineList();
                    }
                    getAngle();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("添加失败,请核对输入" );
            }
            /*else if (txt_line.Text == "fwcasic")  //复位
               {
                   string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/setPreset" +
                  "?deviceIp=" + ip + "&command=" + "79";
                   string result = Http.http(conStr, "GET", null);
                   if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False"){}
                   return;
               }
               else if (txt_line.Text == "dlcasic")  // 调整电流大小
               {
                   string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/setPreset" +
                    "?deviceIp=" + ip + "&command=" + "82A" + txt_preset.Text;
                   string result = Http.http(conStr, "GET", null);
                   if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                   return;
               }*/
        }

        private void btn_presetDel_Click(object sender, EventArgs e)
        {
            try
            {
                if(checkInputbyCheck(true))
                {
                    DialogResult dr = MessageBox.Show("删除" + txt_line.Text + "," + txt_preset.Text + "之前,是否需要先转到该预置点?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                    if (dr == DialogResult.OK)
                    {
                        if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                        {
                            bool re = false;
                            re = CHCNetSDK.NET_DVR_PTZPreset(m_lRealHandle, CHCNetSDK.GOTO_PRESET, Convert.ToUInt32(txt_preset.Text));

                        }
                        else
                        {
                            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/preset"
                                + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp="
                                + ip + "&command=toPreset&presetIndex=" + selectPresetValue + "&cruiseRoute=" + selectLineValue
                                + "&cruiseName=" + txt_line.Text + "&presetName=" + txt_preset.Text;
                            string result = Http.http(conStr, "GET", null);
                            if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }

                            // 等待云台转到预置点
                            Thread.Sleep(1000);
                            deletePoint();
                        }
                    }
                    else
                    {
                        deletePoint();
                    }

                    getPresetList();
                }
                /*
                byte pointNum = (byte)Convert.ToInt16(txt_preset.Text.Trim());
                bool isExist = false;
                CHCNetSDK.NET_DVR_CRUISE_RET ret = new CHCNetSDK.NET_DVR_CRUISE_RET();
                CHCNetSDK.NET_DVR_GetPTZCruise(m_lUserID, 1, 1, ref ret);
                CHCNetSDK.NET_DVR_CRUISE_POINT[] points = ret.struCruisePoint;
                for (int i = 0; i < cbBox_presetList.Items.Count; i++)
                {
                    if (cbBox_presetList.Items[i].ToString() == pointNum.ToString())
                    {
                        isExist = true;
                        break;
                    }
                }
                if (!isExist)
                {
                    MessageBox.Show("不存在该预置点!");
                    return;
                }*/
            }
            catch (Exception ex)
            {
                MessageBox.Show("删除失败:" + ex.Message);
            }
        }
        private void deletePoint()
        {
            DialogResult dr = MessageBox.Show("确认删除此预置点?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (dr == DialogResult.OK)
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/preset" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip 
                    + "&command=presetDel&presetIndex=" + selectPresetValue + "&cruiseRoute=" + selectLineValue
                    + "&cruiseName=" + txt_line.Text + "&presetName=" + txt_preset.Text; 
                string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {
                    MessageBox.Show("删除失败!");
                }
                else
                {
                    MessageBox.Show("删除成功!");
                }
                getLineList();
            }
        }
        //设置报警阈值
        private void btn_save_Click(object sender, EventArgs e)
        {
            string query = "?monitorId=" + monitorId + "&" + "high=" + txt_therod.Text.Trim();
            string result = Http.http("http://" + ConfigHelper.GetAppConfig("server").ToString().Trim() + "/alarm/resetAlarmRule" + query, "POST", null);
            if (result == "")
            {
                MessageBox.Show("服务器异常,设置失败");
                return;
            }
            JObject json = (JObject)JsonConvert.DeserializeObject(result);//或者JObject jo = JObject.Parse(jsonText);
            if (json["code"].ToString() == "200")
            {
                MessageBox.Show("设置成功");
            }

        }

        private void btn_takePhoto_Click(object sender, EventArgs e)
        {
            take_Photo();
        }

        public void take_Photo()
        {
            //btn_clean.Text = "清洁镜头";

            int lChannel = 1; //通道号 Channel number

            CHCNetSDK.NET_DVR_JPEGPARA lpJpegPara = new CHCNetSDK.NET_DVR_JPEGPARA();
            lpJpegPara.wPicQuality = 0; //图像质量 Image quality
            lpJpegPara.wPicSize = 0xff; //抓图分辨率 Picture size: 0xff-Auto(使用当前码流分辨率) 
            //抓图分辨率需要设备支持,更多取值请参考SDK文档

            //JPEG抓图保存成文件 Capture a JPEG picture
            string path = ConfigHelper.GetAppConfig("saveImagePath").Trim();
            if (!System.IO.Directory.Exists(ConfigHelper.GetAppConfig("saveImagePath")))
            {
                System.IO.Directory.CreateDirectory(ConfigHelper.GetAppConfig("saveImagePath"));
            }
            string sJpegPicFileName;
            sJpegPicFileName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".jpg";//图片保存路径和文件名 the path and file name to save

            if (!CHCNetSDK.NET_DVR_CaptureJPEGPicture(m_lUserID, lChannel, ref lpJpegPara, sJpegPicFileName))
            {
                string str = "NET_DVR_CaptureJPEGPicture failed, error code= ";
                //MessageBox.Show(str);
                return;
            }
            else
            {
                replace_Photo(sJpegPicFileName);
                MessageBox.Show("图片已保存至:" + path);
            }
        }

        private void replace_Photo(string sJpegPicFileName)
        {
            FileStream fs = new FileStream(Application.StartupPath + "\\" + sJpegPicFileName, FileMode.Open);
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            fs.Close();
            MemoryStream ms = new MemoryStream(bytes);
            Bitmap bitmap = new Bitmap(ms);
            Graphics gh = Graphics.FromImage(bitmap);
            SolidBrush a = new SolidBrush(Color.Red);
            Font font = new Font("微软雅黑", 20f, FontStyle.Bold);
            gh.DrawString("CH4: " + label_gasValue.Text + "ppm·m", font, a, 40, 80);
            bitmap.Save(ConfigHelper.GetAppConfig("saveImagePath").Trim() + sJpegPicFileName, System.Drawing.Imaging.ImageFormat.Jpeg);
            bitmap.Dispose();
            bitmap = null;
            File.Delete(Application.StartupPath + "\\" + sJpegPicFileName);
        }
        private void btn_zoomIn_MouseDown(object sender, MouseEventArgs e)
        {
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                CHCNetSDK.NET_DVR_PTZControl(m_lRealHandle, CHCNetSDK.ZOOM_IN, 0);
            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/control" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=zoomIn&isStop=0";
                string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {

                }
            }
        }

        private void btn_zoomIn_MouseUp(object sender, MouseEventArgs e)
        {
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                CHCNetSDK.NET_DVR_PTZControl(m_lRealHandle, CHCNetSDK.ZOOM_IN, 1);
            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/control" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=zoomIn&isStop=1";
                string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {

                }
            }
        }

        private void btn_zoomOut_MouseDown(object sender, MouseEventArgs e)
        {
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                CHCNetSDK.NET_DVR_PTZControl(m_lRealHandle, CHCNetSDK.ZOOM_OUT, 0);
            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/control" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=zoomOut&isStop=0";
                string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {

                }
            }
        }

        private void btn_zoomOut_MouseUp(object sender, MouseEventArgs e)
        {
            if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
            {
                CHCNetSDK.NET_DVR_PTZControl(m_lRealHandle, CHCNetSDK.ZOOM_OUT, 1);
            }
            else
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/control" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=zoomOut&isStop=1";
                string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
                {

                }
            }
        }

        private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.ColumnIndex == 5)
            {
                try
                {
                    DataGridViewRow row = dataGridView1.Rows[e.RowIndex];

                    string id = row.Cells["id"].Value.ToString();
                    string alarmDirection = row.Cells["alarmDirection"].Value.ToString();
                    string alarmTime = row.Cells["alarmTime"].Value.ToString();
                    string alarmValue = row.Cells["alarmValue"].Value.ToString();

                    DialogCancelAlarm cancel = new DialogCancelAlarm(id, alarmTime, alarmValue, alarmDirection);
                    if (cancel.ShowDialog() == DialogResult.OK)
                    {
                       /* MessageBox.Show("操作成功", "提示");
                        getDataGridViewData();
                        if (CtrlHome.ctrlHome.alarmId_1 == id)
                        {
                            CtrlHome.ctrlHome.alarmId_1 = "";
                            CtrlHome.ctrlHome.panel_video1.BackgroundImage = Properties.Resources.小监控窗口紫色;
                        }
                        else if (CtrlHome.ctrlHome.alarmId_2 == id)
                        {
                            CtrlHome.ctrlHome.alarmId_2 = "";
                            CtrlHome.ctrlHome.panel_video2.BackgroundImage = Properties.Resources.小监控窗口紫色;
                        }
                        else if (CtrlHome.ctrlHome.alarmId_3 == id)
                        {
                            CtrlHome.ctrlHome.alarmId_3 = "";
                            CtrlHome.ctrlHome.panel_video3.BackgroundImage = Properties.Resources.小监控窗口紫色;
                        }
                        else if (CtrlHome.ctrlHome.alarmId_4 == id)
                        {
                            CtrlHome.ctrlHome.alarmId_4 = "";
                            CtrlHome.ctrlHome.panel_video4.BackgroundImage = Properties.Resources.小监控窗口紫色;
                        }*/
                   }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("编辑失败:" + ex, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (e.ColumnIndex == 6)
            {
                //定位
                DataGridViewRow row = dataGridView1.Rows[e.RowIndex];
                string alarmDirection = row.Cells["alarmDirection"].Value.ToString();
                string[] sArray = alarmDirection.Split(',');
                if (sArray.Length != 2) return;
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/toPosition" + "?userId=" + m_lUserID
                    + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&horizontalAngle=" + sArray[0].ToString() + "&verticalAngle=" + sArray[1].ToString();
                string result = Http.http(conStr, "GET", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
            }
            else if (e.ColumnIndex == 7)
            {
                //播放录像
                if (ConfigHelper.GetAppConfig("hasNVR") == "1")
                {
                    DateTime startTime = Convert.ToDateTime(dataGridView1.Rows[e.RowIndex].Cells["alarmTime"].Value.ToString()).AddSeconds(-10);
                    DateTime endTime = startTime.AddSeconds(20);
                    take_Video(CtrlHome.userIdNVR, startTime, endTime);
                }
                else
                {
                    playRadio(e.RowIndex);
                }
            }
        }
        public void take_Video(int m_lUserID, DateTime dateTimeStart, DateTime dateTimeEnd)
        {
            try {
                // 如果已经正在回放,先停止回放;暂停实时播放
                if (rt_lRealHandle >= 0)
                {
                    CHCNetSDK.NET_DVR_StopRealPlay(rt_lRealHandle);
                    rt_lRealHandle = -1;
                }
                CHCNetSDK.NET_DVR_StopPlayBack(rt_lBackHandle);
            }
            catch (Exception e) { }
            CHCNetSDK.NET_DVR_VOD_PARA struVodPara = new CHCNetSDK.NET_DVR_VOD_PARA();
            struVodPara.dwSize = (uint)Marshal.SizeOf(struVodPara);
            struVodPara.struIDInfo.dwChannel = (uint)CtrlHome.iChannelNum[index]; //通道号 Channel number  
            struVodPara.hWnd = pictureBox1.Handle;//回放窗口句柄

            //设置回放的开始时间 Set the starting time to search video files
            struVodPara.struBeginTime.dwYear = (uint)dateTimeStart.Year;
            struVodPara.struBeginTime.dwMonth = (uint)dateTimeStart.Month;
            struVodPara.struBeginTime.dwDay = (uint)dateTimeStart.Day;
            struVodPara.struBeginTime.dwHour = (uint)dateTimeStart.Hour;
            struVodPara.struBeginTime.dwMinute = (uint)dateTimeStart.Minute;
            struVodPara.struBeginTime.dwSecond = (uint)dateTimeStart.Second;

            //设置回放的结束时间 Set the stopping time to search video files
            struVodPara.struEndTime.dwYear = (uint)dateTimeEnd.Year;
            struVodPara.struEndTime.dwMonth = (uint)dateTimeEnd.Month;
            struVodPara.struEndTime.dwDay = (uint)dateTimeEnd.Day;
            struVodPara.struEndTime.dwHour = (uint)dateTimeEnd.Hour;
            struVodPara.struEndTime.dwMinute = (uint)dateTimeEnd.Minute;
            struVodPara.struEndTime.dwSecond = (uint)dateTimeEnd.Second;

            //按时间回放 Playback by time
            rt_lBackHandle = CHCNetSDK.NET_DVR_PlayBackByTime_V40(m_lUserID, ref struVodPara);
            if (rt_lBackHandle < 0)
            {
                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                string str = "NET_DVR_PlayBackByTime_V40 failed, error code= " + iLastErr;
                MessageBox.Show(str);
                return;
            }

            uint iOutValue = 0;
            if (!CHCNetSDK.NET_DVR_PlayBackControl_V40(rt_lBackHandle, CHCNetSDK.NET_DVR_PLAYSTART, IntPtr.Zero, 0, IntPtr.Zero, ref iOutValue))
            {
                uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
                string str = "NET_DVR_PLAYSTART failed, error code= " + iLastErr; //回放控制失败,输出错误号
                MessageBox.Show(str);
                return;
            }
        }
        public void playRadio(int RowIndex)
        {
            //播放录像
            try
            {
                if (RowIndex > dataGridView1.RowCount || RowIndex < 0)
                {
                    MessageBox.Show("此段无视频");
                    return;
                }
                
                DataGridViewRow row = dataGridView1.Rows[RowIndex];
               
                DateTime endTime = Convert.ToDateTime(row.Cells["alarmTime"].Value.ToString());
                DateTime startTime = endTime.AddMinutes(-2);
                string[] arr = Directory.GetFiles(ConfigHelper.GetAppConfig("saveImagePath").Trim() + monitorName);
                if (arr.Length == 0) return;
                else
                {
                    int length = arr[0].Split('\\').Length;
                    for (int i = 0; i < arr.Length; i++)
                    {
                        string str = arr[i].Split('\\')[length - 1].Remove(10, 1).Insert(10, " ").Remove(13, 1).Insert(13, ":").Remove(16, 1).Insert(16, ":");
                        DateTime datetime = Convert.ToDateTime(str.Substring(0,str.Length-4));
                        if (datetime >= startTime && datetime <= endTime)
                        {
                            //string sVideoFileName = ConfigHelper.GetAppConfig("saveImagePath").Trim() + monitorName + "\\" + arr[i];
                            Process.Start(arr[i]);
                            return;
                        }
                    }
                }
            }
            catch
            {
                playRadio(RowIndex + 1);
            }
        }
        private void label_presetListDown_Click(object sender, EventArgs e)
        {
            cbBox_presetList.DroppedDown = true;
        }

        private void cbBox_lineList_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbBox_lineList.SelectedItem == null)
            {
                selectLineValue = "";
                return;
            } 
            txt_line.Text = cbBox_lineList.SelectedItem.ToString();
            selectLineValue = findSelectValue(LineArr, cbBox_lineList.SelectedItem.ToString());
            txt_preset.Text = "";
            getPresetList();
        }

        private void cbBox_presetList_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbBox_presetList.SelectedItem == null)
            {
                selectPresetValue = "";
                return;
            }
            txt_preset.Text = cbBox_presetList.SelectedItem.ToString();
            selectPresetValue = findSelectValue(PresetArr, cbBox_presetList.SelectedItem.ToString());
        }
      
        private void btn_zoomIn_Click_1(object sender, EventArgs e)
        {

        }

        private void CtrlRealTime_Load(object sender, EventArgs e)
        {
            //int a = 1;
        }

       /* private void list_allPoint_Scroll(object sender, ScrollEventArgs e)
        {
            int offSetValue = list_allPoint.HorizontalScrollingOffset;

            try
            {
                list_allPoint.HorizontalScrollingOffset = offSetValue;
            }
            catch { }

            list_allPoint.Invalidate();
        }*/

        private void panel24_Click(object sender, EventArgs e) {
            preview();
        }

        private void cancel_alarm_one_Click(object sender, EventArgs e)
        {
            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/alarm/cancelAll" + "?monitorId=" + monitorId;
            string result = Http.http(conStr, "GET", null);
            if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
            else
            {
                MessageBox.Show(ip + "一键消警成功");
                getDataGridViewData();
            }
        }

        private void cancel_alarm_all_Click(object sender, EventArgs e)
        {
            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/alarm/cancelAll" + "?monitorId=";
            string result = Http.http(conStr, "GET", null);
            if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
            else
            {
                MessageBox.Show("所有设备一键消警成功");
                getDataGridViewData();
            }
        }

        private void label13_Click(object sender, EventArgs e)
        {
            cbBox_lineList.DroppedDown = true;
        }

        private void tog_clean_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (tog_clean.Checked)
                {
                    if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                    {
                        CHCNetSDK.NET_DVR_PTZControl(m_lRealHandle, CHCNetSDK.WIPER_PWRON, 0);
                    }
                    else
                    {
                        string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/control" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=clean&isStop=0";
                        string result = Http.http(conStr, "GET", null);
                        if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                        return;
                    }
                    new Thread(new ThreadStart(() =>
                    {
                        Thread.Sleep(10000);
                        tog_clean.Checked = false;
                    })).Start();
                }
                else
                {
                    if (ConfigHelper.GetAppConfig("controlType").ToString().Trim() == "1")
                    {
                        CHCNetSDK.NET_DVR_PTZControl(m_lRealHandle, CHCNetSDK.WIPER_PWRON, 1);
                    }
                    else
                    {
                        string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/control" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip + "&command=clean&isStop=1";
                        string result = Http.http(conStr, "GET", null);
                        if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                        return;
                    }
                }
            }
            catch (Exception ex) { }
        }

        // 电源开关
        private void tog_switch_CheckedChanged(object sender, EventArgs e)
        {
            // HCNet/doorControl?deviceIpPort = &status =,其中deviceIpPort为ip和端口号 用英文逗号","隔开;status  1:开启,0:关闭
            try
            {
                if (tog_switch.Checked)
                {
                    DialogResult dr = MessageBox.Show("是否确认打开云台电源?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                    if (dr == DialogResult.OK)
                    {
                        string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/doorControl" +
                            "?deviceIpPort=" + ip + "," + port + "&status=1";
                        string result = Http.http(conStr, "GET", null);
                        if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                        return;
                    }
                    else
                    {
                        return;
                    }
                }
                else
                {
                    DialogResult dr = MessageBox.Show("是否确认关闭云台电源?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                    if (dr == DialogResult.OK)
                    {
                        string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/doorControl" +
                            "?deviceIpPort=" + ip + "," + port + "&status=0";
                        string result = Http.http(conStr, "GET", null);
                        if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                        return;
                    }
                    else
                    {
                        return;
                    }
                }
            }
            catch (Exception ex) { }
        }

        private void track_speed_Scroll(object sender, EventArgs e)
        {
            speed = track_speed.Value;
        }

        public bool checkParam()
        {
            try
            {
                string pattern = @"^[1-9]\d*$";
                // 巡航速度,要求1-63整数
                if (!System.Text.RegularExpressions.Regex.IsMatch(txt_speed.Text.Trim(), pattern))
                {
                    MessageBox.Show("请输入正确的巡航速度(1-63整数)");
                    return false;
                }
                else if (Convert.ToInt16(txt_speed.Text) < 1 || Convert.ToInt16(txt_speed.Text) > 63)
                {
                    MessageBox.Show("请输入正确的巡航速度(1-63整数)");
                    return false;
                }
                // 停留时间,要求0-255整数
                if (!System.Text.RegularExpressions.Regex.IsMatch(txt_presetStop.Text.Trim(), @"^\d+$"))
                {
                    MessageBox.Show("请输入正确的停留时间(0-255整数)");
                    return false;
                }
                else if ( Convert.ToInt16(txt_presetStop.Text) > 255 )
                {
                    MessageBox.Show("请输入正确的停留时间(0-255整数)");
                    return false;
                }
                // 报警阈值,要求大于0整数
                if (!System.Text.RegularExpressions.Regex.IsMatch(txt_presetThreshold.Text.Trim(), pattern))
                {
                    MessageBox.Show("请输入正确的报警阈值(大于0整数)");
                    return false;
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show("参数有误,请核对输入");
                return false;
            }
            return true;
        }
        private void btn_presetInsert_Click(object sender, EventArgs e)
        {
            try
            {
                if (checkInputbyCheck(true))
                {
                    if(cbBox_presetList.Items.Count >= 200 && !cbBox_presetList.Items.Contains(txt_preset.Text.Trim()))
                    {
                        MessageBox.Show("每条巡航线支持200个巡航点,本条巡航先已达到。");
                        return;
                    }
                    if(checkParam())
                    {
                        DialogPointInsert cancel = new DialogPointInsert();
                        if (cancel.ShowDialog() == DialogResult.OK) { }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("插入预置点失败,请核对输入");
            }
        }
        
        // 插入预置点
        public void insertPoint(string name)
        {
            if(cbBox_presetList.Items.Contains(name))
            {
                MessageBox.Show("当前巡航线已存在" + name + ",请重新命名");
                return;
            }
            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/preset" + "?userId=" + m_lUserID + "&realHandle=" + m_lRealHandle + "&deviceIp=" + ip +
                        "&command=presetInsert&&presetIndex=" + selectPresetValue + "&cruiseRoute=" + selectLineValue + 
                        "&cruiseName=" + txt_line.Text + "&presetName=" + name +
                        "&speed=" + txt_speed.Text + "&stopTime=" + txt_presetStop.Text + "&direction=" + label_angleD.Text +
                        "&pitch=" + label_angleP.Text + "&alarmValue=" + txt_presetThreshold.Text;

            string result = Http.http(conStr, "GET", null);
            if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False")
            {
                MessageBox.Show("插入预置点失败");
            }
            else
            {
                MessageBox.Show("插入预置点成功");
                getLineList();
            }
            getAngle();
        }

        // 预置点列表上方下拉框
        private void txt_line_TextChanged(object sender, EventArgs e)
        {
            if ( cbBox_lineList.Items.Contains(txt_line.Text) )
            {
                cbBox_lineList.SelectedItem = txt_line.Text;
            }
            else
            {
                cbBox_lineList.SelectedItem = null;
                cbBox_presetList.SelectedItem = null;
                cbBox_presetList.Items.Clear();
                txt_preset.Text = "";
                selectLineValue = "";
                selectPresetValue = ""; 
            }
        }
        
        private void txt_preset_TextChanged(object sender, EventArgs e)
        {
            if ( cbBox_presetList.Items.Contains(txt_preset.Text) )
            {
                cbBox_presetList.SelectedItem = txt_preset.Text;
            }
            else
            {
                cbBox_presetList.SelectedItem = null;
                selectPresetValue = "";
            }
        }

        private void cb_allLine_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                cb_allLine.Enabled = false;
                if (cb_allLine.SelectedItem == null) return;
                txt_allLine.Text = cb_allLine.SelectedItem.ToString();
                getPointsViewData();
                cb_allLine.Enabled = true;
            }
            catch (Exception ex) { }
        }

        private void btn_lineEdit_Click(object sender, EventArgs e)
        {
            if (checkInputbyCheck(false))
            {
                if (cbBox_lineList.SelectedItem == null)
                {
                    MessageBox.Show("请选择巡航号");
                    return;
                }
                DialogLineEdit cancel = new DialogLineEdit(ip, selectLineValue, cbBox_lineList.SelectedItem.ToString());
                if(cancel.ShowDialog() == DialogResult.OK) { }
            }
        }

        private void btn_lineDel_Click(object sender, EventArgs e)
        {
            if (checkInputbyCheck(false))
            {
                DialogResult dr = MessageBox.Show("是否确认删除" + txt_line.Text + "航线?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (dr == DialogResult.OK)
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/cruiseRoute"
                       + "?deviceIp=" + ip + "&command=cruiseDelete&cruiseValue=" + selectLineValue + "&cruiseName=" + txt_line.Text;
                    string result = Http.http(conStr, "POST", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                    else
                    {
                        MessageBox.Show("删除成功!");
                        getLineList();
                    }
                }
            }
        }
        
        public string findSelectValue(JArray arr, string selectName)
        {
            for (int i = 0; i < arr.Count; i++)
            {
                if (arr[i]["selectName"].ToString() == selectName)
                {
                    return arr[i]["selectValue"].ToString();
                }
            }
            return "";
        }

        public bool checkInputbyCheck(bool checkPreset)
        {
            if (txt_line.Text.Trim() == "")
            {
                MessageBox.Show("请输入巡航号");
                return false;
            }
            if (!cbBox_lineList.Items.Contains(txt_line.Text.Trim()))
            {
                MessageBox.Show("不存在输入的巡航号,请重新选择");
                return false;
            }
            if (checkPreset)
            {
                if (txt_preset.Text.Trim() == "")
                {
                    MessageBox.Show("请选择预置点号");
                    return false;
                }
                if (!cbBox_presetList.Items.Contains(txt_preset.Text.Trim()))
                {
                    MessageBox.Show("不存在输入的预置点,请重新选择");
                    return false;
                }
            }
            return true;
        }

        // 自检
        private void btn_restart_Click(object sender, EventArgs e)
        {
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/setPreset" + "?deviceIp=" + ip + "&command=" + "79";
                    string result = Http.http(conStr, "GET", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                    else
                    {
                        MessageBox.Show("自检成功");
                    }
                    return;
                }
                catch (Exception ex) { }
            })).Start();
         
        }

        // 复位
        private void btn_exefw_Click(object sender, EventArgs e)
        {
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/specialControl" + "?deviceIp=" + ip + "&command=" + "restart" + "&value=";
                    string result = Http.http(conStr, "POST", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                    else
                    {
                        MessageBox.Show("复位成功");
                    }
                    return;
                }
                catch(Exception ex) { }
            })).Start();
        }

        private void label23_Click(object sender, EventArgs e)
        {
            cb_allLine.DroppedDown = true;
        }

        // 全局报警阈值修改
        private void txt_therod_TextChanged(object sender, KeyEventArgs e)
        {
            if (e.KeyCode != Keys.Enter)
            {
                return;
            }
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    if (txt_therod.Text.Trim() == "")
                    {
                        DialogResult dr = MessageBox.Show("全局报警阈值不能设置空,是否置为默认值5000?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                        if (dr == DialogResult.OK)
                        {
                            txt_therod.Text = "5000";
                        }
                        else
                        {
                            return;
                        }
                    }
                    if (allHigh == txt_therod.Text.Trim()) return;
                    if (!System.Text.RegularExpressions.Regex.IsMatch(txt_therod.Text.Trim(), @"^[1-9]\d*$"))
                    {
                        MessageBox.Show("请输入正确的全局报警阈值(大于0整数)");
                        return;
                    }
                    // 全局报警阈值设置(特殊定制指令)
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/specialControl" +
                           "?deviceIp=" + ip + "&command=" + "68" + "&value=" + txt_therod.Text.Trim();
                    string result = Http.http(conStr, "POST", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                    else
                    {
                        MessageBox.Show("全局报警阈值设置成功");
                        getPointsViewData();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("请输入正确的全局报警阈值(大于0整数)");
                }
            })).Start();
        }

        // 全局巡航速度修改
        private void txt_allSpeed_TextChanged(object sender, KeyEventArgs e)
        {
            if (e.KeyCode != Keys.Enter)
            {
                return;
            }
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    if (txt_allSpeed.Text.Trim() == "")
                    {
                        DialogResult dr = MessageBox.Show("全局巡航速度不能设置空,是否置为默认值30?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                        if (dr == DialogResult.OK)
                        {
                            txt_allSpeed.Text = "30";
                        }
                        else
                        {
                            return;
                        }
                    }
                    if (allSpeed == txt_allSpeed.Text.Trim()) return;
                    if (!System.Text.RegularExpressions.Regex.IsMatch(txt_allSpeed.Text.Trim(), @"^[1-9]\d*$"))
                    {
                        MessageBox.Show("请输入正确的全局巡航速度(1-63整数)");
                        return;
                    }
                    else if (Convert.ToInt16(txt_allSpeed.Text) < 1 || Convert.ToInt16(txt_allSpeed.Text) > 63)
                    {
                        MessageBox.Show("请输入正确的全局巡航速度(1-63的整数)");
                        return;
                    }
                    // 一键巡检速度设置(特殊定制指令)
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/specialControl" +
                           "?deviceIp=" + ip + "&command=" + "99" + "&value=" + txt_allSpeed.Text.Trim();
                    string result = Http.http(conStr, "POST", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                    else
                    {
                        MessageBox.Show("全局巡检速度设置成功");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("请输入正确的全局巡航速度(1-63的整数)");
                }
            })).Start();
        }

        private void btn_clearAll_Click(object sender, EventArgs e)
        {
            DialogResult dr = MessageBox.Show("是否确认一键删除该设备所有预置点?" , "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (dr == DialogResult.OK)
            {
                string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/specialControl" +
                         "?deviceIp=" + ip + "&command=" + "65136";
                string result = Http.http(conStr, "POST", null);
                if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                else
                {
                    MessageBox.Show("删除成功!");
                    getLineList();
                }
            }
        }

        // 全局停留时间修改
        private void txt_allStop_TextChanged(object sender, KeyEventArgs e)
        {
            if (e.KeyCode != Keys.Enter)
            {
                return;
            }
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    if (txt_allStop.Text.Trim() == "")
                    {
                        DialogResult dr = MessageBox.Show("全局停留时间不能设置空,是否置为默认值3?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                        if (dr == DialogResult.OK)
                        {
                            txt_allStop.Text = "3";
                        }
                        else
                        {
                            return;
                        }
                    }
                    if (allStop == txt_allStop.Text.Trim()) return;
                    if (!System.Text.RegularExpressions.Regex.IsMatch(txt_allStop.Text.Trim(), @"^\d+$"))
                    {
                        MessageBox.Show("请输入正确的全局停留时间(0-255的整数)");
                        return;
                    }
                    else if (Convert.ToInt16(txt_allStop.Text) > 255)
                    {
                        MessageBox.Show("请输入正确的全局停留时间(0-255的整数)");
                        return;
                    }
                    // 一键巡检速度设置(特殊定制指令)
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/specialControl" +
                           "?deviceIp=" + ip + "&command=" + "9A" + "&value=" + txt_allStop.Text.Trim();
                    string result = Http.http(conStr, "POST", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                    else
                    {
                        MessageBox.Show("全局停留时间设置成功");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("请输入正确的全局停留时间(0-255的整数)");
                }
            })).Start();
        }

        // 全局检测角度修改
        private void txt_allAngle_TextChanged(object sender, KeyEventArgs e)
        {
            if (e.KeyCode != Keys.Enter)
            {
                return;
            }
            new Thread(new ThreadStart(() =>
            {
                try
                {
                    if (txt_allAngle.Text.Trim() == "")
                    {
                        DialogResult dr = MessageBox.Show("全局检测角度不能设置空,是否置为默认值5?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                        if (dr == DialogResult.OK)
                        {
                            txt_allAngle.Text = "5";
                        }
                        else
                        {
                            return;
                        }
                    }
                    if (allAngle == txt_allAngle.Text.Trim()) return;
                    if (!System.Text.RegularExpressions.Regex.IsMatch(txt_allAngle.Text.Trim(), @"^(\d+)(\.\d{1})?$"))
                    {
                        MessageBox.Show("请输入检测全局偏移角度(0-25.5的整数或一位小数)");
                        return;
                    }
                    else if (Convert.ToDouble(txt_allAngle.Text.Trim()) > 25.5)
                    {
                        MessageBox.Show("请输入检测全局偏移角度(0-25.5的整数或一位小数)");
                        return;
                    }
                    double angle = Convert.ToDouble(txt_allAngle.Text.Trim()) * 10;
                    string paramAngle = ((int)angle).ToString();
                    // 一键检测角度设置(特殊定制指令)
                    string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/HCNet/specialControl" +
                           "?deviceIp=" + ip + "&command=" + "94" + "&value=" + paramAngle;
                    string result = Http.http(conStr, "POST", null);
                    if (result == "" || ((JObject)JsonConvert.DeserializeObject(result))["success"].ToString() == "False") { }
                    else
                    {
                        MessageBox.Show("全局检测偏移角度设置成功");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("请输入检测全局偏移角度(0-25.5的整数或一位小数)");
                }
            })).Start();
        }
        public bool checkInCruise()
        {
            string conStr = "http://" + ConfigHelper.GetAppConfig("server").Trim() + "/alarm/alarmRule" + "?monitorId=" + monitorId;
            string result = Http.http(conStr, "GET", null);
            JObject json = (JObject)JsonConvert.DeserializeObject(result);
            if (result == "" || json["success"].ToString() == "False") { }
            else
            {
                JObject data = (JObject)JsonConvert.DeserializeObject(json["data"].ToString());
                string cruise = data["cruise"].ToString();

            }
            return true;
        }
    }

}