已重命名1个文件
已修改70个文件
已添加5个文件
2871 ■■■■■ 文件已修改
LB_SmartVision/Form1.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/CreateProductForm.Designer.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/CreateProductForm.resx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CameraForm.Designer.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CameraForm.resx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CamerasEditPage.Designer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.Designer.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.resx 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.Designer.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorsEditPage.Designer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.Designer.cs 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.resx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/MESPage/MESEditPage.Designer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlEditPage.Designer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/ProcessPage/ProcessInputsSelectForm.Designer.cs 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/ProcessPage/ProcessInputsSelectForm.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/ProcessPage/ProcessInputsSelectForm.resx 180 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/ProcessPage/ProcessOutputsSelectForm.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/ProcessPage/ProcessPage.Designer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/ProcessPage/ProcessPage.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/SettingPage/CsvPage.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/SettingPage/CsvSettingControl.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/SettingPage/LayoutPage.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/SettingPage/LayoutSettingControl.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/SettingPage/RunSettingPage.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/SettingPage/SettingEditPage.Designer.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/LB_SmartVision.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/ProcessRun/ProcessRunBll.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/VisionForm.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/VisionForm.cs 561 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/log4net.config 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVisionCommon/UserData.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/ScriptEditControl/ClassFileList.Designer.cs 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/ScriptEditControl/ClassFileList.resx 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/ScriptEditControl/ComplieUI.Designer.cs 262 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/ScriptEditControl/ComplieUI.resx 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/ScriptEditControl/ConsoleTextBox.resx 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/ScriptEditControl/ScriptEditControl.Designer.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/ScriptEditControl/ScriptEditForm.Designer.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/UserHSmartWindowControl.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionControl/UserHSmartWindowControl.resx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionFlowNode/FlowNodeEditor.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionFlowNode/IFlowContext.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionFlowNode/MainForm.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionFlowNode/MainForm.resx 272 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.resx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobTool.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.resx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.resx 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.resx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.Designer.cs 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.resx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HMulitModelControl.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Cameras/2DCameraForm.Designer.cs 274 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Cameras/2DCameraForm.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Cameras/HRCameras/HRCamera.cs 199 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Communicators/CommunicatorForm.Designer.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Communicators/CommunicatorForm.resx 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Communicators/MES/LBMES.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Forms/GlobalVarControl.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Forms/GlobalVarForm.Designer.cs 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/LB_VisionProcesses.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/ProcessEditForm.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/ProcessEditForm.resx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/Processes/ScriptTool/ScriptToolEdit.Designer.cs 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
LB_VisionProcesses/ref/MVSDKmd.dll 补丁 | 查看 | 原始文档 | blame | 历史
LB_SmartVision/Form1.Designer.cs
@@ -71,8 +71,8 @@
            // 
            // Form1
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(800, 450);
            Controls.Add(materialTabControl1);
            Name = "Form1";
LB_SmartVision/Forms/CreateProductForm.Designer.cs
@@ -148,7 +148,8 @@
            // 
            // CreateProductForm
            // 
            AutoScaleMode = AutoScaleMode.None;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            ClientSize = new Size(507, 309);
            ControlBox = false;
LB_SmartVision/Forms/CreateProductForm.resx
@@ -121,7 +121,7 @@
  <data name="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
        wgAADsIBFShKgAAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        wQAADsEBuJFr7QAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
LB_SmartVision/Forms/Pages/CameraPage/CameraForm.Designer.cs
@@ -451,7 +451,8 @@
            // 
            // CameraForm
            // 
            AutoScaleMode = AutoScaleMode.None;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(900, 600);
            Controls.Add(themeForm1);
            FormBorderStyle = FormBorderStyle.None;
LB_SmartVision/Forms/Pages/CameraPage/CameraForm.resx
@@ -121,7 +121,7 @@
  <data name="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
        vgAADr4B6kKxwAAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        vQAADr0BR/uQrQAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
LB_SmartVision/Forms/Pages/CameraPage/CamerasEditPage.Designer.cs
@@ -132,6 +132,8 @@
            // 
            // CamerasEditPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(tableLayoutPanel1);
            Name = "CamerasEditPage";
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.Designer.cs
@@ -150,7 +150,7 @@
            controlBox1.EnableMaximizeButton = true;
            controlBox1.EnableMinimizeButton = true;
            controlBox1.ForeColor = Color.FromArgb(155, 155, 155);
            controlBox1.Location = new Point(405, 12);
            controlBox1.Location = new Point(407, 18);
            controlBox1.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
            controlBox1.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
            controlBox1.Name = "controlBox1";
@@ -160,7 +160,8 @@
            // 
            // CreateCameraForm
            // 
            AutoScaleMode = AutoScaleMode.None;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(507, 309);
            ControlBox = false;
            Controls.Add(uiComboBoxSN);
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.cs
@@ -1,4 +1,5 @@
using LB_VisionProcesses.Cameras;
using LB_VisionProcesses.Cameras.HRCameras;
using RJCP.IO.Ports;
using System;
using System.Collections.Concurrent;
LB_SmartVision/Forms/Pages/CameraPage/CreateCameraForm.resx
@@ -120,25 +120,25 @@
  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <data name="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPiSURBVFhH7VZLiBxlEG7d+IjBKKtktqt6d8kybLqqZyfi
        +lgUXcGooKIXxYBKLgZFQVDwgQhBvAVzUOPBi3iJgnoSCcTLKobEma7qHeOiuB7UiBo1PuIjq9HNSPX0
        rDN/zyzbQjztB9+pv3r8/19dVZ63ilUUwBzzmbppGOpRcKlEcLNwcGfMsE0J7ogj//okws2NamlD83Zv
        wLX9z2h63ulz7I8kDNsSxleF8CMl+EEY/lDCv5TxbyU8oQTHlfCIEL5kSbh+CqPpeafVIxgWwieUcU4I
        /lTGZl8SnEgI3pBxPzTbOQ4Gkyi4pxEGFTuE639ZpFfNcIsS1LJT5gN28xdl3Cnj/oVmP7t59Hwl3K0M
        C8owL4zbG9XSOjdOT5hQCB5Rxu97BMqT4BsJ4X6Z9M8x+483XXCuEO5KnyjTCOGvSvjMAQ4G3XhdODAV
        rBWGHUL4Wy5Qb34Sk3/rzLS3xuwtCSV8ShmOu1p7wpjwBRkbO8+Nm6LpeQMxwX3Suk43ULczxpPKKLOR
        f+WO7H1bz4YPpaftYdMiLMQET5rWje/FhJfHhF/kjXJcVIZ3tIJVKzazfc3zBpTwLmU82kPfRWH8Lg79
        67qC76uW1mkEr2Qnyxl1GC8K49uNEMbbtpZEjeBaXVnymR/Y2/UUNQqutn/bFTpcVMZ9ykF5ydDzvEMV
        P4wZtYe+L+2Z4hBvSh3YP6rs71zu9PZNGN7tPLnBqloIXl/Oth+F4MW0eO0qlPA9V9BFwtlZhos6g89M
        T69JGB/Xjt+tIDXtG41qaaMwftZDkBG+TAi2tAuuDaHhq4Thq7x+pYSvNRoiL54IJqwy84L05L8LwwPu
        cLFOJ4Rv5vQFKAQ/xRxc1jeB9F0J9rxfHlzfGdxQD2GrJefaFGI7gfrEyJgwfp4X4GEN/Uk3+H5rtQx7
        c/qCFIIjNSpFrcHBcLDro1U94a52i+1EHPoXC+VvrCiF4cNDlY2ltIsJwXOO4KiEOOUGN9jykc7/Hk4L
        kWDPUkuWKLhBGY79+xH32824wQ3WcsWWENdhAdqktG1qyakVWszw1pKI8GW7ma7IGbQydImNYNdpIRLU
        4nDE73JcJ9gihN9mCexuTzkX2dR7TAh+zDleAa0N1wnvdvuKJ5OTZ9j6JQwL1l57jswMM6OjZ8eEN0q6
        I8KnynjMVjKbF1lbPtlq3ykXW1tVuh39LITP992O5suD65XhWSH4QGlo1P3uYr5cPst0thckjLcp473K
        8LBYiyb/0YTwQdsLNYStlnASwRX9amsJaZcL8WkJcXu/OjjlODwVrI0jvOZgZUPJ/fa/wYrEnQGrOBX4
        B6XRFGacFF+7AAAAAElFTkSuQmCC
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
        wgAADsIBFShKgAAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
        NNs5DgaTKLinEQYVO4Trf1mkV81wixLUslPmA3bzF2XcKeP+hWY/u3n0fCXcrQwLyjAvjNsb1dI6N05P
        mFAIHlHG73sEypPgGwnhfpn0zzH7jzddcK4Q7kqfKNMI4a9K+MwBDgbdeF04MBWsFYYdQvhbLlBvfhKT
        f+vMtLfG7C0JJXxKGY67WnvCmPAFGRs7z42boul5AzHBfdK6TjdQtzPGk8oos5F/5Y7sfVvPhg+lp+1h
        0yIsxARPmtaN78WEl8eEX+SNclxUhne0glUrNrN9zfMGlPAuZTzaQ99FYfwuDv3ruoLvq5bWaQSvZCfL
        GXUYLwrj240Qxtu2lkSN4FpdWfKZH9jb9RQ1Cq62f9sVOlxUxn3KQXnJ0PO8QxU/jBm1h74v7ZniEG9K
        Hdg/quzvXO709k0Y3u08ucGqWgheX862H4XgxbR47SqU8D1X0EXC2VmGizqDz0xPr0kYH9eO360gNe0b
        jWppozB+1kOQEb5MCLa0C64NoeGrhOGrvH6lhK81GiIvnggmrDLzgvTkvwvDA+5wsU4nhG/m9AUoBD/F
        HFzWN4H0XQn2vF8eXN8Z3FAPYasl59oUYjuB+sTImDB+nhfgYQ39STf4fmu1DHtz+oIUgiM1KkWtwcFw
        sOujVT3hrnaL7UQc+hcL5W+sKIXhw0OVjaW0iwnBc47gqIQ45QY32PKRzv8eTguRYM9SS5YouEEZjv37
        EffbzbjBDdZyxZYQ12EB2qS0bWrJqRVazPDWkojwZbuZrsgZtDJ0iY1g12khEtTicMTvclwn2CKE32YJ
        7G5PORfZ1HtMCH7MOV4BrQ3XCe92+4onk5Nn2PolDAvWXnuOzAwzo6Nnx4Q3SrojwqfKeMxWMpsXWVs+
        2WrfKRdbW1W6Hf0shM/33Y7my4PrleFZIfhAaWjU/e5ivlw+y3S2FySMtynjvcrwsFiLJv/RhPBB2ws1
        hK2WcBLBFf1qawlplwvxaQlxe786OOU4PBWsjSO85mBlQ8n99r/BisSdAas4FfgHpdEUZpwUX7sAAAAA
        SUVORK5CYII=
</value>
  </data>
</root>
LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorForm.Designer.cs
@@ -205,7 +205,8 @@
            // 
            // CommunicatorForm
            // 
            AutoScaleMode = AutoScaleMode.None;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(681, 401);
            Controls.Add(tableLayoutPanel1);
            Name = "CommunicatorForm";
LB_SmartVision/Forms/Pages/CommunicatorPage/CommunicatorsEditPage.Designer.cs
@@ -132,6 +132,8 @@
            // 
            // CommunicatorsEditPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(tableLayoutPanel1);
            ForeColor = SystemColors.Control;
LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.Designer.cs
@@ -45,7 +45,7 @@
            // 
            // uiLabelIP
            // 
            uiLabelIP.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            uiLabelIP.Font = new Font("宋体", 12F);
            uiLabelIP.ForeColor = Color.FromArgb(48, 48, 48);
            uiLabelIP.Location = new Point(84, 111);
            uiLabelIP.Name = "uiLabelIP";
@@ -55,7 +55,7 @@
            // 
            // uiLabelPort
            // 
            uiLabelPort.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            uiLabelPort.Font = new Font("宋体", 12F);
            uiLabelPort.ForeColor = Color.FromArgb(48, 48, 48);
            uiLabelPort.Location = new Point(84, 177);
            uiLabelPort.Name = "uiLabelPort";
@@ -65,7 +65,7 @@
            // 
            // uiButtonCancel
            // 
            uiButtonCancel.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            uiButtonCancel.Font = new Font("宋体", 12F);
            uiButtonCancel.Location = new Point(343, 234);
            uiButtonCancel.MinimumSize = new Size(1, 1);
            uiButtonCancel.Name = "uiButtonCancel";
@@ -76,22 +76,18 @@
            // 
            // uiTextBoxPort
            // 
            uiTextBoxPort.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            uiTextBoxPort.Font = new Font("宋体", 12F);
            uiTextBoxPort.Location = new Point(191, 175);
            uiTextBoxPort.Margin = new Padding(4, 5, 4, 5);
            uiTextBoxPort.MinimumSize = new Size(1, 16);
            uiTextBoxPort.Name = "uiTextBoxPort";
            uiTextBoxPort.Padding = new Padding(5);
            //uiTextBoxPort.ShowText = false;
            uiTextBoxPort.Size = new Size(205, 29);
            uiTextBoxPort.Size = new Size(205, 26);
            uiTextBoxPort.TabIndex = 5;
            //uiTextBoxPort.TextAlignment = ContentAlignment.MiddleLeft;
            //uiTextBoxPort.Watermark = "";
            uiTextBoxPort.TextChanged += uiTextBoxPort_TextChanged;
            // 
            // rButtonUART
            // 
            rButtonUART.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            rButtonUART.Font = new Font("宋体", 12F);
            rButtonUART.Location = new Point(51, 12);
            rButtonUART.MinimumSize = new Size(1, 1);
            rButtonUART.Name = "rButtonUART";
@@ -102,7 +98,7 @@
            // 
            // rButtonTCPServer
            // 
            rButtonTCPServer.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            rButtonTCPServer.Font = new Font("宋体", 12F);
            rButtonTCPServer.Location = new Point(51, 47);
            rButtonTCPServer.MinimumSize = new Size(1, 1);
            rButtonTCPServer.Name = "rButtonTCPServer";
@@ -113,7 +109,7 @@
            // 
            // rButtonTCPClient
            // 
            rButtonTCPClient.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            rButtonTCPClient.Font = new Font("宋体", 12F);
            rButtonTCPClient.Location = new Point(293, 47);
            rButtonTCPClient.MinimumSize = new Size(1, 1);
            rButtonTCPClient.Name = "rButtonTCPClient";
@@ -125,7 +121,7 @@
            // uiButtonCreate
            // 
            uiButtonCreate.Enabled = false;
            uiButtonCreate.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            uiButtonCreate.Font = new Font("宋体", 12F);
            uiButtonCreate.Location = new Point(191, 234);
            uiButtonCreate.MinimumSize = new Size(1, 1);
            uiButtonCreate.Name = "uiButtonCreate";
@@ -136,7 +132,7 @@
            // 
            // uiButtonTest
            // 
            uiButtonTest.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            uiButtonTest.Font = new Font("宋体", 12F);
            uiButtonTest.Location = new Point(31, 234);
            uiButtonTest.MinimumSize = new Size(1, 1);
            uiButtonTest.Name = "uiButtonTest";
@@ -147,55 +143,39 @@
            // 
            // uiComboBoxPort
            // 
            uiComboBoxPort.DataSource = null;
            //uiComboBoxPort.FillColor = Color.White;
            uiComboBoxPort.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            //uiComboBoxPort.ItemHoverColor = Color.FromArgb(155, 200, 255);
            //uiComboBoxPort.ItemSelectForeColor = Color.FromArgb(235, 243, 255);
            uiComboBoxPort.Font = new Font("宋体", 12F);
            uiComboBoxPort.Location = new Point(191, 108);
            uiComboBoxPort.Margin = new Padding(4, 5, 4, 5);
            uiComboBoxPort.MinimumSize = new Size(63, 0);
            uiComboBoxPort.Name = "uiComboBoxPort";
            uiComboBoxPort.Padding = new Padding(0, 0, 30, 2);
            uiComboBoxPort.Size = new Size(205, 29);
            //uiComboBoxPort.SymbolSize = 24;
            uiComboBoxPort.Size = new Size(205, 24);
            uiComboBoxPort.TabIndex = 11;
            //uiComboBoxPort.TextAlignment = ContentAlignment.MiddleLeft;
            //uiComboBoxPort.Watermark = "";
            uiComboBoxPort.MouseClick += uiComboBoxPort_MouseClick;
            // 
            // uiIPTextBox
            // 
            //uiIPTextBox.FillColor2 = Color.FromArgb(235, 243, 255);
            uiIPTextBox.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            uiIPTextBox.Font = new Font("宋体", 12F);
            uiIPTextBox.Location = new Point(191, 108);
            uiIPTextBox.Margin = new Padding(4, 5, 4, 5);
            uiIPTextBox.MinimumSize = new Size(1, 1);
            uiIPTextBox.Name = "uiIPTextBox";
            uiIPTextBox.Padding = new Padding(1);
            //uiIPTextBox.ShowText = false;
            uiIPTextBox.Size = new Size(205, 29);
            uiIPTextBox.Size = new Size(205, 26);
            uiIPTextBox.TabIndex = 12;
            //uiIPTextBox.TextAlignment = ContentAlignment.MiddleCenter;
            uiIPTextBox.MouseClick += uiIPTextBox_MouseClick;
            // 
            // uiTextBoxPath
            // 
            uiTextBoxPath.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            uiTextBoxPath.Font = new Font("宋体", 12F);
            uiTextBoxPath.Location = new Point(191, 108);
            uiTextBoxPath.Margin = new Padding(4, 5, 4, 5);
            uiTextBoxPath.MinimumSize = new Size(1, 16);
            uiTextBoxPath.Name = "uiTextBoxPath";
            uiTextBoxPath.Padding = new Padding(5);
            //uiTextBoxPath.ShowText = false;
            uiTextBoxPath.Size = new Size(205, 29);
            uiTextBoxPath.Size = new Size(205, 26);
            uiTextBoxPath.TabIndex = 13;
            //uiTextBoxPath.TextAlignment = ContentAlignment.MiddleLeft;
            //uiTextBoxPath.Watermark = "";
            // 
            // rButtonMonitor
            // 
            rButtonMonitor.Font = new Font("宋体", 12F, FontStyle.Regular, GraphicsUnit.Point);
            rButtonMonitor.Font = new Font("宋体", 12F);
            rButtonMonitor.Location = new Point(293, 12);
            rButtonMonitor.MinimumSize = new Size(1, 1);
            rButtonMonitor.Name = "rButtonMonitor";
@@ -206,8 +186,8 @@
            // 
            // CreateCommunicatorForm
            // 
            //AllowShowTitle = false;
            AutoScaleMode = AutoScaleMode.None;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(484, 285);
            ControlBox = false;
            Controls.Add(rButtonMonitor);
@@ -226,11 +206,9 @@
            MaximizeBox = false;
            MinimizeBox = false;
            Name = "CreateCommunicatorForm";
            Padding = new Padding(0);
            //ShowTitle = false;
            Text = "创建通讯";
            //ZoomScaleRect = new Rectangle(15, 15, 800, 450);
            ResumeLayout(false);
            PerformLayout();
        }
        #endregion
LB_SmartVision/Forms/Pages/CommunicatorPage/CreateCommunicatorForm.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
LB_SmartVision/Forms/Pages/MESPage/MESEditPage.Designer.cs
@@ -131,6 +131,8 @@
            // 
            // MESEditPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(tableLayoutPanel1);
            Name = "MESEditPage";
LB_SmartVision/Forms/Pages/MotionControlPage/MotionControlEditPage.Designer.cs
@@ -130,6 +130,8 @@
            // 
            // MotionControlEditPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(tableLayoutPanel1);
            ForeColor = SystemColors.Control;
LB_SmartVision/Forms/Pages/ProcessPage/ProcessControl.cs
@@ -101,7 +101,7 @@
                return false;
            }
            if (isCircleRuning || ProcessRunBll.bPruning)
            if (isCircleRuning || ProcessRunBll.bRuning)
                ProcessRunBll.LogInfo($"{ProcessRunBll.Name}正在运行", LogInfoType.ERROR);
            ProcessRunBll.Run();
LB_SmartVision/Forms/Pages/ProcessPage/ProcessInputsSelectForm.Designer.cs
@@ -30,7 +30,7 @@
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProcessInputsSelectForm));
            themeForm1 = new ReaLTaiizor.Forms.ThemeForm();
            panel = new ReaLTaiizor.Controls.Panel();
            panel = new Panel();
            controlBox1 = new ReaLTaiizor.Controls.ControlBox();
            themeForm1.SuspendLayout();
            SuspendLayout();
@@ -38,8 +38,8 @@
            // themeForm1
            // 
            themeForm1.BackColor = Color.FromArgb(32, 41, 50);
            themeForm1.Controls.Add(controlBox1);
            themeForm1.Controls.Add(panel);
            themeForm1.Controls.Add(controlBox1);
            themeForm1.Dock = DockStyle.Fill;
            themeForm1.Font = new Font("Microsoft Sans Serif", 9F);
            themeForm1.Image = (Image)resources.GetObject("themeForm1.Image");
@@ -52,20 +52,18 @@
            themeForm1.SmartBounds = true;
            themeForm1.StartPosition = FormStartPosition.WindowsDefaultLocation;
            themeForm1.TabIndex = 2;
            themeForm1.Text = "themeForm1";
            themeForm1.Text = "ProcessInputsSelectForm";
            // 
            // panel
            // 
            panel.BackColor = Color.FromArgb(39, 51, 63);
            panel.AutoScroll = true;
            panel.Dock = DockStyle.Fill;
            panel.EdgeColor = Color.FromArgb(32, 41, 50);
            panel.ForeColor = SystemColors.Control;
            panel.Location = new Point(10, 70);
            panel.Name = "panel";
            panel.Padding = new Padding(5);
            panel.Size = new Size(887, 405);
            panel.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            panel.TabIndex = 0;
            panel.Text = "panel1";
            panel.TabIndex = 2;
            panel.SizeChanged += panel_SizeChanged;
            // 
            // controlBox1
            // 
@@ -77,7 +75,7 @@
            controlBox1.EnableMaximizeButton = true;
            controlBox1.EnableMinimizeButton = true;
            controlBox1.ForeColor = Color.FromArgb(155, 155, 155);
            controlBox1.Location = new Point(804, 12);
            controlBox1.Location = new Point(807, 18);
            controlBox1.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
            controlBox1.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
            controlBox1.Name = "controlBox1";
@@ -87,14 +85,14 @@
            // 
            // ProcessInputsSelectForm
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(907, 484);
            Controls.Add(themeForm1);
            FormBorderStyle = FormBorderStyle.None;
            MinimumSize = new Size(261, 61);
            Name = "ProcessInputsSelectForm";
            Text = "themeForm1";
            Text = "ProcessInputsSelectForm";
            TransparencyKey = Color.Fuchsia;
            FormClosing += ProcessInputsSelectForm_FormClosing;
            themeForm1.ResumeLayout(false);
@@ -104,7 +102,7 @@
        #endregion
        private Button uiButtonOK;
        private ReaLTaiizor.Forms.ThemeForm themeForm1;
        private ReaLTaiizor.Controls.Panel panel;
        private ReaLTaiizor.Controls.ControlBox controlBox1;
        private Panel panel;
    }
}
LB_SmartVision/Forms/Pages/ProcessPage/ProcessInputsSelectForm.cs
@@ -18,6 +18,8 @@
        ProcessRunBll ProcessRunBll { get; set; }
        public string ProcessName = string.Empty;
        public ProcessInputsSelectForm()
        {
            InitializeComponent();
@@ -76,7 +78,7 @@
            if (res == DialogResult.Yes)  //保存
            {
                string ProcessName = this.Text;
                string ProcessName = this.ProcessName;
                List<Tuple<string, string>> tupleInputAndOutput = new List<Tuple<string, string>>();
                foreach (var control in listProcessInputsEditControl)
                {
LB_SmartVision/Forms/Pages/ProcessPage/ProcessInputsSelectForm.resx
@@ -120,167 +120,25 @@
  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <data name="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        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
        SW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWk
        tpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJb
        TGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0b
        gGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnU
        FpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqL
        SW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWk
        tpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJb
        TGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0b
        gGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnU
        FpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqL
        SW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWk
        tpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJb
        TGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0b
        gGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnU
        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
        tngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNw
        zKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2
        eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DM
        pLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4
        ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyk
        tpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngR
        LSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2
        mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEt
        JrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaY
        pHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0m
        tWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpik
        ecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1
        ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5
        yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVl
        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
        SUVORK5CYII=
</value>
  </data>
</root>
LB_SmartVision/Forms/Pages/ProcessPage/ProcessOutputsSelectForm.Designer.cs
@@ -109,8 +109,8 @@
            // 
            // ProcessOutputsSelectForm
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(39, 51, 63);
            ClientSize = new Size(679, 496);
            Controls.Add(tableLayoutPanel1);
LB_SmartVision/Forms/Pages/ProcessPage/ProcessPage.Designer.cs
@@ -125,6 +125,8 @@
            // 
            // ProcessPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(splitContainer1);
            Name = "ProcessPage";
LB_SmartVision/Forms/Pages/ProcessPage/ProcessPage.cs
@@ -124,14 +124,14 @@
                return;
            ProcessInputsSelectForm inputsSelectForm = new ProcessInputsSelectForm(ProcessName, ProcessRunBll);
            inputsSelectForm.Text = ProcessName;
            inputsSelectForm.ProcessName = ProcessName;
            inputsSelectForm.ShowDialog();
            ProcessRunBll.SaveInputs();
            ProcessRunBll.SaveOutputs();
            ProcessRunBll.CompileMappings();
            //string ProcessPath = GlobalVar.allProcessPath + ProcessRunBll.Name + "\\" + ProcessName + ".json";
            //((IProcess)dicSteps[ProcessName]).Load(ProcessPath);
            string ProcessPath = GlobalVar.allProcessPath + ProcessRunBll.Name + "\\" + ProcessName + ".json";
            ((IProcess)dicSteps[ProcessName]).Load(ProcessPath);
        }
        public void DeleteProcess(string ProcessName)
LB_SmartVision/Forms/Pages/SettingPage/CsvPage.Designer.cs
@@ -209,8 +209,8 @@
            // 
            // CsvPage
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(tableLayoutPanel1);
            Name = "CsvPage";
            Size = new Size(772, 535);
LB_SmartVision/Forms/Pages/SettingPage/CsvSettingControl.Designer.cs
@@ -101,8 +101,8 @@
            // 
            // CsvSettingControl
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(tableLayoutPanel1);
            Name = "CsvSettingControl";
            Size = new Size(807, 30);
LB_SmartVision/Forms/Pages/SettingPage/LayoutPage.Designer.cs
@@ -304,8 +304,8 @@
            // 
            // LayoutPage
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(tableLayoutPanel1);
            Name = "LayoutPage";
            Size = new Size(772, 535);
LB_SmartVision/Forms/Pages/SettingPage/LayoutSettingControl.Designer.cs
@@ -147,8 +147,8 @@
            // 
            // LayoutSettingControl
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(tableLayoutPanel1);
            Name = "LayoutSettingControl";
            Size = new Size(807, 30);
LB_SmartVision/Forms/Pages/SettingPage/RunSettingPage.Designer.cs
@@ -283,8 +283,8 @@
            // 
            // RunSettingPage
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(splitContainer);
            Margin = new Padding(2);
            Name = "RunSettingPage";
LB_SmartVision/Forms/Pages/SettingPage/SettingEditPage.Designer.cs
@@ -299,34 +299,36 @@
            // pageSetting
            // 
            pageSetting.BackColor = Color.FromArgb(32, 41, 50);
            pageSetting.Location = new Point(4, 38);
            pageSetting.Location = new Point(4, 36);
            pageSetting.Name = "pageSetting";
            pageSetting.Padding = new Padding(3);
            pageSetting.Size = new Size(858, 538);
            pageSetting.Size = new Size(858, 540);
            pageSetting.TabIndex = 1;
            pageSetting.Text = "运行设置";
            // 
            // pageLayout
            // 
            pageLayout.BackColor = Color.FromArgb(32, 41, 50);
            pageLayout.Location = new Point(4, 38);
            pageLayout.Location = new Point(4, 36);
            pageLayout.Name = "pageLayout";
            pageLayout.Size = new Size(858, 538);
            pageLayout.Size = new Size(858, 540);
            pageLayout.TabIndex = 2;
            pageLayout.Text = "流程布局";
            // 
            // pageCsv
            // 
            pageCsv.BackColor = Color.FromArgb(32, 41, 50);
            pageCsv.Location = new Point(4, 38);
            pageCsv.Location = new Point(4, 36);
            pageCsv.Name = "pageCsv";
            pageCsv.Padding = new Padding(3);
            pageCsv.Size = new Size(858, 538);
            pageCsv.Size = new Size(858, 540);
            pageCsv.TabIndex = 3;
            pageCsv.Text = "流程表格";
            // 
            // SettingEditPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(poisonTabControl1);
            Name = "SettingEditPage";
LB_SmartVision/Forms/Pages/UserManagementPage/UserManagementEditPage.Designer.cs
@@ -130,6 +130,8 @@
            // 
            // UserManagementEditPage
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.FromArgb(32, 41, 50);
            Controls.Add(tableLayoutPanel1);
            ForeColor = SystemColors.Control;
LB_SmartVision/LB_SmartVision.csproj
@@ -14,6 +14,7 @@
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\LB_SmartVisionLoginUI\LB_SmartVisionLoginUI.csproj" />
    <ProjectReference Include="..\LB_VisionControl\LB_VisionControl.csproj" />
    <ProjectReference Include="..\LB_VisionFlowNode\LB_VisionFlowNode.csproj" />
    <ProjectReference Include="..\LB_VisionProcesses\LB_VisionProcesses.csproj" />
LB_SmartVision/ProcessRun/ProcessRunBll.cs
@@ -27,7 +27,9 @@
            foreach (var item in IProcess.dicProcesses)
            {
                if (NodeName.StartsWith(item.Key))
                {
                    return item.Value.ToString();
                }
            }
            return string.Empty;
@@ -41,7 +43,7 @@
        /// <summary>
        /// è¿è¡Œæ ‡è®°
        /// </summary>
        public bool bPruning
        public bool bRuning
        {
            set
            {
@@ -903,9 +905,8 @@
        /// <returns></returns>
        public bool Run()
        {
            bPruning = true;
            bRuning = true;
            bCompleted = false;
            DateTime StartTime = DateTime.Now;
            try
            {
@@ -921,30 +922,34 @@
                Result = false;
                Msg = string.Format("运行发送了意外{0}", ex.Message.Trim());
            }
            RunTime = (DateTime.Now - StartTime).TotalMilliseconds;
            bPruning = false;
            bRuning = false;
            bCompleted = true;
            if (Result)
            {
                total_OK++;
                Msg = "运行成功";
            }
            else
            {
                total_NG++;
            }
            if (IProcess.dicGlobalVars.ContainsKey($"{Name}.Result"))
            {
                IProcess.dicGlobalVars[$"{Name}.Result"] = Result;
            }
            else
            {
                IProcess.dicGlobalVars.TryAdd($"{Name}.Result", Result);
            }
            if (IProcess.dicGlobalVars.ContainsKey($"{Name}.Msg"))
            {
                IProcess.dicGlobalVars[$"{Name}.Msg"] = Msg;
            }
            else
            {
                IProcess.dicGlobalVars.TryAdd($"{Name}.Msg", Msg);
            }
            // æ‰‹åŠ¨è§¦å‘åžƒåœ¾å›žæ”¶
            GC.Collect();
            return Result;
LB_SmartVision/VisionForm.Designer.cs
@@ -189,6 +189,7 @@
            btn_Login.TabIndex = 3;
            btn_Login.Text = "用户登录";
            btn_Login.TextAlignment = StringAlignment.Center;
            btn_Login.Click += btn_Login_Click;
            // 
            // btn_GlobalVar
            // 
@@ -209,6 +210,7 @@
            btn_GlobalVar.TabIndex = 4;
            btn_GlobalVar.Text = "全局变量";
            btn_GlobalVar.TextAlignment = StringAlignment.Center;
            btn_GlobalVar.Click += btn_GlobalVar_Click;
            // 
            // com_ProductName
            // 
@@ -222,6 +224,7 @@
            com_ProductName.Name = "com_ProductName";
            com_ProductName.Size = new Size(152, 26);
            com_ProductName.TabIndex = 5;
            com_ProductName.SelectedValueChanged += com_ProductName_SelectedValueChanged;
            // 
            // materialTabSelector
            // 
@@ -330,6 +333,7 @@
            Name = "VisionForm";
            Text = "轮胎外观视觉检测系统";
            TransparencyKey = Color.Fuchsia;
            FormClosing += VisionForm_FormClosing;
            Load += VisionForm_Load;
            theme_VisionForm.ResumeLayout(false);
            sc_VisionForm.Panel1.ResumeLayout(false);
LB_SmartVision/VisionForm.cs
@@ -1,4 +1,5 @@
using HalconDotNet;
using LB_SmartVision.Forms;
using LB_SmartVision.Forms.Pages;
using LB_SmartVision.Forms.Pages.CameraPage;
using LB_SmartVision.Forms.Pages.CommunicatorPage;
@@ -9,10 +10,15 @@
using LB_SmartVision.Forms.Pages.UserManagementPage;
using LB_SmartVision.ProcessRun;
using LB_SmartVision.Tool;
using LB_SmartVisionCommon;
using LB_SmartVisionLoginUI;
using LB_VisionProcesses;
using LB_VisionProcesses.Cameras;
using LB_VisionProcesses.Cameras.HRCameras;
using LB_VisionProcesses.Communicators;
using LB_VisionProcesses.Communicators.TCom;
using LB_VisionProcesses.Forms;
using log4net.Config;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Sunny.UI;
@@ -229,9 +235,78 @@
        }
        private void LogInfo(string arg1, LogInfoType type)
        private void LogInfo(string strLog, LogInfoType infoType)
        {
            if (string.IsNullOrEmpty(strLog))
            {
                return;
            }
            string strInfo = DateTime.Now.ToString("[yyyy:MM:HH:mm:ss:fff] ");
            strInfo += strLog;
            if (infoType != LogInfoType.NOSHOW)
            {
                // å¦‚果当前不是 UI çº¿ç¨‹ï¼Œåˆ™é€šè¿‡ Invoke å°†æ“ä½œè°ƒåº¦åˆ° UI çº¿ç¨‹
                if (this.rich_Info.InvokeRequired)
                {
                    this.rich_Info.BeginInvoke(new Action<string>((msg) =>
                    {
                        if (this.rich_Info.Lines.Length > 1000)
                        {
                            this.rich_Info.Clear();
                        }
                        switch (infoType)
                        {
                            case LogInfoType.INFO:
                                this.rich_Info.SelectionColor = Color.Wheat;
                                break;
                            case LogInfoType.WARN:
                                this.rich_Info.SelectionColor = Color.LightGoldenrodYellow;
                                break;
                            case LogInfoType.PASS:
                                this.rich_Info.SelectionColor = Color.Green;
                                break;
                            case LogInfoType.ERROR:
                                this.rich_Info.SelectionColor = Color.Red;
                                break;
                        }
                        // æ›´æ–° UI æŽ§ä»¶ï¼Œæ¯”如显示接收到的消息
                        this.rich_Info.AppendText(strInfo);
                        this.rich_Info.AppendText("\r\n");
                        this.rich_Info.SelectionStart = this.rich_Info.Text.Length;
                        this.rich_Info.ScrollToCaret();
                    }), strInfo);
                }
                else
                {
                    if (this.rich_Info.Lines.Length > 1000)
                        this.rich_Info.Clear();
                    // å¦‚果已经在 UI çº¿ç¨‹ä¸Šï¼Œç›´æŽ¥æ›´æ–° UI
                    switch (infoType)
                    {
                        case LogInfoType.INFO:
                            this.rich_Info.SelectionColor = Color.Wheat;
                            break;
                        case LogInfoType.WARN:
                            this.rich_Info.SelectionColor = Color.Yellow;
                            break;
                        case LogInfoType.PASS:
                            this.rich_Info.SelectionColor = Color.Green;
                            break;
                        case LogInfoType.ERROR:
                            this.rich_Info.SelectionColor = Color.Red;
                            break;
                    }
                    this.rich_Info.AppendText(strInfo);
                    this.rich_Info.AppendText("\r\n");
                    this.rich_Info.SelectionStart = this.rich_Info.Text.Length;
                    this.rich_Info.ScrollToCaret();
                }
            }
            AsyncLogHelper.Info(strLog);
        }
        public static bool SaveAllLayout()
@@ -406,9 +481,36 @@
            }
            catch { return false; }
        }
        private void EnsureDirectory(string path)
        {
            // å¦‚果是相对路径,转换为绝对路径
            string fullPath = Path.IsPathRooted(path) ? path : Path.GetFullPath(path);
            if (!Directory.Exists(fullPath))
            {
                Directory.CreateDirectory(fullPath);
                LogInfo($"✅ ç›®å½•创建: {fullPath}", LogInfoType.INFO);
            }
            else
            {
                LogInfo($"ℹ️ ç›®å½•已存在: {fullPath}", LogInfoType.INFO);
            }
        }
        private void VisionForm_Load(object sender, EventArgs e)
        {
            XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
            string[] paths = {
            @"生产日志\Run_Log",
            @"生产日志\Debug_Log",
            @"生产日志\Error_Log",
            @"生产日志\Fatal",
            @"生产日志\Warn",
            };
            foreach (string path in paths)
            {
                EnsureDirectory(path);
            }
            if (!LB_SmartVision.Tool.Tool.ReadStringConfig("数据库名称", out string DateBaseName))
            {
                DateBaseName = "产品0";
@@ -417,71 +519,97 @@
            }
            LB_SmartVision.Tool.Tool.ReadStringConfig("User ID", out string User_ID);
            LB_SmartVision.Tool.Tool.ReadStringConfig("Password", out string Password);
            GlobalVar.strProductName = DateBaseName;
            //加载通讯
            foreach (BaseCommunicator com in GlobalVar.dicCommunicators.Values)
            {
                com.Disconnect();
            }
            GlobalVar.dicCommunicators.Clear();
            if (LoadAllCommunicators(GlobalVar.allCommunicatorsConnectionStringPath))
            {
                LogInfo("通讯加载成功", LogInfoType.PASS);
            }
            else
            {
                LogInfo("通讯加载失败", LogInfoType.ERROR);
            }
            //加载相机
            foreach (BaseCamera camera in GlobalVar.dicCameras.Values)
            {
                camera.Dispose();
            }
            GlobalVar.dicCameras.Clear();
            if (LoadAllCameras(GlobalVar.allCamerasConnectionStringPath))
            {
                LogInfo("相机加载成功", LogInfoType.PASS);
            }
            else
            {
                LogInfo("相机加载失败", LogInfoType.ERROR);
            //必须先加载相机和通讯端口,因为流程加载过程中会用到相机和通讯口
            }
            //加载全局变量
            IProcess.dicGlobalVars.Clear();
            if (LoadAllProcessVars(GlobalVar.allProcessVarsPath))
            {
                LogInfo("全局变量加载成功", LogInfoType.PASS);
            }
            else
            {
                LogInfo("全局变量加载失败", LogInfoType.ERROR);
            }
            //加载流程
            GlobalVar.dicProcesses.Clear();
            if (LoadAllProcess(GlobalVar.allProcessConnectionStringPath))
            {
                LogInfo("流程加载成功", LogInfoType.PASS);
            }
            else
            {
                LogInfo("流程加载失败", LogInfoType.ERROR);
            }
            //加载触发设置
            if (LoadAllProcessSetting(GlobalVar.allProcessSettingStringPath))
            {
                LogInfo("流程设置加载成功", LogInfoType.PASS);
            }
            else
            {
                LogInfo("流程设置加载失败", LogInfoType.ERROR);
            }
            //加载流程布局
            GlobalVar.dicLayout.Clear();
            if (LoadAllLayout(GlobalVar.allLayoutPath))
            {
                LogInfo("流程布局加载成功", LogInfoType.PASS);
            }
            else
            {
                LogInfo("流程布局加载失败", LogInfoType.ERROR);
            }
            //加载流程表格
            GlobalVar.dicCsvSetting.Clear();
            if (LoadAllCsv(GlobalVar.allCsvPath))
            {
                LogInfo("流程表格加载成功", LogInfoType.PASS);
            }
            else
            {
                LogInfo("流程表格加载失败", LogInfoType.ERROR);
            }
            //显示所有产品
            com_ProductName.Items.Clear();
            LB_SmartVision.Tool.Tool.ReadStringConfig("产品列表", out string Products);
            List<string> lstProduct = (Products.Split(',')).ToList();
            foreach (string DatabaseName in lstProduct)
            {
                com_ProductName.Items.Add(DatabaseName);
            }
            com_ProductName.Items.Add("新增");
            com_ProductName.Text = GlobalVar.strProductName;
        }
@@ -512,7 +640,6 @@
                strJson = streamReader.ReadToEnd();
                streamReader.Close();
            }
            GlobalVar.allCamerasConnectionString = JsonConvert.DeserializeObject<ConcurrentDictionary<string, string>>(strJson);
            if (GlobalVar.allCamerasConnectionString == null)
            {
@@ -526,16 +653,21 @@
                switch (brand)
                {
                    case CameraBrand.HRCamera:
                        //camera = new HRCamera();
                        break;
                        {
                            camera = new HRCamera();
                            break;
                        }
                    case CameraBrand.LBCamera:
                        //camera = new LBCamera();
                        break;
                        {
                            //camera = new LBCamera();
                            break;
                        }
                    default:
                        MessageBox.Show($"[{CameraConnectionString.Key}]品牌不支持!", "异常");
                        continue;
                        {
                            MessageBox.Show($"[{CameraConnectionString.Key}]品牌不支持!", "异常");
                            continue;
                        }
                }
                camera.SN = CameraConnectionString.Key;
                if (!camera.InitDevice(CameraConnectionString.Key, this.Handle))
                {
@@ -563,8 +695,9 @@
                    string CameraBrand = item.Value.Brand.ToString();//"1111"
                    if (string.IsNullOrEmpty(CameraSN) || string.IsNullOrEmpty(CameraBrand))
                    {
                        break;
                    }
                    GlobalVar.allCamerasConnectionString.TryAdd(CameraSN, CameraBrand);
                }
                var settings = new JsonSerializerSettings
@@ -674,9 +807,13 @@
                        Communicator.CommunicatorConnections.Add("端口", PORT);
                        Communicator.CommunicatorName = CommunicatorName;
                        if (!Communicator.Connect())
                        {
                            LogInfo($"初始化通讯口[{CommunicatorName}]失败,原因是{Communicator.Msg}", LogInfoType.ERROR);
                        }
                        else
                        {
                            LogInfo($"初始化通讯口[{CommunicatorName}]成功", LogInfoType.PASS);
                        }
                        GlobalVar.dicCommunicators.TryAdd(CommunicatorName, Communicator);
                    }
                    else
@@ -708,7 +845,9 @@
                        string PORT = match.Groups[3].Value;        // "1111"
                        if (string.IsNullOrEmpty(ClassName) || string.IsNullOrEmpty(IP) || string.IsNullOrEmpty(PORT))
                        {
                            break;
                        }
                        //利用反射创建实例
                        Type type = IProcess.GetExecutingAssembly().GetType(ClassName);
@@ -729,10 +868,13 @@
                        Communicator.CommunicatorConnections.Add("端口", PORT);
                        Communicator.CommunicatorName = CommunicatorName;
                        if (!Communicator.Connect())
                        {
                            LogInfo($"初始化通讯口[{CommunicatorName}]失败,原因是{Communicator.Msg}", LogInfoType.ERROR);
                        }
                        else
                        {
                            LogInfo($"初始化通讯口[{CommunicatorName}]成功", LogInfoType.PASS);
                        }
                        GlobalVar.dicCommunicators.TryAdd(CommunicatorName, Communicator);
                    }
                    else
@@ -761,12 +903,12 @@
                    string PORT = item.Value.CommunicatorConnections["端口"].ToString();//"1111"
                    if (string.IsNullOrEmpty(ClassName) || string.IsNullOrEmpty(IP) || string.IsNullOrEmpty(PORT))
                    {
                        break;
                    }
                    string CommunicatorConnectionString = $"({ClassName})[{IP}][{PORT}]";
                    GlobalVar.allCommunicatorsConnectionString.TryAdd(item.Key, CommunicatorConnectionString);
                }
                var settings = new JsonSerializerSettings
                {
                    Formatting = Formatting.Indented,
@@ -817,17 +959,19 @@
                List<string> lstProcessName = JsonConvert.DeserializeObject<List<string>>(strJson);
                if (lstProcessName == null)
                {
                    return false;
                }
                // ä½¿ç”¨æ–¹å¼
                var sortedKeys = lstProcessName
                    .OrderBy(k => k, new NaturalStringComparer())
                    .ToList();
                GlobalVar.dicProcesses.Clear();
                foreach (var ProcessName in sortedKeys)
                {
                    GlobalVar.dicProcesses.TryAdd(ProcessName
                        , new ProcessRunBll(ProcessName, GlobalVar.dicCameras, GlobalVar.dicCommunicators));
                }
                return true;
            }
            catch { return false; }
@@ -864,7 +1008,9 @@
                foreach (var process in GlobalVar.dicProcesses.Values)
                {
                    if (!process.Save(out string msg))
                    {
                        LogInfo($"流程[{process.Name}]保存失败,原因:{msg}", LogInfoType.NOSHOW);
                    }
                }
                try
@@ -957,7 +1103,6 @@
                File.WriteAllText(GlobalVar.allLayoutPath, strJson, Encoding.UTF8);
                LogInfo($"全局布局保存成功", LogInfoType.INFO);
                return true;
            }
            catch { return false; }
@@ -970,6 +1115,7 @@
                if (!File.Exists(allLayoutPath))
                {
                    Debug.WriteLine("文件不存在创建空文件");
                    AsyncLogHelper.Info("文件不存在创建空文件");
                    // èŽ·å–ä¸å¸¦æ–‡ä»¶åçš„ç›®å½•è·¯å¾„
                    string directoryPath = Path.GetDirectoryName(allLayoutPath);
                    SaveAllLayout();
@@ -993,5 +1139,372 @@
            }
            catch { return false; }
        }
        private void btn_GlobalVar_Click(object sender, EventArgs e)
        {
            GlobalVarForm globalVarForm = new GlobalVarForm(GlobalVar.allProcessVarsPath);
            globalVarForm.ShowDialog();
        }
        private void btn_Login_Click(object sender, EventArgs e)
        {
            //this.Hide();
            //MainWindow.InstanceLoginandConfirmation().ShowDialog();
            //if (!MainWindow.InstanceLoginandConfirmation().isQuit && MainWindow.InstanceLoginandConfirmation().correctUser)
            //{
            //    MainWindow.InstanceLoginandConfirmation().closeLoginFrm();
            //    if (UserManager.Instance.CurrentUser.EmployeePermission == UserPermission.Operator)
            //    {
            //        //操作员权限界面
            //    }
            //    else if (UserManager.Instance.CurrentUser.EmployeePermission == UserPermission.Engineer)
            //    {
            //        //技术员权限界面
            //    }
            //    else if (UserManager.Instance.CurrentUser.EmployeePermission == UserPermission.Administrator)
            //    {
            //        //管理员权限界面
            //    }
            //    this.Show();
            //}
        }
        private void com_ProductName_SelectedValueChanged(object sender, EventArgs e)
        {
            if (com_ProductName.SelectedItem == null || com_ProductName.SelectedItem?.ToString() == GlobalVar.strProductName)
            {
                return;
            }
            if (com_ProductName.SelectedItem?.ToString() == "新增")
            {
                using (CreateProductForm createDatabaseForm = new CreateProductForm())
                {
                    createDatabaseForm.ShowDialog();
                }
            }
            else
            {
                //变更前保存现有配置
                SaveAllSetting();
                LogInfo($"产品从{GlobalVar.strProductName}切换{com_ProductName.SelectedItem?.ToString()}", LogInfoType.WARN);
                //Tool.WriteConfig("数据库名称", com_ProductName.SelectedItem?.ToString());
                GlobalVar.strProductName = com_ProductName.SelectedItem?.ToString();
                foreach (BaseCamera camera in GlobalVar.dicCameras.Values)
                {
                    camera.Dispose();
                }
                GlobalVar.dicCameras.Clear();
                foreach (BaseCommunicator communicator in GlobalVar.dicCommunicators.Values)
                {
                    communicator.TriggerRunMessageReceived -= TriggerRunMessageReceived;
                    communicator.Disconnect();
                }
                GlobalVar.dicCommunicators.Clear();
                //保存完现有配置后断开所有事件
                foreach (var Process in GlobalVar.dicProcesses.Values)
                {
                    Process.LogInfo -= LogInfo;
                }
                GlobalVar.dicProcesses.Clear();
                //重新加载配置
                this.VisionForm_Load(sender, e);
            }
        }
        private void TriggerRunMessageReceived(string name, string msg)
        {
            if (msg == null || msg.Trim('\0', '\r', '\n', ' ', '\uFEFF') == "" || string.IsNullOrEmpty(msg))
            {
                return;
            }
            LogInfo(string.Format("通讯[{0}]接收到的消息\"{1}\"", name, msg), LogInfoType.INFO);
            var matchedItems = GlobalVar.dicProcessSetting
                .Where(item =>
                {
                    var value = item.Value;
                    var triggerComm = value["触发通讯"];
                    var triggerChar = value["触发字符"];
                    return triggerComm != null && triggerComm.Equals(name) &&
                           (string.IsNullOrEmpty(triggerChar?.ToString()) ||
                            msg.StartsWith(triggerChar.ToString()));
                })
                .ToList(); // é¿å…é‡å¤å­—典访问和装箱操作
            if (matchedItems.Count <= 0)
            {
                return;
            }
            if (!ckb_AllowRun.Checked)
            {
                LogInfo(string.Format($"检查到可被触发的流程,当前不为运行模式!"), LogInfoType.ERROR);
                return;
            }
            GlobalVar.dicProcesses.Values.AsParallel().ForAll(v => v.bCompleted = false);
            LogInfo(string.Format($"检查到可被触发的流程,清空所有流程运行完成标记位!"), LogInfoType.INFO);
            Parallel.ForEach(matchedItems, item =>
            {
                string ProcessName = item.Value["流程名"];
                LogInfo($"流程[{ProcessName}]开始运行", LogInfoType.INFO);
                if (!GlobalVar.dicProcesses.ContainsKey(ProcessName))
                {
                    LogInfo(string.Format("流程[{0}]不存在,请检查流程设置", ProcessName), LogInfoType.ERROR);
                    return;
                }
                ProcessRunBll RunBll = GlobalVar.dicProcesses[ProcessName];
                if (RunBll == null || RunBll.bRuning)
                {
                    LogInfo(string.Format("流程[{0}]上次未运行完成,触发失败", ProcessName)
                        , LogInfoType.ERROR);
                    return;
                }
                try
                {
                    bool result = false;
                    string msg = string.Empty;
                    int times = Convert.ToInt32(item.Value["重测次数"].ToString());
                    string ConnecResult = item.Value["关联结果"];
                    if (times < 0)
                    {
                        result = GlobalVar.dicProcesses[ProcessName].Run();
                        msg = GlobalVar.dicProcesses[ProcessName].Msg;
                        if (!(string.IsNullOrEmpty(ConnecResult) || ConnecResult.Trim() == "未关联"))
                        {
                            GlobalVar.dicProcesses[ProcessName].GetBooleanOutput(ConnecResult, out result);
                            GlobalVar.dicProcesses[ProcessName].Result = result;
                        }
                        if (!result)
                        {
                            LogInfo($"流程[{ProcessName}]被强制运行成功", LogInfoType.WARN);
                            GlobalVar.dicProcesses[ProcessName].Result = true;
                            result = true;
                        }
                    }
                    else
                    {
                        while (times >= 0)
                        {
                            result = RunBll.Run();
                            msg = RunBll.Msg;
                            if (!(string.IsNullOrEmpty(ConnecResult) || ConnecResult.Trim() == "未关联"))
                            {
                                RunBll.GetBooleanOutput(ConnecResult, out result);
                                RunBll.Result = result;
                            }
                            if (result)
                            {
                                break;
                            }
                            else if (!result && times > 0)
                            {
                                LogInfo(string.Format("流程[{0}]运行失败重新测试,剩余次数[{1}]", ProcessName, times), LogInfoType.WARN);
                            }
                            times--;
                        }
                    }
                    string ConnectProcess = item.Value["关联流程"];
                    if (!(ConnectProcess == null || string.IsNullOrEmpty(ConnectProcess) || ConnectProcess.Trim() == ""))
                    {
                        //用逗号或者分号去间隔关联流程
                        string[] arrConnectProcess;
                        if (ConnectProcess.Split(';').Length >= ConnectProcess.Split(',').Length)
                        {
                            arrConnectProcess = ConnectProcess.Split(';');
                        }
                        else
                        {
                            arrConnectProcess = ConnectProcess.Split(',');
                        }
                        foreach (string strConnectProcess in arrConnectProcess)
                        {
                            if (GlobalVar.dicProcesses.ContainsKey(strConnectProcess))
                            {
                                ProcessRunBll ConnectRunBll = GlobalVar.dicProcesses[strConnectProcess];
                                int waitTime = 10;
                                DateTime startTime = DateTime.Now;
                                while ((DateTime.Now - startTime).TotalSeconds < waitTime
                                && (ConnectRunBll.bRuning || !ConnectRunBll.bCompleted))
                                {
                                    LogInfo(string.Format("关联流程[{0}]未运行完成,剩余等待[{1}]s", strConnectProcess, (waitTime - ((DateTime.Now - startTime).TotalSeconds)))
                                        , LogInfoType.NOSHOW);
                                    Thread.Sleep(1000);
                                    continue;
                                }
                                if (ConnectRunBll.bRuning || !ConnectRunBll.bCompleted)
                                {
                                    GlobalVar.dicProcesses[ProcessName].Msg = string.Format("流程[{0}]未运行完成", ProcessName);
                                    LogInfo(string.Format("关联流程[{0}]未运行完成", strConnectProcess), LogInfoType.ERROR);
                                    result = false;
                                    break;
                                }
                                else if (!ConnectRunBll.bRuning && ConnectRunBll.bCompleted)
                                {
                                    LogInfo(string.Format("关联流程[{0}]运行完成", strConnectProcess), LogInfoType.INFO);
                                }
                                result &= ConnectRunBll.Result;
                                if (!ConnectRunBll.Result)
                                {
                                    LogInfo($"流程[{ProcessName}]的关联流程[{strConnectProcess}]运行失败", LogInfoType.ERROR);
                                    msg = $"关联流程[{strConnectProcess}]运行失败";
                                }
                            }
                        }
                    }
                    LogInfo(result ? $"流程[{ProcessName}]运行成功" : $"流程[{ProcessName}]运行失败,原因是{msg}", result ? LogInfoType.PASS : LogInfoType.ERROR);
                    string SendComName = result ? item.Value["成功通讯"] : item.Value["失败通讯"];
                    string SendMsg = result ? item.Value["成功字符"] : item.Value["失败字符"];
                    if (GlobalVar.dicCommunicators.ContainsKey(SendComName) && (!string.IsNullOrEmpty(SendMsg) || SendMsg.Trim() != ""))
                    {
                        GlobalVar.dicCommunicators[SendComName].SendMessage(SendMsg);
                        LogInfo(string.Format("发送给[{0}]了消息\"{1}\"", SendComName, SendMsg), LogInfoType.INFO);
                    }
                }
                catch (Exception ex)
                {
                    LogInfo(string.Format("流程[{0}]运行发生了意外,原因是:{1}", ProcessName, ex.Message + $"【{ex.StackTrace}】"), LogInfoType.ERROR);
                    RunBll.Result = false;
                    RunBll.Msg = $"[意外]{ex.Message}";
                }
                finally
                {
                    #region ä»ŽRunSettingPage和Layout中获取是否保存图片
                    string strImageType = "jpeg";
                    bool bSaveRunImage = false;
                    bool bSaveResultImage = false;
                    long lImageQuality = 100L;
                    //ckbSaveRunImage
                    if (GlobalVar.ControlStates.TryGetValue("ckbSaveRunImage_CheckBox", out object oSaveRunImage))
                    {
                        if (oSaveRunImage != null && oSaveRunImage is bool)
                        {
                            bSaveRunImage = (bool)oSaveRunImage;
                        }
                    }
                    //ckbSaveResultImage
                    if (GlobalVar.ControlStates.TryGetValue("ckbSaveResultImage_CheckBox", out object oSaveResultImage))
                    {
                        if (oSaveResultImage != null && oSaveResultImage is bool)
                        {
                            bSaveResultImage = (bool)oSaveResultImage;
                        }
                    }
                    //txtImageQuality
                    if (GlobalVar.ControlStates.TryGetValue("txtImageQuality_TextBox", out object oImageQuality))
                    {
                        if (oImageQuality != null && oImageQuality is string)
                        {
                            lImageQuality = Convert.ToInt64((string)oImageQuality);
                        }
                    }
                    //cmbImageType
                    if (GlobalVar.ControlStates.TryGetValue("cmbImageType_ComboBox", out object oImageType))
                    {
                        try
                        {
                            // åŠ¨æ€è§£æžComboBox数据
                            var json = JsonConvert.SerializeObject(oImageType);
                            var comboData = JsonConvert.DeserializeAnonymousType(json, new
                            {
                                Items = new List<object>(),
                                SelectedIndex = 0
                            });
                            if (comboData != null && comboData.Items.Count > 0)
                            {
                                strImageType = comboData.Items[comboData.SelectedIndex].ToString();
                            }
                        }
                        catch { }
                    }
                    // ç”Ÿæˆå›¾ç‰‡å¹¶æ˜¾ç¤ºåˆ°æŽ§ä»¶ä¸­
                    HObject InputImage = null;
                    HObject RecordImage = null;
                    foreach (var layout in GlobalVar.dicLayout.Values
                                .Where(layout => layout.ProcessName == ProcessName)
                                .ToList())
                    {
                        string title = layout.Title;
                        string strImagePath = layout.SaveImageDir;
                        if (!AllProcessesPage.dicProcessControls.ContainsKey(title))
                        {
                            continue;
                        }
                        RunBll.GetImage(layout, out InputImage, out RecordImage);
                        AllProcessesPage.dicProcessControls[title].ShowHoImage(RecordImage);
                        if (!string.IsNullOrEmpty(layout.SaveImageDir))
                        {
                            string fileNameHead = layout.SaveImageHead;
                            string result = Regex.Replace(fileNameHead, @"\{[^}]+\}", match =>
                            {
                                // å޻除{}只保留括号内的内容
                                string content = match.Value;
                                content = content.Trim('{', '}'); // åŽ»é™¤é¦–å°¾çš„{}
                                RunBll.GetStringOutput(content, out string str);
                                return str;
                            });
                            string fileName = $"{result}-[{DateTime.Now.ToString("HH.mm.ss.ffff")}]";
                            // ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼æ›¿æ¢æ‰€æœ‰éžæ³•字符
                            string invalidChars = Regex.Escape(new string(Path.GetInvalidFileNameChars()));
                            string pattern = $"[{invalidChars}]";
                            fileName = Regex.Replace(fileName, pattern, "-");
                            strImagePath = Regex.Replace(strImagePath, @"\{[^}]+\}", match =>
                            {
                                // å޻除{}只保留括号内的内容
                                string content = match.Value;
                                content = content.Trim('{', '}'); // åŽ»é™¤é¦–å°¾çš„{}
                                RunBll.GetStringOutput(content, out string str);
                                return str;
                            });
                            if (bSaveRunImage)
                            {
                                // æœ€åŽä¸€çº§ç›®å½•必须为年月日,会根据时间来删除旧图片
                                string directoryPath = Path.Combine(strImagePath, $"{ProcessName}\\原图\\{RunBll.Result}\\{DateTime.Now.ToString("yyyyMMdd")}\\");
                                LB_SmartVision.Tool.Tool.AddRealImage(InputImage, directoryPath, fileName, strImageType, lImageQuality);
                            }
                            if (bSaveResultImage)
                            {
                                // æœ€åŽä¸€çº§ç›®å½•必须为年月日,会根据时间来删除旧图片
                                string directoryPath = Path.Combine(strImagePath, $"{ProcessName}\\截图\\{RunBll.Result}\\{DateTime.Now.ToString("yyyyMMdd")}\\");
                                LB_SmartVision.Tool.Tool.AddRealImage(RecordImage, directoryPath, fileName, "jpg", 50L);
                            }
                        }
                    }
                    foreach (var csv in GlobalVar.dicCsvSetting.Values
                                .Where(csv => csv.ProcessName == ProcessName)
                                .ToList())
                    {
                        if (RunBll.GetCsv(csv
                            , out List<string> DataTitle, out Dictionary<string, object> ResultData))
                        {
                            string filePath = Path.Combine(GlobalVar.strPathCsv, $"{ProcessName}.csv");
                            LB_SmartVision.Tool.Tool.SaveData(filePath, DataTitle, ResultData);
                        }
                    }
                    #endregion
                }
            });
        }
        private void VisionForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            SaveAllSetting();
            if (MessageBox.Show("是否关闭软件?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) != DialogResult.OK)//
            {
                e.Cancel = true;
                return;
            }
            //关闭窗体释放资源
            AsyncLogHelper.Dispose();
            foreach (BaseCamera camera in GlobalVar.dicCameras.Values)
            {
                camera.Dispose();
            }
            foreach (BaseCommunicator communicator in GlobalVar.dicCommunicators.Values)
            {
                communicator.Disconnect();
            }
            FormClosing -= VisionForm_FormClosing;
        }
    }
}
LB_SmartVision/log4net.config
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
    <root>
        <level value="ALL"/>
        <!-- æ·»åŠ æ‰€æœ‰appender引用 -->
        <appender-ref ref="DebugLogger" />
        <appender-ref ref="InfoLogger" />
        <appender-ref ref="WarnLogger" />
        <appender-ref ref="ErrorLogger" />
        <appender-ref ref="FatalLogger" />
    </root>
    <appender name="DebugLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Debug_Log\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="-1"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="DEBUG" />
            <levelMax value="DEBUG" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="InfoLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Run_Log\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="-1"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="INFO" />
            <levelMax value="INFO" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="WarnLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Warn\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="10"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="WARN" />
            <levelMax value="WARN" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="ErrorLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Error_Log\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="-1"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="ERROR" />
            <levelMax value="ERROR" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
    <appender name="FatalLogger" type="log4net.Appender.RollingFileAppender">
        <file value="生产日志\Fatal\"/>
        <appendToFile value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <Encoding value="UTF-8" />
        <maxSizeRollBackups value="-1"/>
        <StaticLogFileName value="false"/>
        <rollingStyle value="Date" />
        <param name="datePattern" value="yyyy-MM/yyyy-MM-dd.'log'" />
        <createDirs value="true" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <levelMin value="FATAL" />
            <levelMax value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" />
        </layout>
    </appender>
</log4net>
</configuration>
LB_SmartVisionCommon/UserData.cs
@@ -74,6 +74,10 @@
        /// </summary>
        Operator,
        /// <summary>
        /// UserPermission:Engineer
        /// </summary>
        Engineer,
        /// <summary>
        /// UserPermission:Administrator
        /// </summary>
        Administrator
LB_VisionControl/ScriptEditControl/ClassFileList.Designer.cs
@@ -28,53 +28,53 @@
        /// </summary>
        private void InitializeComponent()
        {
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.SuspendLayout();
            listBox1 = new ListBox();
            textBox1 = new TextBox();
            SuspendLayout();
            // 
            // listBox1
            // 
            this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.listBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(17)))), ((int)(((byte)(18)))));
            this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.listBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.listBox1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
            this.listBox1.FormattingEnabled = true;
            this.listBox1.ItemHeight = 17;
            this.listBox1.Location = new System.Drawing.Point(0, 14);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(483, 85);
            this.listBox1.TabIndex = 0;
            this.listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
            this.listBox1.DoubleClick += new System.EventHandler(this.listBox1_DoubleClick);
            listBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
            listBox1.BackColor = Color.FromArgb(30, 17, 18);
            listBox1.BorderStyle = BorderStyle.None;
            listBox1.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
            listBox1.ForeColor = Color.FromArgb(255, 255, 128);
            listBox1.FormattingEnabled = true;
            listBox1.ItemHeight = 17;
            listBox1.Location = new Point(0, 20);
            listBox1.Margin = new Padding(4, 4, 4, 4);
            listBox1.Name = "listBox1";
            listBox1.Size = new Size(564, 119);
            listBox1.TabIndex = 0;
            listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
            listBox1.DoubleClick += listBox1_DoubleClick;
            // 
            // textBox1
            // 
            this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(17)))), ((int)(((byte)(18)))));
            this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.textBox1.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.textBox1.ForeColor = System.Drawing.Color.Green;
            this.textBox1.Location = new System.Drawing.Point(0, 100);
            this.textBox1.Multiline = true;
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(483, 105);
            this.textBox1.TabIndex = 1;
            this.textBox1.Text = "文件系统";
            textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            textBox1.BackColor = Color.FromArgb(30, 17, 18);
            textBox1.BorderStyle = BorderStyle.FixedSingle;
            textBox1.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
            textBox1.ForeColor = Color.Green;
            textBox1.Location = new Point(0, 142);
            textBox1.Margin = new Padding(4, 4, 4, 4);
            textBox1.Multiline = true;
            textBox1.Name = "textBox1";
            textBox1.Size = new Size(563, 148);
            textBox1.TabIndex = 1;
            textBox1.Text = "文件系统";
            // 
            // ClassFileList
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.textBox1);
            this.Controls.Add(this.listBox1);
            this.Name = "ClassFileList";
            this.Size = new System.Drawing.Size(483, 208);
            this.ResumeLayout(false);
            this.PerformLayout();
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(textBox1);
            Controls.Add(listBox1);
            Margin = new Padding(4, 4, 4, 4);
            Name = "ClassFileList";
            Size = new Size(564, 295);
            ResumeLayout(false);
            PerformLayout();
        }
LB_VisionControl/ScriptEditControl/ClassFileList.resx
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
@@ -117,13 +117,13 @@
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="listBox1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="listBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="textBox1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="textBox1.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
</root>
LB_VisionControl/ScriptEditControl/ComplieUI.Designer.cs
@@ -28,174 +28,178 @@
        /// </summary>
        private void InitializeComponent()
        {
            this.btnCsc = new System.Windows.Forms.Button();
            this.chkCmd = new System.Windows.Forms.CheckBox();
            this.radDll = new System.Windows.Forms.RadioButton();
            this.radWinexe = new System.Windows.Forms.RadioButton();
            this.radExe = new System.Windows.Forms.RadioButton();
            this.txtArgs = new System.Windows.Forms.TextBox();
            this.label2 = new System.Windows.Forms.Label();
            this.txtOutput = new System.Windows.Forms.TextBox();
            this.contextMenuStripEx1 = new ContextMenuStripEx();
            this.复制ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
            this.清除ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
            this.contextMenuStripEx1.SuspendLayout();
            this.SuspendLayout();
            btnCsc = new Button();
            chkCmd = new CheckBox();
            radDll = new RadioButton();
            radWinexe = new RadioButton();
            radExe = new RadioButton();
            txtArgs = new TextBox();
            label2 = new Label();
            txtOutput = new TextBox();
            contextMenuStripEx1 = new ContextMenuStripEx();
            å¤åˆ¶ToolStripMenuItem = new ToolStripMenuItem();
            toolStripMenuItem1 = new ToolStripSeparator();
            æ¸…除ToolStripMenuItem = new ToolStripMenuItem();
            contextMenuStripEx1.SuspendLayout();
            SuspendLayout();
            // 
            // btnCsc
            // 
            this.btnCsc.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.btnCsc.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.btnCsc.ForeColor = System.Drawing.Color.White;
            this.btnCsc.Location = new System.Drawing.Point(356, 3);
            this.btnCsc.Name = "btnCsc";
            this.btnCsc.Size = new System.Drawing.Size(44, 23);
            this.btnCsc.TabIndex = 16;
            this.btnCsc.Text = "CSC";
            this.btnCsc.UseVisualStyleBackColor = true;
            this.btnCsc.Click += new System.EventHandler(this.btnCsc_Click);
            btnCsc.FlatStyle = FlatStyle.Flat;
            btnCsc.Font = new Font("微软雅黑", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);
            btnCsc.ForeColor = Color.White;
            btnCsc.Location = new Point(415, 4);
            btnCsc.Margin = new Padding(4, 4, 4, 4);
            btnCsc.Name = "btnCsc";
            btnCsc.Size = new Size(51, 33);
            btnCsc.TabIndex = 16;
            btnCsc.Text = "CSC";
            btnCsc.UseVisualStyleBackColor = true;
            btnCsc.Click += btnCsc_Click;
            // 
            // chkCmd
            // 
            this.chkCmd.AutoSize = true;
            this.chkCmd.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.chkCmd.ForeColor = System.Drawing.Color.White;
            this.chkCmd.Location = new System.Drawing.Point(304, 6);
            this.chkCmd.Name = "chkCmd";
            this.chkCmd.Size = new System.Drawing.Size(57, 21);
            this.chkCmd.TabIndex = 13;
            this.chkCmd.Text = "CMD";
            this.chkCmd.UseVisualStyleBackColor = true;
            chkCmd.AutoSize = true;
            chkCmd.Font = new Font("微软雅黑", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);
            chkCmd.ForeColor = Color.White;
            chkCmd.Location = new Point(355, 8);
            chkCmd.Margin = new Padding(4, 4, 4, 4);
            chkCmd.Name = "chkCmd";
            chkCmd.Size = new Size(57, 21);
            chkCmd.TabIndex = 13;
            chkCmd.Text = "CMD";
            chkCmd.UseVisualStyleBackColor = true;
            // 
            // radDll
            // 
            this.radDll.AutoSize = true;
            this.radDll.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.radDll.ForeColor = System.Drawing.Color.White;
            this.radDll.Location = new System.Drawing.Point(256, 5);
            this.radDll.Name = "radDll";
            this.radDll.Size = new System.Drawing.Size(42, 21);
            this.radDll.TabIndex = 12;
            this.radDll.Text = "dll";
            this.radDll.UseVisualStyleBackColor = true;
            radDll.AutoSize = true;
            radDll.Font = new Font("微软雅黑", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);
            radDll.ForeColor = Color.White;
            radDll.Location = new Point(299, 7);
            radDll.Margin = new Padding(4, 4, 4, 4);
            radDll.Name = "radDll";
            radDll.Size = new Size(42, 21);
            radDll.TabIndex = 12;
            radDll.Text = "dll";
            radDll.UseVisualStyleBackColor = true;
            // 
            // radWinexe
            // 
            this.radWinexe.AutoSize = true;
            this.radWinexe.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.radWinexe.ForeColor = System.Drawing.Color.White;
            this.radWinexe.Location = new System.Drawing.Point(185, 5);
            this.radWinexe.Name = "radWinexe";
            this.radWinexe.Size = new System.Drawing.Size(69, 21);
            this.radWinexe.TabIndex = 10;
            this.radWinexe.Text = "winexe";
            this.radWinexe.UseVisualStyleBackColor = true;
            radWinexe.AutoSize = true;
            radWinexe.Font = new Font("微软雅黑", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);
            radWinexe.ForeColor = Color.White;
            radWinexe.Location = new Point(216, 7);
            radWinexe.Margin = new Padding(4, 4, 4, 4);
            radWinexe.Name = "radWinexe";
            radWinexe.Size = new Size(69, 21);
            radWinexe.TabIndex = 10;
            radWinexe.Text = "winexe";
            radWinexe.UseVisualStyleBackColor = true;
            // 
            // radExe
            // 
            this.radExe.AutoSize = true;
            this.radExe.BackColor = System.Drawing.Color.Transparent;
            this.radExe.Checked = true;
            this.radExe.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.radExe.ForeColor = System.Drawing.Color.White;
            this.radExe.Location = new System.Drawing.Point(137, 5);
            this.radExe.Name = "radExe";
            this.radExe.Size = new System.Drawing.Size(47, 21);
            this.radExe.TabIndex = 11;
            this.radExe.TabStop = true;
            this.radExe.Text = "exe";
            this.radExe.UseVisualStyleBackColor = false;
            radExe.AutoSize = true;
            radExe.BackColor = Color.Transparent;
            radExe.Checked = true;
            radExe.Font = new Font("微软雅黑", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);
            radExe.ForeColor = Color.White;
            radExe.Location = new Point(160, 7);
            radExe.Margin = new Padding(4, 4, 4, 4);
            radExe.Name = "radExe";
            radExe.Size = new Size(47, 21);
            radExe.TabIndex = 11;
            radExe.TabStop = true;
            radExe.Text = "exe";
            radExe.UseVisualStyleBackColor = false;
            // 
            // txtArgs
            // 
            this.txtArgs.BackColor = System.Drawing.Color.White;
            this.txtArgs.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.txtArgs.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.txtArgs.Location = new System.Drawing.Point(45, 3);
            this.txtArgs.Name = "txtArgs";
            this.txtArgs.Size = new System.Drawing.Size(86, 23);
            this.txtArgs.TabIndex = 8;
            txtArgs.BackColor = Color.White;
            txtArgs.BorderStyle = BorderStyle.FixedSingle;
            txtArgs.Font = new Font("微软雅黑", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
            txtArgs.Location = new Point(52, 4);
            txtArgs.Margin = new Padding(4, 4, 4, 4);
            txtArgs.Name = "txtArgs";
            txtArgs.Size = new Size(100, 23);
            txtArgs.TabIndex = 8;
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
            this.label2.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.label2.ForeColor = System.Drawing.Color.White;
            this.label2.Location = new System.Drawing.Point(3, 7);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(44, 17);
            this.label2.TabIndex = 9;
            this.label2.Text = "参数:";
            label2.AutoSize = true;
            label2.FlatStyle = FlatStyle.Flat;
            label2.Font = new Font("微软雅黑", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);
            label2.ForeColor = Color.White;
            label2.Location = new Point(4, 10);
            label2.Margin = new Padding(4, 0, 4, 0);
            label2.Name = "label2";
            label2.Size = new Size(44, 17);
            label2.TabIndex = 9;
            label2.Text = "参数:";
            // 
            // txtOutput
            // 
            this.txtOutput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
                        | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.txtOutput.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(17)))), ((int)(((byte)(18)))));
            this.txtOutput.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
            this.txtOutput.ContextMenuStrip = this.contextMenuStripEx1;
            this.txtOutput.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.txtOutput.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
            this.txtOutput.Location = new System.Drawing.Point(0, 29);
            this.txtOutput.Multiline = true;
            this.txtOutput.Name = "txtOutput";
            this.txtOutput.ReadOnly = true;
            this.txtOutput.ScrollBars = System.Windows.Forms.ScrollBars.Both;
            this.txtOutput.Size = new System.Drawing.Size(492, 162);
            this.txtOutput.TabIndex = 7;
            txtOutput.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            txtOutput.BackColor = Color.FromArgb(30, 17, 18);
            txtOutput.BorderStyle = BorderStyle.FixedSingle;
            txtOutput.ContextMenuStrip = contextMenuStripEx1;
            txtOutput.Font = new Font("微软雅黑", 10.5F, FontStyle.Regular, GraphicsUnit.Point, 134);
            txtOutput.ForeColor = Color.FromArgb(255, 255, 128);
            txtOutput.Location = new Point(0, 41);
            txtOutput.Margin = new Padding(4, 4, 4, 4);
            txtOutput.Multiline = true;
            txtOutput.Name = "txtOutput";
            txtOutput.ReadOnly = true;
            txtOutput.ScrollBars = ScrollBars.Both;
            txtOutput.Size = new Size(574, 229);
            txtOutput.TabIndex = 7;
            // 
            // contextMenuStripEx1
            // 
            this.contextMenuStripEx1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.复制ToolStripMenuItem,
            this.toolStripMenuItem1,
            this.清除ToolStripMenuItem});
            this.contextMenuStripEx1.Name = "contextMenuStripEx1";
            this.contextMenuStripEx1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
            this.contextMenuStripEx1.Size = new System.Drawing.Size(101, 54);
            contextMenuStripEx1.Items.AddRange(new ToolStripItem[] { å¤åˆ¶ToolStripMenuItem, toolStripMenuItem1, æ¸…除ToolStripMenuItem });
            contextMenuStripEx1.Name = "contextMenuStripEx1";
            contextMenuStripEx1.RenderMode = ToolStripRenderMode.System;
            contextMenuStripEx1.Size = new Size(101, 54);
            // 
            // å¤åˆ¶ToolStripMenuItem
            // 
            this.复制ToolStripMenuItem.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
            this.复制ToolStripMenuItem.Name = "复制ToolStripMenuItem";
            this.复制ToolStripMenuItem.Size = new System.Drawing.Size(100, 22);
            this.复制ToolStripMenuItem.Text = "复制";
            this.复制ToolStripMenuItem.Click += new System.EventHandler(this.texstToolStripMenuItem_Click);
            å¤åˆ¶ToolStripMenuItem.ForeColor = Color.FromArgb(255, 255, 128);
            å¤åˆ¶ToolStripMenuItem.Name = "复制ToolStripMenuItem";
            å¤åˆ¶ToolStripMenuItem.Size = new Size(100, 22);
            å¤åˆ¶ToolStripMenuItem.Text = "复制";
            å¤åˆ¶ToolStripMenuItem.Click += texstToolStripMenuItem_Click;
            // 
            // toolStripMenuItem1
            // 
            this.toolStripMenuItem1.Name = "toolStripMenuItem1";
            this.toolStripMenuItem1.Size = new System.Drawing.Size(97, 6);
            toolStripMenuItem1.Name = "toolStripMenuItem1";
            toolStripMenuItem1.Size = new Size(97, 6);
            // 
            // æ¸…除ToolStripMenuItem
            // 
            this.清除ToolStripMenuItem.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
            this.清除ToolStripMenuItem.Name = "清除ToolStripMenuItem";
            this.清除ToolStripMenuItem.Size = new System.Drawing.Size(100, 22);
            this.清除ToolStripMenuItem.Text = "清除";
            this.清除ToolStripMenuItem.Click += new System.EventHandler(this.清楚ToolStripMenuItem_Click);
            æ¸…除ToolStripMenuItem.ForeColor = Color.FromArgb(255, 255, 128);
            æ¸…除ToolStripMenuItem.Name = "清除ToolStripMenuItem";
            æ¸…除ToolStripMenuItem.Size = new Size(100, 22);
            æ¸…除ToolStripMenuItem.Text = "清除";
            æ¸…除ToolStripMenuItem.Click += æ¸…楚ToolStripMenuItem_Click;
            // 
            // ComplieUI
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.BackColor = System.Drawing.Color.Black;
            this.Controls.Add(this.radDll);
            this.Controls.Add(this.btnCsc);
            this.Controls.Add(this.chkCmd);
            this.Controls.Add(this.radWinexe);
            this.Controls.Add(this.radExe);
            this.Controls.Add(this.txtOutput);
            this.Controls.Add(this.txtArgs);
            this.Controls.Add(this.label2);
            this.Name = "ComplieUI";
            this.Size = new System.Drawing.Size(492, 192);
            this.contextMenuStripEx1.ResumeLayout(false);
            this.ResumeLayout(false);
            this.PerformLayout();
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.Black;
            Controls.Add(radDll);
            Controls.Add(btnCsc);
            Controls.Add(chkCmd);
            Controls.Add(radWinexe);
            Controls.Add(radExe);
            Controls.Add(txtOutput);
            Controls.Add(txtArgs);
            Controls.Add(label2);
            Margin = new Padding(4, 4, 4, 4);
            Name = "ComplieUI";
            Size = new Size(574, 272);
            contextMenuStripEx1.ResumeLayout(false);
            ResumeLayout(false);
            PerformLayout();
        }
LB_VisionControl/ScriptEditControl/ComplieUI.resx
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
@@ -117,34 +117,34 @@
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="btnCsc.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="btnCsc.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="chkCmd.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="chkCmd.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="radDll.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="radDll.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="radWinexe.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="radWinexe.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="radExe.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="radExe.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="txtArgs.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="txtArgs.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="txtOutput.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="txtOutput.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
  <metadata name="contextMenuStripEx1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="contextMenuStripEx1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>182, 17</value>
  </metadata>
  <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
  <metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <value>True</value>
  </metadata>
</root>
LB_VisionControl/ScriptEditControl/ConsoleTextBox.resx
@@ -1,17 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
@@ -26,36 +26,36 @@
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
LB_VisionControl/ScriptEditControl/ScriptEditControl.Designer.cs
@@ -74,7 +74,7 @@
            fctb_ScriptEditControl.Language = Language.CSharp;
            fctb_ScriptEditControl.LineNumberColor = Color.Black;
            fctb_ScriptEditControl.Location = new Point(0, 0);
            fctb_ScriptEditControl.Margin = new Padding(4, 4, 4, 4);
            fctb_ScriptEditControl.Margin = new Padding(4);
            fctb_ScriptEditControl.Name = "fctb_ScriptEditControl";
            fctb_ScriptEditControl.Paddings = new Padding(0);
            fctb_ScriptEditControl.SelectionColor = Color.FromArgb(100, 255, 255, 128);
@@ -178,30 +178,30 @@
            pnl_ScriptEditControl.BackColor = Color.DarkSlateGray;
            pnl_ScriptEditControl.Controls.Add(pnl_ControlView);
            pnl_ScriptEditControl.Location = new Point(-75, 128);
            pnl_ScriptEditControl.Margin = new Padding(4, 4, 4, 4);
            pnl_ScriptEditControl.Margin = new Padding(4);
            pnl_ScriptEditControl.Name = "pnl_ScriptEditControl";
            pnl_ScriptEditControl.Size = new Size(719, 42);
            pnl_ScriptEditControl.TabIndex = 2;
            pnl_ScriptEditControl.Visible = false;
            // 
            // panControlView
            // pnl_ControlView
            // 
            pnl_ControlView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            pnl_ControlView.Location = new Point(2, 3);
            pnl_ControlView.Margin = new Padding(4, 4, 4, 4);
            pnl_ControlView.Name = "panControlView";
            pnl_ControlView.Margin = new Padding(4);
            pnl_ControlView.Name = "pnl_ControlView";
            pnl_ControlView.Size = new Size(1292, 0);
            pnl_ControlView.TabIndex = 8;
            // 
            // ScriptEditControl
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.DimGray;
            Controls.Add(pnl_ScriptEditControl);
            Controls.Add(fctb_ScriptEditControl);
            DoubleBuffered = true;
            Margin = new Padding(4, 4, 4, 4);
            Margin = new Padding(4);
            Name = "ScriptEditControl";
            Size = new Size(568, 298);
            KeyDown += Form1_KeyDown;
LB_VisionControl/ScriptEditControl/ScriptEditForm.Designer.cs
@@ -215,7 +215,7 @@
            splitContainer2.Panel2.BackColor = Color.DimGray;
            splitContainer2.Panel2.Controls.Add(splitContainer3);
            splitContainer2.Size = new Size(1050, 819);
            splitContainer2.SplitterDistance = 636;
            splitContainer2.SplitterDistance = 637;
            splitContainer2.SplitterWidth = 3;
            splitContainer2.TabIndex = 2;
            // 
@@ -247,7 +247,7 @@
            fctb.Paddings = new Padding(0);
            fctb.SelectionColor = Color.FromArgb(100, 255, 255, 128);
            fctb.ServiceLinesColor = Color.DarkGoldenrod;
            fctb.Size = new Size(1050, 636);
            fctb.Size = new Size(1050, 637);
            fctb.TabIndex = 0;
            fctb.TextChanged += fctb_TextChanged;
            fctb.KeyDown += fctb_KeyDown;
@@ -343,8 +343,8 @@
            // 
            splitContainer3.Panel2.BackColor = Color.FromArgb(30, 17, 18);
            splitContainer3.Panel2MinSize = 10;
            splitContainer3.Size = new Size(1050, 180);
            splitContainer3.SplitterDistance = 153;
            splitContainer3.Size = new Size(1050, 179);
            splitContainer3.SplitterDistance = 152;
            splitContainer3.SplitterWidth = 2;
            splitContainer3.TabIndex = 1;
            // 
@@ -371,7 +371,7 @@
            DebugTextBox1.SelectionColor = Color.FromArgb(50, 0, 0, 255);
            DebugTextBox1.ServiceLinesColor = Color.DarkGoldenrod;
            DebugTextBox1.ShowLineNumbers = false;
            DebugTextBox1.Size = new Size(1050, 153);
            DebugTextBox1.Size = new Size(1050, 152);
            DebugTextBox1.TabIndex = 0;
            DebugTextBox1.KeyDown += DebugTextBox1_KeyDown;
            // 
@@ -393,8 +393,8 @@
            // 
            // ScriptEditForm
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            BackColor = Color.DimGray;
            ClientSize = new Size(1050, 865);
            ControlBox = false;
LB_VisionControl/UserHSmartWindowControl.Designer.cs
@@ -120,8 +120,8 @@
            // 
            // UserHSmartWindowControl
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(pnl);
            Controls.Add(BtmStatusStrip);
            Margin = new Padding(4);
LB_VisionControl/UserHSmartWindowControl.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
LB_VisionFlowNode/FlowNodeEditor.Designer.cs
@@ -109,8 +109,8 @@
            // 
            // FlowNodeEditor
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(pnl_FlowNodeEditor);
            Controls.Add(tsp_Top);
            Name = "FlowNodeEditor";
LB_VisionFlowNode/IFlowContext.cs
@@ -275,6 +275,17 @@
            }
        }
        #region æ³¨å†Œå·¥å…·äº‹ä»¶
        [Node("相机取图", "取像工具", "Basic", "相机取图")]
        public void ç›¸æœºå–图(FlowNode node) { RunNodeAsync(node); }
        [Node("Halcon2D斑点工具", "Haclon2D工具", "Basic", "Halcon2D斑点工具")]
        public void Halcon2D斑点工具(FlowNode node) { RunNodeAsync(node); }
        #endregion
        // é‡å†™åŽŸæœ‰Node方法,添加业务逻辑
        [Node("开始", "控制", "Logic", "开始")]
        public override void å¼€å§‹(FlowNode node)
LB_VisionFlowNode/MainForm.Designer.cs
@@ -78,8 +78,8 @@
            // 
            // MainForm
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(800, 450);
            Controls.Add(themeForm);
            FormBorderStyle = FormBorderStyle.None;
LB_VisionFlowNode/MainForm.resx
@@ -120,9 +120,11 @@
  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <data name="themeForm.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAACVUSURBVHhe7dXLDnD/OYbhb1RnQP1L5yZodRe7gUTsK6k2StJo42Boi3AE9gRnRChBgqGx4gCu
        +e/NnTwr12jNVlbe+/nw8z/8vWlf+dxHab/1kz+Y9tUvfCLNL2r58mc/SvvGT38y7Yuf+njaB5PaYlJb
        iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAIAAAB7GkOtAAAABGdBTUEAALGPC/xhBQAAJVRJREFUeF7t
        1csOcP85huFvVGdA/UvnJmh1F7uBROwrqTZK0mjjYGiLcAT2BGdEKEGCobHiAK75782dPCvXaM1WVt77
        +fDzP/y9aV/53Edpv/WTP5j21S98Is0vavnyZz9K+8ZPfzLti5/6eNoHk9piUls86RaT2uIXtZjUFpPa
        YlJbNgDHPOkWk9riF7WY1BaT2mJSWzYAxzzpFpPa4he1mNQWk9piUls2AMc86RaT2uIXtZjUFpPaYlJb
        NgDHPOkWk9riF7WY1BaT2mJSWzYAxzzpFpPa4he1mNQWk9piUls2AMc86RaT2uIXtZjUFpPaYlJbNgDH
        POkWk9riF7WY1BaT2mJSWzYAxzzpFpPa4he1mNQWk9piUls2AMc86RaT2uIXtZjUFpPaYlJbNgDHPOkW
        k9riF7WY1BaT2mJSWzYAxzzpFpPa4he1mNQWk9piUls2AMc86RaT2uIXtZjUFpPaYlJbNgDHPOkWk9ri
        F7WY1BaT2mJSWzYAxzzpFpPa4he1mNQWk9piUls2AMc86RaT2uIXtZjUFpPaYlJbNgDHPOkWk9riF7WY
@@ -140,119 +142,108 @@
        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
        gGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnU
        FpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqL
        SW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWk
        tpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJb
        TGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0b
        gGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnU
        FpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqL
        SW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWk
        tpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJb
        TGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0b
        gGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnU
        FpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqL
        SW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWk
        tpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJb
        TGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0b
        gGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnU
        FpPaYlJbTGqLSW0xqS0ffv3zn0j7xz/7Ztp3/vxbab/8qY+nfTHun//i22n/8Td/mPaVz32UtgE4ZlJb
        TGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0m
        tcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPa
        YlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0x
        qS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwA
        jpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJb
        TGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0m
        tcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPa
        YlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0x
        qS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwA
        jpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJb
        TGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0m
        tcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPa
        YlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0x
        qS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwA
        jpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJb
        TGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0m
        tcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPa
        YlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwAjpnUFpPaYlJbTGqLSW0x
        qS0bgGMmtcWktpjUFpPaYlJbTGrLBuCYSW0xqS0mtcWktpjUFpPasgE4ZlJbTGqLSW0xqS0mtcWktmwA
        jpnUFpPaYlJbTGqLSW0xqS0bgGMmtcWktpjUFpPaYlJbTGrLhy995vvT/KSWL3+27bv/899z6Euf+SjN
        i2j51U9/PG0DcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUD
        cMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmk
        tngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNw
        zKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2
        eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DM
        pLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4
        ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyk
        tpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngR
        LSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2
        YlJbNgDHPOkWk9riF7WY1BaT2mJSWzYAxzzpFpPa4he1mNQWk9piUls+fOfPv5X2tZ/4wTRPouUXf+T7
        0r7+U59M+5VPfTzNi2j5z7/9o7QNwDGT2mJSW0xqi0lt8SJaTGrLBuCYSW0xqS0mtcWktngRLSa1ZQNw
        zKS2mNQWk9piUlu8iBaT2rIBOGZSW0xqi0ltMaktXkSLSW3ZABwzqS0mtcWktpjUFi+ixaS2bACOmdQW
        k9piUltMaosX0WJSWzYAx0xqi0ltMaktJrXFi2gxqS0bgGMmtcWktpjUFpPa4kW0mNSWDcAxk9piUltM
        aotJbfEiWkxqywbgmEltMaktJrXFpLZ4ES0mtWUDcMyktpjUFpPaYlJbvIgWk9qyAThmUltMaotJbTGp
        LV5Ei0lt2QAcM6ktJrXFpLaY1BYvosWktmwAjpnUFpPaYlJbTGqLF9FiUls2AMdMaotJbTGpLSa1xYto
        MaktG4BjJrXFpLaY1BaT2uJFtJjUlg3AMZPaYlJbTGqLSW3xIlpMassG4JhJbTGpLSa1xaS2eBEtJrVl
        A3DMpLaY1BaT2mJSW7yIFpPasgE4ZlJbTGqLSW0xqS1eRItJbdkAHDOpLSa1xaS2mNQWL6LFpLZsAI6Z
        1BaT2mJSW0xqixfRYlJbNgDHTGqLSW0xqS0mtcWLaDGpLRuAYya1xaS2mNQWk9riRbSY1JYNwDGT2mJS
        W0xqi0lt8SJaTGrLBuCYSW0xqS0mtcWktngRLSa1ZQNwzKS2mNQWk9piUlu8iBaT2rIBOGZSW0xqi0lt
        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
        LRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACO
        mdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltM
        aotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1
        xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9pi
        UltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGp
        LRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACO
        mdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltM
        aotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1
        xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9pi
        UltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGp
        LRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACO
        mdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltM
        aotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1
        xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9pi
        UltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGp
        LR9+/fOfSPvHP/tm2nf+/Ftpv/ypj6d9Me6f/+Lbaf/xN3+Y9pXPfZS2AThmUltMaotJbTGpLSa1xaS2
        bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThm
        UltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGp
        LSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQW
        k9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJ
        bTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2
        bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThm
        UltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGp
        LSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQW
        k9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJ
        bTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2
        bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThm
        UltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGp
        LSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQW
        k9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJ
        bTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2
        bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThm
        UltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQWk9piUltMassG4JhJbTGp
        LSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJbTGpLRuAYya1xaS2mNQW
        k9piUltMassG4JhJbTGpLSa1xaS2mNQWk9qyAThmUltMaotJbTGpLSa1xaS2bACOmdQWk9piUltMaotJ
        bTGpLRuAYya1xaS2mNQWk9piUltMasuHL33m+9P8pJYvf7btu//z33PoS5/5KM2LaPnVT388bQNwzKS2
        mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEt
        JrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaY
        pHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0m
@@ -261,26 +252,35 @@
        ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5
        yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVl
        A3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJ
        pLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mteXD
        N37hx9J++5c+k/a1n/1U2lc+94m0X/vsR2lf/7lPp331Z354Dm0AjpnUFpPaYlJbTGqLSZqXNgDHTGqL
        SW0xqS0mtcUkzUsbgGMmtcWktpjUFpPaYpLmpQ3AMZPaYlJbTGqLSW0xSfPSBuCYSW0xqS0mtcWktpik
        eWkDcMyktpjUFpPaYlJbTNK8tAE4ZlJbTGqLSW0xqS0maV7aABwzqS0mtcWktpjUFpM0L20AjpnUFpPa
        YlJbTGqLSZqXNgDHTGqLSW0xqS0mtcUkzUsbgGMmtcWktpjUFpPaYpLmpQ3AMZPaYlJbTGqLSW0xSfPS
        BuCYSW0xqS0mtcWktpikeWkDcMyktpjUFpPaYlJbTNK8tAE4ZlJbTGqLSW0xqS0maV7aABwzqS0mtcWk
        tpjUFpM0L20AjpnUFpPaYlJbTGqLSZqXNgDHTGqLSW0xqS0mtcUkzUsbgGMmtcWktpjUFpPaYpLmpQ3A
        MZPaYlJbTGqLSW0xSfPSBuCYSW0xqS0mtcWktpikeWkDcMyktpjUFpPaYlJbTNK8tAE4ZlJbTGqLSW0x
        qS0maV7aABwzqS0mtcWktpjUFpM0L20AjpnUFpPaYlJbTGqLSZqXNgDHTGqLSW0xqS0mtcUkzUsbgGMm
        tcWktpjUFpPaYpLmpQ3AMZPaYlJbTGqLSW0xSfPSBuCYSW0xqS0mtcWktpikeWkDcMyktpjUFpPaYlJb
        TNK8tAE4ZlJbTGqLSW0xqS0maV7aABwzqS0mtcWktpjUFpM0L20AjpnUFpPaYlJbTGqLSZqXNgDHTGqL
        SW0xqS0mtcUkzUsbgGMmtcWktpjUFpPaYpLmpQ3AMZPaYlJbTGqLSW0xSfPSBuCYSW0xqS0mtcWktpik
        eWkDcMyktpjUFpPaYlJbTNK8tAE4ZlJbTGqLSW0xqS0maV7aABwzqS0mtcWktpjUFpM0L20AjpnUFpPa
        YlJbTGqLSZqXNgDHTGqLSW0xqS0mtcUkzUsbgGMmtcWktpjUFpPaYpLmpQ3AMZPaYlJbTGqLSW0xSfPS
        BuCYSW0xqS0mtcWktpikeWkDcMyktpjUFpPaYlJbTNK8tAE4ZlJbTGqLSW0xqS0maV7aABwzqS0mtcWk
        tpjUFpM0L20AjpnUFpPaYlJbTGqLSZqXNgDHTGqLSW0xqS0mtcUkzUsbgGMmtcWktpjUFpPaYpLmpQ3A
        MZPaYlJbTGqLSW0xSfPSBuCYSW0xqS0mtcWktpikeWkDcMyktpjUFpPaYlJbTNK8tAE4ZlJbTGqLSW0x
        qS0maV7aABwzqS0mtcWktpjUFpM0L20AjpnUFpPaYlJbTGqLSZqXNgDHTGqLSW0xqS0mtcUkzUsbgGMm
        tcWktpjUFpPaYpLmpQ3AMZPaYlJbTGqLSW0xSfPSBuCYSW0xqS0mtcWktpikeWkDcMyktpjUFpPaYlJb
        TNK8tAE4ZlJbTGqLSW0xqS0maV76fzfth9drmQBzAAAAAElFTkSuQmCC
        pLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUD
        cMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmk
        tngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNw
        zKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2
        eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DM
        pLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4
        ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyk
        tpikecmktngRLSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngR
        LSa1ZQNwzKS2mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa1ZQNwzKS2
        mKR5yaS2eBEtJrVlA3DMpLaYpHnJpLZ4ES0mtWUDcMyktpikecmktngRLSa15cM3fuHH0n77lz6T9rWf
        /VTaVz73ibRf++xHaV//uU+nffVnfngObQCOmdQWk9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuA
        Yya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9pi
        UltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdM
        aotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2
        mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQW
        k9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ
        89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1
        xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikual
        DcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJ
        bTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuA
        Yya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9pi
        UltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdM
        aotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2
        mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1xaS2mNQWkzQvbQCOmdQW
        k9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikualDcAxk9piUltMaotJbTFJ
        89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJbTGpLSZpXtoAHDOpLSa1
        xaS2mNQWkzQvbQCOmdQWk9piUltMaotJmpc2AMdMaotJbTGpLSa1xSTNSxuAYya1xaS2mNQWk9pikual
        DcAxk9piUltMaotJbTFJ89IG4JhJbTGpLSa1xaS2mKR5aQNwzKS2mNQWk9piUltM0ry0AThmUltMaotJ
        bTGpLSZpXvp/N+2H12uZAHMAAAAASUVORK5CYII=
</value>
  </data>
</root>
LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.Designer.cs
@@ -437,8 +437,8 @@
            // 
            // TestToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(MainTableLayoutPanel);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
LB_VisionProcesses/Alogrithms/BaseAlgorithm/TestTool/TestToolEdit.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobTool.cs
@@ -1,5 +1,6 @@
using HalconDotNet;
using Newtonsoft.Json;
using System.Drawing.Imaging;
namespace LB_VisionProcesses.Alogrithms.Halcon
{
@@ -78,6 +79,24 @@
                    Result = false;
                    return;
                }
                if (InputImage is Bitmap)
                {
                    try
                    {
                        using (HImage hImage = new HImage())
                        {
                            Rectangle rect = new Rectangle(0, 0, ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height);
                            BitmapData srcBmpData = ((Bitmap)InputImage).LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
                            hImage.GenImageInterleaved(srcBmpData.Scan0, "rgbx", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, "byte", ((Bitmap)InputImage).Width, ((Bitmap)InputImage).Height, 0, 0, -1, 0);
                            ((Bitmap)InputImage).UnlockBits(srcBmpData);
                            InputImage = null;
                            InputImage = hImage.Clone();
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
                if (!(InputImage is HObject))
                {
                    Msg = "输入图片格式不为HObject";
LB_VisionProcesses/Alogrithms/Halcon/2D/HBlobTool/HBlobToolEdit.Designer.cs
@@ -1274,8 +1274,8 @@
            // 
            // HBlobToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(splitContainer1);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.Designer.cs
@@ -584,8 +584,8 @@
            // 
            // HFindCode2dToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(MainTableLayoutPanel);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindCode2dTool/HFindCode2dToolEdit.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
@@ -117,10 +117,13 @@
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="TopToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="lblMsgToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
  <metadata name="TopToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>156, 17</value>
  </metadata>
  <metadata name="BtmStatusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>148, 17</value>
    <value>287, 17</value>
  </metadata>
</root>
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.Designer.cs
@@ -47,6 +47,7 @@
            label13 = new Label();
            cmbTransition = new ComboBox();
            cmbSelect = new ComboBox();
            btnShowROI = new Button();
            pnlInputImage = new Panel();
            TopToolStrip = new ToolStrip();
            btnRun = new ToolStripButton();
@@ -85,7 +86,6 @@
            tabPageInputImage = new TabPage();
            tabPageRecordImage = new TabPage();
            pnlRecordImage = new Panel();
            btnShowROI = new Button();
            tablePanelParas.SuspendLayout();
            TopToolStrip.SuspendLayout();
            BtmStatusStrip.SuspendLayout();
@@ -321,6 +321,17 @@
            cmbSelect.Name = "cmbSelect";
            cmbSelect.Size = new Size(103, 25);
            cmbSelect.TabIndex = 14;
            //
            // btnShowROI
            //
            btnShowROI.Dock = DockStyle.Fill;
            btnShowROI.Location = new Point(3, 207);
            btnShowROI.Name = "btnShowROI";
            btnShowROI.Size = new Size(84, 45);
            btnShowROI.TabIndex = 15;
            btnShowROI.Text = "显示找线区域";
            btnShowROI.UseVisualStyleBackColor = true;
            btnShowROI.Click += btnShowROI_Click;
            // 
            // pnlInputImage
            // 
@@ -754,21 +765,10 @@
            pnlRecordImage.Size = new Size(607, 510);
            pnlRecordImage.TabIndex = 45;
            // 
            // btnShowROI
            //
            btnShowROI.Dock = DockStyle.Fill;
            btnShowROI.Location = new Point(3, 207);
            btnShowROI.Name = "btnShowROI";
            btnShowROI.Size = new Size(84, 45);
            btnShowROI.TabIndex = 15;
            btnShowROI.Text = "显示找线区域";
            btnShowROI.UseVisualStyleBackColor = true;
            btnShowROI.Click += btnShowROI_Click;
            //
            // HFindLineToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(MainTableLayoutPanel);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindLineTool/HFindLineToolEdit.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
@@ -117,10 +117,13 @@
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="TopToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
  <metadata name="lblMsgToolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
  <metadata name="TopToolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>156, 17</value>
  </metadata>
  <metadata name="BtmStatusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>129, 17</value>
    <value>287, 17</value>
  </metadata>
</root>
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.Designer.cs
@@ -1685,8 +1685,8 @@
            // 
            // HFindModelToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(MainTableLayoutPanel);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindModelTool/HFindModelToolEdit.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.Designer.cs
@@ -197,7 +197,7 @@
            tabPage1.Controls.Add(splitContainer1);
            tabPage1.Location = new Point(4, 26);
            tabPage1.Name = "tabPage1";
            tabPage1.Padding = new Padding(3, 3, 3, 3);
            tabPage1.Padding = new Padding(3);
            tabPage1.Size = new Size(403, 516);
            tabPage1.TabIndex = 0;
            tabPage1.Text = "输入参数";
@@ -422,8 +422,8 @@
            tabPage2.Controls.Add(tableLayoutResults);
            tabPage2.Location = new Point(4, 26);
            tabPage2.Name = "tabPage2";
            tabPage2.Padding = new Padding(3, 3, 3, 3);
            tabPage2.Size = new Size(404, 519);
            tabPage2.Padding = new Padding(3);
            tabPage2.Size = new Size(403, 516);
            tabPage2.TabIndex = 1;
            tabPage2.Text = "输出结果";
            tabPage2.UseVisualStyleBackColor = true;
@@ -458,7 +458,7 @@
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.RowStyles.Add(new RowStyle(SizeType.Percent, 10F));
            tableLayoutResults.Size = new Size(398, 513);
            tableLayoutResults.Size = new Size(397, 510);
            tableLayoutResults.TabIndex = 1;
            // 
            // label5
@@ -510,7 +510,7 @@
            dtxtCenterX.Margin = new Padding(2, 3, 2, 3);
            dtxtCenterX.Name = "dtxtCenterX";
            dtxtCenterX.ReadOnly = true;
            dtxtCenterX.Size = new Size(294, 23);
            dtxtCenterX.Size = new Size(293, 23);
            dtxtCenterX.TabIndex = 5;
            // 
            // dtxtCenterY
@@ -520,7 +520,7 @@
            dtxtCenterY.Margin = new Padding(2, 3, 2, 3);
            dtxtCenterY.Name = "dtxtCenterY";
            dtxtCenterY.ReadOnly = true;
            dtxtCenterY.Size = new Size(294, 23);
            dtxtCenterY.Size = new Size(293, 23);
            dtxtCenterY.TabIndex = 6;
            // 
            // dtxtAngle
@@ -530,7 +530,7 @@
            dtxtAngle.Margin = new Padding(2, 3, 2, 3);
            dtxtAngle.Name = "dtxtAngle";
            dtxtAngle.ReadOnly = true;
            dtxtAngle.Size = new Size(294, 23);
            dtxtAngle.Size = new Size(293, 23);
            dtxtAngle.TabIndex = 7;
            // 
            // label8
@@ -550,7 +550,7 @@
            dtxtScore.Location = new Point(103, 156);
            dtxtScore.Name = "dtxtScore";
            dtxtScore.ReadOnly = true;
            dtxtScore.Size = new Size(292, 23);
            dtxtScore.Size = new Size(291, 23);
            dtxtScore.TabIndex = 9;
            // 
            // dtxtCount
@@ -588,7 +588,7 @@
            tabPageInputImage.Controls.Add(pnlInputImage);
            tabPageInputImage.Location = new Point(4, 26);
            tabPageInputImage.Name = "tabPageInputImage";
            tabPageInputImage.Padding = new Padding(3, 3, 3, 3);
            tabPageInputImage.Padding = new Padding(3);
            tabPageInputImage.Size = new Size(613, 516);
            tabPageInputImage.TabIndex = 0;
            tabPageInputImage.Text = "输入图像";
@@ -598,7 +598,7 @@
            // 
            pnlInputImage.Dock = DockStyle.Fill;
            pnlInputImage.Location = new Point(3, 3);
            pnlInputImage.Margin = new Padding(4, 4, 4, 4);
            pnlInputImage.Margin = new Padding(4);
            pnlInputImage.Name = "pnlInputImage";
            pnlInputImage.Size = new Size(607, 510);
            pnlInputImage.TabIndex = 44;
@@ -608,8 +608,8 @@
            tabPageRecordImage.Controls.Add(pnlRecordImage);
            tabPageRecordImage.Location = new Point(4, 26);
            tabPageRecordImage.Name = "tabPageRecordImage";
            tabPageRecordImage.Padding = new Padding(3, 3, 3, 3);
            tabPageRecordImage.Size = new Size(613, 519);
            tabPageRecordImage.Padding = new Padding(3);
            tabPageRecordImage.Size = new Size(613, 516);
            tabPageRecordImage.TabIndex = 1;
            tabPageRecordImage.Text = "结果图像";
            tabPageRecordImage.UseVisualStyleBackColor = true;
@@ -618,15 +618,15 @@
            // 
            pnlRecordImage.Dock = DockStyle.Fill;
            pnlRecordImage.Location = new Point(3, 3);
            pnlRecordImage.Margin = new Padding(4, 4, 4, 4);
            pnlRecordImage.Margin = new Padding(4);
            pnlRecordImage.Name = "pnlRecordImage";
            pnlRecordImage.Size = new Size(607, 513);
            pnlRecordImage.Size = new Size(607, 510);
            pnlRecordImage.TabIndex = 45;
            // 
            // HFindMultiModelToolEdit
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(MainTableLayoutPanel);
            Controls.Add(BtmStatusStrip);
            Controls.Add(TopToolStrip);
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HFindMultiModelToolEdit.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
LB_VisionProcesses/Alogrithms/Halcon/2D/HFindMultiModelTool/HMulitModelControl.Designer.cs
@@ -167,8 +167,8 @@
            // 
            // HMulitModelControl
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(tableLayoutPanel1);
            Name = "HMulitModelControl";
            Size = new Size(399, 157);
LB_VisionProcesses/Cameras/2DCameraForm.Designer.cs
@@ -104,20 +104,18 @@
            // 
            cmbBrand.Dock = DockStyle.Fill;
            cmbBrand.FormattingEnabled = true;
            cmbBrand.Location = new Point(68, 4);
            cmbBrand.Margin = new Padding(4);
            cmbBrand.Location = new Point(53, 3);
            cmbBrand.Name = "cmbBrand";
            cmbBrand.Size = new Size(381, 28);
            cmbBrand.Size = new Size(296, 25);
            cmbBrand.TabIndex = 0;
            // 
            // cmbSN
            // 
            cmbSN.Dock = DockStyle.Fill;
            cmbSN.FormattingEnabled = true;
            cmbSN.Location = new Point(68, 4);
            cmbSN.Margin = new Padding(4);
            cmbSN.Location = new Point(53, 3);
            cmbSN.Name = "cmbSN";
            cmbSN.Size = new Size(381, 28);
            cmbSN.Size = new Size(296, 25);
            cmbSN.TabIndex = 1;
            cmbSN.SelectedIndexChanged += cmbSN_SelectedIndexChanged;
            cmbSN.MouseDown += cmbSN_MouseDown;
@@ -126,10 +124,9 @@
            // 
            label1.AutoSize = true;
            label1.Dock = DockStyle.Fill;
            label1.Location = new Point(4, 0);
            label1.Margin = new Padding(4, 0, 4, 0);
            label1.Location = new Point(3, 0);
            label1.Name = "label1";
            label1.Size = new Size(56, 39);
            label1.Size = new Size(44, 34);
            label1.TabIndex = 2;
            label1.Text = "品牌";
            label1.TextAlign = ContentAlignment.MiddleCenter;
@@ -138,10 +135,9 @@
            // 
            label2.AutoSize = true;
            label2.Dock = DockStyle.Fill;
            label2.Location = new Point(4, 0);
            label2.Margin = new Padding(4, 0, 4, 0);
            label2.Location = new Point(3, 0);
            label2.Name = "label2";
            label2.Size = new Size(56, 39);
            label2.Size = new Size(44, 34);
            label2.TabIndex = 3;
            label2.Text = "SN";
            label2.TextAlign = ContentAlignment.MiddleCenter;
@@ -150,10 +146,9 @@
            // 
            btnStartGrab.Dock = DockStyle.Fill;
            btnStartGrab.ForeColor = SystemColors.ControlText;
            btnStartGrab.Location = new Point(117, 4);
            btnStartGrab.Margin = new Padding(4);
            btnStartGrab.Location = new Point(91, 3);
            btnStartGrab.Name = "btnStartGrab";
            btnStartGrab.Size = new Size(105, 31);
            btnStartGrab.Size = new Size(82, 28);
            btnStartGrab.TabIndex = 5;
            btnStartGrab.Text = "连续采集";
            btnStartGrab.UseVisualStyleBackColor = true;
@@ -163,10 +158,9 @@
            // 
            btnCloseGrab.Dock = DockStyle.Fill;
            btnCloseGrab.ForeColor = SystemColors.Desktop;
            btnCloseGrab.Location = new Point(230, 4);
            btnCloseGrab.Margin = new Padding(4);
            btnCloseGrab.Location = new Point(179, 3);
            btnCloseGrab.Name = "btnCloseGrab";
            btnCloseGrab.Size = new Size(105, 31);
            btnCloseGrab.Size = new Size(82, 28);
            btnCloseGrab.TabIndex = 6;
            btnCloseGrab.Text = "关闭采集";
            btnCloseGrab.UseVisualStyleBackColor = true;
@@ -176,10 +170,9 @@
            // 
            btnGrabOnce.Dock = DockStyle.Fill;
            btnGrabOnce.ForeColor = SystemColors.ControlText;
            btnGrabOnce.Location = new Point(4, 4);
            btnGrabOnce.Margin = new Padding(4);
            btnGrabOnce.Location = new Point(3, 3);
            btnGrabOnce.Name = "btnGrabOnce";
            btnGrabOnce.Size = new Size(105, 31);
            btnGrabOnce.Size = new Size(82, 28);
            btnGrabOnce.TabIndex = 7;
            btnGrabOnce.Text = "单张采集";
            btnGrabOnce.UseVisualStyleBackColor = true;
@@ -189,10 +182,9 @@
            // 
            btnOpen.Dock = DockStyle.Fill;
            btnOpen.ForeColor = SystemColors.ControlText;
            btnOpen.Location = new Point(4, 4);
            btnOpen.Margin = new Padding(4);
            btnOpen.Location = new Point(3, 3);
            btnOpen.Name = "btnOpen";
            btnOpen.Size = new Size(105, 31);
            btnOpen.Size = new Size(82, 28);
            btnOpen.TabIndex = 8;
            btnOpen.Text = "打开";
            btnOpen.UseVisualStyleBackColor = true;
@@ -202,10 +194,9 @@
            // 
            btnClose.Dock = DockStyle.Fill;
            btnClose.ForeColor = SystemColors.ControlText;
            btnClose.Location = new Point(117, 4);
            btnClose.Margin = new Padding(4);
            btnClose.Location = new Point(91, 3);
            btnClose.Name = "btnClose";
            btnClose.Size = new Size(105, 31);
            btnClose.Size = new Size(82, 28);
            btnClose.TabIndex = 9;
            btnClose.Text = "关闭";
            btnClose.UseVisualStyleBackColor = true;
@@ -215,10 +206,9 @@
            // 
            label5.AutoSize = true;
            label5.Dock = DockStyle.Fill;
            label5.Location = new Point(4, 0);
            label5.Margin = new Padding(4, 0, 4, 0);
            label5.Location = new Point(3, 0);
            label5.Name = "label5";
            label5.Size = new Size(146, 39);
            label5.Size = new Size(114, 34);
            label5.TabIndex = 15;
            label5.Text = "取图数量:";
            label5.TextAlign = ContentAlignment.MiddleCenter;
@@ -227,10 +217,9 @@
            // 
            lblPicCount.AutoSize = true;
            lblPicCount.Dock = DockStyle.Fill;
            lblPicCount.Location = new Point(158, 0);
            lblPicCount.Margin = new Padding(4, 0, 4, 0);
            lblPicCount.Location = new Point(123, 0);
            lblPicCount.Name = "lblPicCount";
            lblPicCount.Size = new Size(291, 39);
            lblPicCount.Size = new Size(226, 34);
            lblPicCount.TabIndex = 16;
            lblPicCount.Text = "0";
            lblPicCount.TextAlign = ContentAlignment.MiddleLeft;
@@ -238,20 +227,18 @@
            // txtGain
            // 
            txtGain.Dock = DockStyle.Fill;
            txtGain.Location = new Point(68, 4);
            txtGain.Margin = new Padding(4);
            txtGain.Location = new Point(53, 3);
            txtGain.Name = "txtGain";
            txtGain.Size = new Size(381, 27);
            txtGain.Size = new Size(296, 23);
            txtGain.TabIndex = 21;
            txtGain.TextChanged += txtGain_TextChanged;
            // 
            // txtExp
            // 
            txtExp.Dock = DockStyle.Fill;
            txtExp.Location = new Point(68, 4);
            txtExp.Margin = new Padding(4);
            txtExp.Location = new Point(53, 3);
            txtExp.Name = "txtExp";
            txtExp.Size = new Size(381, 27);
            txtExp.Size = new Size(296, 23);
            txtExp.TabIndex = 20;
            txtExp.TextChanged += txtExp_TextChanged;
            // 
@@ -259,10 +246,9 @@
            // 
            label4.AutoSize = true;
            label4.Dock = DockStyle.Fill;
            label4.Location = new Point(4, 0);
            label4.Margin = new Padding(4, 0, 4, 0);
            label4.Location = new Point(3, 0);
            label4.Name = "label4";
            label4.Size = new Size(56, 39);
            label4.Size = new Size(44, 34);
            label4.TabIndex = 19;
            label4.Text = "增益";
            label4.TextAlign = ContentAlignment.MiddleCenter;
@@ -271,10 +257,9 @@
            // 
            label3.AutoSize = true;
            label3.Dock = DockStyle.Fill;
            label3.Location = new Point(4, 0);
            label3.Margin = new Padding(4, 0, 4, 0);
            label3.Location = new Point(3, 0);
            label3.Name = "label3";
            label3.Size = new Size(56, 39);
            label3.Size = new Size(44, 34);
            label3.TabIndex = 18;
            label3.Text = "曝光";
            label3.TextAlign = ContentAlignment.MiddleCenter;
@@ -286,10 +271,8 @@
            groupBox1.Dock = DockStyle.Fill;
            groupBox1.ForeColor = SystemColors.Control;
            groupBox1.Location = new Point(0, 0);
            groupBox1.Margin = new Padding(4);
            groupBox1.Name = "groupBox1";
            groupBox1.Padding = new Padding(4);
            groupBox1.Size = new Size(626, 695);
            groupBox1.Size = new Size(487, 591);
            groupBox1.TabIndex = 17;
            groupBox1.TabStop = false;
            groupBox1.Text = "实时采集";
@@ -297,20 +280,18 @@
            // panel_Picture
            // 
            panel_Picture.Dock = DockStyle.Fill;
            panel_Picture.Location = new Point(4, 24);
            panel_Picture.Margin = new Padding(4);
            panel_Picture.Location = new Point(3, 19);
            panel_Picture.Name = "panel_Picture";
            panel_Picture.Size = new Size(618, 667);
            panel_Picture.Size = new Size(481, 569);
            panel_Picture.TabIndex = 0;
            // 
            // radioButtonSoft
            // 
            radioButtonSoft.AutoSize = true;
            radioButtonSoft.Dock = DockStyle.Fill;
            radioButtonSoft.Location = new Point(4, 145);
            radioButtonSoft.Margin = new Padding(4);
            radioButtonSoft.Location = new Point(3, 123);
            radioButtonSoft.Name = "radioButtonSoft";
            radioButtonSoft.Size = new Size(453, 39);
            radioButtonSoft.Size = new Size(352, 34);
            radioButtonSoft.TabIndex = 23;
            radioButtonSoft.TabStop = true;
            radioButtonSoft.Text = "软触发";
@@ -321,10 +302,9 @@
            // 
            radioButtonHard.AutoSize = true;
            radioButtonHard.Dock = DockStyle.Fill;
            radioButtonHard.Location = new Point(4, 239);
            radioButtonHard.Margin = new Padding(4);
            radioButtonHard.Location = new Point(3, 203);
            radioButtonHard.Name = "radioButtonHard";
            radioButtonHard.Size = new Size(453, 39);
            radioButtonHard.Size = new Size(352, 34);
            radioButtonHard.TabIndex = 24;
            radioButtonHard.TabStop = true;
            radioButtonHard.Text = "硬触发";
@@ -333,8 +313,7 @@
            // splitContainer1
            // 
            splitContainer1.Dock = DockStyle.Fill;
            splitContainer1.Location = new Point(6, 6);
            splitContainer1.Margin = new Padding(4);
            splitContainer1.Location = new Point(5, 5);
            splitContainer1.Name = "splitContainer1";
            // 
            // splitContainer1.Panel1
@@ -344,9 +323,8 @@
            // splitContainer1.Panel2
            // 
            splitContainer1.Panel2.Controls.Add(groupBox1);
            splitContainer1.Size = new Size(1100, 695);
            splitContainer1.SplitterDistance = 469;
            splitContainer1.SplitterWidth = 5;
            splitContainer1.Size = new Size(855, 591);
            splitContainer1.SplitterDistance = 364;
            splitContainer1.TabIndex = 19;
            // 
            // groupBox2
@@ -356,11 +334,9 @@
            groupBox2.Dock = DockStyle.Fill;
            groupBox2.ForeColor = SystemColors.Control;
            groupBox2.Location = new Point(0, 0);
            groupBox2.Margin = new Padding(4);
            groupBox2.MinimumSize = new Size(336, 72);
            groupBox2.MinimumSize = new Size(261, 61);
            groupBox2.Name = "groupBox2";
            groupBox2.Padding = new Padding(4);
            groupBox2.Size = new Size(469, 695);
            groupBox2.Size = new Size(364, 591);
            groupBox2.TabIndex = 0;
            groupBox2.TabStop = false;
            groupBox2.Text = "相机参数";
@@ -384,8 +360,7 @@
            tableLayoutPanel2.Controls.Add(tableLayoutPanel9, 0, 10);
            tableLayoutPanel2.Controls.Add(tableLayoutPanel10, 0, 9);
            tableLayoutPanel2.Dock = DockStyle.Fill;
            tableLayoutPanel2.Location = new Point(4, 24);
            tableLayoutPanel2.Margin = new Padding(4);
            tableLayoutPanel2.Location = new Point(3, 19);
            tableLayoutPanel2.Name = "tableLayoutPanel2";
            tableLayoutPanel2.RowCount = 14;
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 7.14301062F));
@@ -402,40 +377,38 @@
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 7.14301062F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 7.143011F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Percent, 7.14086771F));
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 24F));
            tableLayoutPanel2.Size = new Size(461, 667);
            tableLayoutPanel2.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
            tableLayoutPanel2.Size = new Size(358, 569);
            tableLayoutPanel2.TabIndex = 25;
            // 
            // tableLayoutPanel3
            // 
            tableLayoutPanel3.ColumnCount = 2;
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 64F));
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 50F));
            tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel3.Controls.Add(label1, 0, 0);
            tableLayoutPanel3.Controls.Add(cmbBrand, 1, 0);
            tableLayoutPanel3.Dock = DockStyle.Fill;
            tableLayoutPanel3.Location = new Point(4, 4);
            tableLayoutPanel3.Margin = new Padding(4);
            tableLayoutPanel3.Location = new Point(3, 3);
            tableLayoutPanel3.Name = "tableLayoutPanel3";
            tableLayoutPanel3.RowCount = 1;
            tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel3.Size = new Size(453, 39);
            tableLayoutPanel3.Size = new Size(352, 34);
            tableLayoutPanel3.TabIndex = 0;
            // 
            // tableLayoutPanel4
            // 
            tableLayoutPanel4.ColumnCount = 2;
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 64F));
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 50F));
            tableLayoutPanel4.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel4.Controls.Add(label2, 0, 0);
            tableLayoutPanel4.Controls.Add(cmbSN, 1, 0);
            tableLayoutPanel4.Dock = DockStyle.Fill;
            tableLayoutPanel4.Location = new Point(4, 51);
            tableLayoutPanel4.Margin = new Padding(4);
            tableLayoutPanel4.Location = new Point(3, 43);
            tableLayoutPanel4.Name = "tableLayoutPanel4";
            tableLayoutPanel4.RowCount = 1;
            tableLayoutPanel4.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel4.Size = new Size(453, 39);
            tableLayoutPanel4.Size = new Size(352, 34);
            tableLayoutPanel4.TabIndex = 1;
            // 
            // tableLayoutPanel5
@@ -449,12 +422,11 @@
            tableLayoutPanel5.Controls.Add(btnClose, 1, 0);
            tableLayoutPanel5.Controls.Add(btnEdit, 3, 0);
            tableLayoutPanel5.Dock = DockStyle.Fill;
            tableLayoutPanel5.Location = new Point(4, 98);
            tableLayoutPanel5.Margin = new Padding(4);
            tableLayoutPanel5.Location = new Point(3, 83);
            tableLayoutPanel5.Name = "tableLayoutPanel5";
            tableLayoutPanel5.RowCount = 1;
            tableLayoutPanel5.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel5.Size = new Size(453, 39);
            tableLayoutPanel5.Size = new Size(352, 34);
            tableLayoutPanel5.TabIndex = 2;
            // 
            // btnEdit
@@ -462,10 +434,9 @@
            btnEdit.Dock = DockStyle.Fill;
            btnEdit.Enabled = false;
            btnEdit.ForeColor = SystemColors.ControlText;
            btnEdit.Location = new Point(343, 4);
            btnEdit.Margin = new Padding(4);
            btnEdit.Location = new Point(267, 3);
            btnEdit.Name = "btnEdit";
            btnEdit.Size = new Size(106, 31);
            btnEdit.Size = new Size(82, 28);
            btnEdit.TabIndex = 10;
            btnEdit.Text = "编辑";
            btnEdit.UseVisualStyleBackColor = true;
@@ -483,22 +454,21 @@
            tableLayoutPanel6.Controls.Add(btnCloseGrab, 2, 0);
            tableLayoutPanel6.Controls.Add(btnSaveImage, 3, 0);
            tableLayoutPanel6.Dock = DockStyle.Fill;
            tableLayoutPanel6.Location = new Point(4, 192);
            tableLayoutPanel6.Margin = new Padding(4);
            tableLayoutPanel6.Location = new Point(3, 163);
            tableLayoutPanel6.Name = "tableLayoutPanel6";
            tableLayoutPanel6.RowCount = 1;
            tableLayoutPanel6.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel6.Size = new Size(453, 39);
            tableLayoutPanel6.Size = new Size(352, 34);
            tableLayoutPanel6.TabIndex = 24;
            // 
            // btnSaveImage
            // 
            btnSaveImage.Dock = DockStyle.Fill;
            btnSaveImage.ForeColor = SystemColors.Desktop;
            btnSaveImage.Location = new Point(342, 2);
            btnSaveImage.Margin = new Padding(3, 2, 3, 2);
            btnSaveImage.Location = new Point(266, 2);
            btnSaveImage.Margin = new Padding(2, 2, 2, 2);
            btnSaveImage.Name = "btnSaveImage";
            btnSaveImage.Size = new Size(108, 35);
            btnSaveImage.Size = new Size(84, 30);
            btnSaveImage.TabIndex = 8;
            btnSaveImage.Text = "保存图片";
            btnSaveImage.UseVisualStyleBackColor = true;
@@ -507,33 +477,31 @@
            // tableLayoutPanel7
            // 
            tableLayoutPanel7.ColumnCount = 2;
            tableLayoutPanel7.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 64F));
            tableLayoutPanel7.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 50F));
            tableLayoutPanel7.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel7.Controls.Add(label3, 0, 0);
            tableLayoutPanel7.Controls.Add(txtExp, 1, 0);
            tableLayoutPanel7.Dock = DockStyle.Fill;
            tableLayoutPanel7.Location = new Point(4, 333);
            tableLayoutPanel7.Margin = new Padding(4);
            tableLayoutPanel7.Location = new Point(3, 283);
            tableLayoutPanel7.Name = "tableLayoutPanel7";
            tableLayoutPanel7.RowCount = 1;
            tableLayoutPanel7.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
            tableLayoutPanel7.Size = new Size(453, 39);
            tableLayoutPanel7.Size = new Size(352, 34);
            tableLayoutPanel7.TabIndex = 25;
            // 
            // tableLayoutPanel8
            // 
            tableLayoutPanel8.ColumnCount = 2;
            tableLayoutPanel8.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 64F));
            tableLayoutPanel8.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 50F));
            tableLayoutPanel8.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel8.Controls.Add(label4, 0, 0);
            tableLayoutPanel8.Controls.Add(txtGain, 1, 0);
            tableLayoutPanel8.Dock = DockStyle.Fill;
            tableLayoutPanel8.Location = new Point(4, 380);
            tableLayoutPanel8.Margin = new Padding(4);
            tableLayoutPanel8.Location = new Point(3, 323);
            tableLayoutPanel8.Name = "tableLayoutPanel8";
            tableLayoutPanel8.RowCount = 1;
            tableLayoutPanel8.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel8.Size = new Size(453, 39);
            tableLayoutPanel8.Size = new Size(352, 34);
            tableLayoutPanel8.TabIndex = 26;
            // 
            // tableLayoutPanel1
@@ -546,21 +514,19 @@
            tableLayoutPanel1.Controls.Add(ckbUpParams, 1, 0);
            tableLayoutPanel1.Controls.Add(ckbRegrab, 2, 0);
            tableLayoutPanel1.Dock = DockStyle.Fill;
            tableLayoutPanel1.Location = new Point(4, 286);
            tableLayoutPanel1.Margin = new Padding(4);
            tableLayoutPanel1.Location = new Point(3, 243);
            tableLayoutPanel1.Name = "tableLayoutPanel1";
            tableLayoutPanel1.RowCount = 1;
            tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel1.Size = new Size(453, 39);
            tableLayoutPanel1.Size = new Size(352, 34);
            tableLayoutPanel1.TabIndex = 29;
            // 
            // btnStartHard
            // 
            btnStartHard.Dock = DockStyle.Fill;
            btnStartHard.Location = new Point(4, 4);
            btnStartHard.Margin = new Padding(4);
            btnStartHard.Location = new Point(3, 3);
            btnStartHard.Name = "btnStartHard";
            btnStartHard.Size = new Size(82, 31);
            btnStartHard.Size = new Size(64, 28);
            btnStartHard.TabIndex = 22;
            btnStartHard.Text = "等待触发";
            btnStartHard.UseVisualStyleBackColor = true;
@@ -570,10 +536,9 @@
            // 
            ckbUpParams.AutoSize = true;
            ckbUpParams.Dock = DockStyle.Fill;
            ckbUpParams.Location = new Point(94, 4);
            ckbUpParams.Margin = new Padding(4);
            ckbUpParams.Location = new Point(73, 3);
            ckbUpParams.Name = "ckbUpParams";
            ckbUpParams.Size = new Size(173, 31);
            ckbUpParams.Size = new Size(134, 28);
            ckbUpParams.TabIndex = 23;
            ckbUpParams.Text = "是否每次写入参数";
            ckbUpParams.UseVisualStyleBackColor = true;
@@ -582,10 +547,9 @@
            // 
            ckbRegrab.AutoSize = true;
            ckbRegrab.Dock = DockStyle.Fill;
            ckbRegrab.Location = new Point(275, 4);
            ckbRegrab.Margin = new Padding(4);
            ckbRegrab.Location = new Point(213, 3);
            ckbRegrab.Name = "ckbRegrab";
            ckbRegrab.Size = new Size(174, 31);
            ckbRegrab.Size = new Size(136, 28);
            ckbRegrab.TabIndex = 24;
            ckbRegrab.Text = "是否失败重新取图";
            ckbRegrab.UseVisualStyleBackColor = true;
@@ -593,27 +557,25 @@
            // tableLayoutPanel12
            // 
            tableLayoutPanel12.ColumnCount = 2;
            tableLayoutPanel12.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 154F));
            tableLayoutPanel12.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 120F));
            tableLayoutPanel12.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel12.Controls.Add(lblCapTime, 1, 0);
            tableLayoutPanel12.Controls.Add(label7, 0, 0);
            tableLayoutPanel12.Dock = DockStyle.Fill;
            tableLayoutPanel12.Location = new Point(4, 615);
            tableLayoutPanel12.Margin = new Padding(4);
            tableLayoutPanel12.Location = new Point(3, 523);
            tableLayoutPanel12.Name = "tableLayoutPanel12";
            tableLayoutPanel12.RowCount = 1;
            tableLayoutPanel12.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel12.Size = new Size(453, 48);
            tableLayoutPanel12.Size = new Size(352, 43);
            tableLayoutPanel12.TabIndex = 31;
            // 
            // lblCapTime
            // 
            lblCapTime.AutoSize = true;
            lblCapTime.Dock = DockStyle.Fill;
            lblCapTime.Location = new Point(158, 0);
            lblCapTime.Margin = new Padding(4, 0, 4, 0);
            lblCapTime.Location = new Point(123, 0);
            lblCapTime.Name = "lblCapTime";
            lblCapTime.Size = new Size(291, 48);
            lblCapTime.Size = new Size(226, 43);
            lblCapTime.TabIndex = 16;
            lblCapTime.Text = "0ms";
            lblCapTime.TextAlign = ContentAlignment.MiddleLeft;
@@ -622,10 +584,9 @@
            // 
            label7.AutoSize = true;
            label7.Dock = DockStyle.Fill;
            label7.Location = new Point(4, 0);
            label7.Margin = new Padding(4, 0, 4, 0);
            label7.Location = new Point(3, 0);
            label7.Name = "label7";
            label7.Size = new Size(146, 48);
            label7.Size = new Size(114, 43);
            label7.TabIndex = 15;
            label7.Text = "取图时间:";
            label7.TextAlign = ContentAlignment.MiddleCenter;
@@ -633,17 +594,16 @@
            // tableLayoutPanel11
            // 
            tableLayoutPanel11.ColumnCount = 2;
            tableLayoutPanel11.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 154F));
            tableLayoutPanel11.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 120F));
            tableLayoutPanel11.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel11.Controls.Add(label5, 0, 0);
            tableLayoutPanel11.Controls.Add(lblPicCount, 1, 0);
            tableLayoutPanel11.Dock = DockStyle.Fill;
            tableLayoutPanel11.Location = new Point(4, 568);
            tableLayoutPanel11.Margin = new Padding(4);
            tableLayoutPanel11.Location = new Point(3, 483);
            tableLayoutPanel11.Name = "tableLayoutPanel11";
            tableLayoutPanel11.RowCount = 1;
            tableLayoutPanel11.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel11.Size = new Size(453, 39);
            tableLayoutPanel11.Size = new Size(352, 34);
            tableLayoutPanel11.TabIndex = 30;
            // 
            // cmbImagesPath
@@ -652,10 +612,9 @@
            cmbImagesPath.Dock = DockStyle.Fill;
            cmbImagesPath.ForeColor = SystemColors.ControlText;
            cmbImagesPath.FormattingEnabled = true;
            cmbImagesPath.Location = new Point(4, 521);
            cmbImagesPath.Margin = new Padding(4);
            cmbImagesPath.Location = new Point(3, 443);
            cmbImagesPath.Name = "cmbImagesPath";
            cmbImagesPath.Size = new Size(453, 28);
            cmbImagesPath.Size = new Size(352, 25);
            cmbImagesPath.TabIndex = 0;
            cmbImagesPath.SelectedIndexChanged += cmbImagesPath_SelectedIndexChanged;
            cmbImagesPath.MouseHover += cmbImagesPath_MouseHover;
@@ -670,22 +629,20 @@
            tableLayoutPanel9.Controls.Add(btnAddImages, 1, 0);
            tableLayoutPanel9.Controls.Add(btnLocalGrab, 2, 0);
            tableLayoutPanel9.Dock = DockStyle.Fill;
            tableLayoutPanel9.Location = new Point(4, 474);
            tableLayoutPanel9.Margin = new Padding(4);
            tableLayoutPanel9.Location = new Point(3, 403);
            tableLayoutPanel9.Name = "tableLayoutPanel9";
            tableLayoutPanel9.RowCount = 1;
            tableLayoutPanel9.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel9.Size = new Size(453, 39);
            tableLayoutPanel9.Size = new Size(352, 34);
            tableLayoutPanel9.TabIndex = 27;
            // 
            // ckbLocalTest
            // 
            ckbLocalTest.AutoSize = true;
            ckbLocalTest.Dock = DockStyle.Fill;
            ckbLocalTest.Location = new Point(4, 4);
            ckbLocalTest.Margin = new Padding(4);
            ckbLocalTest.Location = new Point(3, 3);
            ckbLocalTest.Name = "ckbLocalTest";
            ckbLocalTest.Size = new Size(142, 31);
            ckbLocalTest.Size = new Size(111, 28);
            ckbLocalTest.TabIndex = 0;
            ckbLocalTest.Text = "本地取图";
            ckbLocalTest.UseVisualStyleBackColor = true;
@@ -694,10 +651,9 @@
            // 
            btnAddImages.Dock = DockStyle.Fill;
            btnAddImages.ForeColor = SystemColors.Desktop;
            btnAddImages.Location = new Point(154, 4);
            btnAddImages.Margin = new Padding(4);
            btnAddImages.Location = new Point(120, 3);
            btnAddImages.Name = "btnAddImages";
            btnAddImages.Size = new Size(142, 31);
            btnAddImages.Size = new Size(111, 28);
            btnAddImages.TabIndex = 1;
            btnAddImages.Text = "添加图片";
            btnAddImages.UseVisualStyleBackColor = true;
@@ -707,10 +663,9 @@
            // 
            btnLocalGrab.Dock = DockStyle.Fill;
            btnLocalGrab.ForeColor = SystemColors.Desktop;
            btnLocalGrab.Location = new Point(304, 4);
            btnLocalGrab.Margin = new Padding(4);
            btnLocalGrab.Location = new Point(237, 3);
            btnLocalGrab.Name = "btnLocalGrab";
            btnLocalGrab.Size = new Size(145, 31);
            btnLocalGrab.Size = new Size(112, 28);
            btnLocalGrab.TabIndex = 2;
            btnLocalGrab.Text = "本地取图";
            btnLocalGrab.UseVisualStyleBackColor = true;
@@ -719,27 +674,25 @@
            // tableLayoutPanel10
            // 
            tableLayoutPanel10.ColumnCount = 2;
            tableLayoutPanel10.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 64F));
            tableLayoutPanel10.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 50F));
            tableLayoutPanel10.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tableLayoutPanel10.Controls.Add(label6, 0, 0);
            tableLayoutPanel10.Controls.Add(txtTimeout, 1, 0);
            tableLayoutPanel10.Dock = DockStyle.Fill;
            tableLayoutPanel10.Location = new Point(4, 427);
            tableLayoutPanel10.Margin = new Padding(4);
            tableLayoutPanel10.Location = new Point(3, 363);
            tableLayoutPanel10.Name = "tableLayoutPanel10";
            tableLayoutPanel10.RowCount = 1;
            tableLayoutPanel10.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tableLayoutPanel10.Size = new Size(453, 39);
            tableLayoutPanel10.Size = new Size(352, 34);
            tableLayoutPanel10.TabIndex = 32;
            // 
            // label6
            // 
            label6.AutoSize = true;
            label6.Dock = DockStyle.Fill;
            label6.Location = new Point(4, 0);
            label6.Margin = new Padding(4, 0, 4, 0);
            label6.Location = new Point(3, 0);
            label6.Name = "label6";
            label6.Size = new Size(56, 39);
            label6.Size = new Size(44, 34);
            label6.TabIndex = 0;
            label6.Text = "超时";
            label6.TextAlign = ContentAlignment.MiddleCenter;
@@ -747,10 +700,9 @@
            // txtTimeout
            // 
            txtTimeout.Dock = DockStyle.Fill;
            txtTimeout.Location = new Point(68, 4);
            txtTimeout.Margin = new Padding(4);
            txtTimeout.Location = new Point(53, 3);
            txtTimeout.Name = "txtTimeout";
            txtTimeout.Size = new Size(381, 27);
            txtTimeout.Size = new Size(296, 23);
            txtTimeout.TabIndex = 1;
            // 
            // theme_2DCameraForm
@@ -763,12 +715,11 @@
            theme_2DCameraForm.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
            theme_2DCameraForm.Image = (Image)resources.GetObject("theme_2DCameraForm.Image");
            theme_2DCameraForm.Location = new Point(0, 0);
            theme_2DCameraForm.Margin = new Padding(4);
            theme_2DCameraForm.Name = "theme_2DCameraForm";
            theme_2DCameraForm.Padding = new Padding(13, 82, 13, 11);
            theme_2DCameraForm.Padding = new Padding(10, 70, 10, 9);
            theme_2DCameraForm.RoundCorners = true;
            theme_2DCameraForm.Sizable = true;
            theme_2DCameraForm.Size = new Size(1138, 800);
            theme_2DCameraForm.Size = new Size(885, 680);
            theme_2DCameraForm.SmartBounds = true;
            theme_2DCameraForm.StartPosition = FormStartPosition.WindowsDefaultLocation;
            theme_2DCameraForm.TabIndex = 20;
@@ -785,8 +736,7 @@
            controlBox1.EnableMaximizeButton = false;
            controlBox1.EnableMinimizeButton = false;
            controlBox1.ForeColor = Color.FromArgb(155, 155, 155);
            controlBox1.Location = new Point(1009, 18);
            controlBox1.Margin = new Padding(4);
            controlBox1.Location = new Point(807, 15);
            controlBox1.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
            controlBox1.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
            controlBox1.Name = "controlBox1";
@@ -800,24 +750,22 @@
            panel_2DCameraForm.Controls.Add(splitContainer1);
            panel_2DCameraForm.Dock = DockStyle.Fill;
            panel_2DCameraForm.EdgeColor = Color.FromArgb(32, 41, 50);
            panel_2DCameraForm.Location = new Point(13, 82);
            panel_2DCameraForm.Margin = new Padding(4);
            panel_2DCameraForm.Location = new Point(10, 70);
            panel_2DCameraForm.Name = "panel_2DCameraForm";
            panel_2DCameraForm.Padding = new Padding(6);
            panel_2DCameraForm.Size = new Size(1112, 707);
            panel_2DCameraForm.Padding = new Padding(5, 5, 5, 5);
            panel_2DCameraForm.Size = new Size(865, 601);
            panel_2DCameraForm.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            panel_2DCameraForm.TabIndex = 20;
            panel_2DCameraForm.Text = "panel2";
            // 
            // CameraForm
            // 
            AutoScaleDimensions = new SizeF(9F, 20F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(1138, 800);
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(885, 680);
            Controls.Add(theme_2DCameraForm);
            FormBorderStyle = FormBorderStyle.None;
            Margin = new Padding(4);
            MinimumSize = new Size(336, 72);
            MinimumSize = new Size(261, 61);
            Name = "CameraForm";
            Text = "2D相机设置界面";
            TransparencyKey = Color.Fuchsia;
LB_VisionProcesses/Cameras/2DCameraForm.cs
@@ -1,5 +1,6 @@
using HalconDotNet;
using LB_VisionControl;
using LB_VisionProcesses.Cameras.HRCameras;
using MVSDK_Net;
using Newtonsoft.Json.Linq;
using OpenCvSharp;
LB_VisionProcesses/Cameras/HRCameras/HRCamera.cs
ÎļþÃû´Ó LB_VisionProcesses/Cameras/HRCamera.cs ÐÞ¸Ä
@@ -2,14 +2,13 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
using System.Text;
using System.Threading.Tasks;
namespace LB_VisionProcesses.Cameras
namespace LB_VisionProcesses.Cameras.HRCameras
{
    /// <summary>
    /// åŽç¿2D工业相机实现类
@@ -18,7 +17,7 @@
    public class HRCamera : BaseCamera
    {
        #region ç§æœ‰å­—段
        private MyCamera _camera; // åŽç¿ç›¸æœºè®¾å¤‡å¯¹è±¡
        private Thread _grabThread; // å›¾åƒé‡‡é›†çº¿ç¨‹
        private bool _isGrabbing; // é‡‡é›†çŠ¶æ€æ ‡å¿—
@@ -27,15 +26,15 @@
        private Thread _callbackThread; // å›žè°ƒå¤„理线程
        private List<IMVDefine.IMV_Frame> _frameList; // å›¾åƒç¼“存列表
        private readonly object _frameLock = new object(); // å¸§ç¼“存锁
        // CopyMemory API声明
        [System.Runtime.InteropServices.DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]
        private static extern void CopyMemory(IntPtr dest, IntPtr src, uint count);
        #endregion
        #region æž„造函数和析构函数
        /// <summary>
        /// æž„造函数
        /// </summary>
@@ -47,7 +46,7 @@
            _isGrabbing = false;
            _threadRunning = false;
        }
        /// <summary>
        /// æžæž„函数
        /// </summary>
@@ -55,11 +54,11 @@
        {
            Dispose(false);
        }
        #endregion
        #region è®¾å¤‡ç®¡ç†æ“ä½œ
        /// <summary>
        /// èŽ·å–ç›¸æœºSN枚举列表
        /// </summary>
@@ -67,15 +66,15 @@
        public override List<string> GetListEnum()
        {
            List<string> cameraList = new List<string>();
            try
            {
                // æžšä¸¾æ‰€æœ‰è®¾å¤‡
                IMVDefine.IMV_DeviceList deviceList = new IMVDefine.IMV_DeviceList();
                IMVDefine.IMV_EInterfaceType interfaceType = IMVDefine.IMV_EInterfaceType.interfaceTypeAll;
                int result = MyCamera.IMV_EnumDevices(ref deviceList, (uint)interfaceType);
                if (result == IMVDefine.IMV_OK && deviceList.nDevNum > 0)
                {
                    for (int i = 0; i < deviceList.nDevNum; i++)
@@ -84,7 +83,7 @@
                            Marshal.PtrToStructure(
                                deviceList.pDevInfo + Marshal.SizeOf(typeof(IMVDefine.IMV_DeviceInfo)) * i,
                                typeof(IMVDefine.IMV_DeviceInfo));
                        string cameraInfo = $"{deviceInfo.cameraName}[{deviceInfo.serialNumber}]";
                        cameraList.Add(cameraInfo);
                    }
@@ -97,15 +96,15 @@
                }
            }
            catch (Exception ex)
            {
            {
                // è®°å½•错误日志
                System.Diagnostics.Debug.WriteLine($"获取相机列表失败:{ex.Message}");
                throw;
            }
            return cameraList;
        }
        /// <summary>
        /// åˆå§‹åŒ–相机设备
        /// </summary>
@@ -123,18 +122,18 @@
                    {
                        _camera.IMV_Close();
                    }
                    if (_handleCreated)
                    {
                        _camera.IMV_DestroyHandle();
                        _handleCreated = false;
                    }
                }
                // æžšä¸¾è®¾å¤‡å¹¶åŒ¹é…SN
                List<string> cameraList = GetListEnum();
                int cameraIndex = -1;
                for (int i = 0; i < cameraList.Count; i++)
                {
                    if (cameraList[i].Contains(SN))
@@ -143,12 +142,12 @@
                        break;
                    }
                }
                if (cameraIndex == -1)
                {
                    throw new Exception($"未找到序列号为 {SN} çš„相机");
                }
                // åˆ›å»ºè®¾å¤‡å¥æŸ„
                int result = _camera.IMV_CreateHandle(IMVDefine.IMV_ECreateHandleMode.modeByIndex, cameraIndex);
                if (result != IMVDefine.IMV_OK)
@@ -156,21 +155,21 @@
                    throw new Exception($"创建设备句柄失败,错误码:{result}");
                }
                _handleCreated = true;
                // æ‰“开设备
                result = _camera.IMV_Open();
                if (result != IMVDefine.IMV_OK)
                {
                    throw new Exception($"打开相机失败,错误码:{result}");
                }
                // è®¾ç½®è®¾å¤‡å±žæ€§
                this.SN = SN;
                isGrabbing = false;
                // è®¾ç½®ç¼“存个数为8
                _camera.IMV_SetBufferCount(8);
                return true;
            }
            catch (Exception ex)
@@ -179,7 +178,7 @@
                return false;
            }
        }
        /// <summary>
        /// å…³é—­ç›¸æœºè®¾å¤‡
        /// </summary>
@@ -190,13 +189,13 @@
            {
                if (_camera == null)
                    return true;
                // åœæ­¢é‡‡é›†
                if (_camera.IMV_IsGrabbing())
                {
                    StopGrabbing();
                }
                // å…³é—­è®¾å¤‡
                if (_camera.IMV_IsOpen())
                {
@@ -213,11 +212,11 @@
                    _camera.IMV_DestroyHandle();
                    _handleCreated = false;
                }
                // é‡Šæ”¾èµ„源
                _isGrabbing = false;
                isGrabbing = false;
                // æ¸…理帧缓存
                lock (_frameLock)
                {
@@ -228,7 +227,7 @@
                    }
                    _frameList.Clear();
                }
                return true;
            }
            catch (Exception ex)
@@ -237,11 +236,11 @@
                return false;
            }
        }
        #endregion
        #region å›¾åƒé‡‡é›†æ“ä½œ
        /// <summary>
        /// å¼€å§‹å›¾åƒé‡‡é›†
        /// </summary>
@@ -254,29 +253,29 @@
                {
                    throw new Exception("相机未打开");
                }
                // åœæ­¢çŽ°æœ‰é‡‡é›†
                if (_isGrabbing)
                {
                    StopGrabbing();
                }
                // å¯åЍ采集
                int result = _camera.IMV_StartGrabbing();
                if (result != IMVDefine.IMV_OK)
                {
                    throw new Exception($"启动采集失败,错误码:{result}");
                }
                _isGrabbing = true;
                isGrabbing = true;
                // å¯åŠ¨é‡‡é›†çº¿ç¨‹
                _threadRunning = true;
                _grabThread = new Thread(GrabThreadProc);
                _grabThread.IsBackground = true;
                _grabThread.Start();
                return true;
            }
            catch (Exception ex)
@@ -287,7 +286,7 @@
                return false;
            }
        }
        /// <summary>
        /// åœæ­¢å›¾åƒé‡‡é›†
        /// </summary>
@@ -298,7 +297,7 @@
            {
                if (_camera == null || !_isGrabbing)
                    return true;
                // åœæ­¢çº¿ç¨‹
                _threadRunning = false;
                if (_grabThread != null && _grabThread.IsAlive)
@@ -306,17 +305,17 @@
                    _grabThread.Join(1000);
                    _grabThread = null;
                }
                // åœæ­¢é‡‡é›†
                int result = _camera.IMV_StopGrabbing();
                if (result != IMVDefine.IMV_OK)
                {
                    System.Diagnostics.Debug.WriteLine($"停止采集失败,错误码:{result}");
                }
                _isGrabbing = false;
                isGrabbing = false;
                // æ¸…理缓存
                lock (_frameLock)
                {
@@ -327,7 +326,7 @@
                    }
                    _frameList.Clear();
                }
                return true;
            }
            catch (Exception ex)
@@ -336,7 +335,7 @@
                return false;
            }
        }
        /// <summary>
        /// æ‰§è¡Œè½¯è§¦å‘
        /// </summary>
@@ -349,7 +348,7 @@
                {
                    throw new Exception("相机未打开");
                }
                int result = _camera.IMV_ExecuteCommandFeature("TriggerSoftware");
                return result == IMVDefine.IMV_OK;
            }
@@ -359,11 +358,11 @@
                return false;
            }
        }
        #endregion
        #region å‚数设置和获取
        /// <summary>
        /// è®¾ç½®è§¦å‘模式
        /// </summary>
@@ -378,7 +377,7 @@
                {
                    throw new Exception("相机未打开");
                }
                // è®¾ç½®è§¦å‘模式
                string triggerMode = mode == TriggerMode.On ? "On" : "Off";
                int result = _camera.IMV_SetEnumFeatureSymbol("TriggerMode", triggerMode);
@@ -386,7 +385,7 @@
                {
                    throw new Exception($"设置触发模式失败,错误码:{result}");
                }
                // è®¾ç½®è§¦å‘源
                if (mode == TriggerMode.On)
                {
@@ -397,7 +396,7 @@
                        throw new Exception($"设置触发源失败,错误码:{result}");
                    }
                }
                return true;
            }
            catch (Exception ex)
@@ -406,7 +405,7 @@
                return false;
            }
        }
        /// <summary>
        /// èŽ·å–è§¦å‘æ¨¡å¼
        /// </summary>
@@ -417,14 +416,14 @@
        {
            mode = TriggerMode.Off;
            source = TriggerSource.Software;
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen())
                {
                    throw new Exception("相机未打开");
                }
                // èŽ·å–è§¦å‘æ¨¡å¼
                IMVDefine.IMV_String triggerMode = new IMVDefine.IMV_String();
                int result = _camera.IMV_GetEnumFeatureSymbol("TriggerMode", ref triggerMode);
@@ -432,7 +431,7 @@
                {
                    mode = triggerMode.str == "On" ? TriggerMode.On : TriggerMode.Off;
                }
                // èŽ·å–è§¦å‘æº
                IMVDefine.IMV_String triggerSource = new IMVDefine.IMV_String();
                result = _camera.IMV_GetEnumFeatureSymbol("TriggerSource", ref triggerSource);
@@ -440,7 +439,7 @@
                {
                    source = GetTriggerSourceFromString(triggerSource.str);
                }
                return true;
            }
            catch (Exception ex)
@@ -449,7 +448,7 @@
                return false;
            }
        }
        /// <summary>
        /// è®¾ç½®æ›å…‰æ—¶é—´
        /// </summary>
@@ -463,7 +462,7 @@
                {
                    throw new Exception("相机未打开");
                }
                // éªŒè¯æ›å…‰æ—¶é—´èŒƒå›´
                double minExp = 0, maxExp = 0;
                int result = _camera.IMV_GetDoubleFeatureMin("ExposureTime", ref minExp);
@@ -471,25 +470,25 @@
                {
                    throw new Exception($"获取曝光时间最小值失败,错误码:{result}");
                }
                result = _camera.IMV_GetDoubleFeatureMax("ExposureTime", ref maxExp);
                if (result != IMVDefine.IMV_OK)
                {
                    throw new Exception($"获取曝光时间最大值失败,错误码:{result}");
                }
                if (value < minExp || value > maxExp)
                {
                    throw new Exception($"曝光时间超出范围,有效范围:{minExp} - {maxExp}");
                }
                // è®¾ç½®æ›å…‰æ—¶é—´
                result = _camera.IMV_SetDoubleFeatureValue("ExposureTime", value);
                if (result != IMVDefine.IMV_OK)
                {
                    throw new Exception($"设置曝光时间失败,错误码:{result}");
                }
                return true;
            }
            catch (Exception ex)
@@ -498,7 +497,7 @@
                return false;
            }
        }
        /// <summary>
        /// èŽ·å–æ›å…‰æ—¶é—´
        /// </summary>
@@ -507,14 +506,14 @@
        public override bool GetExpouseTime(out double value)
        {
            value = 0;
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen())
                {
                    throw new Exception("相机未打开");
                }
                int result = _camera.IMV_GetDoubleFeatureValue("ExposureTime", ref value);
                return result == IMVDefine.IMV_OK;
            }
@@ -524,7 +523,7 @@
                return false;
            }
        }
        /// <summary>
        /// è®¾ç½®å¢žç›Š
        /// </summary>
@@ -538,9 +537,9 @@
                {
                    throw new Exception("相机未打开");
                }
                string gainFeature = _camera.IMV_FeatureIsValid("Gain") ? "Gain" : "GainRaw";
                // éªŒè¯å¢žç›ŠèŒƒå›´
                double minGain = 0, maxGain = 0;
                int result = _camera.IMV_GetDoubleFeatureMin(gainFeature, ref minGain);
@@ -548,23 +547,23 @@
                {
                    throw new Exception($"获取增益最小值失败,错误码:{result}");
                }
                result = _camera.IMV_GetDoubleFeatureMax(gainFeature, ref maxGain);
                if (result != IMVDefine.IMV_OK)
                {
                    throw new Exception($"获取增益最大值失败,错误码:{result}");
                }
                if (gain < minGain) gain = minGain;
                if (gain > maxGain) gain = maxGain;
                // è®¾ç½®å¢žç›Š
                result = _camera.IMV_SetDoubleFeatureValue(gainFeature, gain);
                if (result != IMVDefine.IMV_OK)
                {
                    throw new Exception($"设置增益失败,错误码:{result}");
                }
                return true;
            }
            catch (Exception ex)
@@ -573,7 +572,7 @@
                return false;
            }
        }
        /// <summary>
        /// èŽ·å–å¢žç›Šå€¼
        /// </summary>
@@ -582,14 +581,14 @@
        public override bool GetGain(out double gain)
        {
            gain = 0;
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen())
                {
                    throw new Exception("相机未打开");
                }
                string gainFeature = _camera.IMV_FeatureIsValid("Gain") ? "Gain" : "GainRaw";
                int result = _camera.IMV_GetDoubleFeatureValue(gainFeature, ref gain);
                return result == IMVDefine.IMV_OK;
@@ -600,7 +599,7 @@
                return false;
            }
        }
        /// <summary>
        /// è®¾ç½®è§¦å‘极性
        /// </summary>
@@ -611,10 +610,10 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                string activation = (polarity == TriggerPolarity.RisingEdge || polarity == TriggerPolarity.HighLevel)
                string activation = (polarity == TriggerPolarity.RisingEdge || polarity == TriggerPolarity.HighLevel)
                    ? "RisingEdge" : "FallingEdge";
                int result = _camera.IMV_SetEnumFeatureSymbol("TriggerActivation", activation);
                return result == IMVDefine.IMV_OK;
            }
@@ -636,7 +635,7 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                IMVDefine.IMV_String activation = new IMVDefine.IMV_String();
                int result = _camera.IMV_GetEnumFeatureSymbol("TriggerActivation", ref activation);
                if (result == IMVDefine.IMV_OK)
@@ -661,7 +660,7 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                // åŽç¿ç›¸æœºé€šå¸¸ä½¿ç”¨ LineDebouncerTime æŽ§åˆ¶æ»¤æ³¢
                if (_camera.IMV_FeatureIsValid("LineDebouncerTime"))
                {
@@ -686,7 +685,7 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                if (_camera.IMV_FeatureIsValid("LineDebouncerTime"))
                {
                    int result = _camera.IMV_GetDoubleFeatureValue("LineDebouncerTime", ref flitertime);
@@ -709,7 +708,7 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                if (_camera.IMV_FeatureIsValid("TriggerDelay"))
                {
                    int result = _camera.IMV_SetDoubleFeatureValue("TriggerDelay", delay);
@@ -733,7 +732,7 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                if (_camera.IMV_FeatureIsValid("TriggerDelay"))
                {
                    int result = _camera.IMV_GetDoubleFeatureValue("TriggerDelay", ref delay);
@@ -756,11 +755,11 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                // é€‰æ‹©çº¿è·¯
                int result = _camera.IMV_SetEnumFeatureSymbol("LineSelector", line.ToString());
                if (result != IMVDefine.IMV_OK) return false;
                // è®¾ç½®æ¨¡å¼
                string lineMode = mode == LineMode.Input ? "Input" : "Output";
                result = _camera.IMV_SetEnumFeatureSymbol("LineMode", lineMode);
@@ -781,11 +780,11 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                // ä»…对输出线路有效
                int result = _camera.IMV_SetEnumFeatureSymbol("LineSelector", line.ToString());
                if (result != IMVDefine.IMV_OK) return false;
                bool status = linestatus == LineStatus.Hight;
                result = _camera.IMV_SetBoolFeatureValue("UserOutputValue", status);
                return result == IMVDefine.IMV_OK;
@@ -806,10 +805,10 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                int result = _camera.IMV_SetEnumFeatureSymbol("LineSelector", line.ToString());
                if (result != IMVDefine.IMV_OK) return false;
                bool status = false;
                result = _camera.IMV_GetBoolFeatureValue("LineStatus", ref status);
                if (result == IMVDefine.IMV_OK)
@@ -834,7 +833,7 @@
            try
            {
                if (_camera == null || !_camera.IMV_IsOpen()) return false;
                if (_camera.IMV_FeatureIsValid("BalanceWhiteAuto"))
                {
                    int result = _camera.IMV_SetEnumFeatureSymbol("BalanceWhiteAuto", "Once");
@@ -1106,9 +1105,9 @@
        #region IDisposable实现
        private bool _disposed = false;
        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
@@ -1117,20 +1116,20 @@
                {
                    // é‡Šæ”¾æ‰˜ç®¡èµ„源
                }
                // é‡Šæ”¾éžæ‰˜ç®¡èµ„源
                CloseDevice();
                _disposed = true;
            }
        }
        public override void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        #endregion
    }
}
}
LB_VisionProcesses/Cameras/LBCameras/LBCamera.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,134 @@
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LB_VisionProcesses.Cameras.LBCameras
{
    /// <summary>
    /// LB3D工业相机实现类
    /// åŸºäºŽPHM6000系列封装
    /// </summary>
    internal class LBCamera : BaseCamera
    {
        public override bool AutoBalanceWhite()
        {
            return true;
        }
        public override bool CloseDevice()
        {
            return true;
        }
        public override bool GetExpouseTime(out double value)
        {
            value = 0;
            return true;
        }
        public override bool GetGain(out double gain)
        {
            gain = 0;
            return true;
        }
        public override bool GetLineStatus(IOLines line, out LineStatus lineStatus)
        {
            lineStatus = LineStatus.Hight;
            return true;
        }
        public override List<string> GetListEnum()
        {
            return new List<string>();
        }
        public override bool GetTriggerDelay(out double delay)
        {
            delay = 0;
            return true;
        }
        public override bool GetTriggerFliter(out double flitertime)
        {
            flitertime = 0;
            return true;
        }
        public override bool GetTriggerMode(out TriggerMode mode, out TriggerSource source)
        {
            mode = TriggerMode.On;
            source = TriggerSource.Line0;
            return true;
        }
        public override bool GetTriggerPolarity(out TriggerPolarity polarity)
        {
            polarity = TriggerPolarity.RisingEdge;
            return true;
        }
        public override bool InitDevice(string SN, object Handle = null)
        {
            return true;
        }
        public override bool SetExpouseTime(double value)
        {
            return true;
        }
        public override bool SetGain(double gain)
        {
            return true;
        }
        public override bool SetLineMode(IOLines line, LineMode mode)
        {
            return true;
        }
        public override bool SetLineStatus(IOLines line, LineStatus linestatus)
        {
            return true;
        }
        public override bool SetTriggerDelay(double delay)
        {
            return true;
        }
        public override bool SetTriggerFliter(double flitertime)
        {
            return true;
        }
        public override bool SetTriggerMode(TriggerMode mode, TriggerSource triggerEnum = TriggerSource.Line0)
        {
            return true;
        }
        public override bool SetTriggerPolarity(TriggerPolarity polarity)
        {
            return true;
        }
        public override bool SoftTrigger()
        {
            return true;
        }
        public override bool StartGrabbing()
        {
            return true;
        }
        public override bool StopGrabbing()
        {
            return true;
        }
    }
}
LB_VisionProcesses/Communicators/CommunicatorForm.Designer.cs
@@ -321,7 +321,7 @@
            controlBox1.EnableMaximizeButton = false;
            controlBox1.EnableMinimizeButton = false;
            controlBox1.ForeColor = Color.FromArgb(155, 155, 155);
            controlBox1.Location = new Point(479, 12);
            controlBox1.Location = new Point(481, 18);
            controlBox1.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
            controlBox1.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
            controlBox1.Name = "controlBox1";
@@ -331,8 +331,8 @@
            // 
            // CommunicatorForm
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(581, 496);
            Controls.Add(btnRuleSend);
            Controls.Add(grpTest);
LB_VisionProcesses/Communicators/CommunicatorForm.resx
@@ -120,25 +120,25 @@
  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <data name="themeForm1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAPiSURBVFhH7VZLiBxlEG7d+IjBKKtktqt6d8kybLqqZyfi
        +lgUXcGooKIXxYBKLgZFQVDwgQhBvAVzUOPBi3iJgnoSCcTLKobEma7qHeOiuB7UiBo1PuIjq9HNSPX0
        rDN/zyzbQjztB9+pv3r8/19dVZ63ilUUwBzzmbppGOpRcKlEcLNwcGfMsE0J7ogj//okws2NamlD83Zv
        wLX9z2h63ulz7I8kDNsSxleF8CMl+EEY/lDCv5TxbyU8oQTHlfCIEL5kSbh+CqPpeafVIxgWwieUcU4I
        /lTGZl8SnEgI3pBxPzTbOQ4Gkyi4pxEGFTuE639ZpFfNcIsS1LJT5gN28xdl3Cnj/oVmP7t59Hwl3K0M
        C8owL4zbG9XSOjdOT5hQCB5Rxu97BMqT4BsJ4X6Z9M8x+483XXCuEO5KnyjTCOGvSvjMAQ4G3XhdODAV
        rBWGHUL4Wy5Qb34Sk3/rzLS3xuwtCSV8ShmOu1p7wpjwBRkbO8+Nm6LpeQMxwX3Suk43ULczxpPKKLOR
        f+WO7H1bz4YPpaftYdMiLMQET5rWje/FhJfHhF/kjXJcVIZ3tIJVKzazfc3zBpTwLmU82kPfRWH8Lg79
        67qC76uW1mkEr2Qnyxl1GC8K49uNEMbbtpZEjeBaXVnymR/Y2/UUNQqutn/bFTpcVMZ9ykF5ydDzvEMV
        P4wZtYe+L+2Z4hBvSh3YP6rs71zu9PZNGN7tPLnBqloIXl/Oth+F4MW0eO0qlPA9V9BFwtlZhos6g89M
        T69JGB/Xjt+tIDXtG41qaaMwftZDkBG+TAi2tAuuDaHhq4Thq7x+pYSvNRoiL54IJqwy84L05L8LwwPu
        cLFOJ4Rv5vQFKAQ/xRxc1jeB9F0J9rxfHlzfGdxQD2GrJefaFGI7gfrEyJgwfp4X4GEN/Uk3+H5rtQx7
        c/qCFIIjNSpFrcHBcLDro1U94a52i+1EHPoXC+VvrCiF4cNDlY2ltIsJwXOO4KiEOOUGN9jykc7/Hk4L
        kWDPUkuWKLhBGY79+xH32824wQ3WcsWWENdhAdqktG1qyakVWszw1pKI8GW7ma7IGbQydImNYNdpIRLU
        4nDE73JcJ9gihN9mCexuTzkX2dR7TAh+zDleAa0N1wnvdvuKJ5OTZ9j6JQwL1l57jswMM6OjZ8eEN0q6
        I8KnynjMVjKbF1lbPtlq3ykXW1tVuh39LITP992O5suD65XhWSH4QGlo1P3uYr5cPst0thckjLcp473K
        8LBYiyb/0YTwQdsLNYStlnASwRX9amsJaZcL8WkJcXu/OjjlODwVrI0jvOZgZUPJ/fa/wYrEnQGrOBX4
        B6XRFGacFF+7AAAAAElFTkSuQmCC
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
        wgAADsIBFShKgAAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
        NNs5DgaTKLinEQYVO4Trf1mkV81wixLUslPmA3bzF2XcKeP+hWY/u3n0fCXcrQwLyjAvjNsb1dI6N05P
        mFAIHlHG73sEypPgGwnhfpn0zzH7jzddcK4Q7kqfKNMI4a9K+MwBDgbdeF04MBWsFYYdQvhbLlBvfhKT
        f+vMtLfG7C0JJXxKGY67WnvCmPAFGRs7z42boul5AzHBfdK6TjdQtzPGk8oos5F/5Y7sfVvPhg+lp+1h
        0yIsxARPmtaN78WEl8eEX+SNclxUhne0glUrNrN9zfMGlPAuZTzaQ99FYfwuDv3ruoLvq5bWaQSvZCfL
        GXUYLwrj240Qxtu2lkSN4FpdWfKZH9jb9RQ1Cq62f9sVOlxUxn3KQXnJ0PO8QxU/jBm1h74v7ZniEG9K
        Hdg/quzvXO709k0Y3u08ucGqWgheX862H4XgxbR47SqU8D1X0EXC2VmGizqDz0xPr0kYH9eO360gNe0b
        jWppozB+1kOQEb5MCLa0C64NoeGrhOGrvH6lhK81GiIvnggmrDLzgvTkvwvDA+5wsU4nhG/m9AUoBD/F
        HFzWN4H0XQn2vF8eXN8Z3FAPYasl59oUYjuB+sTImDB+nhfgYQ39STf4fmu1DHtz+oIUgiM1KkWtwcFw
        sOujVT3hrnaL7UQc+hcL5W+sKIXhw0OVjaW0iwnBc47gqIQ45QY32PKRzv8eTguRYM9SS5YouEEZjv37
        EffbzbjBDdZyxZYQ12EB2qS0bWrJqRVazPDWkojwZbuZrsgZtDJ0iY1g12khEtTicMTvclwn2CKE32YJ
        7G5PORfZ1HtMCH7MOV4BrQ3XCe92+4onk5Nn2PolDAvWXnuOzAwzo6Nnx4Q3SrojwqfKeMxWMpsXWVs+
        2WrfKRdbW1W6Hf0shM/33Y7my4PrleFZIfhAaWjU/e5ivlw+y3S2FySMtynjvcrwsFiLJv/RhPBB2ws1
        hK2WcBLBFf1qawlplwvxaQlxe786OOU4PBWsjSO85mBlQ8n99r/BisSdAas4FfgHpdEUZpwUX7sAAAAA
        SUVORK5CYII=
</value>
  </data>
</root>
LB_VisionProcesses/Communicators/MES/LBMES.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LB_VisionProcesses.Communicators.MES
{
    internal class LBMES
    {
    }
}
LB_VisionProcesses/Communicators/SiemensS7/SiemensLBS7.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LB_VisionProcesses.Communicators.SiemensS7
{
    internal class SiemensLBS7
    {
    }
}
LB_VisionProcesses/Forms/GlobalVarControl.Designer.cs
@@ -79,8 +79,8 @@
            // 
            // GlobalVarControl
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(tableLayoutPanel1);
            Name = "GlobalVarControl";
            Size = new Size(578, 32);
LB_VisionProcesses/Forms/GlobalVarForm.Designer.cs
@@ -30,14 +30,13 @@
        {
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GlobalVarForm));
            theme_GlobalVarForm = new ReaLTaiizor.Forms.ThemeForm();
            controlBox_GlobalVarForm = new ReaLTaiizor.Controls.ControlBox();
            controlsPanel = new ReaLTaiizor.Controls.Panel();
            tlp_GlobalVarForm = new Sunny.UI.UITableLayoutPanel();
            tlp_GlobalVarFormOperator = new Sunny.UI.UITableLayoutPanel();
            btn_Delete = new ReaLTaiizor.Controls.Button();
            btn_Add = new ReaLTaiizor.Controls.Button();
            controlsPanel = new ReaLTaiizor.Controls.Panel();
            controlBox_GlobalVarForm = new ReaLTaiizor.Controls.ControlBox();
            theme_GlobalVarForm.SuspendLayout();
            controlsPanel.SuspendLayout();
            tlp_GlobalVarForm.SuspendLayout();
            tlp_GlobalVarFormOperator.SuspendLayout();
            SuspendLayout();
@@ -45,8 +44,8 @@
            // theme_GlobalVarForm
            // 
            theme_GlobalVarForm.BackColor = Color.FromArgb(32, 41, 50);
            theme_GlobalVarForm.Controls.Add(tlp_GlobalVarForm);
            theme_GlobalVarForm.Controls.Add(controlBox_GlobalVarForm);
            theme_GlobalVarForm.Controls.Add(controlsPanel);
            theme_GlobalVarForm.Dock = DockStyle.Fill;
            theme_GlobalVarForm.Font = new Font("Microsoft Sans Serif", 9F);
            theme_GlobalVarForm.Image = (Image)resources.GetObject("theme_GlobalVarForm.Image");
@@ -61,50 +60,19 @@
            theme_GlobalVarForm.TabIndex = 0;
            theme_GlobalVarForm.Text = "全局变量";
            // 
            // controlBox_GlobalVarForm
            //
            controlBox_GlobalVarForm.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            controlBox_GlobalVarForm.BackColor = Color.FromArgb(32, 34, 37);
            controlBox_GlobalVarForm.CloseHoverColor = Color.FromArgb(230, 17, 35);
            controlBox_GlobalVarForm.DefaultLocation = true;
            controlBox_GlobalVarForm.EnableHoverHighlight = true;
            controlBox_GlobalVarForm.EnableMaximizeButton = false;
            controlBox_GlobalVarForm.EnableMinimizeButton = false;
            controlBox_GlobalVarForm.ForeColor = Color.FromArgb(155, 155, 155);
            controlBox_GlobalVarForm.Location = new Point(700, 12);
            controlBox_GlobalVarForm.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
            controlBox_GlobalVarForm.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
            controlBox_GlobalVarForm.Name = "controlBox_GlobalVarForm";
            controlBox_GlobalVarForm.Size = new Size(90, 25);
            controlBox_GlobalVarForm.TabIndex = 1;
            //
            // controlsPanel
            //
            controlsPanel.BackColor = Color.FromArgb(39, 51, 63);
            controlsPanel.Controls.Add(tlp_GlobalVarForm);
            controlsPanel.Dock = DockStyle.Fill;
            controlsPanel.EdgeColor = Color.FromArgb(32, 41, 50);
            controlsPanel.Location = new Point(10, 70);
            controlsPanel.Name = "controlsPanel";
            controlsPanel.Padding = new Padding(5);
            controlsPanel.Size = new Size(780, 521);
            controlsPanel.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            controlsPanel.TabIndex = 0;
            controlsPanel.Text = "panel1";
            controlsPanel.SizeChanged += controlsPanel_SizeChanged;
            //
            // tlp_GlobalVarForm
            // 
            tlp_GlobalVarForm.ColumnCount = 1;
            tlp_GlobalVarForm.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
            tlp_GlobalVarForm.Controls.Add(tlp_GlobalVarFormOperator, 0, 1);
            tlp_GlobalVarForm.Controls.Add(controlsPanel, 0, 0);
            tlp_GlobalVarForm.Dock = DockStyle.Fill;
            tlp_GlobalVarForm.Location = new Point(5, 5);
            tlp_GlobalVarForm.Location = new Point(10, 70);
            tlp_GlobalVarForm.Name = "tlp_GlobalVarForm";
            tlp_GlobalVarForm.RowCount = 2;
            tlp_GlobalVarForm.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tlp_GlobalVarForm.RowStyles.Add(new RowStyle(SizeType.Absolute, 60F));
            tlp_GlobalVarForm.Size = new Size(770, 511);
            tlp_GlobalVarForm.Size = new Size(780, 521);
            tlp_GlobalVarForm.TabIndex = 0;
            tlp_GlobalVarForm.TagString = null;
            // 
@@ -120,11 +88,11 @@
            tlp_GlobalVarFormOperator.Controls.Add(btn_Delete, 4, 0);
            tlp_GlobalVarFormOperator.Controls.Add(btn_Add, 5, 0);
            tlp_GlobalVarFormOperator.Dock = DockStyle.Fill;
            tlp_GlobalVarFormOperator.Location = new Point(3, 454);
            tlp_GlobalVarFormOperator.Location = new Point(3, 464);
            tlp_GlobalVarFormOperator.Name = "tlp_GlobalVarFormOperator";
            tlp_GlobalVarFormOperator.RowCount = 1;
            tlp_GlobalVarFormOperator.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
            tlp_GlobalVarFormOperator.Size = new Size(764, 54);
            tlp_GlobalVarFormOperator.Size = new Size(774, 54);
            tlp_GlobalVarFormOperator.TabIndex = 0;
            tlp_GlobalVarFormOperator.TagString = null;
            // 
@@ -139,11 +107,11 @@
            btn_Delete.Image = null;
            btn_Delete.ImageAlign = ContentAlignment.MiddleLeft;
            btn_Delete.InactiveColor = Color.FromArgb(32, 34, 37);
            btn_Delete.Location = new Point(511, 3);
            btn_Delete.Location = new Point(516, 3);
            btn_Delete.Name = "btn_Delete";
            btn_Delete.PressedBorderColor = Color.FromArgb(165, 37, 37);
            btn_Delete.PressedColor = Color.FromArgb(165, 37, 37);
            btn_Delete.Size = new Size(121, 48);
            btn_Delete.Size = new Size(122, 48);
            btn_Delete.TabIndex = 0;
            btn_Delete.Text = "移除";
            btn_Delete.TextAlignment = StringAlignment.Center;
@@ -160,20 +128,51 @@
            btn_Add.Image = null;
            btn_Add.ImageAlign = ContentAlignment.MiddleLeft;
            btn_Add.InactiveColor = Color.FromArgb(32, 34, 37);
            btn_Add.Location = new Point(638, 3);
            btn_Add.Location = new Point(644, 3);
            btn_Add.Name = "btn_Add";
            btn_Add.PressedBorderColor = Color.FromArgb(165, 37, 37);
            btn_Add.PressedColor = Color.FromArgb(165, 37, 37);
            btn_Add.Size = new Size(123, 48);
            btn_Add.Size = new Size(127, 48);
            btn_Add.TabIndex = 1;
            btn_Add.Text = "添加";
            btn_Add.TextAlignment = StringAlignment.Center;
            btn_Add.Click += btn_Add_Click;
            // 
            // controlsPanel
            //
            controlsPanel.BackColor = Color.FromArgb(39, 51, 63);
            controlsPanel.Dock = DockStyle.Fill;
            controlsPanel.EdgeColor = Color.FromArgb(32, 41, 50);
            controlsPanel.Location = new Point(3, 3);
            controlsPanel.Name = "controlsPanel";
            controlsPanel.Padding = new Padding(5);
            controlsPanel.Size = new Size(774, 455);
            controlsPanel.SmoothingType = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            controlsPanel.TabIndex = 0;
            controlsPanel.Text = "panel1";
            controlsPanel.SizeChanged += controlsPanel_SizeChanged;
            //
            // controlBox_GlobalVarForm
            //
            controlBox_GlobalVarForm.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            controlBox_GlobalVarForm.BackColor = Color.FromArgb(32, 34, 37);
            controlBox_GlobalVarForm.CloseHoverColor = Color.FromArgb(230, 17, 35);
            controlBox_GlobalVarForm.DefaultLocation = true;
            controlBox_GlobalVarForm.EnableHoverHighlight = true;
            controlBox_GlobalVarForm.EnableMaximizeButton = false;
            controlBox_GlobalVarForm.EnableMinimizeButton = false;
            controlBox_GlobalVarForm.ForeColor = Color.FromArgb(155, 155, 155);
            controlBox_GlobalVarForm.Location = new Point(700, 18);
            controlBox_GlobalVarForm.MaximizeHoverColor = Color.FromArgb(74, 74, 74);
            controlBox_GlobalVarForm.MinimizeHoverColor = Color.FromArgb(63, 63, 65);
            controlBox_GlobalVarForm.Name = "controlBox_GlobalVarForm";
            controlBox_GlobalVarForm.Size = new Size(90, 25);
            controlBox_GlobalVarForm.TabIndex = 1;
            //
            // GlobalVarForm
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(800, 600);
            Controls.Add(theme_GlobalVarForm);
            FormBorderStyle = FormBorderStyle.None;
@@ -184,7 +183,6 @@
            FormClosing += GlobalVarForm_FormClosing;
            Load += GlobalVarForm_Load;
            theme_GlobalVarForm.ResumeLayout(false);
            controlsPanel.ResumeLayout(false);
            tlp_GlobalVarForm.ResumeLayout(false);
            tlp_GlobalVarFormOperator.ResumeLayout(false);
            ResumeLayout(false);
LB_VisionProcesses/LB_VisionProcesses.csproj
@@ -37,10 +37,6 @@
  <ItemGroup>
    <Folder Include="Alogrithms\VisualLargeModel\" />
    <Folder Include="Cameras\HRCameras\" />
    <Folder Include="Cameras\LBCameras\" />
    <Folder Include="Communicators\SiemensS7\" />
    <Folder Include="Communicators\MES\" />
  </ItemGroup>
  <ItemGroup>
LB_VisionProcesses/ProcessEditForm.Designer.cs
@@ -85,8 +85,8 @@
            // 
            // ProcessEditForm
            // 
            AutoScaleDimensions = new SizeF(7F, 17F);
            AutoScaleMode = AutoScaleMode.Font;
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            ClientSize = new Size(944, 601);
            Controls.Add(theme_AlgorithmForm);
            FormBorderStyle = FormBorderStyle.None;
LB_VisionProcesses/ProcessEditForm.resx
@@ -121,7 +121,7 @@
  <data name="theme_AlgorithmForm.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
        wQAADsEBuJFr7QAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        wAAADsABataJCQAAA+JJREFUWEftVkuIHGUQbt34iMEoq2S2q3p3yTJsuqpnJ+L6WBRdwaigohfFgEou
        BkVBUPCBCEG8BXNQ48GLeImCehIJxMsqhsSZruod46K4HtSIGjU+4iOr0c1I9fSsM3/PLNtCPO0H36m/
        evz/X11VnreKVRTAHPOZumkY6lFwqURws3BwZ8ywTQnuiCP/+iTCzY1qaUPzdm/Atf3PaHre6XPsjyQM
        2xLGV4XwIyX4QRj+UMK/lPFvJTyhBMeV8IgQvmRJuH4Ko+l5p9UjGBbCJ5RxTgj+VMZmXxKcSAjekHE/
LB_VisionProcesses/Processes/ScriptTool/ScriptToolEdit.Designer.cs
@@ -241,7 +241,7 @@
            btnRunCode.Image = (Image)resources.GetObject("btnRunCode.Image");
            btnRunCode.ImageTransparentColor = Color.Magenta;
            btnRunCode.Name = "btnRunCode";
            btnRunCode.Size = new Size(36, 22);
            btnRunCode.Size = new Size(46, 25);
            btnRunCode.Text = "运行";
            btnRunCode.Click += btnRunCode_Click;
            // 
@@ -274,6 +274,8 @@
            // 
            // ScriptToolEdit
            // 
            AutoScaleDimensions = new SizeF(96F, 96F);
            AutoScaleMode = AutoScaleMode.Dpi;
            Controls.Add(panel1);
            Controls.Add(statusStrip1);
            Controls.Add(ToolsStrip);
LB_VisionProcesses/ref/MVSDKmd.dll
Binary files differ