diff --git a/.vs/VisionEdit/v14/.suo b/.vs/VisionEdit/v14/.suo index d98717b..37388b0 100644 Binary files a/.vs/VisionEdit/v14/.suo and b/.vs/VisionEdit/v14/.suo differ diff --git a/CaliperTool/Caliper.cs b/CaliperTool/Caliper.cs index 0e5634c..524fe8c 100644 --- a/CaliperTool/Caliper.cs +++ b/CaliperTool/Caliper.cs @@ -2,7 +2,7 @@ using System; using CommonMethods; using HalconDotNet; using ToolBase; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; using ChoiceTech.Halcon.Control; using ViewROI; diff --git a/CommonMethods/Interface/CommonStruct.cs b/CommonMethods/Interface/CommonStruct.cs index a474126..8ac708d 100644 --- a/CommonMethods/Interface/CommonStruct.cs +++ b/CommonMethods/Interface/CommonStruct.cs @@ -10,15 +10,15 @@ namespace CommonMethods { Job, HalconTool, - SDK_Basler, - SDK_PointGray, - SDK_HIKVision, + SDKBasler, + SDKPointGray, + SDKHIKVision, BlobAnalyse, FindLine, FindCircle, Caliper, ShapeMatch, - EyeHandCalibration, + EyeHandCalib, CircleCalibration, SubImage, CreateROI, @@ -41,6 +41,7 @@ namespace CommonMethods Output, CreateLine, PMAlignTool, + HDevEngineTool, None } @@ -56,6 +57,9 @@ namespace CommonMethods Line, Circle, Pose, + Object, + HXLD, + HObject } public enum SoftwareRunState diff --git a/DataStruct/DataStruct.cs b/DataStruct/DataStruct.cs index 77ba23c..ef8a0d5 100644 --- a/DataStruct/DataStruct.cs +++ b/DataStruct/DataStruct.cs @@ -7,7 +7,7 @@ using HalconDotNet; namespace DataStruct { - public class DataStruct + public class DataStructClass { /// /// XYU结果 diff --git a/EyeHandCalibTool/EyeHandCalib.cs b/EyeHandCalibTool/EyeHandCalib.cs new file mode 100644 index 0000000..4fcea13 --- /dev/null +++ b/EyeHandCalibTool/EyeHandCalib.cs @@ -0,0 +1,338 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonMethods; +using ToolBase; +using ViewROI; +using HalconDotNet; +using System.Data; +using System.Windows.Forms; +using System.IO; +using System.Text.RegularExpressions; +using Logger; +using static DataStruct.DataStructClass; + +namespace EyeHandCalibTool +{ + [Serializable] + public class EyeHandCalib : IToolBase + { + /// + /// 仿射变换矩阵 + /// + public HTuple homMat2D = new HTuple(); + /// + /// 标定类型 四点标定|九点标定 + /// + public CalibType calibType = CalibType.Four_Point; + /// + /// 标定表源数据 + /// + public DataTable CalibSourceDataTable { get; set; } = null; + /// + /// 输入点信息 + /// + public Point inputPoint = new Point(); + /// + /// 输出点信息 + /// + public Point outputPoint = new Point(); + /// + /// 矩阵名称 + /// + public string homMat2DName { get; set; } = Guid.NewGuid().ToString(); + /// + /// X平移 + /// + private HTuple _translateX = 0; + internal HTuple TranslateX + { + get + { + _translateX = Math.Round((double)_translateX, 2); + return _translateX; + } + set + { + value = Math.Round((double)value, 2); + _translateX = value; + } + } + /// + /// Y平移 + /// + private HTuple _translateY = 0; + internal HTuple TranslateY + { + get + { + _translateY = Math.Round((double)_translateY, 2); + return _translateY; + } + set + { + value = Math.Round((double)value, 2); + _translateY = value; + } + } + /// + /// X缩放 + /// + private HTuple _scanX = 1; + internal HTuple ScanX + { + get + { + _scanX = Math.Round((double)_scanX, 2); + return _scanX; + } + set + { + value = Math.Round((double)value, 2); + _scanX = value; + } + } + /// + /// Y缩放 + /// + private HTuple _scanY = 1; + internal HTuple ScanY + { + get + { + _scanY = Math.Round((double)_scanY, 2); + return _scanY; + } + set + { + value = Math.Round((double)value, 2); + _scanY = value; + } + } + /// + /// 角度旋转 + /// + private HTuple _rotation = 0; + internal HTuple Rotation + { + get + { + _rotation = Math.Round((double)_rotation, 2); + return _rotation; + } + set + { + value = Math.Round((double)value, 2); + _rotation = value; + } + } + /// + /// 轴斜切 + /// + private HTuple _theta = 0; + internal HTuple Theta + { + get + { + _theta = Math.Round((double)_theta, 2); + return _theta; + } + set + { + value = Math.Round((double)value, 2); + _theta = value; + } + } + + public override void DispImage() + { + // throw new NotImplementedException(); + } + + public override void DispMainWindow(HWindowTool_Smart window) + { + // throw new NotImplementedException(); + } + + public override void Run(SoftwareRunState softwareRunState) + { + try + { + // 若首次加载且本地存在矩阵,优先读取本地 + if (File.Exists(homMat2DName) && homMat2D.Length == 0) + { + HOperatorSet.ReadTuple(homMat2DName, out homMat2D); + } + // 再次判断 + if (homMat2D.Length == 0) + { + runMessage = $"{FormEyeHandCalib.Instance.myToolInfo.FormToolName}未生成仿射矩阵工具,需要先标定标准!"; + toolRunStatu = ToolRunStatu.Tool_Run_Error; + FormEyeHandCalib.Instance.SetToolStatus(runMessage, toolRunStatu); + } + else + { + HTuple tupOutX, tupOutY; + HOperatorSet.AffineTransPoint2d(homMat2D, inputPoint.Row, inputPoint.Col, out tupOutX, out tupOutY); + outputPoint.Row = tupOutX; + outputPoint.Col = tupOutY; + runMessage = $"{FormEyeHandCalib.Instance.myToolInfo.FormToolName}运行成功"; + toolRunStatu = ToolRunStatu.Succeed; + FormEyeHandCalib.Instance.SetToolStatus(runMessage, toolRunStatu); + } + } + catch (Exception ex) + { + runMessage = $"{FormEyeHandCalib.Instance.myToolInfo.FormToolName}运行出现异常"; + toolRunStatu = ToolRunStatu.Tool_Run_Error; + } + + } + + /// + /// 初始化标定数据源 + /// + public void InitDataTable() + { + CalibSourceDataTable = new DataTable(); + //初始化DataTable,并将datatable绑定到DataGridView的数据源 + DataColumn c1 = new DataColumn("像素X", typeof(double)); + DataColumn c2 = new DataColumn("像素Y", typeof(double)); + DataColumn c3 = new DataColumn("机械X", typeof(double)); + DataColumn c4 = new DataColumn("机械Y", typeof(double)); + CalibSourceDataTable.Columns.Add(c1); + CalibSourceDataTable.Columns.Add(c2); + CalibSourceDataTable.Columns.Add(c3); + CalibSourceDataTable.Columns.Add(c4); + CalibSourceDataTable.Rows.Clear(); + for (int i = 0; i < (int)calibType; i++) + { + DataRow dr = CalibSourceDataTable.NewRow(); + dr[0] = 0; + dr[1] = 50; + dr[2] = 0; + dr[3] = 50; + CalibSourceDataTable.Rows.Add(dr); + } + } + + /// + /// 导入标定数据 + /// + public void ReadCalibData() + { + OpenFileDialog digOpenFile = new OpenFileDialog(); + digOpenFile.FileName = string.Empty; + digOpenFile.Title = "请选择表格文件"; + digOpenFile.Filter = "CSV文件(*.csv)|*.csv"; + if (digOpenFile.ShowDialog() == DialogResult.OK) + { + string[] lines = File.ReadAllLines(digOpenFile.FileName, Encoding.Default); + for (int i = 0; i < lines.Length; i++) + { + string[] data = Regex.Split(lines[i], ","); + for (int j = 0; j < data.Length; j++) + { + CalibSourceDataTable.Rows[i][j] = data[j]; + if (j == 3) //只导入前四列 + break; + } + if (i == (int)calibType) //若标定类型为四点标定,则导入前四行,若为九点标定,则导入前九行 + break; + } + } + } + /// + /// 导出标定数据 + /// + public void ExportCalibData() + { + try + { + SaveFileDialog dig_saveImage = new SaveFileDialog(); + dig_saveImage.FileName = "CalibData " + DateTime.Now.ToString("yyyy_MM_dd"); + dig_saveImage.Title = "请选择导出路径"; + dig_saveImage.Filter = "CSV文件(*.csv)|*.csv"; + if (dig_saveImage.ShowDialog() == DialogResult.OK) + { + File.Create(dig_saveImage.FileName).Close(); + string data = string.Empty; + for (int i = 0; i pixelRowList = new List(); + List pixelColList = new List(); + List MechanicalXList = new List(); + List MechanicalYList = new List(); + try + { + for (int i = 0; i < CalibSourceDataTable.Rows.Count; i++) + { + pixelRowList.Add(Convert.ToDouble(CalibSourceDataTable.Rows[i][0])); + pixelColList.Add(Convert.ToDouble(CalibSourceDataTable.Rows[i][1])); + MechanicalXList.Add(Convert.ToDouble(CalibSourceDataTable.Rows[i][2])); + MechanicalYList.Add(Convert.ToDouble(CalibSourceDataTable.Rows[i][3])); + } + } + catch(Exception ex) + { + LoggerClass.WriteLog("标定失败,标定数据异常(错误代码:12901)", ex); + return false; + } + + try + { + HTuple pixelRow = new HTuple(pixelRowList.ToArray()); + HTuple pixelCol = new HTuple(pixelColList.ToArray()); + HTuple mechanicalX = new HTuple(MechanicalXList.ToArray()); + HTuple mechanicalY = new HTuple(MechanicalYList.ToArray()); + HOperatorSet.VectorToHomMat2d(pixelRow, pixelCol, mechanicalX, mechanicalY, out homMat2D); + } + catch(HalconException ex) + { + LoggerClass.WriteLog("标定失败,标定数据异常,无法确定仿射变换关系(错误代码:12902)", ex); + return false; + } + HOperatorSet.HomMat2dToAffinePar(homMat2D, out _scanX, out _scanY, out _rotation, out _theta, out _translateX, out _translateY); + return true; + } + catch (Exception ex) + { + LoggerClass.WriteLog("手动标定出现异常", ex); + return false; + } + } + } + + /// + /// 标定类型 四点|九点 + /// + [Serializable] + public enum CalibType + { + Four_Point = 4, + Nine_Point = 9, + } +} diff --git a/EyeHandCalibTool/EyeHandCalibRun.cs b/EyeHandCalibTool/EyeHandCalibRun.cs new file mode 100644 index 0000000..31d5ff5 --- /dev/null +++ b/EyeHandCalibTool/EyeHandCalibRun.cs @@ -0,0 +1,19 @@ +using CommonMethods.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonMethods; +using System.Windows.Forms; + +namespace EyeHandCalibTool +{ + public class EyeHandCalibRun : IToolRun + { + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + { + // throw new NotImplementedException(); + } + } +} diff --git a/EyeHandCalibTool/EyeHandCalibTool.csproj b/EyeHandCalibTool/EyeHandCalibTool.csproj new file mode 100644 index 0000000..f81f17e --- /dev/null +++ b/EyeHandCalibTool/EyeHandCalibTool.csproj @@ -0,0 +1,106 @@ + + + + + Debug + AnyCPU + {46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7} + Library + Properties + EyeHandCalibTool + EyeHandCalibTool + v4.6.1 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll + + + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + + + + + + + + + + + + + + + + + Form + + + FormEyeHandCalib.cs + + + + True + True + Resources.resx + + + + + FormEyeHandCalib.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + {1c8d0ddc-2086-48a9-9586-f2b643e2fc54} + CommonHelper + + + {df3d4d4c-02df-4f92-9fd4-0a861f64b0ef} + DataStruct + + + {9baa53fd-89b5-43e2-ac59-a27b006debb6} + HWindow_Tool + + + {7cd50b44-bf56-4e8e-8fa1-05f6968c1835} + ToolBase + + + {d4e052b9-e541-4b67-a1f9-273073ef1d4b} + Logger + + + + + \ No newline at end of file diff --git a/EyeHandCalibTool/FormEyeHandCalib.Designer.cs b/EyeHandCalibTool/FormEyeHandCalib.Designer.cs new file mode 100644 index 0000000..930c1e7 --- /dev/null +++ b/EyeHandCalibTool/FormEyeHandCalib.Designer.cs @@ -0,0 +1,609 @@ +namespace EyeHandCalibTool +{ + partial class FormEyeHandCalib + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormEyeHandCalib)); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.uiGroupBox1 = new Sunny.UI.UIGroupBox(); + this.uiLabel1 = new Sunny.UI.UILabel(); + this.chbSelectCalibType = new Sunny.UI.UIComboBox(); + this.uiPanel1 = new Sunny.UI.UIPanel(); + this.CalibDataGrid = new Sunny.UI.UIDataGridView(); + this.btnImportData = new Sunny.UI.UISymbolButton(); + this.btnExportData = new Sunny.UI.UISymbolButton(); + this.uiTabControl1 = new Sunny.UI.UITabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.btnCalibAuto = new Sunny.UI.UISymbolButton(); + this.btnCalibManual = new Sunny.UI.UISymbolButton(); + this.txbTheta = new Sunny.UI.UITextBox(); + this.txbRatation = new Sunny.UI.UITextBox(); + this.txbScaleY = new Sunny.UI.UITextBox(); + this.txbScaleX = new Sunny.UI.UITextBox(); + this.txbMoveY = new Sunny.UI.UITextBox(); + this.txbMoveX = new Sunny.UI.UITextBox(); + this.uiLabel7 = new Sunny.UI.UILabel(); + this.uiLabel6 = new Sunny.UI.UILabel(); + this.uiLabel5 = new Sunny.UI.UILabel(); + this.uiLabel4 = new Sunny.UI.UILabel(); + this.uiLabel3 = new Sunny.UI.UILabel(); + this.uiLabel2 = new Sunny.UI.UILabel(); + this.toolStrip1.SuspendLayout(); + this.statusStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.uiGroupBox1.SuspendLayout(); + this.uiPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.CalibDataGrid)).BeginInit(); + this.uiTabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(25, 25); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtRunTool}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(823, 32); + this.toolStrip1.TabIndex = 5; + this.toolStrip1.Text = "toolStrip1"; + // + // tsbtRunTool + // + this.tsbtRunTool.Image = ((System.Drawing.Image)(resources.GetObject("tsbtRunTool.Image"))); + this.tsbtRunTool.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtRunTool.Name = "tsbtRunTool"; + this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); + this.tsbtRunTool.Text = "运行工具"; + this.tsbtRunTool.Click += new System.EventHandler(this.tsbtRunTool_Click); + // + // statusStrip + // + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 500); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(823, 22); + this.statusStrip.TabIndex = 4; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 32); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.CalibDataGrid); + this.splitContainer1.Panel1.Controls.Add(this.uiPanel1); + this.splitContainer1.Panel1.Controls.Add(this.uiGroupBox1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.uiTabControl1); + this.splitContainer1.Size = new System.Drawing.Size(823, 468); + this.splitContainer1.SplitterDistance = 542; + this.splitContainer1.TabIndex = 6; + // + // uiGroupBox1 + // + this.uiGroupBox1.BackColor = System.Drawing.Color.White; + this.uiGroupBox1.Controls.Add(this.uiLabel1); + this.uiGroupBox1.Controls.Add(this.chbSelectCalibType); + this.uiGroupBox1.Dock = System.Windows.Forms.DockStyle.Top; + this.uiGroupBox1.FillColor = System.Drawing.Color.White; + this.uiGroupBox1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiGroupBox1.IsScaled = false; + this.uiGroupBox1.Location = new System.Drawing.Point(0, 0); + this.uiGroupBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiGroupBox1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiGroupBox1.Name = "uiGroupBox1"; + this.uiGroupBox1.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.uiGroupBox1.Size = new System.Drawing.Size(542, 82); + this.uiGroupBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiGroupBox1.TabIndex = 26; + this.uiGroupBox1.Text = "选择标定模式"; + this.uiGroupBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // uiLabel1 + // + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel1.Location = new System.Drawing.Point(12, 38); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(96, 23); + this.uiLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel1.TabIndex = 26; + this.uiLabel1.Text = "标定类型:"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // chbSelectCalibType + // + this.chbSelectCalibType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.chbSelectCalibType.DataSource = null; + this.chbSelectCalibType.FillColor = System.Drawing.Color.White; + this.chbSelectCalibType.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chbSelectCalibType.IsScaled = false; + this.chbSelectCalibType.Items.AddRange(new object[] { + "四点标定", + "九点标定"}); + this.chbSelectCalibType.Location = new System.Drawing.Point(146, 38); + this.chbSelectCalibType.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.chbSelectCalibType.MinimumSize = new System.Drawing.Size(63, 0); + this.chbSelectCalibType.Name = "chbSelectCalibType"; + this.chbSelectCalibType.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); + this.chbSelectCalibType.Size = new System.Drawing.Size(285, 29); + this.chbSelectCalibType.Style = Sunny.UI.UIStyle.Custom; + this.chbSelectCalibType.TabIndex = 25; + this.chbSelectCalibType.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.chbSelectCalibType.SelectedIndexChanged += new System.EventHandler(this.chbSelectCalibType_SelectedIndexChanged); + // + // uiPanel1 + // + this.uiPanel1.Controls.Add(this.btnExportData); + this.uiPanel1.Controls.Add(this.btnImportData); + this.uiPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.uiPanel1.FillColor = System.Drawing.Color.White; + this.uiPanel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiPanel1.IsScaled = false; + this.uiPanel1.Location = new System.Drawing.Point(0, 418); + this.uiPanel1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiPanel1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiPanel1.Name = "uiPanel1"; + this.uiPanel1.Size = new System.Drawing.Size(542, 50); + this.uiPanel1.Style = Sunny.UI.UIStyle.Custom; + this.uiPanel1.TabIndex = 27; + this.uiPanel1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // + // CalibDataGrid + // + this.CalibDataGrid.AllowUserToAddRows = false; + dataGridViewCellStyle9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + this.CalibDataGrid.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle9; + this.CalibDataGrid.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; + this.CalibDataGrid.BackgroundColor = System.Drawing.Color.White; + this.CalibDataGrid.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; + dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle10.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle10.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle10.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CalibDataGrid.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; + this.CalibDataGrid.ColumnHeadersHeight = 32; + this.CalibDataGrid.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.CalibDataGrid.Dock = System.Windows.Forms.DockStyle.Fill; + this.CalibDataGrid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; + this.CalibDataGrid.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.CalibDataGrid.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + this.CalibDataGrid.Location = new System.Drawing.Point(0, 82); + this.CalibDataGrid.Name = "CalibDataGrid"; + dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle11.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(243)))), ((int)(((byte)(255))))); + dataGridViewCellStyle11.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle11.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle11.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle11.SelectionForeColor = System.Drawing.Color.White; + dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.CalibDataGrid.RowHeadersDefaultCellStyle = dataGridViewCellStyle11; + dataGridViewCellStyle12.BackColor = System.Drawing.Color.White; + this.CalibDataGrid.RowsDefaultCellStyle = dataGridViewCellStyle12; + this.CalibDataGrid.RowTemplate.Height = 23; + this.CalibDataGrid.SelectedIndex = -1; + this.CalibDataGrid.ShowGridLine = true; + this.CalibDataGrid.Size = new System.Drawing.Size(542, 336); + this.CalibDataGrid.TabIndex = 28; + this.CalibDataGrid.RowPostPaint += new System.Windows.Forms.DataGridViewRowPostPaintEventHandler(this.CalibDataGrid_RowPostPaint); + // + // btnImportData + // + this.btnImportData.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnImportData.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnImportData.IsScaled = false; + this.btnImportData.Location = new System.Drawing.Point(86, 6); + this.btnImportData.MinimumSize = new System.Drawing.Size(1, 1); + this.btnImportData.Name = "btnImportData"; + this.btnImportData.Size = new System.Drawing.Size(114, 35); + this.btnImportData.Style = Sunny.UI.UIStyle.Custom; + this.btnImportData.Symbol = 61568; + this.btnImportData.TabIndex = 0; + this.btnImportData.Text = "数据导入"; + this.btnImportData.Click += new System.EventHandler(this.btnImportData_Click); + // + // btnExportData + // + this.btnExportData.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnExportData.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnExportData.IsScaled = false; + this.btnExportData.Location = new System.Drawing.Point(273, 6); + this.btnExportData.MinimumSize = new System.Drawing.Size(1, 1); + this.btnExportData.Name = "btnExportData"; + this.btnExportData.Size = new System.Drawing.Size(114, 35); + this.btnExportData.Style = Sunny.UI.UIStyle.Custom; + this.btnExportData.Symbol = 61584; + this.btnExportData.TabIndex = 0; + this.btnExportData.Text = "数据导出"; + this.btnExportData.Click += new System.EventHandler(this.btnExportData_Click); + // + // uiTabControl1 + // + this.uiTabControl1.Controls.Add(this.tabPage1); + this.uiTabControl1.Controls.Add(this.tabPage2); + this.uiTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiTabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.uiTabControl1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTabControl1.ItemSize = new System.Drawing.Size(100, 40); + this.uiTabControl1.Location = new System.Drawing.Point(0, 0); + this.uiTabControl1.MainPage = ""; + this.uiTabControl1.Name = "uiTabControl1"; + this.uiTabControl1.SelectedIndex = 0; + this.uiTabControl1.Size = new System.Drawing.Size(277, 468); + this.uiTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.uiTabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.BackColor = System.Drawing.Color.White; + this.tabPage1.Controls.Add(this.btnCalibAuto); + this.tabPage1.Controls.Add(this.btnCalibManual); + this.tabPage1.Controls.Add(this.txbTheta); + this.tabPage1.Controls.Add(this.txbRatation); + this.tabPage1.Controls.Add(this.txbScaleY); + this.tabPage1.Controls.Add(this.txbScaleX); + this.tabPage1.Controls.Add(this.txbMoveY); + this.tabPage1.Controls.Add(this.txbMoveX); + this.tabPage1.Controls.Add(this.uiLabel7); + this.tabPage1.Controls.Add(this.uiLabel6); + this.tabPage1.Controls.Add(this.uiLabel5); + this.tabPage1.Controls.Add(this.uiLabel4); + this.tabPage1.Controls.Add(this.uiLabel3); + this.tabPage1.Controls.Add(this.uiLabel2); + this.tabPage1.Location = new System.Drawing.Point(0, 40); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(277, 428); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "标定结果"; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(0, 40); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(277, 428); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "转换结果"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // btnCalibAuto + // + this.btnCalibAuto.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCalibAuto.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCalibAuto.IsScaled = false; + this.btnCalibAuto.Location = new System.Drawing.Point(151, 352); + this.btnCalibAuto.MinimumSize = new System.Drawing.Size(1, 1); + this.btnCalibAuto.Name = "btnCalibAuto"; + this.btnCalibAuto.Size = new System.Drawing.Size(103, 35); + this.btnCalibAuto.Style = Sunny.UI.UIStyle.Custom; + this.btnCalibAuto.Symbol = 261778; + this.btnCalibAuto.TabIndex = 15; + this.btnCalibAuto.Text = "自动标定"; + // + // btnCalibManual + // + this.btnCalibManual.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnCalibManual.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnCalibManual.IsScaled = false; + this.btnCalibManual.Location = new System.Drawing.Point(23, 352); + this.btnCalibManual.MinimumSize = new System.Drawing.Size(1, 1); + this.btnCalibManual.Name = "btnCalibManual"; + this.btnCalibManual.Size = new System.Drawing.Size(103, 35); + this.btnCalibManual.Style = Sunny.UI.UIStyle.Custom; + this.btnCalibManual.Symbol = 363128; + this.btnCalibManual.TabIndex = 16; + this.btnCalibManual.Text = "手动标定"; + this.btnCalibManual.Click += new System.EventHandler(this.btnCalibManual_Click); + // + // txbTheta + // + this.txbTheta.ButtonSymbol = 61761; + this.txbTheta.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbTheta.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbTheta.IsScaled = false; + this.txbTheta.Location = new System.Drawing.Point(104, 292); + this.txbTheta.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbTheta.Maximum = 2147483647D; + this.txbTheta.Minimum = -2147483648D; + this.txbTheta.MinimumSize = new System.Drawing.Size(1, 16); + this.txbTheta.Name = "txbTheta"; + this.txbTheta.Size = new System.Drawing.Size(150, 29); + this.txbTheta.Style = Sunny.UI.UIStyle.Custom; + this.txbTheta.TabIndex = 9; + this.txbTheta.Text = "0"; + this.txbTheta.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbRatation + // + this.txbRatation.ButtonSymbol = 61761; + this.txbRatation.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbRatation.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbRatation.IsScaled = false; + this.txbRatation.Location = new System.Drawing.Point(104, 242); + this.txbRatation.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbRatation.Maximum = 2147483647D; + this.txbRatation.Minimum = -2147483648D; + this.txbRatation.MinimumSize = new System.Drawing.Size(1, 16); + this.txbRatation.Name = "txbRatation"; + this.txbRatation.Size = new System.Drawing.Size(150, 29); + this.txbRatation.Style = Sunny.UI.UIStyle.Custom; + this.txbRatation.TabIndex = 10; + this.txbRatation.Text = "0"; + this.txbRatation.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbScaleY + // + this.txbScaleY.ButtonSymbol = 61761; + this.txbScaleY.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbScaleY.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbScaleY.IsScaled = false; + this.txbScaleY.Location = new System.Drawing.Point(104, 192); + this.txbScaleY.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbScaleY.Maximum = 2147483647D; + this.txbScaleY.Minimum = -2147483648D; + this.txbScaleY.MinimumSize = new System.Drawing.Size(1, 16); + this.txbScaleY.Name = "txbScaleY"; + this.txbScaleY.Size = new System.Drawing.Size(150, 29); + this.txbScaleY.Style = Sunny.UI.UIStyle.Custom; + this.txbScaleY.TabIndex = 11; + this.txbScaleY.Text = "0"; + this.txbScaleY.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbScaleX + // + this.txbScaleX.ButtonSymbol = 61761; + this.txbScaleX.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbScaleX.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbScaleX.IsScaled = false; + this.txbScaleX.Location = new System.Drawing.Point(104, 142); + this.txbScaleX.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbScaleX.Maximum = 2147483647D; + this.txbScaleX.Minimum = -2147483648D; + this.txbScaleX.MinimumSize = new System.Drawing.Size(1, 16); + this.txbScaleX.Name = "txbScaleX"; + this.txbScaleX.Size = new System.Drawing.Size(150, 29); + this.txbScaleX.Style = Sunny.UI.UIStyle.Custom; + this.txbScaleX.TabIndex = 12; + this.txbScaleX.Text = "0"; + this.txbScaleX.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbMoveY + // + this.txbMoveY.ButtonSymbol = 61761; + this.txbMoveY.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbMoveY.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbMoveY.IsScaled = false; + this.txbMoveY.Location = new System.Drawing.Point(104, 92); + this.txbMoveY.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbMoveY.Maximum = 2147483647D; + this.txbMoveY.Minimum = -2147483648D; + this.txbMoveY.MinimumSize = new System.Drawing.Size(1, 16); + this.txbMoveY.Name = "txbMoveY"; + this.txbMoveY.Size = new System.Drawing.Size(150, 29); + this.txbMoveY.Style = Sunny.UI.UIStyle.Custom; + this.txbMoveY.TabIndex = 13; + this.txbMoveY.Text = "0"; + this.txbMoveY.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // txbMoveX + // + this.txbMoveX.ButtonSymbol = 61761; + this.txbMoveX.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbMoveX.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbMoveX.IsScaled = false; + this.txbMoveX.Location = new System.Drawing.Point(104, 42); + this.txbMoveX.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbMoveX.Maximum = 2147483647D; + this.txbMoveX.Minimum = -2147483648D; + this.txbMoveX.MinimumSize = new System.Drawing.Size(1, 16); + this.txbMoveX.Name = "txbMoveX"; + this.txbMoveX.Size = new System.Drawing.Size(150, 29); + this.txbMoveX.Style = Sunny.UI.UIStyle.Custom; + this.txbMoveX.TabIndex = 14; + this.txbMoveX.Text = "0"; + this.txbMoveX.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel7 + // + this.uiLabel7.BackColor = System.Drawing.Color.White; + this.uiLabel7.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel7.Location = new System.Drawing.Point(24, 292); + this.uiLabel7.Name = "uiLabel7"; + this.uiLabel7.Size = new System.Drawing.Size(73, 23); + this.uiLabel7.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel7.TabIndex = 3; + this.uiLabel7.Text = "斜切:"; + this.uiLabel7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel6 + // + this.uiLabel6.BackColor = System.Drawing.Color.White; + this.uiLabel6.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel6.Location = new System.Drawing.Point(24, 242); + this.uiLabel6.Name = "uiLabel6"; + this.uiLabel6.Size = new System.Drawing.Size(73, 23); + this.uiLabel6.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel6.TabIndex = 4; + this.uiLabel6.Text = "旋转:"; + this.uiLabel6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel5 + // + this.uiLabel5.BackColor = System.Drawing.Color.White; + this.uiLabel5.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel5.Location = new System.Drawing.Point(24, 192); + this.uiLabel5.Name = "uiLabel5"; + this.uiLabel5.Size = new System.Drawing.Size(73, 23); + this.uiLabel5.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel5.TabIndex = 5; + this.uiLabel5.Text = "缩放Y:"; + this.uiLabel5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel4 + // + this.uiLabel4.BackColor = System.Drawing.Color.White; + this.uiLabel4.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel4.Location = new System.Drawing.Point(24, 142); + this.uiLabel4.Name = "uiLabel4"; + this.uiLabel4.Size = new System.Drawing.Size(73, 23); + this.uiLabel4.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel4.TabIndex = 6; + this.uiLabel4.Text = "缩放X:"; + this.uiLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel3 + // + this.uiLabel3.BackColor = System.Drawing.Color.White; + this.uiLabel3.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel3.Location = new System.Drawing.Point(24, 92); + this.uiLabel3.Name = "uiLabel3"; + this.uiLabel3.Size = new System.Drawing.Size(73, 23); + this.uiLabel3.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel3.TabIndex = 7; + this.uiLabel3.Text = "平移Y:"; + this.uiLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // uiLabel2 + // + this.uiLabel2.BackColor = System.Drawing.Color.White; + this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel2.Location = new System.Drawing.Point(24, 42); + this.uiLabel2.Name = "uiLabel2"; + this.uiLabel2.Size = new System.Drawing.Size(73, 23); + this.uiLabel2.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel2.TabIndex = 8; + this.uiLabel2.Text = "平移X:"; + this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // FormEyeHandCalib + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(823, 522); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.statusStrip); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FormEyeHandCalib"; + this.Text = "手眼标定工具"; + this.Load += new System.EventHandler(this.FormEyeHandCalib_Load); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.uiGroupBox1.ResumeLayout(false); + this.uiPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.CalibDataGrid)).EndInit(); + this.uiTabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton tsbtRunTool; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + private System.Windows.Forms.SplitContainer splitContainer1; + private Sunny.UI.UIComboBox chbSelectCalibType; + private Sunny.UI.UIGroupBox uiGroupBox1; + private Sunny.UI.UILabel uiLabel1; + private Sunny.UI.UIDataGridView CalibDataGrid; + private Sunny.UI.UIPanel uiPanel1; + private Sunny.UI.UISymbolButton btnExportData; + private Sunny.UI.UISymbolButton btnImportData; + private Sunny.UI.UITabControl uiTabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private Sunny.UI.UISymbolButton btnCalibAuto; + private Sunny.UI.UISymbolButton btnCalibManual; + private Sunny.UI.UITextBox txbTheta; + private Sunny.UI.UITextBox txbRatation; + private Sunny.UI.UITextBox txbScaleY; + public Sunny.UI.UITextBox txbScaleX; + public Sunny.UI.UITextBox txbMoveY; + public Sunny.UI.UITextBox txbMoveX; + private Sunny.UI.UILabel uiLabel7; + private Sunny.UI.UILabel uiLabel6; + private Sunny.UI.UILabel uiLabel5; + private Sunny.UI.UILabel uiLabel4; + private Sunny.UI.UILabel uiLabel3; + private Sunny.UI.UILabel uiLabel2; + } +} \ No newline at end of file diff --git a/EyeHandCalibTool/FormEyeHandCalib.cs b/EyeHandCalibTool/FormEyeHandCalib.cs new file mode 100644 index 0000000..a59cb2e --- /dev/null +++ b/EyeHandCalibTool/FormEyeHandCalib.cs @@ -0,0 +1,174 @@ +using CommonMethods; +using HalconDotNet; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ViewROI; + +namespace EyeHandCalibTool +{ + public partial class FormEyeHandCalib : Form + { + public EyeHandCalib myEyeHandCalib = null; + public IToolInfo myToolInfo = new IToolInfo(); + public HWindowTool_Smart myHwindow = new HWindowTool_Smart(); + public HDrawingObject selected_drawing_object = new HDrawingObject(); + + public FormEyeHandCalib(ref object eyeHandCalib) + { + InitializeComponent(); + _instance = this; + if (eyeHandCalib.GetType().FullName != "System.Object") + { + myToolInfo = (IToolInfo)eyeHandCalib; + myEyeHandCalib = (EyeHandCalib)myToolInfo.tool; + myEyeHandCalib.DispImage(); + } + } + /// + /// 窗体对象实例 + /// + private static FormEyeHandCalib _instance; + public static FormEyeHandCalib Instance + { + get + { + if (_instance != null) + { + lock (_instance) + { + if (_instance == null) + { + object eyeHandCalib = new object(); + _instance = new FormEyeHandCalib(ref eyeHandCalib); + } + return _instance; + } + } + else + { + object eyeHandCalib = new object(); + _instance = new FormEyeHandCalib(ref eyeHandCalib); + return _instance; + } + + } + } + + public FormEyeHandCalib() + { + InitializeComponent(); + } + + private void chbSelectCalibType_SelectedIndexChanged(object sender, EventArgs e) + { + CalibType oldType = myEyeHandCalib.calibType; + myEyeHandCalib.calibType = chbSelectCalibType.SelectedItem.ToString() == "四点标定" ? CalibType.Four_Point : CalibType.Nine_Point; + if(oldType == CalibType.Four_Point && myEyeHandCalib.calibType == CalibType.Nine_Point) + { + for (int i = 0; i < 5; i++) + { + DataRow dr = myEyeHandCalib.CalibSourceDataTable.NewRow(); + dr[0] = 0; + dr[1] = 50; + dr[2] = 0; + dr[3] = 50; + myEyeHandCalib.CalibSourceDataTable.Rows.Add(dr); + } + } + else if(oldType == CalibType.Nine_Point && myEyeHandCalib.calibType == CalibType.Four_Point) + { + for (int i = 0; i < 5; i++) + { + myEyeHandCalib.CalibSourceDataTable.Rows.RemoveAt(myEyeHandCalib.CalibSourceDataTable.Rows.Count - 1); + } + } + } + + private void FormEyeHandCalib_Load(object sender, EventArgs e) + { + // 若为空,表示该工具未经标定校正 + if(myEyeHandCalib.CalibSourceDataTable == null) + { + myEyeHandCalib.InitDataTable(); + } + CalibDataGrid.DataSource = myEyeHandCalib.CalibSourceDataTable; + chbSelectCalibType.SelectedItem = myEyeHandCalib.calibType == CalibType.Four_Point ? "四点标定" : "九点标定"; + txbScaleX.Text = (Convert.ToDouble(myEyeHandCalib.ScanX.ToString())).ToString("0.00"); + txbScaleY.Text = (Convert.ToDouble(myEyeHandCalib.ScanY.ToString())).ToString("0.00"); + txbRatation.Text = (Convert.ToDouble(myEyeHandCalib.Rotation.ToString())).ToString("0.00"); + txbTheta.Text = (Convert.ToDouble(myEyeHandCalib.Theta.ToString())).ToString("0.00"); + txbMoveX.Text = (Convert.ToDouble(myEyeHandCalib.TranslateX.ToString())).ToString("0.00"); + txbMoveY.Text = (Convert.ToDouble(myEyeHandCalib.TranslateY.ToString())).ToString("0.00"); + + } + + private void CalibDataGrid_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) + { + using (SolidBrush b = new SolidBrush( + CalibDataGrid.RowHeadersDefaultCellStyle.ForeColor)) + { + e.Graphics.DrawString((e.RowIndex + 1).ToString( + System.Globalization.CultureInfo.CurrentCulture), + CalibDataGrid.DefaultCellStyle.Font + , b, e.RowBounds.Location.X + 10, e.RowBounds.Location.Y); + } + } + + private void btnImportData_Click(object sender, EventArgs e) + { + myEyeHandCalib.ReadCalibData(); + CalibDataGrid.Refresh(); + } + + private void btnExportData_Click(object sender, EventArgs e) + { + myEyeHandCalib.ExportCalibData(); + } + + private void btnCalibManual_Click(object sender, EventArgs e) + { + if(myEyeHandCalib.ManulCalib()) + { + // 仿射矩阵信息 + txbScaleX.Text = (Convert.ToDouble(myEyeHandCalib.ScanX.ToString())).ToString("0.00"); + txbScaleY.Text = (Convert.ToDouble(myEyeHandCalib.ScanY.ToString())).ToString("0.00"); + txbRatation.Text = (Convert.ToDouble(myEyeHandCalib.Rotation.ToString())).ToString("0.00"); + txbTheta.Text = (Convert.ToDouble(myEyeHandCalib.Theta.ToString())).ToString("0.00"); + txbMoveX.Text = (Convert.ToDouble(myEyeHandCalib.TranslateX.ToString())).ToString("0.00"); + txbMoveY.Text = (Convert.ToDouble(myEyeHandCalib.TranslateY.ToString())).ToString("0.00"); + // 映射成功,则保存矩阵 + HOperatorSet.WriteTuple(myEyeHandCalib.homMat2D, myEyeHandCalib.homMat2DName + ".tup"); + MessageBox.Show("仿射矩阵已经保存成功!"); + } + + } + /// + /// 设定工具运行状态 + /// ` + /// 运行中的信息 + /// 运行状态 + public void SetToolStatus(string msg, ToolRunStatu status) + { + if (myEyeHandCalib != null) + { + myEyeHandCalib.runMessage = msg; + myEyeHandCalib.toolRunStatu = status; + lb_RunStatus.Text = myEyeHandCalib.toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{myEyeHandCalib.runMessage}"; + lb_RunTime.Text = myEyeHandCalib.runTime; + statusStrip.BackColor = myEyeHandCalib.toolRunStatu == ToolRunStatu.Succeed ? Color.LimeGreen : Color.Red; + } + } + + private void tsbtRunTool_Click(object sender, EventArgs e) + { + myEyeHandCalib.Run(SoftwareRunState.Debug); + } + } +} diff --git a/EyeHandCalibTool/FormEyeHandCalib.resx b/EyeHandCalibTool/FormEyeHandCalib.resx new file mode 100644 index 0000000..12023eb --- /dev/null +++ b/EyeHandCalibTool/FormEyeHandCalib.resx @@ -0,0 +1,384 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 40, 19 + + + + + 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 + + + + 150, 19 + + + + AAABAAIAEBAAAAEAIABoBAAAJgAAADAwAAABACAAqCUAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAADAE + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAED/LAA+/3QAPf+fAD3/nwA+ + /3MAO/8rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8NAD7/oQA9//4aUf//RHH//0Rx + //8ZUP//AD3//gA9/58AQP8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAO/8NAD7/zxtS//+vwv///f3///// + /////////f3//63B//8aUf//AD3/zgBA/wwAAAAAAAAAAAAAAAAAAAAAAD3/ohpR///i6f//2eL//1B6 + //8NR///DUf//1F7///b5P//4ej//xhP//8APf+eAAAAAAAAAAAAAAAAAED/KAA9//2xxP//1+H//xBJ + //8sXv//kqz//5Gr//8qXf//EEn//9ni//+twf//AD3//QA8/yYAAAAAAAAAAAA8/3sbUv///v7//095 + //8uYP//+Pr//9Db///R3P//+Pr//yxe//9Re////f3//xlQ//8APv94AAAAAAAAAAAAPf+fSXX///// + //8MRv//k63//8/a//8HPvD/CD7t/9Db//+Rq///Dkj///////9IdP//AD3/ngAAAAAAAAAAAD3/n0l1 + ////////DUf//5Gr///P2v//CT/r/zlFb//DzOn/j6r//w9I////////R3P//wA9/54AAAAAAAAAAAA+ + /3wbUv///v7//095//8uYP//+Pr//9Db///AyOT/f3tw/y9c7v9Re////f3//xlQ//8APf95AAAAAAAA + AAAAPv8tAD3//rHE///X4f//EEn//yxe//+SrP//kav//y9a5P89SHD/zdTu/63B//8APf/+ADv/KwAA + AAAAAAAAAAAAAAA9/6waUf//4un//9ni//9Qev//FEz//xRM//9Re///yM3h/8WIPf+nclH/TFGtwAAA + AAAAAAAAAAAAAAAAAAAAQP8QAD3/0RtS//+vwv///f3//////////////f3//63B//+jbU3/0o88/813 + IfjRdBchAAAAAAAAAAAAAAAAAAAAAABA/xAAPP+tAD3//xpR//9Ecf//RHH//xlQ//8APf/+UlWlxMh1 + H/pkUje9TkM3FwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8/y8APf+CAD3/pAA9/6QAPf+BAD3/LgAA + AADPeBggUkczGVVJPRUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD+fwAA8A8AAOAHAADAAwAAwAMAAMADAACAAQAAgAEAAMAD + AADAAwAAwAMAAOADAADwAwAA/D8AAP//AAAoAAAAMAAAAGAAAAABACAAAAAAAFAlAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAP8CAD3/NgA+/3QAPf+oAD3/0gA9/+4APf//AD3//wA9/+4APf/RAD3/qAA+/3MAP/81AAD/AgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAED/HAA9/4kAPv/kAD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3/4wA+/4gAOf8bAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA5/xIAPf+TAD3/+AA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf/4AD7/kQA8/xEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAD7/VgA9/+oAPf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9/+kAPf9UAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr/wYAPv+ZAD3//wA9//8APf//AD3//wA9//8APf//EUr//16F + //+ht///ytf//+jt///8/f///P3//+jt///J1v//oLf//1yD//8QSf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3/lgAz/wUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAED/DAA8/7oAPf//AD3//wA9//8APf//AD3//xpR + //+dtP//+Pr////////////////////////////////////////////////////////3+f//m7P//xlQ + //8APf//AD3//wA9//8APf//AD3//wA9/7cARv8LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVf8DAD7/rgA9//8APf//AD3//wA9 + //8GQv//fp3///T3//////////////////////////////////////////////////////////////// + //////////////P2//98m///BkL//wA9//8APf//AD3//wA9//8APP+tAAD/AgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPf+XAD3//wA9 + //8APf//AD3//xJL//+8zP////////////////////////////////////////////////////////// + ////////////////////////////////////////usv//xJL//8APf//AD3//wA9//8APf//AD3/kgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9 + /1gAPf//AD3//wA9//8APf//LmD//+Lp/////////////////////////////+Xr//+Urv//RnL//yFW + //8HQv//B0L//yJX//9Gcv//la7//+bs/////////////////////////////+Dn//8sXv//AD3//wA9 + //8APf//AD3//wA9/1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAADf/DgA9/+YAPf//AD3//wA9//8UTP//3eX////////////////////////r8P//d5j//whD + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//whD//93mP//6/D///////////////////// + ///c5P//E0v//wA9//8APf//AD3//wA9/+UAO/8NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAD7/lQA9//8APf//AD3//wlE///L1////////////////////////6q+ + //8KRf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//C0X//6zA + ////////////////////////yNX//whD//8APf//AD3//wA9//8APP+QAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQP8YAD3/9gA9//8APf//AD3//4+q//////////////// + ////////i6f//wE+//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wE+//+NqP///////////////////////4Sh//8APf//AD3//wA9//8APf/1ADr/FgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv+IAD3//wA9//8APf//J1v///v8 + //////////////////+uwf//AT7//wA9//8APf//AD3//wA9//8tX///kKv//9Xf///3+f//9/n//9Xf + //+Pqv//LF7//wA9//8APf//AD3//wA9//8CP///sMP///////////////////T3//8ZUP//AD3//wA9 + //8APf//AD3/hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wIAPf/iAD3//wA9 + //8APf//nrX//////////////////+Pq//8MRv//AD3//wA9//8APf//CUT//5ix///9/f////////// + /////////////////////////P3//5ew//8IQ///AD3//wA9//8APf//DUf//+Xr//////////////// + //+XsP//AD3//wA9//8APf//AD3/3QAA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ + /zoAPf//AD3//wA9//8PSP//9vj//////////////////2CG//8APf//AD3//wA9//8JRP//x9T///// + ///////////////////////////////////////////////////F0///CEP//wA9//8APf//AD3//2KI + ///////////////////09///DEb//wA9//8APf//AD3//wA9/zYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA8/3sAPf//AD3//wA9//9bgv//////////////////3+f//wI///8APf//AD3//wA9 + //+dtP//////////////////////////////////////////////////////////////////mbH//wA9 + //8APf//AD3//wM////h6P//////////////////Vn7//wA9//8APf//AD3//wA8/3cAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/6wAPf//AD3//wA9//+ctP//////////////////kKv//wA9 + //8APf//AD3//y1f///9/f//////////////////1+H//054//8NR///DUf//095///Y4f////////// + /////////f3//yxe//8APf//AD3//wA9//+Trf//////////////////mLH//wA9//8APf//AD3//wA+ + /6oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/9QAPf//AD3//wA9///K1/////////// + ////////R3P//wA9//8APf//AD3//5Ks///////////////////V3///Dkj//wA9//8APf//AD3//wA9 + //8PSP//1+H//////////////////4+q//8APf//AD3//wA9//9Jdf//////////////////x9T//wA9 + //8APf//AD3//wA9/9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/+0APf//AD3//wA9 + ///r8P//////////////////JVn//wA9//8APf//AD3//9fh//////////////////9NeP//AD3//wA9 + //8APf//AD3//wA9//8APf//T3n//////////////////9Xf//8APf//AD3//wA9//8nW/////////// + ////////6e7//wA9//8APf//AD3//wA9/+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9 + //oAPf//AD3//wA9///6+///////////////////C0X//wA9//8APf//AD3///T3//////////////// + //8LRf//AD3//wA9//88RWj/PkRj/wY+7/8APf//DUf///////////////////L1//8APf//AD3//wA9 + //8NR///////////////////+Pr//wA9//8APf//AD3//wA9//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA9//kAPf//AD3//wA9///5+v//////////////////DUf//wA9//8APf//AD3///P2 + //////////////////8MRv//AD3//wA9//8/RWH/T0c3/0FFW/8GPu//Dkj///////////////////H0 + //8APf//AD3//wA9//8OSP//////////////////9/n//wA9//8APf//AD3//wA9//gAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/+0APf//AD3//wA9///r8P//////////////////JVn//wA9 + //8APf//AD3//9fh//////////////////9NeP//AD3//wA9//8IPuv/Q0VW/09HN/8+RWH/T3bz//// + /////////////9Te//8APf//AD3//wA9//8oW///////////////////6e7//wA9//8APf//AD3//wA9 + /+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/9QAPf//AD3//wA9///K1/////////// + ////////R3P//wA9//8APf//AD3//5Ks///////////////////V3///DUf//wA9//8APf//CD7r/0NF + Vv9PRzf/bGhh//X08////////////4+q//8APf//AD3//wA9//9Jdf//////////////////x9T//wA9 + //8APf//AD3//wA9/9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9/68APf//AD3//wA9 + //+ctP//////////////////kKv//wA9//8APf//AD3//y1f///9/f//////////////////z9r//0t2 + //8UTP//FEz//0xy6/9jXVb/T0c3/3RuYf/19PP//f3//yxe//8APf//AD3//wA9//+Trf////////// + ////////mLH//wA9//8APf//AD3//wA9/6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8 + /3sAPf//AD3//wA9//9bgv//////////////////3+f//wI///8APf//AD3//wA9//+dtP////////// + ///////////////////////////////////t7Ov/amNW/09HN/90bmH/lavz/wA9//8APf//AD3//wM/ + ///h6P//////////////////Vn7//wA9//8APf//AD3//wA8/3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA+/zoAPf//AD3//wA9//8PSP//9vj//////////////////2CG//8APf//AD3//wA9 + //8JRP//x9T/////////////////////////////////////////////7ezr/2pjVv9PRzf/QEZh/wU9 + 8/8APf//AD3//2KI///////////////////09///DEb//wA9//8APf//AD3//wA9/zYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz/wUAPP/oAD3//wA9//8APf//nrX//////////////////+Pq + //8MRv//AD3//wA9//8APf//CUT//5ix///9/f///////////////////////////////////P3//5Cl + 6/9ERlb/T0c3/z5FYf8FPfP/DUf//+Xr//////////////////+XsP//AD3//wA9//8APf//AD3/5QBV + /wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv+IAD3//wA9//8APf//J1v///v8 + //////////////////+uwf//AT7//wA9//8APf//AD3//wA9//8tX///kKv//9Te///r8P//6/D//9Te + //+Pqv//LF7//wA9//8IPuv/Q0VW/09HN/8+RWH/q7zz//////////////////T3//8ZUP//AD3//wA9 + //8APf//AD3/hQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOv8jAD3//AA9 + //8APf//AD3//4+q////////////////////////i6f//wE+//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//CD7r/0NFVv9PRzf/dG1f//X08////////////4Sh + //8APf//AD3//wA9//8APf/6ADr/HwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAD7/nQA9//8APf//AD3//wlE///L1////////////////////////6q+//8KRf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//C0X//6Kz6/9pYVP/XlA4/86O + P//cnFr/zaeQ/zJOz/8CPv3/AD3//wA9//8APv+ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAADn/GwA9//EAPf//AD3//wA9//8eVP//6O3///////////////////// + ///a4///VX7//wI///8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wI///9Vfv//2+T///// + ///t7Ov/woc9//WlQv/nnUH/0Xoh/9J2Gf/Ccir/eF57/xZD5/AAN/8XAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+/1oAPf//AD3//wA9//8APf//LmD//+Tq + /////////////////////////////+Xr//+Urv//RnL//yhb//8UTP//FEz//ylc//9Gcv//la7//+bs + ////////////////////////0ZRT/9mUP//1pUL/45pA/9B5IP/Sdhn/0nYZ/8x1IPLSeBciAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPv+hAD3//wA9 + //8APf//AD3//yBV///T3v////////////////////////////////////////////////////////// + ////////////////////////////////////////0qeG/8h1H//ZlD//9aVC/+OaQP/QeSD/0nYZ/9J2 + Gf/RdhnPv4AABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAARv8LAD7/xwA9//8APf//AD3//wA9//8LRf//lK7///z9//////////////////////////////// + //////////////////////////////////////////////z9//+Rq///PFHG/9J2Gf/IdR//2ZQ///Wl + Qv/jmkD/0Hkg/9J2Gf/Sdhn/0ncZZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAED/DAA8/7oAPf//AD3//wA9//8APf//AD3//yxe//+kuv//+Pr///// + ///////////////////////////////////////////////////3+f//orj//ypd//8APf//BD76/8dz + Jf/Sdhn/x3Qe/9SRP//1pUL/551B/9F5If/Sdhn/0nYa0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr/wYAPv+ZAD3//wA9//8APf//AD3//wA9 + //8APf//EUr//16F//+ht///ytf//+jt///u8v//7vL//+jt///J1v//oLf//1yD//8QSf//AD3//wA9 + //8APf//AD3//4Bgcv/Sdhn/0nYZ/8h1H//ZlD//zo8//1hNN8tVRDMPAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7/VgA9 + /+oAPf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//xlE5OvMdSDy0nYZ/9J2Gf/Hcx7/V0s32U9HN/9PRzfJVUQzDwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAA5/xIAPf+TAD3/+AA9//8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf/4AD7/kQA8/xHPdRwl0nYZ1NJ2Gf/Sdhn/VUk9FU9H + N9FPRzf/T0c3yQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAED/HAA9/4kAPv/kAD3//wA9//8APf//AD3//wA9 + //8APf//AD3//wA9//8APf//AD3//wA9//8APf//AD3/4wA+/4gAOf8bAAAAAAAAAAAAAAAAzGYABdJ3 + GWfSdRnKAAAAAFVJPRVPRzfJTkY2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8CAD3/NgA+ + /3QAPf+oAD3/0gA9/+4APf/uAD3/7gA9/+4APf/RAD3/qAA+/3MAP/81AAD/AgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP// + /////wAA////////AAD///AP//8AAP//AAD//wAA//wAAD//AAD/+AAAH/8AAP/gAAAH/wAA/8AAAAP/ + AAD/gAAAAf8AAP8AAAAA/wAA/wAAAAD/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPgA + AAAAHwAA+AAAAAAfAAD4AAAAAB8AAPAAAAAADwAA8AAAAAAPAADwAAAAAA8AAPAAAAAADwAA8AAAAAAP + AADwAAAAAA8AAPAAAAAADwAA8AAAAAAPAAD4AAAAAB8AAPgAAAAAHwAA+AAAAAAfAAD4AAAAAB8AAPwA + AAAAPwAA/AAAAAA/AAD+AAAAAH8AAP8AAAAAfwAA/wAAAAA/AAD/gAAAAD8AAP/AAAAAHwAA/+AAAAB/ + AAD/+AAAAD8AAP/8AAAxHwAA//8AAP2fAAD///AP//8AAP///////wAA////////AAD///////8AAP// + /////wAA + + + \ No newline at end of file diff --git a/EyeHandCalibTool/Properties/AssemblyInfo.cs b/EyeHandCalibTool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4b0cb08 --- /dev/null +++ b/EyeHandCalibTool/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("EyeHandCalibTool")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("EyeHandCalibTool")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("46ee89bb-5ec9-4ead-9e32-3e57288a0bf7")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/EyeHandCalibTool/Properties/Resources.Designer.cs b/EyeHandCalibTool/Properties/Resources.Designer.cs new file mode 100644 index 0000000..6c5309e --- /dev/null +++ b/EyeHandCalibTool/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace EyeHandCalibTool.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EyeHandCalibTool.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/EyeHandCalibTool/Properties/Resources.resx b/EyeHandCalibTool/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/EyeHandCalibTool/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FindCircle/FindCircle.cs b/FindCircle/FindCircle.cs index 0fe8c0b..c3ed240 100644 --- a/FindCircle/FindCircle.cs +++ b/FindCircle/FindCircle.cs @@ -1,6 +1,6 @@ using System; using HalconDotNet; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; using ToolBase; using CommonMethods; using ViewROI; diff --git a/FindLine/FindLine.cs b/FindLine/FindLine.cs index 2ca7fba..1682b4a 100644 --- a/FindLine/FindLine.cs +++ b/FindLine/FindLine.cs @@ -1,6 +1,6 @@ using System; using HalconDotNet; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; using ToolBase; using CommonMethods; using System.Diagnostics; @@ -15,20 +15,12 @@ namespace FindLineTool /// /// 输入姿态 /// - public PosXYU inputPose = new PosXYU(); - /// - /// 输入姿态 - /// public HTuple inputPoseHomMat2D = new HTuple(); /// /// 位置修正姿态 /// public HTuple changePoseHomMat2D = new HTuple(); /// - /// 制作模板时的位姿 - /// - public PosXYU templatePose = new PosXYU(); - /// /// 修改的位姿 /// public HTuple changedPose = new HTuple(); diff --git a/FindLine/FindLineToolRun.cs b/FindLine/FindLineToolRun.cs index 4fa0c56..1511e39 100644 --- a/FindLine/FindLineToolRun.cs +++ b/FindLine/FindLineToolRun.cs @@ -25,7 +25,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; using ToolLib.VisionJob; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; namespace FindLineTool { diff --git a/FormLib/FormInputInfo.Designer.cs b/FormLib/FormInputInfo.Designer.cs new file mode 100644 index 0000000..6bd3866 --- /dev/null +++ b/FormLib/FormInputInfo.Designer.cs @@ -0,0 +1,46 @@ +namespace FormLib +{ + partial class FormInputInfo + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // FormInputInfo + // + this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 21F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(553, 189); + this.Name = "FormInputInfo"; + this.Text = "InputForm"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/FormLib/FormInputInfo.cs b/FormLib/FormInputInfo.cs new file mode 100644 index 0000000..4bd2b4b --- /dev/null +++ b/FormLib/FormInputInfo.cs @@ -0,0 +1,21 @@ +using Sunny.UI; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FormLib +{ + public partial class FormInputInfo :UIForm + { + public FormInputInfo() + { + InitializeComponent(); + } + } +} diff --git a/FormLib/FormInputInfo.resx b/FormLib/FormInputInfo.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/FormLib/FormInputInfo.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormLib/FormLib.csproj b/FormLib/FormLib.csproj index 8f028e9..9dcda7f 100644 --- a/FormLib/FormLib.csproj +++ b/FormLib/FormLib.csproj @@ -37,6 +37,14 @@ C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll + + False + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + + + False + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.Common.dll + @@ -64,15 +72,33 @@ FormLog.cs + + Form + + + FormInputInfo.cs + + + Form + + + ToolBaseForm.cs + FormImageWindow.cs.cs + + FormInputInfo.cs + FormLog.cs + + ToolBaseForm.cs + diff --git a/FormLib/ToolBaseForm.Designer.cs b/FormLib/ToolBaseForm.Designer.cs new file mode 100644 index 0000000..9f083b8 --- /dev/null +++ b/FormLib/ToolBaseForm.Designer.cs @@ -0,0 +1,116 @@ +namespace FormLib +{ + partial class ToolBaseForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ToolBaseForm)); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStrip1.SuspendLayout(); + this.statusStrip.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(25, 25); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtRunTool}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(920, 32); + this.toolStrip1.TabIndex = 3; + this.toolStrip1.Text = "toolStrip1"; + // + // tsbtRunTool + // + this.tsbtRunTool.Image = ((System.Drawing.Image)(resources.GetObject("tsbtRunTool.Image"))); + this.tsbtRunTool.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtRunTool.Name = "tsbtRunTool"; + this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); + this.tsbtRunTool.Text = "运行工具"; + // + // statusStrip + // + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 563); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(920, 22); + this.statusStrip.TabIndex = 2; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // + // ToolBaseForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(920, 585); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.statusStrip); + this.Name = "ToolBaseForm"; + this.Text = "工具"; + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton tsbtRunTool; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + } +} \ No newline at end of file diff --git a/FormLib/ToolBaseForm.cs b/FormLib/ToolBaseForm.cs new file mode 100644 index 0000000..e84ca26 --- /dev/null +++ b/FormLib/ToolBaseForm.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FormLib +{ + public partial class ToolBaseForm : Form + { + public ToolBaseForm() + { + InitializeComponent(); + } + } +} diff --git a/FormLib/ToolBaseForm.resx b/FormLib/ToolBaseForm.resx new file mode 100644 index 0000000..c078ed3 --- /dev/null +++ b/FormLib/ToolBaseForm.resx @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 1, 19 + + + + + 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 + + + + 111, 19 + + \ No newline at end of file diff --git a/HDevEngineTool/FormHDevEngineTool.Designer.cs b/HDevEngineTool/FormHDevEngineTool.Designer.cs new file mode 100644 index 0000000..3f05046 --- /dev/null +++ b/HDevEngineTool/FormHDevEngineTool.Designer.cs @@ -0,0 +1,259 @@ +namespace HDevEngineTool +{ + partial class FormHDevEngineTool + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormHDevEngineTool)); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); + this.tsbReadHdev = new System.Windows.Forms.ToolStripButton(); + this.tsbSaveHdev = new System.Windows.Forms.ToolStripButton(); + this.tsbReLoad = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.uiSplitContainer1 = new Sunny.UI.UISplitContainer(); + this.panelHImageWindow = new System.Windows.Forms.Panel(); + this.uiTabControl1 = new Sunny.UI.UITabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.txbCodeText = new Sunny.UI.UIRichTextBox(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.toolStrip1.SuspendLayout(); + this.statusStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.uiSplitContainer1)).BeginInit(); + this.uiSplitContainer1.Panel1.SuspendLayout(); + this.uiSplitContainer1.Panel2.SuspendLayout(); + this.uiSplitContainer1.SuspendLayout(); + this.uiTabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(25, 25); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtRunTool, + this.tsbReadHdev, + this.tsbSaveHdev, + this.tsbReLoad}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(1277, 32); + this.toolStrip1.TabIndex = 5; + this.toolStrip1.Text = "toolStrip1"; + // + // tsbtRunTool + // + this.tsbtRunTool.Image = ((System.Drawing.Image)(resources.GetObject("tsbtRunTool.Image"))); + this.tsbtRunTool.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtRunTool.Name = "tsbtRunTool"; + this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); + this.tsbtRunTool.Text = "运行工具"; + this.tsbtRunTool.Click += new System.EventHandler(this.tsbtRunTool_Click); + // + // tsbReadHdev + // + this.tsbReadHdev.Image = ((System.Drawing.Image)(resources.GetObject("tsbReadHdev.Image"))); + this.tsbReadHdev.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbReadHdev.Name = "tsbReadHdev"; + this.tsbReadHdev.Size = new System.Drawing.Size(85, 29); + this.tsbReadHdev.Text = "代码读取"; + this.tsbReadHdev.Click += new System.EventHandler(this.tsbReadHdev_Click); + // + // tsbSaveHdev + // + this.tsbSaveHdev.Image = ((System.Drawing.Image)(resources.GetObject("tsbSaveHdev.Image"))); + this.tsbSaveHdev.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbSaveHdev.Name = "tsbSaveHdev"; + this.tsbSaveHdev.Size = new System.Drawing.Size(85, 29); + this.tsbSaveHdev.Text = "程序保存"; + this.tsbSaveHdev.Click += new System.EventHandler(this.tsbSaveHdev_Click); + // + // tsbReLoad + // + this.tsbReLoad.Image = ((System.Drawing.Image)(resources.GetObject("tsbReLoad.Image"))); + this.tsbReLoad.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbReLoad.Name = "tsbReLoad"; + this.tsbReLoad.Size = new System.Drawing.Size(85, 29); + this.tsbReLoad.Text = "重新载入"; + this.tsbReLoad.Click += new System.EventHandler(this.tsbReLoad_Click); + // + // statusStrip + // + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 601); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(1277, 22); + this.statusStrip.TabIndex = 4; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // + // uiSplitContainer1 + // + this.uiSplitContainer1.Cursor = System.Windows.Forms.Cursors.Default; + this.uiSplitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSplitContainer1.Location = new System.Drawing.Point(0, 32); + this.uiSplitContainer1.Name = "uiSplitContainer1"; + // + // uiSplitContainer1.Panel1 + // + this.uiSplitContainer1.Panel1.Controls.Add(this.panelHImageWindow); + // + // uiSplitContainer1.Panel2 + // + this.uiSplitContainer1.Panel2.Controls.Add(this.uiTabControl1); + this.uiSplitContainer1.Size = new System.Drawing.Size(1277, 569); + this.uiSplitContainer1.SplitterDistance = 630; + this.uiSplitContainer1.SplitterWidth = 11; + this.uiSplitContainer1.TabIndex = 6; + // + // panelHImageWindow + // + this.panelHImageWindow.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelHImageWindow.Location = new System.Drawing.Point(0, 0); + this.panelHImageWindow.Name = "panelHImageWindow"; + this.panelHImageWindow.Size = new System.Drawing.Size(630, 569); + this.panelHImageWindow.TabIndex = 0; + // + // uiTabControl1 + // + this.uiTabControl1.Controls.Add(this.tabPage1); + this.uiTabControl1.Controls.Add(this.tabPage2); + this.uiTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiTabControl1.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.uiTabControl1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiTabControl1.ItemSize = new System.Drawing.Size(150, 40); + this.uiTabControl1.Location = new System.Drawing.Point(0, 0); + this.uiTabControl1.MainPage = ""; + this.uiTabControl1.Name = "uiTabControl1"; + this.uiTabControl1.SelectedIndex = 0; + this.uiTabControl1.Size = new System.Drawing.Size(636, 569); + this.uiTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.uiTabControl1.TabIndex = 0; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.txbCodeText); + this.tabPage1.Location = new System.Drawing.Point(0, 40); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Size = new System.Drawing.Size(636, 529); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "工具代码"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // txbCodeText + // + this.txbCodeText.AutoWordSelection = true; + this.txbCodeText.Dock = System.Windows.Forms.DockStyle.Fill; + this.txbCodeText.FillColor = System.Drawing.Color.White; + this.txbCodeText.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbCodeText.IsScaled = false; + this.txbCodeText.Location = new System.Drawing.Point(0, 0); + this.txbCodeText.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbCodeText.MinimumSize = new System.Drawing.Size(1, 1); + this.txbCodeText.Name = "txbCodeText"; + this.txbCodeText.Padding = new System.Windows.Forms.Padding(2); + this.txbCodeText.Size = new System.Drawing.Size(636, 529); + this.txbCodeText.Style = Sunny.UI.UIStyle.Custom; + this.txbCodeText.TabIndex = 0; + this.txbCodeText.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.txbCodeText.WordWrap = true; + // + // tabPage2 + // + this.tabPage2.Location = new System.Drawing.Point(0, 40); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Size = new System.Drawing.Size(636, 529); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "其他"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // FormHDevEngineTool + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1277, 623); + this.Controls.Add(this.uiSplitContainer1); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.statusStrip); + this.Name = "FormHDevEngineTool"; + this.Text = "FormHDevEngineTool"; + this.Load += new System.EventHandler(this.FormHDevEngineTool_Load); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.uiSplitContainer1.Panel1.ResumeLayout(false); + this.uiSplitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.uiSplitContainer1)).EndInit(); + this.uiSplitContainer1.ResumeLayout(false); + this.uiTabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton tsbtRunTool; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + private Sunny.UI.UISplitContainer uiSplitContainer1; + private System.Windows.Forms.Panel panelHImageWindow; + private Sunny.UI.UITabControl uiTabControl1; + private System.Windows.Forms.TabPage tabPage1; + private Sunny.UI.UIRichTextBox txbCodeText; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.ToolStripButton tsbReadHdev; + private System.Windows.Forms.ToolStripButton tsbSaveHdev; + private System.Windows.Forms.ToolStripButton tsbReLoad; + } +} \ No newline at end of file diff --git a/HDevEngineTool/FormHDevEngineTool.cs b/HDevEngineTool/FormHDevEngineTool.cs new file mode 100644 index 0000000..7c174e7 --- /dev/null +++ b/HDevEngineTool/FormHDevEngineTool.cs @@ -0,0 +1,128 @@ +using CommonMethods; +using FormLib; +using HalconDotNet; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ViewROI; + +namespace HDevEngineTool +{ + public partial class FormHDevEngineTool : Form + { + private HDevEngineCode myHDevEngine = new HDevEngineCode(); + public IToolInfo myToolInfo = new IToolInfo(); + public HWindowTool_Smart myHwindow = new HWindowTool_Smart(); + + public FormHDevEngineTool(ref object hdevEngine) + { + InitializeComponent(); + _instance = this; + if (hdevEngine.GetType().FullName != "System.Object") + { + myToolInfo = (IToolInfo)hdevEngine; + myHDevEngine = (HDevEngineCode)myToolInfo.tool; + myHDevEngine.toolName = myToolInfo.FormToolName; + myHDevEngine.DispImage(); + } + } + + /// + /// 窗体对象实例 + /// + private static FormHDevEngineTool _instance; + public static FormHDevEngineTool Instance + { + get + { + if (_instance != null) + { + lock (_instance) + { + if (_instance == null) + { + object hdevEngine = new object(); + _instance = new FormHDevEngineTool(ref hdevEngine); + } + return _instance; + } + } + else + { + object hdevEngine = new object(); + _instance = new FormHDevEngineTool(ref hdevEngine); + return _instance; + } + + } + } + + private void FormHDevEngineTool_Load(object sender, EventArgs e) + { + this.panelHImageWindow.Controls.Add(myHwindow); + myHwindow.Dock = DockStyle.Fill; + } + + public void InitTool() + { + txbCodeText.Text = myHDevEngine.CodeText; + } + + private void tsbReadHdev_Click(object sender, EventArgs e) + { + OpenFileDialog myDia = new OpenFileDialog(); + myDia.Filter = "Halcon程序(*.hdev)|*.hdev"; + myDia.Title = "打开Halcon程序"; + if (myDia.ShowDialog() == DialogResult.OK) + { + string filePath = myDia.FileName; + myHDevEngine.CodeFilePath = filePath; + string hdevText = FileOperate.ReadFile(filePath); + txbCodeText.Text = hdevText; + } + } + + private void tsbSaveHdev_Click(object sender, EventArgs e) + { + SaveFileDialog myDia = new SaveFileDialog(); + myDia.Filter = "Halcon程序(*.hdev)|*.hdev"; + if (myDia.ShowDialog() == DialogResult.OK) + { + string path = myDia.FileName; + myHDevEngine.CodeFilePath = path; + FileOperate.WriteFile(path, txbCodeText.Text); + } + + } + + private void tsbReLoad_Click(object sender, EventArgs e) + { + if (File.Exists(myHDevEngine.CodeFilePath)) + { + FileInfo myFileInfo = new FileInfo(myHDevEngine.CodeFilePath); + myHDevEngine.MyEngine.SetProcedurePath(myFileInfo.DirectoryName); + + myHDevEngine.MyProgram.LoadProgram(myHDevEngine.CodeFilePath); + myHDevEngine.ProgramCall = new HDevProgramCall(myHDevEngine.MyProgram); + myHDevEngine.MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(myHwindow.SmartWindow.HalconWindow)); + } + + } + + private void tsbtRunTool_Click(object sender, EventArgs e) + { + if(myHDevEngine.ProgramCall != null) + { + myHDevEngine.ProgramCall.Execute(); + } + + } + } +} diff --git a/HDevEngineTool/FormHDevEngineTool.resx b/HDevEngineTool/FormHDevEngineTool.resx new file mode 100644 index 0000000..4a55989 --- /dev/null +++ b/HDevEngineTool/FormHDevEngineTool.resx @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 225, 19 + + + + + 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 + v3y1RkE/lQAAAABJRU5ErkJggg== + + + + + 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 + lSRJkn8rqdRPZ0b7i/SIonMAAAAASUVORK5CYII= + + + + 335, 19 + + \ No newline at end of file diff --git a/HDevEngineTool/HDevEngineCode.cs b/HDevEngineTool/HDevEngineCode.cs new file mode 100644 index 0000000..0f8dcda --- /dev/null +++ b/HDevEngineTool/HDevEngineCode.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonMethods; +using ToolBase; +using ViewROI; +using HalconDotNet; +using System.IO; +using Logger; + +namespace HDevEngineTool +{ + [Serializable] + public class HDevEngineCode : IToolBase + { + public string uniqueName { get; set; } = Guid.NewGuid().ToString(); + public string toolName { get; set; } = string.Empty; + [NonSerialized] + public HDevProgramCall ProgramCall; + [NonSerialized] + public HDevEngine MyEngine = new HDevEngine(); + [NonSerialized] + public HDevProgram MyProgram = new HDevProgram(); + public string CodeText { get; set; } = string.Empty; + public string CodeFilePath { get; set; } = string.Empty; + public override void DispImage() + { + // throw new NotImplementedException(); + } + + public override void DispMainWindow(HWindowTool_Smart window) + { + // throw new NotImplementedException(); + } + + public override void Run(SoftwareRunState softwareRunState) + { + if (File.Exists(CodeFilePath)) + { + if(MyProgram != null) + { + if(MyProgram.IsLoaded()) + { + LoggerClass.WriteLog("程序已加载,准备运行!"); + } + } + else + { + FileInfo myFileInfo = new FileInfo(CodeFilePath); + MyEngine.SetProcedurePath(myFileInfo.DirectoryName); + + MyProgram.LoadProgram(CodeFilePath); + ProgramCall = new HDevProgramCall(MyProgram); + MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(FormHDevEngineTool.Instance.myHwindow.SmartWindow.HalconWindow)); + } + ProgramCall.Execute(); + } + } + } +} diff --git a/HDevEngineTool/HDevEngineTool.csproj b/HDevEngineTool/HDevEngineTool.csproj new file mode 100644 index 0000000..f9effcc --- /dev/null +++ b/HDevEngineTool/HDevEngineTool.csproj @@ -0,0 +1,118 @@ + + + + + Debug + AnyCPU + {6112406A-A986-4A68-9D22-F0D7F0F81E02} + Library + Properties + HDevEngineTool + HDevEngineTool + v4.6.1 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll + + + C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\hdevenginedotnet.dll + + + False + bin\Debug\SunnyUI.dll + + + + + + + + + + + + + + + + + + Form + + + FormHDevEngineTool.cs + + + + + + True + True + Resources.resx + + + + + {1c8d0ddc-2086-48a9-9586-f2b643e2fc54} + CommonHelper + + + {8c6fc8c6-8874-494b-8260-071f291aa33d} + FormLib + + + {9baa53fd-89b5-43e2-ac59-a27b006debb6} + HWindow_Tool + + + {7cd50b44-bf56-4e8e-8fa1-05f6968c1835} + ToolBase + + + {d4e052b9-e541-4b67-a1f9-273073ef1d4b} + Logger + + + {16e8ff17-98a8-4452-ab9e-c433dc9c21f7} + ToolLib.VisionJob + + + + + FormHDevEngineTool.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + \ No newline at end of file diff --git a/HDevEngineTool/HDevEngineToolRun.cs b/HDevEngineTool/HDevEngineToolRun.cs new file mode 100644 index 0000000..dd9e327 --- /dev/null +++ b/HDevEngineTool/HDevEngineToolRun.cs @@ -0,0 +1,19 @@ +using CommonMethods.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CommonMethods; +using System.Windows.Forms; + +namespace HDevEngineTool +{ + public class HDevEngineToolRun : IToolRun + { + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + { + + } + } +} diff --git a/HDevEngineTool/Properties/AssemblyInfo.cs b/HDevEngineTool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..935274a --- /dev/null +++ b/HDevEngineTool/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("HDevEngineTool")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("HDevEngineTool")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("6112406a-a986-4a68-9d22-f0d7f0f81e02")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/HDevEngineTool/Properties/Resources.Designer.cs b/HDevEngineTool/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c819114 --- /dev/null +++ b/HDevEngineTool/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace HDevEngineTool.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HDevEngineTool.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/HDevEngineTool/Properties/Resources.resx b/HDevEngineTool/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/HDevEngineTool/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/HalconTool/FormHalconTool.Designer.cs b/HalconTool/FormHalconTool.Designer.cs index b66ce58..ab17fe1 100644 --- a/HalconTool/FormHalconTool.Designer.cs +++ b/HalconTool/FormHalconTool.Designer.cs @@ -30,31 +30,39 @@ namespace HalconTool { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormHalconTool)); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tabGrabImage = new Sunny.UI.UITabControl(); + this.grabFile = new System.Windows.Forms.TabPage(); + this.gbMultImg = new Sunny.UI.UIGroupBox(); + this.gbSignalImg = new Sunny.UI.UIGroupBox(); + this.chbRGB2Gray = new Sunny.UI.UICheckBox(); + this.uiLabel1 = new Sunny.UI.UILabel(); + this.btnRun = new Sunny.UI.UISymbolButton(); + this.txbFilePath = new Sunny.UI.UITextBox(); + this.btnSelectFilePath = new Sunny.UI.UISymbolButton(); + this.camera = new System.Windows.Forms.TabPage(); + this.uiMarkLabel2 = new Sunny.UI.UIMarkLabel(); + this.gbImageDisp = new Sunny.UI.UIGroupBox(); this.statusStrip = new System.Windows.Forms.StatusStrip(); this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); this.lb_Split = new System.Windows.Forms.ToolStripStatusLabel(); this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); - this.tabGrabImage = new Sunny.UI.UITabControl(); - this.grabFile = new System.Windows.Forms.TabPage(); - this.camera = new System.Windows.Forms.TabPage(); - this.gbImageDisp = new Sunny.UI.UIGroupBox(); - this.uiMarkLabel2 = new Sunny.UI.UIMarkLabel(); - this.uiLabel1 = new Sunny.UI.UILabel(); - this.txbFilePath = new Sunny.UI.UITextBox(); - this.btnSelectFilePath = new Sunny.UI.UISymbolButton(); - this.btnRun = new Sunny.UI.UISymbolButton(); - this.uiGroupBox2 = new Sunny.UI.UIGroupBox(); - this.uiGroupBox3 = new Sunny.UI.UIGroupBox(); - this.chbRGB2Gray = new Sunny.UI.UICheckBox(); + this.uiCheckBox1 = new Sunny.UI.UICheckBox(); + this.uiLabel2 = new Sunny.UI.UILabel(); + this.tbxImageDirectory = new Sunny.UI.UITextBox(); + this.btnSelectDir = new Sunny.UI.UISymbolButton(); + this.btnNext = new Sunny.UI.UISymbolButton(); + this.btnOld = new Sunny.UI.UISymbolButton(); + this.lbImageName = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); - this.statusStrip.SuspendLayout(); this.tabGrabImage.SuspendLayout(); this.grabFile.SuspendLayout(); + this.gbMultImg.SuspendLayout(); + this.gbSignalImg.SuspendLayout(); this.camera.SuspendLayout(); - this.uiGroupBox2.SuspendLayout(); + this.statusStrip.SuspendLayout(); this.SuspendLayout(); // // splitContainer1 @@ -72,10 +80,202 @@ namespace HalconTool // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this.gbImageDisp); - this.splitContainer1.Size = new System.Drawing.Size(1111, 517); + this.splitContainer1.Size = new System.Drawing.Size(1111, 457); this.splitContainer1.SplitterDistance = 605; this.splitContainer1.TabIndex = 1; // + // tabGrabImage + // + this.tabGrabImage.Controls.Add(this.grabFile); + this.tabGrabImage.Controls.Add(this.camera); + this.tabGrabImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabGrabImage.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; + this.tabGrabImage.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tabGrabImage.ItemSize = new System.Drawing.Size(150, 40); + this.tabGrabImage.Location = new System.Drawing.Point(0, 0); + this.tabGrabImage.MainPage = ""; + this.tabGrabImage.Name = "tabGrabImage"; + this.tabGrabImage.SelectedIndex = 0; + this.tabGrabImage.Size = new System.Drawing.Size(605, 457); + this.tabGrabImage.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; + this.tabGrabImage.TabIndex = 0; + // + // grabFile + // + this.grabFile.Controls.Add(this.gbMultImg); + this.grabFile.Controls.Add(this.gbSignalImg); + this.grabFile.Location = new System.Drawing.Point(0, 40); + this.grabFile.Name = "grabFile"; + this.grabFile.Size = new System.Drawing.Size(605, 417); + this.grabFile.TabIndex = 0; + this.grabFile.Text = "本地读取"; + this.grabFile.UseVisualStyleBackColor = true; + // + // gbMultImg + // + this.gbMultImg.Controls.Add(this.lbImageName); + this.gbMultImg.Controls.Add(this.btnOld); + this.gbMultImg.Controls.Add(this.btnNext); + this.gbMultImg.Controls.Add(this.uiCheckBox1); + this.gbMultImg.Controls.Add(this.uiLabel2); + this.gbMultImg.Controls.Add(this.tbxImageDirectory); + this.gbMultImg.Controls.Add(this.btnSelectDir); + this.gbMultImg.Dock = System.Windows.Forms.DockStyle.Fill; + this.gbMultImg.FillColor = System.Drawing.Color.White; + this.gbMultImg.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.gbMultImg.IsScaled = false; + this.gbMultImg.Location = new System.Drawing.Point(0, 188); + this.gbMultImg.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.gbMultImg.MinimumSize = new System.Drawing.Size(1, 1); + this.gbMultImg.Name = "gbMultImg"; + this.gbMultImg.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.gbMultImg.Size = new System.Drawing.Size(605, 229); + this.gbMultImg.Style = Sunny.UI.UIStyle.Custom; + this.gbMultImg.TabIndex = 4; + this.gbMultImg.Text = "多组图像"; + this.gbMultImg.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.gbMultImg.Click += new System.EventHandler(this.ImageSource_Click); + // + // gbSignalImg + // + this.gbSignalImg.Controls.Add(this.chbRGB2Gray); + this.gbSignalImg.Controls.Add(this.uiLabel1); + this.gbSignalImg.Controls.Add(this.btnRun); + this.gbSignalImg.Controls.Add(this.txbFilePath); + this.gbSignalImg.Controls.Add(this.btnSelectFilePath); + this.gbSignalImg.Dock = System.Windows.Forms.DockStyle.Top; + this.gbSignalImg.FillColor = System.Drawing.Color.White; + this.gbSignalImg.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.gbSignalImg.IsScaled = false; + this.gbSignalImg.Location = new System.Drawing.Point(0, 0); + this.gbSignalImg.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.gbSignalImg.MinimumSize = new System.Drawing.Size(1, 1); + this.gbSignalImg.Name = "gbSignalImg"; + this.gbSignalImg.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.gbSignalImg.Size = new System.Drawing.Size(605, 188); + this.gbSignalImg.Style = Sunny.UI.UIStyle.Custom; + this.gbSignalImg.TabIndex = 3; + this.gbSignalImg.Text = "单张图像"; + this.gbSignalImg.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.gbSignalImg.Click += new System.EventHandler(this.ImageSource_Click); + // + // chbRGB2Gray + // + this.chbRGB2Gray.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.chbRGB2Gray.Checked = true; + this.chbRGB2Gray.Cursor = System.Windows.Forms.Cursors.Hand; + this.chbRGB2Gray.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.chbRGB2Gray.IsScaled = false; + this.chbRGB2Gray.Location = new System.Drawing.Point(378, 135); + this.chbRGB2Gray.MinimumSize = new System.Drawing.Size(1, 1); + this.chbRGB2Gray.Name = "chbRGB2Gray"; + this.chbRGB2Gray.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.chbRGB2Gray.Size = new System.Drawing.Size(111, 29); + this.chbRGB2Gray.Style = Sunny.UI.UIStyle.Custom; + this.chbRGB2Gray.TabIndex = 3; + this.chbRGB2Gray.Text = "彩色转灰度"; + this.chbRGB2Gray.CheckedChanged += new System.EventHandler(this.chbRGB2Gray_CheckedChanged); + // + // uiLabel1 + // + this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel1.Location = new System.Drawing.Point(27, 45); + this.uiLabel1.Name = "uiLabel1"; + this.uiLabel1.Size = new System.Drawing.Size(100, 23); + this.uiLabel1.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel1.TabIndex = 0; + this.uiLabel1.Text = "图像路径:"; + this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // btnRun + // + this.btnRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnRun.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnRun.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnRun.IsScaled = false; + this.btnRun.Location = new System.Drawing.Point(210, 129); + this.btnRun.MinimumSize = new System.Drawing.Size(1, 1); + this.btnRun.Name = "btnRun"; + this.btnRun.Size = new System.Drawing.Size(133, 35); + this.btnRun.Style = Sunny.UI.UIStyle.Custom; + this.btnRun.Symbol = 61515; + this.btnRun.TabIndex = 2; + this.btnRun.Text = "运行工具"; + this.btnRun.Click += new System.EventHandler(this.btnRun_Click); + // + // txbFilePath + // + this.txbFilePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txbFilePath.ButtonSymbol = 61761; + this.txbFilePath.Cursor = System.Windows.Forms.Cursors.IBeam; + this.txbFilePath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.txbFilePath.IsScaled = false; + this.txbFilePath.Location = new System.Drawing.Point(183, 42); + this.txbFilePath.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.txbFilePath.Maximum = 2147483647D; + this.txbFilePath.Minimum = -2147483648D; + this.txbFilePath.MinimumSize = new System.Drawing.Size(1, 16); + this.txbFilePath.Name = "txbFilePath"; + this.txbFilePath.Size = new System.Drawing.Size(405, 35); + this.txbFilePath.Style = Sunny.UI.UIStyle.Custom; + this.txbFilePath.TabIndex = 1; + this.txbFilePath.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.txbFilePath.TextChanged += new System.EventHandler(this.txbFilePath_TextChanged); + // + // btnSelectFilePath + // + this.btnSelectFilePath.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSelectFilePath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSelectFilePath.IsScaled = false; + this.btnSelectFilePath.Location = new System.Drawing.Point(31, 129); + this.btnSelectFilePath.MinimumSize = new System.Drawing.Size(1, 1); + this.btnSelectFilePath.Name = "btnSelectFilePath"; + this.btnSelectFilePath.Size = new System.Drawing.Size(133, 35); + this.btnSelectFilePath.Style = Sunny.UI.UIStyle.Custom; + this.btnSelectFilePath.Symbol = 61462; + this.btnSelectFilePath.TabIndex = 2; + this.btnSelectFilePath.Text = "选择图像"; + this.btnSelectFilePath.Click += new System.EventHandler(this.btnSelectFilePath_Click); + // + // camera + // + this.camera.Controls.Add(this.uiMarkLabel2); + this.camera.Location = new System.Drawing.Point(0, 40); + this.camera.Name = "camera"; + this.camera.Size = new System.Drawing.Size(605, 477); + this.camera.TabIndex = 2; + this.camera.Text = "相机"; + this.camera.UseVisualStyleBackColor = true; + // + // uiMarkLabel2 + // + this.uiMarkLabel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiMarkLabel2.Location = new System.Drawing.Point(209, 206); + this.uiMarkLabel2.Name = "uiMarkLabel2"; + this.uiMarkLabel2.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); + this.uiMarkLabel2.Size = new System.Drawing.Size(189, 50); + this.uiMarkLabel2.TabIndex = 1; + this.uiMarkLabel2.Text = "该功能暂未实现"; + this.uiMarkLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // gbImageDisp + // + this.gbImageDisp.Dock = System.Windows.Forms.DockStyle.Fill; + this.gbImageDisp.FillColor = System.Drawing.Color.White; + this.gbImageDisp.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.gbImageDisp.IsScaled = false; + this.gbImageDisp.Location = new System.Drawing.Point(0, 0); + this.gbImageDisp.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.gbImageDisp.MinimumSize = new System.Drawing.Size(1, 1); + this.gbImageDisp.Name = "gbImageDisp"; + this.gbImageDisp.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); + this.gbImageDisp.Size = new System.Drawing.Size(502, 457); + this.gbImageDisp.Style = Sunny.UI.UIStyle.Custom; + this.gbImageDisp.TabIndex = 0; + this.gbImageDisp.Text = "显示图像"; + this.gbImageDisp.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // // statusStrip // this.statusStrip.BackColor = System.Drawing.Color.White; @@ -84,7 +284,7 @@ namespace HalconTool this.lb_RunStatus, this.lb_Split, this.lb_RunTime}); - this.statusStrip.Location = new System.Drawing.Point(0, 518); + this.statusStrip.Location = new System.Drawing.Point(0, 458); this.statusStrip.Name = "statusStrip"; this.statusStrip.Size = new System.Drawing.Size(1111, 24); this.statusStrip.TabIndex = 95; @@ -106,190 +306,110 @@ namespace HalconTool this.lb_RunTime.Name = "lb_RunTime"; this.lb_RunTime.Size = new System.Drawing.Size(0, 19); // - // tabGrabImage + // uiCheckBox1 // - this.tabGrabImage.Controls.Add(this.grabFile); - this.tabGrabImage.Controls.Add(this.camera); - this.tabGrabImage.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabGrabImage.DrawMode = System.Windows.Forms.TabDrawMode.OwnerDrawFixed; - this.tabGrabImage.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.tabGrabImage.ItemSize = new System.Drawing.Size(150, 40); - this.tabGrabImage.Location = new System.Drawing.Point(0, 0); - this.tabGrabImage.MainPage = ""; - this.tabGrabImage.Name = "tabGrabImage"; - this.tabGrabImage.SelectedIndex = 0; - this.tabGrabImage.Size = new System.Drawing.Size(605, 517); - this.tabGrabImage.SizeMode = System.Windows.Forms.TabSizeMode.Fixed; - this.tabGrabImage.TabIndex = 0; + this.uiCheckBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.uiCheckBox1.Checked = true; + this.uiCheckBox1.Cursor = System.Windows.Forms.Cursors.Hand; + this.uiCheckBox1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiCheckBox1.IsScaled = false; + this.uiCheckBox1.Location = new System.Drawing.Point(466, 102); + this.uiCheckBox1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiCheckBox1.Name = "uiCheckBox1"; + this.uiCheckBox1.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); + this.uiCheckBox1.Size = new System.Drawing.Size(111, 29); + this.uiCheckBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiCheckBox1.TabIndex = 8; + this.uiCheckBox1.Text = "彩色转灰度"; // - // grabFile + // uiLabel2 // - this.grabFile.Controls.Add(this.uiGroupBox3); - this.grabFile.Controls.Add(this.uiGroupBox2); - this.grabFile.Location = new System.Drawing.Point(0, 40); - this.grabFile.Name = "grabFile"; - this.grabFile.Size = new System.Drawing.Size(605, 477); - this.grabFile.TabIndex = 0; - this.grabFile.Text = "本地读取"; - this.grabFile.UseVisualStyleBackColor = true; + this.uiLabel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel2.Location = new System.Drawing.Point(27, 62); + this.uiLabel2.Name = "uiLabel2"; + this.uiLabel2.Size = new System.Drawing.Size(116, 23); + this.uiLabel2.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel2.TabIndex = 4; + this.uiLabel2.Text = "图像夹路径:"; + this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // - // camera + // tbxImageDirectory // - this.camera.Controls.Add(this.uiMarkLabel2); - this.camera.Location = new System.Drawing.Point(0, 40); - this.camera.Name = "camera"; - this.camera.Size = new System.Drawing.Size(605, 477); - this.camera.TabIndex = 2; - this.camera.Text = "相机"; - this.camera.UseVisualStyleBackColor = true; - // - // gbImageDisp - // - this.gbImageDisp.Dock = System.Windows.Forms.DockStyle.Fill; - this.gbImageDisp.FillColor = System.Drawing.Color.White; - this.gbImageDisp.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.gbImageDisp.IsScaled = false; - this.gbImageDisp.Location = new System.Drawing.Point(0, 0); - this.gbImageDisp.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.gbImageDisp.MinimumSize = new System.Drawing.Size(1, 1); - this.gbImageDisp.Name = "gbImageDisp"; - this.gbImageDisp.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); - this.gbImageDisp.Size = new System.Drawing.Size(502, 517); - this.gbImageDisp.Style = Sunny.UI.UIStyle.Custom; - this.gbImageDisp.TabIndex = 0; - this.gbImageDisp.Text = "显示图像"; - this.gbImageDisp.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - // - // uiMarkLabel2 - // - this.uiMarkLabel2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiMarkLabel2.Location = new System.Drawing.Point(209, 206); - this.uiMarkLabel2.Name = "uiMarkLabel2"; - this.uiMarkLabel2.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); - this.uiMarkLabel2.Size = new System.Drawing.Size(189, 50); - this.uiMarkLabel2.TabIndex = 1; - this.uiMarkLabel2.Text = "该功能暂未实现"; - this.uiMarkLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // uiLabel1 - // - this.uiLabel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiLabel1.Location = new System.Drawing.Point(27, 45); - this.uiLabel1.Name = "uiLabel1"; - this.uiLabel1.Size = new System.Drawing.Size(100, 23); - this.uiLabel1.TabIndex = 0; - this.uiLabel1.Text = "图像路径:"; - this.uiLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // txbFilePath - // - this.txbFilePath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.tbxImageDirectory.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.txbFilePath.ButtonSymbol = 61761; - this.txbFilePath.Cursor = System.Windows.Forms.Cursors.IBeam; - this.txbFilePath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.txbFilePath.IsScaled = false; - this.txbFilePath.Location = new System.Drawing.Point(183, 42); - this.txbFilePath.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.txbFilePath.Maximum = 2147483647D; - this.txbFilePath.Minimum = -2147483648D; - this.txbFilePath.MinimumSize = new System.Drawing.Size(1, 16); - this.txbFilePath.Name = "txbFilePath"; - this.txbFilePath.Size = new System.Drawing.Size(405, 35); - this.txbFilePath.TabIndex = 1; - this.txbFilePath.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; - this.txbFilePath.TextChanged += new System.EventHandler(this.txbFilePath_TextChanged); + this.tbxImageDirectory.ButtonSymbol = 61761; + this.tbxImageDirectory.Cursor = System.Windows.Forms.Cursors.IBeam; + this.tbxImageDirectory.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.tbxImageDirectory.IsScaled = false; + this.tbxImageDirectory.Location = new System.Drawing.Point(183, 59); + this.tbxImageDirectory.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.tbxImageDirectory.Maximum = 2147483647D; + this.tbxImageDirectory.Minimum = -2147483648D; + this.tbxImageDirectory.MinimumSize = new System.Drawing.Size(1, 16); + this.tbxImageDirectory.Name = "tbxImageDirectory"; + this.tbxImageDirectory.Size = new System.Drawing.Size(405, 35); + this.tbxImageDirectory.Style = Sunny.UI.UIStyle.Custom; + this.tbxImageDirectory.TabIndex = 5; + this.tbxImageDirectory.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; // - // btnSelectFilePath + // btnSelectDir // - this.btnSelectFilePath.Cursor = System.Windows.Forms.Cursors.Hand; - this.btnSelectFilePath.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnSelectFilePath.IsScaled = false; - this.btnSelectFilePath.Location = new System.Drawing.Point(31, 129); - this.btnSelectFilePath.MinimumSize = new System.Drawing.Size(1, 1); - this.btnSelectFilePath.Name = "btnSelectFilePath"; - this.btnSelectFilePath.Size = new System.Drawing.Size(133, 35); - this.btnSelectFilePath.Symbol = 61462; - this.btnSelectFilePath.TabIndex = 2; - this.btnSelectFilePath.Text = "选择图像"; - this.btnSelectFilePath.Click += new System.EventHandler(this.btnSelectFilePath_Click); + this.btnSelectDir.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSelectDir.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSelectDir.IsScaled = false; + this.btnSelectDir.Location = new System.Drawing.Point(31, 157); + this.btnSelectDir.MinimumSize = new System.Drawing.Size(1, 1); + this.btnSelectDir.Name = "btnSelectDir"; + this.btnSelectDir.Size = new System.Drawing.Size(133, 35); + this.btnSelectDir.Style = Sunny.UI.UIStyle.Custom; + this.btnSelectDir.Symbol = 61462; + this.btnSelectDir.TabIndex = 7; + this.btnSelectDir.Text = "选择文件夹"; + this.btnSelectDir.Click += new System.EventHandler(this.btnSelectDir_Click); // - // btnRun + // btnNext // - this.btnRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.btnRun.Cursor = System.Windows.Forms.Cursors.Hand; - this.btnRun.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.btnRun.IsScaled = false; - this.btnRun.Location = new System.Drawing.Point(440, 129); - this.btnRun.MinimumSize = new System.Drawing.Size(1, 1); - this.btnRun.Name = "btnRun"; - this.btnRun.Size = new System.Drawing.Size(133, 35); - this.btnRun.Symbol = 61515; - this.btnRun.TabIndex = 2; - this.btnRun.Text = "运行工具"; - this.btnRun.Click += new System.EventHandler(this.btnRun_Click); + this.btnNext.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnNext.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnNext.IsScaled = false; + this.btnNext.Location = new System.Drawing.Point(361, 157); + this.btnNext.MinimumSize = new System.Drawing.Size(1, 1); + this.btnNext.Name = "btnNext"; + this.btnNext.Size = new System.Drawing.Size(121, 35); + this.btnNext.Style = Sunny.UI.UIStyle.Custom; + this.btnNext.Symbol = 61518; + this.btnNext.TabIndex = 9; + this.btnNext.Text = "下一张"; + this.btnNext.Click += new System.EventHandler(this.btnNext_Click); // - // uiGroupBox2 + // btnOld // - this.uiGroupBox2.Controls.Add(this.chbRGB2Gray); - this.uiGroupBox2.Controls.Add(this.uiLabel1); - this.uiGroupBox2.Controls.Add(this.btnRun); - this.uiGroupBox2.Controls.Add(this.txbFilePath); - this.uiGroupBox2.Controls.Add(this.btnSelectFilePath); - this.uiGroupBox2.Dock = System.Windows.Forms.DockStyle.Top; - this.uiGroupBox2.FillColor = System.Drawing.Color.White; - this.uiGroupBox2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiGroupBox2.IsScaled = false; - this.uiGroupBox2.Location = new System.Drawing.Point(0, 0); - this.uiGroupBox2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiGroupBox2.MinimumSize = new System.Drawing.Size(1, 1); - this.uiGroupBox2.Name = "uiGroupBox2"; - this.uiGroupBox2.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); - this.uiGroupBox2.Size = new System.Drawing.Size(605, 188); - this.uiGroupBox2.Style = Sunny.UI.UIStyle.Custom; - this.uiGroupBox2.TabIndex = 3; - this.uiGroupBox2.Text = "单张图像"; - this.uiGroupBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + this.btnOld.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnOld.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOld.IsScaled = false; + this.btnOld.Location = new System.Drawing.Point(232, 157); + this.btnOld.MinimumSize = new System.Drawing.Size(1, 1); + this.btnOld.Name = "btnOld"; + this.btnOld.Size = new System.Drawing.Size(121, 35); + this.btnOld.Style = Sunny.UI.UIStyle.Custom; + this.btnOld.Symbol = 61514; + this.btnOld.TabIndex = 9; + this.btnOld.Text = "上一张"; + this.btnOld.Click += new System.EventHandler(this.btnOld_Click); // - // uiGroupBox3 + // lbImageName // - this.uiGroupBox3.Dock = System.Windows.Forms.DockStyle.Fill; - this.uiGroupBox3.FillColor = System.Drawing.Color.White; - this.uiGroupBox3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.uiGroupBox3.IsScaled = false; - this.uiGroupBox3.Location = new System.Drawing.Point(0, 188); - this.uiGroupBox3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); - this.uiGroupBox3.MinimumSize = new System.Drawing.Size(1, 1); - this.uiGroupBox3.Name = "uiGroupBox3"; - this.uiGroupBox3.Padding = new System.Windows.Forms.Padding(0, 32, 0, 0); - this.uiGroupBox3.Size = new System.Drawing.Size(605, 289); - this.uiGroupBox3.Style = Sunny.UI.UIStyle.Custom; - this.uiGroupBox3.TabIndex = 4; - this.uiGroupBox3.Text = "多组图像"; - this.uiGroupBox3.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - // - // chbRGB2Gray - // - this.chbRGB2Gray.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.chbRGB2Gray.Checked = true; - this.chbRGB2Gray.Cursor = System.Windows.Forms.Cursors.Hand; - this.chbRGB2Gray.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.chbRGB2Gray.IsScaled = false; - this.chbRGB2Gray.Location = new System.Drawing.Point(300, 133); - this.chbRGB2Gray.MinimumSize = new System.Drawing.Size(1, 1); - this.chbRGB2Gray.Name = "chbRGB2Gray"; - this.chbRGB2Gray.Padding = new System.Windows.Forms.Padding(22, 0, 0, 0); - this.chbRGB2Gray.Size = new System.Drawing.Size(111, 29); - this.chbRGB2Gray.Style = Sunny.UI.UIStyle.Custom; - this.chbRGB2Gray.TabIndex = 3; - this.chbRGB2Gray.Text = "彩色转灰度"; - this.chbRGB2Gray.CheckedChanged += new System.EventHandler(this.chbRGB2Gray_CheckedChanged); + this.lbImageName.AutoSize = true; + this.lbImageName.Location = new System.Drawing.Point(183, 103); + this.lbImageName.Name = "lbImageName"; + this.lbImageName.Size = new System.Drawing.Size(0, 21); + this.lbImageName.TabIndex = 10; // // FormHalconTool // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1111, 542); + this.ClientSize = new System.Drawing.Size(1111, 482); this.Controls.Add(this.statusStrip); this.Controls.Add(this.splitContainer1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -300,12 +420,14 @@ namespace HalconTool this.splitContainer1.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); this.splitContainer1.ResumeLayout(false); - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); this.tabGrabImage.ResumeLayout(false); this.grabFile.ResumeLayout(false); + this.gbMultImg.ResumeLayout(false); + this.gbMultImg.PerformLayout(); + this.gbSignalImg.ResumeLayout(false); this.camera.ResumeLayout(false); - this.uiGroupBox2.ResumeLayout(false); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -327,8 +449,15 @@ namespace HalconTool private Sunny.UI.UILabel uiLabel1; private Sunny.UI.UISymbolButton btnSelectFilePath; private Sunny.UI.UISymbolButton btnRun; - private Sunny.UI.UIGroupBox uiGroupBox2; - private Sunny.UI.UIGroupBox uiGroupBox3; + private Sunny.UI.UIGroupBox gbSignalImg; + private Sunny.UI.UIGroupBox gbMultImg; private Sunny.UI.UICheckBox chbRGB2Gray; + private Sunny.UI.UICheckBox uiCheckBox1; + private Sunny.UI.UILabel uiLabel2; + private Sunny.UI.UITextBox tbxImageDirectory; + private Sunny.UI.UISymbolButton btnSelectDir; + private System.Windows.Forms.Label lbImageName; + public Sunny.UI.UISymbolButton btnNext; + public Sunny.UI.UISymbolButton btnOld; } } \ No newline at end of file diff --git a/HalconTool/FormHalconTool.cs b/HalconTool/FormHalconTool.cs index 48efaf5..7e5296b 100644 --- a/HalconTool/FormHalconTool.cs +++ b/HalconTool/FormHalconTool.cs @@ -12,6 +12,7 @@ using CommonMethods; using HalconDotNet; using ChoiceTech.Halcon.Control; using ViewROI; +using Sunny.UI; namespace HalconTool { @@ -195,8 +196,20 @@ namespace HalconTool // 窗体载入时还原参数 public void InitTool() { - txbFilePath.Text = myHalconTool.imagePath; chbRGB2Gray.Checked = myHalconTool.RGBToGray; + if(myHalconTool.workMode == WorkMode.ReadOneImage) + { + gbSignalImg.Enabled = true; + gbMultImg.Enabled = false; + txbFilePath.Text = myHalconTool.imagePath; + } + else + { + gbSignalImg.Enabled = false; + gbMultImg.Enabled = true; + tbxImageDirectory.Text = myHalconTool.imageDirectoryPath; + lbImageName.Text = myHalconTool.currentImageName; + } } /// /// 将数据传递给HalconToolInterface @@ -245,5 +258,98 @@ namespace HalconTool { myHalconTool.RGBToGray = chbRGB2Gray.Checked; } + + private void ImageSource_Click(object sender, EventArgs e) + { + UIGroupBox myGroupBox = (UIGroupBox)sender; + if (myGroupBox.Text == "单张图像") + { + if(myGroupBox.Enabled == true) + { + gbSignalImg.Enabled = false; + gbMultImg.Enabled = true; + myHalconTool.workMode = WorkMode.ReadMultImage; + } + } + else + { + if (myGroupBox.Enabled == true) + { + gbSignalImg.Enabled = true; + gbMultImg.Enabled = false; + myHalconTool.workMode = WorkMode.ReadOneImage; + } + } + } + + private void btnSelectDir_Click(object sender, EventArgs e) + { + FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog(); + if (Directory.Exists(myHalconTool.imageDirectoryPath)) + folderBrowseDialog.SelectedPath = myHalconTool.imageDirectoryPath; + folderBrowseDialog.Description = "请选择图像文件夹路径"; + if (folderBrowseDialog.ShowDialog() == DialogResult.OK) + { + myHalconTool.imageDirectoryPath = folderBrowseDialog.SelectedPath; + this.tbxImageDirectory.Text = myHalconTool.imageDirectoryPath; + myHalconTool.L_imageFile.Clear(); + string[] files = Directory.GetFiles(folderBrowseDialog.SelectedPath); + for (int i = 0; i < files.Length; i++) + { + FileInfo fileInfo = new FileInfo(files[i]); + if (fileInfo.Extension == ".jpg" || fileInfo.Extension == ".bmp" || fileInfo.Extension == ".png" || fileInfo.Extension == ".tif") + myHalconTool.L_imageFile.Add(files[i]); + } + if (myHalconTool.L_imageFile.Count > 0) + { + myHalconTool.currentImageIndex = 0; + myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex]; + myHalconTool.DispImage(); + myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]); + lbImageName.Text = myHalconTool.currentImageName; + + } + // lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张"; + + } + } + + public void btnNext_Click(object sender, EventArgs e) + { + if (myHalconTool.L_imageFile.Count > 0) + { + int oldIndex = myHalconTool.currentImageIndex; + if(++myHalconTool.currentImageIndex < myHalconTool.L_imageFile.Count) + { + myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex]; + myHalconTool.Run(SoftwareRunState.Debug); + myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]); + lbImageName.Text = myHalconTool.currentImageName; + } + else + { + myHalconTool.currentImageIndex = oldIndex; + } + } + } + + private void btnOld_Click(object sender, EventArgs e) + { + if (myHalconTool.L_imageFile.Count > 0) + { + int oldIndex = myHalconTool.currentImageIndex; + if (--myHalconTool.currentImageIndex >= 0) + { + myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex]; + myHalconTool.Run(SoftwareRunState.Debug); + myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]); + lbImageName.Text = myHalconTool.currentImageName; + } + else + { + myHalconTool.currentImageIndex = oldIndex; + } + } + } } } diff --git a/HalconTool/HalconTool.cs b/HalconTool/HalconTool.cs index 9c9aa27..8dbc7e1 100644 --- a/HalconTool/HalconTool.cs +++ b/HalconTool/HalconTool.cs @@ -10,6 +10,7 @@ using HalconDotNet; using ToolBase; using System.Diagnostics; using ViewROI; +using System.IO; namespace HalconTool { @@ -91,7 +92,23 @@ namespace HalconTool Stopwatch sw = new Stopwatch(); sw.Restart(); softwareRunState = softwareState; - DispImage(); + if(workMode == WorkMode.ReadOneImage) + { + DispImage(); + } + else + { + if (currentImageIndex <= L_imageFile.Count) + { + currentImageIndex = currentImageIndex == L_imageFile.Count ? 0 : currentImageIndex; + outputImageFilePath = L_imageFile[currentImageIndex]; + DispImage(); + currentImageName = Path.GetFileName(L_imageFile[currentImageIndex]); + if(softwareState == SoftwareRunState.Release) + currentImageIndex++; + } + } + SetToolStatusDisp(); sw.Stop(); runTime = $"工具运行时间:{sw.ElapsedMilliseconds.ToString()} ms"; diff --git a/PMAlignTool/PMAlign.cs b/PMAlignTool/PMAlign.cs index ff05c4e..68b743b 100644 --- a/PMAlignTool/PMAlign.cs +++ b/PMAlignTool/PMAlign.cs @@ -19,7 +19,7 @@ using System.Threading.Tasks; using CommonMethods; using HalconDotNet; using ToolBase; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; using System.Windows.Forms; using Logger; using System.Diagnostics; diff --git a/PMAlignTool/PMAlignToolRun.cs b/PMAlignTool/PMAlignToolRun.cs index fa0f4cb..2e07664 100644 --- a/PMAlignTool/PMAlignToolRun.cs +++ b/PMAlignTool/PMAlignToolRun.cs @@ -25,7 +25,7 @@ using System.Text.RegularExpressions; using HalconDotNet; using FormLib; using Logger; -using static DataStruct.DataStruct; +using static DataStruct.DataStructClass; namespace PMAlignTool { diff --git a/SDKCameraTool/BaslerCamera.cs b/SDKCameraTool/BaslerCamera.cs new file mode 100644 index 0000000..691acd0 --- /dev/null +++ b/SDKCameraTool/BaslerCamera.cs @@ -0,0 +1,274 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SDKCameraTool +{ + public class BaslerCamera : ICamera + { + public bool bGammaEnable + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public Bitmap bmpImage + { + get + { + throw new NotImplementedException(); + } + } + + public int cameraID + { + get + { + throw new NotImplementedException(); + } + } + + public string cameraName + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public CamereaCompanyType CompanyType + { + get + { + throw new NotImplementedException(); + } + } + + public string CxpFilePath + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public float fExpTime + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public float fGain + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int Height + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public float iGamma + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public bool isFlowAcq + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public bool IsNeedCalibration + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int OffsetX + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int OffsetY + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public string sSerialNumber + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int TriggerCount + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int TriggerDelay + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public TriggerMode triggerMode + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public TriggerSouce triggerSource + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public int Width + { + get + { + throw new NotImplementedException(); + } + + set + { + throw new NotImplementedException(); + } + } + + public event EventHandler ImageTrigger; + + public int CloseCam() + { + throw new NotImplementedException(); + } + + public int OpenCam(CaptureMode captureMode) + { + throw new NotImplementedException(); + } + + public int Snap() + { + throw new NotImplementedException(); + } + } +} diff --git a/SDKCameraTool/FormSDKCameraTool.Designer.cs b/SDKCameraTool/FormSDKCameraTool.Designer.cs new file mode 100644 index 0000000..c9d5b64 --- /dev/null +++ b/SDKCameraTool/FormSDKCameraTool.Designer.cs @@ -0,0 +1,134 @@ +namespace SDKCameraTool +{ + partial class FormSDKCameraTool + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSDKCameraTool)); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.tsbtRunTool = new System.Windows.Forms.ToolStripButton(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel(); + this.uiSplitContainer1 = new Sunny.UI.UISplitContainer(); + this.toolStrip1.SuspendLayout(); + this.statusStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.uiSplitContainer1)).BeginInit(); + this.uiSplitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStrip1 + // + this.toolStrip1.ImageScalingSize = new System.Drawing.Size(25, 25); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtRunTool}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(1092, 32); + this.toolStrip1.TabIndex = 5; + this.toolStrip1.Text = "toolStrip1"; + // + // tsbtRunTool + // + this.tsbtRunTool.Image = ((System.Drawing.Image)(resources.GetObject("tsbtRunTool.Image"))); + this.tsbtRunTool.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtRunTool.Name = "tsbtRunTool"; + this.tsbtRunTool.Size = new System.Drawing.Size(85, 29); + this.tsbtRunTool.Text = "运行工具"; + // + // statusStrip + // + this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.lb_RunStatus, + this.toolStripStatusLabel1, + this.lb_RunTime}); + this.statusStrip.Location = new System.Drawing.Point(0, 618); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Size = new System.Drawing.Size(1092, 22); + this.statusStrip.TabIndex = 4; + // + // lb_RunStatus + // + this.lb_RunStatus.Name = "lb_RunStatus"; + this.lb_RunStatus.Size = new System.Drawing.Size(0, 17); + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(16, 17); + this.toolStripStatusLabel1.Text = " "; + // + // lb_RunTime + // + this.lb_RunTime.Name = "lb_RunTime"; + this.lb_RunTime.Size = new System.Drawing.Size(0, 17); + // + // uiSplitContainer1 + // + this.uiSplitContainer1.Cursor = System.Windows.Forms.Cursors.Default; + this.uiSplitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uiSplitContainer1.Location = new System.Drawing.Point(0, 32); + this.uiSplitContainer1.Name = "uiSplitContainer1"; + this.uiSplitContainer1.Size = new System.Drawing.Size(1092, 586); + this.uiSplitContainer1.SplitterDistance = 632; + this.uiSplitContainer1.SplitterWidth = 11; + this.uiSplitContainer1.TabIndex = 6; + // + // FormSDKCameraTool + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1092, 640); + this.Controls.Add(this.uiSplitContainer1); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.statusStrip); + this.Name = "FormSDKCameraTool"; + this.Text = "FormSDKCameraTool"; + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.uiSplitContainer1)).EndInit(); + this.uiSplitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton tsbtRunTool; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + private Sunny.UI.UISplitContainer uiSplitContainer1; + } +} \ No newline at end of file diff --git a/SDKCameraTool/FormSDKCameraTool.cs b/SDKCameraTool/FormSDKCameraTool.cs new file mode 100644 index 0000000..74be157 --- /dev/null +++ b/SDKCameraTool/FormSDKCameraTool.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SDKCameraTool +{ + public partial class FormSDKCameraTool : Form + { + public FormSDKCameraTool() + { + InitializeComponent(); + } + } +} diff --git a/SDKCameraTool/FormSDKCameraTool.resx b/SDKCameraTool/FormSDKCameraTool.resx new file mode 100644 index 0000000..f0a98ea --- /dev/null +++ b/SDKCameraTool/FormSDKCameraTool.resx @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 225, 19 + + + + + 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 + + + + 335, 19 + + \ No newline at end of file diff --git a/SDKCameraTool/ICamera.cs b/SDKCameraTool/ICamera.cs new file mode 100644 index 0000000..fbc5adc --- /dev/null +++ b/SDKCameraTool/ICamera.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SDKCameraTool +{ + public interface ICamera + { + /// + /// CaemraID + /// + [CategoryAttribute("CaemraID")] + int cameraID { get; } + /// + /// + /// + CamereaCompanyType CompanyType { get; } + /// + /// 相机名称 + /// + [CategoryAttribute("相机名称")] + string cameraName { get; set; } + /// + /// bmp图像 + /// + [CategoryAttribute("获取的图像")] + Bitmap bmpImage { get; } + /// + /// 曝光值 + /// + [CategoryAttribute("相机曝光")] + float fExpTime { get; set; } + /// + /// 触发方式 + /// + [CategoryAttribute("相机触发模式")] + TriggerMode triggerMode { get; set; } + /// + /// 触发源 + /// + [CategoryAttribute("相机触发源")] + TriggerSouce triggerSource { get; set; } + /// + /// 相机序列号,相机调用唯一标识 + /// + [CategoryAttribute("相机序列号")] + string sSerialNumber { get; set; } + /// + /// 增益 + /// + [CategoryAttribute("相机增益")] + float fGain { get; set; } + /// + /// 伽马 + /// + [CategoryAttribute("相机伽马值")] + float iGamma { get; set; } + /// + /// 伽马使能 + /// + [CategoryAttribute("相机伽马使能")] + bool bGammaEnable { get; set; } + /// + /// 感兴趣区域宽度 + /// + [CategoryAttribute("ROI宽")] + int Width { get; set; } + /// + /// 感兴趣区域高度 + /// + [CategoryAttribute("ROI高")] + int Height { get; set; } + /// + /// X偏移 + /// + [CategoryAttribute("X偏移")] + int OffsetX { get; set; } + /// + /// Y偏移 + /// + [CategoryAttribute("Y偏移")] + int OffsetY { get; set; } + /// + /// 触发拍照延时 + /// + int TriggerDelay { get; set; } + /// + /// 是否作为飞拍使用 + /// + bool isFlowAcq { get; set; } + /// + /// 该相机触发次数 + /// + int TriggerCount { get; set; } + /// + /// 该相机出来的图像是否需要经过标定 + /// + bool IsNeedCalibration { get; set; } + string CxpFilePath { get; set; } + /// + /// 打开相机 + /// + /// + int OpenCam(CaptureMode captureMode); + /// + /// 关闭相机 + /// + /// + int CloseCam(); + /// + /// 取图 + /// + /// + int Snap(); + /// + /// 被动触发事件 + /// + event EventHandler ImageTrigger; + } + + public enum CamereaCompanyType + { + HIKVision, + HIKVision_CXP, + Ajhua, + Basler, + FLIR, + File, + } + + [Serializable] + public class EventImageTrigger : EventArgs + { + public string cameraName { get; set; } + public Bitmap image { get; set; } + public int TriggerCount { get; set; } + } + public class EventIntPtrImageTrigger : EventArgs + { + public string cameraName { get; set; } + public IntPtr pImage { get; set; } + public int imageWidth { get; set; } + public int imageHeight { get; set; } + } + public enum TriggerMode + { + Off = 0, + On + } + + public enum TriggerSouce + { + HIKLine0 = 0, + HIKSoftWare = 1, + FLIRLine0 = 2, + FLIRSoftWare = 3, + SoftWareHIK = 7 + } + public enum CaptureMode + { + Positive, + CallBack + } + /// + /// 每次需从相机读取的参数 + /// + public class CameraInfo + { + } +} diff --git a/SDKCameraTool/Properties/AssemblyInfo.cs b/SDKCameraTool/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d674b16 --- /dev/null +++ b/SDKCameraTool/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("SDKCameraTool")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SDKCameraTool")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +//将 ComVisible 设置为 false 将使此程序集中的类型 +//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("1c61f57d-1a36-4a98-b7dd-a65f2dbbe468")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/SDKCameraTool/SDKCameraTool.csproj b/SDKCameraTool/SDKCameraTool.csproj new file mode 100644 index 0000000..b3fd4fb --- /dev/null +++ b/SDKCameraTool/SDKCameraTool.csproj @@ -0,0 +1,71 @@ + + + + + Debug + AnyCPU + {1C61F57D-1A36-4A98-B7DD-A65F2DBBE468} + Library + Properties + SDKCameraTool + SDKCameraTool + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + + + + + + + + + + + + + + + + Form + + + FormSDKCameraTool.cs + + + + + + + FormSDKCameraTool.cs + + + + + \ No newline at end of file diff --git a/ToolLib.VisionJob/FormJobManage.Designer.cs b/ToolLib.VisionJob/FormJobManage.Designer.cs index 8fc33ae..b1706cb 100644 --- a/ToolLib.VisionJob/FormJobManage.Designer.cs +++ b/ToolLib.VisionJob/FormJobManage.Designer.cs @@ -91,6 +91,7 @@ namespace ToolLib.VisionJob this.picNewJob.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; this.picNewJob.TabIndex = 2; this.picNewJob.TabStop = false; + this.picNewJob.Click += new System.EventHandler(this.picNewJob_Click); // // FormJobManage // diff --git a/ToolLib.VisionJob/FormJobManage.cs b/ToolLib.VisionJob/FormJobManage.cs index e9ecda6..d7870d9 100644 --- a/ToolLib.VisionJob/FormJobManage.cs +++ b/ToolLib.VisionJob/FormJobManage.cs @@ -8,6 +8,7 @@ using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using WeifenLuo.WinFormsUI.Docking; +using Sunny.UI; namespace ToolLib.VisionJob { @@ -42,5 +43,24 @@ namespace ToolLib.VisionJob string jobName = tabJobUnion.SelectedTab.Text; VisionJobParams.pVisionProject.Project[jobName].Run(); } + + private void picNewJob_Click(object sender, EventArgs e) + { + UIInputForm myUIInputForm = new UIInputForm(); + myUIInputForm.Label.Text = "输入新建Job名称"; + if (myUIInputForm.ShowDialog() == DialogResult.OK) + { + string newJobName = myUIInputForm.Editor.Text; + if(VisionJobParams.pVisionProject.Project.ContainsKey(newJobName)) + { + MessageBox.Show("新建流程名称重复,请重新建立!"); + return; + } + else + { + OperateProject.Instance.CreateNewJob(newJobName, true); + } + } + } } } diff --git a/ToolLib.VisionJob/FormToolBox.Designer.cs b/ToolLib.VisionJob/FormToolBox.Designer.cs index 5d481a9..235c066 100644 --- a/ToolLib.VisionJob/FormToolBox.Designer.cs +++ b/ToolLib.VisionJob/FormToolBox.Designer.cs @@ -30,9 +30,9 @@ namespace ToolLib.VisionJob { this.components = new System.ComponentModel.Container(); System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("流程", 1, 1); - System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Halcon窗口", 3, 3); - System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Basler"); - System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("HIKVision"); + System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Halcon本地", 3, 3); + System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Basler相机"); + System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("HIKVision相机"); System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("获取图像", new System.Windows.Forms.TreeNode[] { treeNode2, treeNode3, @@ -51,13 +51,19 @@ namespace ToolLib.VisionJob treeNode10, treeNode11, treeNode12}); - System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("找线"); - System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("找圆"); - System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("卡尺"); - System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("几何", new System.Windows.Forms.TreeNode[] { - treeNode14, - treeNode15, - treeNode16}); + System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("手眼标定"); + System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("标定与校准", new System.Windows.Forms.TreeNode[] { + treeNode14}); + System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("找线"); + System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("找圆"); + System.Windows.Forms.TreeNode treeNode18 = new System.Windows.Forms.TreeNode("卡尺"); + System.Windows.Forms.TreeNode treeNode19 = new System.Windows.Forms.TreeNode("几何", new System.Windows.Forms.TreeNode[] { + treeNode16, + treeNode17, + treeNode18}); + System.Windows.Forms.TreeNode treeNode20 = new System.Windows.Forms.TreeNode("Halcon引擎"); + System.Windows.Forms.TreeNode treeNode21 = new System.Windows.Forms.TreeNode("脚本", new System.Windows.Forms.TreeNode[] { + treeNode20}); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormToolBox)); this.tvw_ToolBox = new System.Windows.Forms.TreeView(); this.imageList1 = new System.Windows.Forms.ImageList(this.components); @@ -87,15 +93,15 @@ namespace ToolLib.VisionJob treeNode2.Name = "节点1"; treeNode2.SelectedImageIndex = 3; treeNode2.Tag = "HalconTool"; - treeNode2.Text = "Halcon窗口"; + treeNode2.Text = "Halcon本地"; treeNode3.ImageKey = "图像.png"; treeNode3.Name = "节点2"; treeNode3.SelectedImageIndex = 3; - treeNode3.Text = "Basler"; + treeNode3.Text = "Basler相机"; treeNode4.ImageKey = "图像.png"; treeNode4.Name = "节点3"; treeNode4.SelectedImageIndex = 3; - treeNode4.Text = "HIKVision"; + treeNode4.Text = "HIKVision相机"; treeNode5.ImageKey = "相机.png"; treeNode5.Name = "节点0"; treeNode5.SelectedImageKey = "相机.png"; @@ -122,30 +128,50 @@ namespace ToolLib.VisionJob treeNode13.ImageKey = "文件夹.png"; treeNode13.Name = "节点8"; treeNode13.Text = "匹配"; - treeNode14.ImageKey = "Line.png"; - treeNode14.Name = "FindLine"; - treeNode14.SelectedImageKey = "Line.png"; - treeNode14.Tag = "FindLine"; - treeNode14.Text = "找线"; - treeNode15.ImageKey = "Circle.png"; - treeNode15.Name = "FindCircle"; - treeNode15.SelectedImageKey = "Circle.png"; - treeNode15.Text = "找圆"; - treeNode16.ImageKey = "卡尺.png"; - treeNode16.Name = "Caliper"; - treeNode16.SelectedImageKey = "卡尺.png"; - treeNode16.Tag = "Caliper"; - treeNode16.Text = "卡尺"; - treeNode17.ImageKey = "几何_32.png"; - treeNode17.Name = "节点0"; - treeNode17.SelectedImageKey = "几何_32.png"; - treeNode17.Text = "几何"; + treeNode14.ImageKey = "校准_48.png"; + treeNode14.Name = "节点2"; + treeNode14.SelectedImageKey = "校准_48.png"; + treeNode14.Tag = "EyeHandCalib"; + treeNode14.Text = "手眼标定"; + treeNode15.ImageKey = "icons8_workflow_48.png"; + treeNode15.Name = "节点1"; + treeNode15.SelectedImageKey = "icons8_workflow_48.png"; + treeNode15.Text = "标定与校准"; + treeNode16.ImageKey = "Line.png"; + treeNode16.Name = "FindLine"; + treeNode16.SelectedImageKey = "Line.png"; + treeNode16.Tag = "FindLine"; + treeNode16.Text = "找线"; + treeNode17.ImageKey = "Circle.png"; + treeNode17.Name = "FindCircle"; + treeNode17.SelectedImageKey = "Circle.png"; + treeNode17.Text = "找圆"; + treeNode18.ImageKey = "卡尺.png"; + treeNode18.Name = "Caliper"; + treeNode18.SelectedImageKey = "卡尺.png"; + treeNode18.Tag = "Caliper"; + treeNode18.Text = "卡尺"; + treeNode19.ImageKey = "几何_32.png"; + treeNode19.Name = "节点0"; + treeNode19.SelectedImageKey = "几何_32.png"; + treeNode19.Text = "几何"; + treeNode20.ImageKey = "halcon_Icon.png"; + treeNode20.Name = "HDevEngine"; + treeNode20.SelectedImageKey = "halcon_Icon.png"; + treeNode20.Tag = "HDevEngineTool"; + treeNode20.Text = "Halcon引擎"; + treeNode21.ImageKey = "脚本1"; + treeNode21.Name = "脚本"; + treeNode21.SelectedImageKey = "脚本1"; + treeNode21.Text = "脚本"; this.tvw_ToolBox.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { treeNode1, treeNode5, treeNode9, treeNode13, - treeNode17}); + treeNode15, + treeNode19, + treeNode21}); this.tvw_ToolBox.SelectedImageIndex = 4; this.tvw_ToolBox.Size = new System.Drawing.Size(417, 543); this.tvw_ToolBox.TabIndex = 1; @@ -175,6 +201,11 @@ namespace ToolLib.VisionJob this.imageList1.Images.SetKeyName(15, "几何_32.png"); this.imageList1.Images.SetKeyName(16, "图像预处理_32.png"); this.imageList1.Images.SetKeyName(17, "相机.png"); + this.imageList1.Images.SetKeyName(18, "脚本1"); + this.imageList1.Images.SetKeyName(19, "脚本2"); + this.imageList1.Images.SetKeyName(20, "halcon_Icon.png"); + this.imageList1.Images.SetKeyName(21, "icons8_workflow_48.png"); + this.imageList1.Images.SetKeyName(22, "校准_48.png"); // // richTextBoxEx1 // @@ -208,6 +239,8 @@ namespace ToolLib.VisionJob this.imageListTool.Images.SetKeyName(9, "匹配.ico"); this.imageListTool.Images.SetKeyName(10, "模板.ico"); this.imageListTool.Images.SetKeyName(11, "相机.png"); + this.imageListTool.Images.SetKeyName(12, "脚本"); + this.imageListTool.Images.SetKeyName(13, "脚本2"); // // splitContainer1 // diff --git a/ToolLib.VisionJob/FormToolBox.resx b/ToolLib.VisionJob/FormToolBox.resx index a23f5a4..9ee98e1 100644 --- a/ToolLib.VisionJob/FormToolBox.resx +++ b/ToolLib.VisionJob/FormToolBox.resx @@ -118,15 +118,15 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 17, 17 + 157, 17 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADS - LgAAAk1TRnQBSQFMAgEBEgEAAXABAAFwAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABgAMAAaADAAEBAQABCAYAAVAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACY + PQAAAk1TRnQBSQFMAgEBFwEAAYgBAAGIAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABgAMAAcADAAEBAQABCAYAAWAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm @@ -153,368 +153,454 @@ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/yIAH2dgAAH0AWcdmAFn - YAAB7QFnHZgBZ2AAAe0BZwyYAW0DZwHrDJgBZ0QAAf8BFgFqCI8BZwFKCDgBWQGaAf8EAAHtAWcKmAHs - B2cBkgqYAWdEAAEWCo8BZwFKCjgBmgQAAe0BZwmYA2cF/wJnAesJmAFnRAABagqPAWcBSgo4AVkEAAHt - AWcJmAFnAfcH/wJnCZgBZ0QAC48BZwFKCzgEAAHtAWcImAJnCf8CZwiYAWdEAAuPAWcBSgs4BAAB7QFn - B5gB6wFnBP8B8wHtAfQE/wFnCJgBZ0QAC48BZwFKCzgEAAHtAWcHmAJnA/8FZwP/AmcHmAFnRAALjwFn - AUoLOAQAAe0BZweYAWcD/wFtAWcCmAHtAWcBBwP/AWcHmAFnRAALjwFnAUoLOAQAAe0BZweYAWcD/wFn - AewDmAJnA/8BZweYAWdEAAuPAWcBSgtSBAAB7QFnB5gBZwP/AWcFmAFnA/8BZweYAWdEAAuPAWcMQwQA - Ae0BZweYAWcD/wFnBZgBZwP/AWcHmAFnRAALjwFnAUkLcQQAAe0BZweYAWcD/wFnAZIDmAHqAWcD/wFn - B5gBZ0QAC48BZwFJC3EEAAHtAWcHmAFnA/8CZwOYAWcBjQP/AWcHmAFnRAALjwFnAUkLcQQAAe0BZweY - AWcB6wP/BWcD/wJnB5gBZ0QAC48BZwFJC3EEAAHtAWcHmAHrAWcE/wH3AWcBvAT/AWcImAFnRAAMQwFJ - C3EEAAHtAWcImAFnAW0J/wJnCJgBZ0QAC6MBZgFJC3EEAAHtAWcImAHsAWcB8wf/AZIBZwOYBWcBmAFn - RAALxgFnAUkLcQQAAe0BZwmYA2cF/wNnA5gFZwGYAWdEAAvGAWcBSQtxBAAB7QFnCpgBbQdnAewEmAFn - A+MBZwGYAWdEAAvGAWcBSQtxBAAB7QFnDJgFZwaYBWcBmAFnRAALxgFnAUkLcQQAAe0BZxeYAW0DZwHs - AZgBZ0QAC8YBZwFJC3EEAAHwAWcdmAFnRAALxgFnAUkKcQFWBQAfZ0QAAbAKxgFnAUkKcQF4BgAFBwJn - D24BZwHsBQdFAAH/AbABgAjGAWcBSQhxAVYBeAH0CwAB8AFnD5oBZwH/bgABZw+aAWdvAAFnD5oBZ28A - EWdvAAH0D2cB/1MAAfQGVQF3Af82AAolAW80AA1VMgAPJTAAB1UBlwGYAXcGVQF3EgAL9BEACSUBTAgl - AW8tAARVAZgJAAF3BFUPAA/rDgAFJQFvCQABRgUlKgAB9ANVAZ0NAAGXA1UB/wwAAusB8gsAAQcC6wwA - BCUBTA0ABSUTAAL0EwAB/wNVEAAB/wNVDAAB6wHtDQAC6wsABCUQAAH0BCUSAAL/EwADVRIAAf8DVQsA - AesB8gEAAusCAAHyAesDAAHrAewBAAHsAesKAAQlEgAB/wMlAW8FAAH0AfEB/wkAAv8JAAH/AfEB9AYA - A1UUAAH0AlUBlwoAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesJAAH/AyUUAAH0AyUFAAH/AbwBcwHx - Af8HAAL0BwAB/wHxAXMBvAH/BQAB/wJVAQgHAAHxDQABdwJVCgAB6wH0AQAC6wIAAfIB6wMAAesB7AEA - AZIB6wkAAyUBFhUAAUYDJQYAAf8BBwEcAfMB/wUAAv8FAAH/AfMBHAEHAf8HAANVCAACVQ0AAlUBdwkA - AesB9AEAAusCAAHyAesDAAHrAewBAAGSAesIAAH/AyUFAAz/BgADJQgAAf8BBwEcAfMB/wMAAvQDAAH/ - AfMBHAEHAf8JAAJVAfQIAANVDAABdwJVCQAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUB8wUA - AW8LJQYAAUYCJQFvAwAB8wFyARwB8wIAAf8BBwEcAfMB/wEAAvQBAAH/AfMBHAEHAf8CAAG8AfIBHAH0 - BAABCAJVCQAEVQHxCwACVQH/CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMl - AwAB/wEcAfMFAAH/AQcBHAHzAv8B8wEcAQcB/wQAAf8BcwG8BQADVQkABlUKAAJVAXcIAAHrAfQBAALr - AgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUDAAH/AfQBcwH/BgAB/wG8AnMBvAH/BgAB9AEc - Ae8FAAJVAZcJAAdVCQADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAH/AyUGAAFvCyUHAAMl - AwAB9AIHAfQHAATwBwAB8AH0AfAB9AQAAlUB8wkACFUBCAcAA1UIAAHrAfQBAALrAgAB8gHrAwAB6wHs - AQABkgHrBwABlAIlARoGAAFvCyUHAAMlCgAC/wHxAf8BAALxAQAB/wHxAv8LAAJVAfQJAAlVBwABnQJV - CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAUYCJQH0BgABbwslBwABbwIlCQAB9AH/AfMDAALx - AwAB8wH/AfQKAAJVAfMJAAhVCAADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAGTAiUBGgYA - AW8LJQcAAyUHAAP0BQAC8QUAA/QIAAJVAZcJAAZVAQgJAANVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEA - AZIB6wcAAf8CJQFMBgABbwslBwADJQcAAv8GAALxBgAC/wgAA1UJAAVVAf8KAANVCAAB6wH0AQAC6wIA - AfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMlDwAC8RAAAZgCVQkABFUMAAJVAfQIAAHrAfQBAALr - AgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUPAALxEQACVQH/CAACVQEIDAABlwJVCQAB6wH0 - DQABkgHrCAADJQH/BQABbwslBgABFgMlDwAC8REAA1UIAAFVDgADVQcAAv8B6wHwDf8B7AHrAv8GAAH0 - AyUFAAEWC0YGAAMlAf8PAALxEQAB9AJVAfMVAAGXAlUIABXrBwADJQHzFQABbwMlEAAC8RIAA1UVAANV - CAAV6wcAARoDJRUAAyURAALxEwADVRMAA1UJABXrCAAEJRMABCURAALxAgAB/xAAAfIDVREAA1UPAALr - BwAB6wHsDgAEJREABCUSAALxAgABHBEAAQgDVQHyDQABmANVAfQPAALrAfQFAAG8AesB7w8ABCUB8w0A - AZMEJRMAAvEBAAH/AXIB9BEAAfIEVQH/CQAB8gRVEgAJ6xEABSUB/wkAAfMFJRQAAvEBAAEIAfABHBMA - BlUBlwHxAfQB8QdVFAAB8QWSAfQTAAclAW8BGwH0ARoBRgclFQAC/wEAAfIB/wHzAf8TAAH0DVUB/zAA - ARoPJQH/MwABmAdVAfA1AAH0CyUB/3cAAf8BkwFGAZMB/3AAAZcDVQEIIQABwghaAfNPAAHCBlUB9B0A - AfMMWgH0TQAJVQH/GgAQWg4AAfQDBwHyDgAB9AMHAfImAApVAZcYAAZaAQgEAAGeBVoNAAH0AXMB8gLz - AfQOAAH/A/MBBwHyBgABvBkUBQAMVQHCFQAFWgH/CAAB/wNaDQAB8wEHFgAB8wEHBgABvAEUBLgBkA0U - BLgBkAEUBQAOVQH/EgABngRaDAAB5AH/DQAB8wEHAgAB/wLzAvQB/wIAAv8CAAH/AwAB/wMAAfMBBwYA - AbwBFAG4A5ABbAcUAYsBkAQUA5ABuAGQARQFABBVEQAEWhwAAfMBBwUAAf8B8wHwAgAB8wFyAbwCBwEA - Af8CBwMAAfMBBwYAAbwBFAG4CRQBbAPZAWwGFAG4AZABFAUAEVUBmA4ABFodAAH/AfQCAAHzAgcBvAH0 - AgAB8AH/AfQB8QHzAf8B8wHvAfIB/wHyAf8BAAH/AfQGAAG8ARQBuAgUAZAC2QGzApACuAGQAxQBuAGQ - ARQFABNVAfIMAANaAf8jAAH/AfQBcwEcAf8B9AEcAQAB8AIAAXMB9AH/AXMBBwH/CQABvAEUAbgHFAGQ - AtkBbAGQBNkBkAMUAbgBkAEUBQAVVQH/CQABngNaIQAB/wMHAfEB9gHyAe8B9AHyARwB/wHwAf8BBwHy - AfQBBwsAAbwIFAFsAtkBbAGyAdkBuAKLAbMBkAYUBQAWVQGXCAADWgH/JAAB/wG8AXMB/wH0AXIB/wHv - AfICAAH/AQcBAAEHCwABvAgUAbgB2QFsAZAB2QG4ARQBkALZAbIGFAUAGFUBmAYAA1oUAANaCQAIBwHv - DwcHAAEZGd8FABpVAfQEAANaEwABCARaLwABGgFZARsBGgFZAfQBGgFZAZoBAAGaAVkBGgoAG1UBmAIA - Af8DWhIAAf8GWggAAfQB8gH0AfIC8wH0Af8B8wH0AfMB9ALzAfQB8wH0AfMB9AHzAfQB8xAAAZoBWQH0 - AXoBmgH/AnoB9gGaAXoBGgH/CgAcVQH/AQABngJaAZ4SAAdaAQgHAAHzAQcB8wEHAfMBCAIAAfIBvAHy - AbwB8gG8AfMBBwHzAQcB8wG8AfMBBxAAAZoBWQH/AVkBGgEbAVkB/wHzAVkBmgH/AZoKABxVAZgBAANa - AcIRAAlaAf8GAAH/AfQB8wHvAfMBHAH/AfMB9AFzAfYB9AHwAvIB8AH/AfQB8gHwAfIBvA0AAvQBAAGa - AXoB/wFZAhoBegEAAZoBegH0AnoKABxVARsBAAGeAloBnhAAC1oB/wcAAfQBcwH2AXID/wG8AXMB7wEc - AQABBwL/AQABvAH0AfAB8w0AAnoBAAGaAVkB/wFZAXoB/wH2AfQBWQEaARsBWQEaCgAcVQIAAf8DWg8A - BFoBngNaAf8EWgYAAQcB/wFzAfQBHAHzAvQB/wH0AfMB9gHwAQcB/wEHAQABBwH/AQcB/w0AAZoBegH/ - ARoBWQHzARsCegEaAXoBmgH/AZoBegH/CgAaVQGXBAADWg8ABFoBAANaAQAB/wNaBgABBwHyAfMBvAH/ - ARwB/wH0AfEB9gEHAXMBBwH/Ae8B8AH0AQcB/wEHDgABGwFZARsB9gFZAXoB/wEbAXoBWQF6Af8BmgFZ - ARsLABlVAf8FAANaDwADWgIAA1oCAAHAAloGAAH/Ae8C/wEAAfMBHAHzAv8B8wL0AQcBvAH0AXMB9AEH - AfEOAAH/AnoB/wHzAnoBGwH/AvQBmgFZARoB/wsAF1UB8QcAA1oQAAEbAgAB8wNaAwAB/wgAAbwB8AEA - AvQB/wHvAXIBHAEHAnMB9AH/ARwB9AHzAXMB/w8AARoBWQEaAQAB/wF6BVkBmgH/DAAVVgGYCQABfANa - EgADWgGeDAAB/wEcAfIB/wEHAbwB9AH2AvMB9AH/AfABHAHzAQABBwH/EAAB9gJ6ARoC/wHzAxoB9A4A - FFYB/wsAA1oRAAH/A1oJAAH0AfIEAAEcAfAB/wHzAnMCHAFzAVAB8AcAAfQB8ggAAfcEAAH/AXoBWQF6 - AfMB/woAAfcB8QYAElYB9A0ABFoQAARaCQAB8wEHBAAB/wG8Ae8B8gH/AfQC8wH0Af8B8wEIAf8FAAHz - AQcIAAH3BQAB/wEaAXoBWQJ6AZoBGgcAAfcB8QYAEFYBCBAABFoOAARaCgAB8wEHBgAB/wEHAXIBcwEc - Ae8BHAFQARwB9AYAAfMBBwgAAfcHAAH/ARsBmgF6AVkBGgcAAfcB8QYADlYBlxIABVoMAARaAZ4KAAHz - AQcIAAH/AfQC8wH0Af8IAAHzAQcIAAH3A/EB9A0AA/EB9wHxBgANVgH/FAAFWgoABVoLAAH/AVAB7wIH - AfIOAAH0AwcBcwH0CAAE9wHxDQAE9wHxBgALVgH0FwAGWgYABloNAAH/A/MB9A4AAf8D8wH0JgAJVgEI - GgAQWkwAAZgGVgGXHQAB5AxaAZ5OAAVWAf8gAApaUQACCAH/JQAB9AKeAf//ADMAAfMDWigAAfMDWjAA - AfYbWQQAAfMBWgEAAVomAARaAQAEWhQAAWwB9AHzFgAdWQMAAfMDWiMAAf8CWgH0AQAB8wNaAgABCAJa - EQABbAH0AWYXAB1ZBAAC8wHCAVohAAGeAVoB/wQAA/MEAAHCAVoB/w4AAWwC9AH/AwAB/wGuEgAdWQcA - AfQBWh8AAloPAAFaAcIMAAFsAvQBZgQAAWwBtRIAHVkIAAH/AVodAAHkAVoRAAFaAf8KAAFsAvQBZgQA - AfIB9AGREgAdWQkAAf8BWhsAAf8BWhMAAVoJAAG8AvQBrgUAAe0B9AFmEgAdWQoAAfQBWhoAAVoUAAHC - AVoIAAH3AvQBZgQAAewC9AHzEgAdWQsAAfQBWhgAAf8BWhUAAVoHAAFsBPQBvAH3AgABZgL0EwAdWQwA - Af8BWhcAAVoWAAEIAVoGAAT0AfcBbAHzAWwBZgEJAWYBrhMAHVkNAAH/AVoWAAFaFwABWgUAAa4B8wX0 - AfMBbAH/AfECCQFsEgAdWQ4AAfQBWhUAAVoXAAFaBgABZgL0AWwE9AG8Aa4B/wGuAQkBkQG8EAAdWQ8A - AfQBWhIAAfMDWhQAAfMDWgQAAf8B9AFmAgABbAGRAvQB8AH0Aa4B8QH/Aa4BCQFsAW0BuwHtDAAdWRAA - Af8BWhEAAfMBWgEAAVoUAAHzAVoBAAFaBAABbAHxAgABBwEJAbsBbAP0Aa4B9AFmAv8CCQJmDAAdWREA - Af8BWhAAAfMDWhQAAfMDWgMAAfMBZgH/AgACkQEAAWYBbAEJAWYC9AGuAQcBZgH/Ae8BbAG7AfcLAB1Z - EgAB9AFaEAAB8wFaAfMVAAHzAVoB8wcAAfMBCQEHAgABbQH0AWwBuwGuAvQBtQFsAfcB/wGuAfALAB1Z - EwAB9AFaEAABWhcAAVoIAAHzAWwFAAFmAf8BkQGuAQcC9AHzA2YLAB1ZFAAB/wFaDwABWhYAAfQBWg0A - AZIB/wFmAf8BbAH/AQkBZgT0AfABbAFmCQABMRtZATEVAAH/AVoOAAGeAVoVAAFaDwABZgH/AgAB9wG8 - Ae0BCQFmAfQB8gP0AZEB8AcAAzEBWBX/BDEWAAH0AVoOAAFaFAAB/wFaFQABbAH/AWwBrgb0AWwB/wUA - AzEBWBX/BDEXAAH0AVoNAAEbAVoTAAFaAf8WAAH/AfMBAAGuAfAG9AFsBAAdMRgAAf8BWg0AAloRAAFa - AZ4cAAFmBvQB8gGuAgAbMQF5GgAB/wFaDQACWg8AAlofAAFsBfQBZgIAEjElAAH0AVoNAAJaDQABWgHk - IQABvAGSAvQB8wMAETEBmSYAAcIDWgsAARsCWgIAAfMDWgMAAloB/yQAAWwB9AFsAwARMScAAfMBWgEA - AVoNAAGeBFoBAARaAf9kAAHzA1oQAAHzA1ppAAPzEQAD8/8ANgABsxAAAf8Bu20AAbIRAAGybAABsgEJ - AbICCQGzAgkBugIJAbsHCQG6AbNqAAL/AQABswIAAQkCAAHzAgAB/wgAAQlqAAH/AgABswIAAQkCAAHz - AgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRQAC7IBswYAHfQGAAH/AgABswIAAQkCAAHzAgAB/wgA - ARkJAAH/BQkB9AIAARkFCQH/AgAGCRMAAQkMsgUAH4oFAAH/ArMBshKzCQAB/wIJAf8CCQH0AgABGQEJ - ARkB/wIJAf8CAAMJAf8B8gEJCgABswqyAfQIAAG6AbIEAAG0AYoBZQK7GhkBigUAAf8UAAEZCQAB/wIJ - AQACCQH0AgABGQEJAfMBAAIJAf8CAAMJAQAB8wEJCQAB8wGzCAABugGyAfQIAAG6AbIEAAGzAYoCZQK7 - GRkBigUAAf8UAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkJAAG6AfQIAAEJDLIEAAGzAYoBuwJlAbsBCRgZ - AYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0CQAMsgQAAbMBigG7ARkCZQG7AQkJGQEJ - DBkBuwGKBQAB/xQAARkKAAH/AgkC/wMAAv8DCQH/AwAC/wIJAfMB/wkAAboB9BkAAbMBigG7AhkCZQG7 - CBkCuwsZAQkBZQGKBQAB/xQAARkLAAIJBwADCQYAAgkB9AoAAboB9BkAAbMBigG7AxkCZQG7BhkBuwJl - AbsKGQJlAYoFAAH/FAABGQsAAgkH/wMJBv8CCQH0CgABugH0CQALsgGzBAABswGKAbsEGQJlAbsFGQFm - AmUBZgEJCBkBuwFlARkBigUAAf8UAAEZCwAUCQH0CgABugH0CAABCQyyBAABswGKAbsFGQJlAbsDGQG7 - AWUBZgGRAWUBuwcZAQkCZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AQABPQBswGyAfQIAAG6AbIEAAGz - AYoBuwYZAWUBZgG7AQkBuwJlAhkBZQFmAQkGGQFmAWUCGQGKBQAB/xWyFAAB8wIJEwABugH0AgAIsgH0 - CAABugGyBAABswGKAbsGGQG7AmUBuwJlAxkBCQFlAbsFGQG7AWUBbAIZAYoFAAH/AgABswIAAQkCAAHz - AgAB/wgAARkUAAHzAgkTAAG6AfQCAAGyBQABCQyyBAABswGKAbsHGQG1A2UFGQJlAbsDGQEJAmUDGQGK - BQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDQAH/wEZAgkH/wwAAboB9AIAAbIGAAyyBAABswGKAbsQGQEJ - AWUBuwMZAa4BZQQZAYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkMAAHzEgkLAAG6AfQCAAGyFgABswGK - AbsCGQFmAmUMGQJlAbsBGQG7AmUEGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDAAB8wEJDv8DCQsA - AboB9AIAAbIWAAGzAYoBuwEZAWUBiwIZAWUMGQFlArsCZQUZAYoEAAH/AbIVtAGyCwAB8wEJDgADCQoA - B7IBswQAC7IBswQAAbMBigG7ARkBZQG7AhkBZQwZBGUBkQUZAYoEAAGyFwABsgoAAfMBCQMAAgkJAAMJ - CQABCQiyAwABCQyyBAABswGKAbsBGQFlAbsCCQFlDhkBtQcZAYoEAAGyF7MBsgoAAfMBCQMAAgkJAAMJ - CQABugGyAfQEAAG6AbID9AGzAbIB9AgAAboBsgQAAbMBigG7AhkDZQG7FhkBigQAAboXAAGyCgAB8wEJ - DgADCQkAAboBsgH0BAABugayAfQIAAG6AbIEAAGzAYoBuxwZAYoEAAG6FwABsgoAAfMBCQ4AAwkJAAEJ - CLIDAAEJDLIEAAGzAYoduwGKBAABuhcAAbIKAAHzEgkKAAiyBAAMsgUAH4oEAAG6BAABsgH0CwABCQGy - BAABsgoAAf8RCQHzJwAB/xytAbQFAAG6AwABsgEAAbMLAAEJAQABsgMAAbJnAAG6AgABsgMAAbIJAAGy - AwABswIAAbJnAAG6AbMBugQAAboIAALzAwAB/wG6AbMBCW8AAbIBCQUAAboBs3kAAboDsgEJbQABQgFN - AT4HAAE+AwABKAMAAYADAAGgAwABAQEAAQEGAAEKFgAD/wEABP8BgAsABP8MAAT/DAAE/wwAAfACAAEP - DAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHw - AgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEP - DAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPDAAB8AIAAQ8MAAHwAgABDwwAAfACAAEPAYALAAHwAgABDwHA - AgABAQgAAfACAAEPAf4CAAE/CAAF/wIAAX8IAAX/AgABfwgABf8CAAF/CAAF/wIAAX8IAAH/AfABBwb/ - AeABAwb/AcABAQb/AYABAAb/AgABfwH/AeABAwH/Af4CAAE/BP8B/gEPAfgBPwH/AYABAAH/AfwBDwH4 - AR8E/wH4AT8B/gEPAf8BHwH8AX8B+AE/Af4BDwH/Af4BfwH/AfAC/wEPAf8BPwH+AX8B8AL/AQcB/wH+ - AX8B/wHxAv8BhwH/ASYBcgF/AeEC/wGDAeMB/gF/AccB4wL/AcMB/wEmAXIBfwHDAv8BwwHgAf4BfwEH - AcMB+wH/AeMB/wEmAXIBfwHDAv8B4QH4AT4BfAEfAccB+QH/AfEB/wEmAXIBfwGHAcABAwHxAf4BDgFw - AX8BxwH4Af8B8QH/ASYBcgF/AYcBwAEDAfAB4QGCAUEBhwGPAfgBPwH4Af8BJgFyAX8BjwHAAQMB+AHj - AeABBwKPAfgBHwH4Af8BJgFyAX8BjwHAAQMB+AHhAfgBHwKPAfgBDwH4Af8BJgFyAX8BDwHAAQMB+AHh - AfwBPwGHAY8B+AEDAfgB/wEmAXIBfwEPAcABAwH4Af8BwgFDAf8BjwH4AQMB+AH/ASYBcgF/AQ8BwAED - AfgB/wGOAXEB/wGPAfgBBwH4Af8BJgFyAX8BDwHAAQMB+AH+AT4BfAF/AY8B+AEPAfgB/wEmAXIBfwEP - AcABAwH4Af4CfgF/AY8B+AEfAfgB/wEmAXIBfwGPAcABAwH4Af8B/gF/Af8BjwH4AX8B+AH/ASYBcgF/ - AY8BwAEDAfgB/wH+AX8B/wHHAfgB/wHxAf8BPwH+AX8BhwHAAQMB8AH/Af4BfwH/AccB+wH/AfEB/AIA - AR8BhwHAAQMB8AH/Af4BfwH/AcMC/wHjAfwCAAEfAcMC/wHhAf8B/gF/Af8B4wL/AeMB/AIAAR8BwwL/ - AeMB/wH+AX8B/wHxAv8BxwH8AgABHwHhAv8BwwH/Af4BbwH/AfAC/wGPAf8B5wHzAf8B8AL/AYcB/wH+ - AW8B/wH4AT8B/gEPAf8C4wH/AfgBPwH+AQ8B/wH+AUcB/wH8AQ8B+AE/Af8B8AEHAf8B/AEPAfgBHwH/ - Af4BRwL/AgABfwH/AfgBDwH/Af4CAAE/Af8B/gFDAv8BgAEABv8CAAF/Bf8B8AEHBv8BwAEBDv8B/AEf - Df8B4AT/AYABHwn/AcABPwL/Af4BAAEHCf8BwAEPAv8B/AEAAQMB/wHwAX8B/gEPBP8BwAEHAv8B+AEP - AQMB/wHgAX8B/gEHAeACAAEHAcABAQL/AfABPwHDAf8B5wL/AecB4AIAAQcBwAEAAX8B/wHgAf8B8wH/ - AeYBBgFuAecB4AIAAQcBwAEAAT8B/wHhA/8B5wHGAQgB5wHgAgABBwHAAQABDwH/AcMD/wHmAQwBAAEn - AeACAAEHAcABAAEDAf8BwwT/AYABsAE/AeACAAEHAcACAAH/AYcD/wH8AgAB/wHgAgABBwHAAgABfwGH - BP8BgAEyAf8B4AIAAQcBwAIAAR8BjwL/AR8B8AIAAQ8B4AIAAQcBwAIAAQcBjwH/Af4BDwX/AeABCAH/ - AcACAAEDAQ8B/wH8AQcB+AIAAR8B/wHgAQAB/wHAAgABAQEPAf8B/AEDAfgBGAEAAR8B/wHgAQAB/wHA - AgABAQEPAf8B+AEBAfgCAAEfAf8CIAH/AcACAAEBAQ8B/wHwAQAB/gEAASIBHwH/ASABAAH/AcACAAED - AQ8B/wHgAQAB/AEAAQIBHwH/AgAB/wHAAgABBwGPAf8B4QEQAfwCAAE/Af8BAAEBAf8BwAIAAQ8BjwH/ - AeMBGAH8ASABAAE/Af8BAAEBAf8BwAIAAT8BjwH/AfYBHQH+AUABAAE/Af8BiAEDAf8BwAIAAf8BhwH/ - Af4BHwH+AQABAgF/Af8BgAEPAf8BwAEAAQEB/wHHAf8B/AE/AecBgAEPAecB+wHAAf8BzwHAAQABBwH/ - AcMB/wH8AT8B5wGAAQMB5wH7AeABHwHPAcABAAEfAf8B4QH/AfgBfwHnAeABBwHnAfsB+AEfAc8BwAEA - AX8B/wHgAf8B8AF/AecB+AEfAecB+AE/Af4BDwHAAQAC/wHwAX8B4AH/AeABfwH+AQcB+AE/Af4BDwHA - AQMC/wH4AR8BgQH/AfABfwH+AQ8E/wHAAQ8C/wH8AQABAwn/AcABPwL/Af4BAAEHCf8B4AF/A/8BgAEf - Cf8B8QT/AfAm/wHDBP8B/AE/Bf8BwAIAAQMBywT/AfABhwL/AY8C/wHAAgABAQHDBP8BhAExAv8BHwL/ - AcACAAEBAeEE/wEeATwBfwH+ARwC/wHAAgABAQH8A/8B/gF/Af8BPwH8ATwC/wHAAgABAQH+AX8C/wH8 - Av8BnwH4AXgC/wHAAgABAQH/AT8C/wH5Av8B3wHwAfgC/wHAAgABAQH/AZ8C/wH7Av8BzwLwAv8BwAIA - AQEB/wHPAv8B8wL/Ae8B4AExAv8BwAIAAQEB/wHnAv8B9wL/AecB4AEBAv8BwAIAAQEB/wHzAv8B9wL/ - AfcBwAEAAv8BwAIAAQEB/wH5Av8B9wL/AfcB4AEAAT8B/wHAAgABAQH/AfwC/wHDAv8BwwHGAQABAwH/ - AcACAAEBAf8B/gF/Af8BywL/AcsBzAEAAQMB/wHAAgABAQL/AT8B/wHDAv8BwwGMAYABAQH/AcACAAEB - Av8BnwH/AeMC/wHjAfgBwAEBAf8BwAIAAQEC/wHPAf8B9wL/AfcB+QHwAQEB/wHAAgABAQL/AecB/wH3 - Av8B5wH/AcABAAF/AcACAAEBAv8B8wH/AfMC/wHvAf8B5gEAAR8BwAIAAQEC/wH5Af8B+wL/Ac8C/wGA - AQcBwAIAAQEC/wH8Af8B+QL/Ac8C/wHIAQMBwAIAAQEC/wH+AX8B/AL/AZ8C/wH+AQABwAIAAQMD/wE/ - Af4BfwH/AT8D/wGAAcABAAEPBP8BnwH/AT8B/gF/A/8BwQHAAQABDwT/AcMB/wGMATgE/wHxAcABAAEf - BP8BywH/AeABgwz/AcMB/wH8AT8M/wHjAf8B/gE/Jf8B/gL/AT8M/wH+Av8Bvwz/AfwCAAEfDP8B+QFt - Ab8B3wz/AfsBbQG/Ad8B8AEYAQwBDwL/AQABDwHAAgABAQH7AW0BvwHfAfABGAEMAQ8B/wH+AQABDwGA - AwAB+AIAAR8B8AEYAQwBDwH8AQABPwHPBAAB+wL/Ad8B8QEYAYwBTwH5Af4BPwHPBAAB+wL/Ad8B8AEY - AQwBDwH5Af4BAAEPBAAB+wL/Ad8B8AEYAQwBDwH5Af8BAAEPBAAB+wL/Ad8B+AE4ARwBDwH5A/8EAAH7 - Av8B3wH8Af4BPwEfAfkD/wQAAfsC/wHfAfwCAAEfAfkB/wEAAQ8EAAH7Av8B3wH8AgABHwH5Af4BAAEP - BAAB+wL/Ad8B/AIAAR8B+QHgAT8BzwQAAfgCAAEfAf8B/gE/Af8B+QGAAT8BzwQAAfsBbQG/Ad8B/wH+ - AT8B/wH5Ab4BAAEPBAAB+wFtAb8B3wH/AgABfwH5Ab8BAAEPBAAB+wFtAb8B3wH+AgABPwH5Ab8C/wQA - AfsBbQG/Ad8B/gIAAT8B+QG/Av8EAAHwAgABDwH+AX8B/gE/AfABDwEAAQ8EAAH3Av8B9wH+AXMB/gE/ - AeABDgEAAQ8EAAHwAgABBwH+AXMB/gE/AeMBwAE/Ac8EAAH3Av8B9wH+AX8B/gE/AeMBwAE/Ac8EAAH3 - Av8B9wH+AX8B/gE/AeABDgEAAQ8EAAH3Av8B9wH+AgABPwHwAQ8BAAEPAYADAAH3AZ8B/AH3Af4CAAE/ - BP8BgAIAAQEB9wFfAf0Bdwz/AfYB7wH7AbcM/wHxAe8B8wGHDf8B8wHnDv8B/AEfDf8L + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEADPQCdQJTAXUBUwJ1 + AfML9GAACfQB8wpTAXUBUwF1CfQXAAH/AfMB/0YACPQQUwHzB/QCAAH/CvQB/wgAAf8BBwGRAfcB9BAA + Av8B8wEaAb0CGgEbAfUB/ysAB/QQUwF6AVMBdQb0AQAB/wuNAfMHAAH/AfcB7QGdAZEBjQH0DgAB/wF1 + CCYBTQEbKgAG9BJTAXUCUwX0AQAB/wHvAbQE2wPcAbsBjQH0BgAB/wEHAe0DnQGRAfcB9AsAAfUBlAwm + AXUBGygABfQWUwF1BPQCAAH/AY0E2wPcAbUB8AYAAf8B9wHtBZ0BkQGNAfQJAAEbBSYBlAG9AfUB/wEb + AZoBTQQmAZoB/yYABPQBdRdTBPQDAAG8AbUD2wLcAbsB7wG8Av8B8wEAAfIBAAEHAZIHnQGRAfcB/wYA + Af8BGgFNAiYBTQGaCP8BGgF1AyYBlAH/JQAD9AEaGFMBdQP0AwAB9AGNAboC2wLcAY0B8gGNAvQB7gEA + Ae8BAAH3CZ0B7AHzBgABGwMmAXUM/wG9AyYBmiUAA/QaUwGaAvQEAAHxAbUC2wHcAbUB7wH/AfMC/wH0 + AQAB9AEAAfAB7QedAZEB7wH/BQAB/wFNAiYBlAP/Ab0BdQFNAiYCTQGaAfYC/wG9AyYBGyQAAvQB8wJT + A/8EUwP/AnoC/wVTARoD/wJTAvQFAAHvAboB2wHcAY0B/wgAAf8B7gHtBZ0BkQGSAf8GAAGaAiYBdQP/ + AXUJJgEbAv8BvQImAXUkAAL0A1MD/wRTA/8B9gFTAv8FUwT/AlMC9AUAAfMBjQHbAbUBvAoAAf8BvAHt + A50BkQHvAf8GAAH1AyYB9AH/AfYBTQMmAU0DdQMmAU0BGwL/AXUCJgEbIwAC9ANTA/8FUwP/AVMK/wGa + A1MB9AUAAf8CtQGNAfULAAH/Ae4B7QGdAZEBjQH/BwABGgImAZoC/wF1AyYBvQX/AeMDJgH1Af8BGgIm + AU0B/yIAAvQDUwP/BVMD/wFTA/8BUwb/BFMB9AYAAf8B9wHzDQAB/wHwAY0BBwH/CAABlAEmAU0C/wH2 + AU0BJgFNAfQG/wH1AeMCJgGUAv8BTQImAfUiAAH0ARoDUwP/BVMD/wFTCv8EUwH0BwAB7w8AAfQBjQHw + CQABTQEmAU0C/wGUAiYBlAL/ARsBTQEmAZQD/wImAU0C/wGaAiYBGyIAAfQBmgNTC/8BUwT/AlMBegP/ + BFMB9AUAAv8B7wEAAf8MAAHzAe8BjQH3AfAB/wcAAU0BJgF1Av8BTQImARsB/wG9BCYBlAL/AXUBJgFN + Av8BGwImARoiAAH0AXoDUwGaCv8CUwT/AVME/wRTAfQFAAEHAbwB7wH0AfcMAAHvAfQBjQHzAfcB9AcA + AiYBdQL/AyYC/wGUASYBRgFEAiYC/wF1AiYD/wImAb0iAAH0AZoEUwr/AZoBUwT/AVMD/wVTAfQFAAH1 + Ae8BjQGSAfMOAAGNAfQJAAImAXUC/wFNAiYB9QH/AZoBJgElARQBRAFNAv8BdQImAv8B9QImARoiAAH0 + ARoBdQNTA/8EUwGaA/8CUwf/BVMB9AcAAQcB9A0AAf8B8AGNAQcB9AH/BwABTQEmAXUC/wFNAiYBvQH/ + AfQDJgEUAW0C/wFNASYBTQL/Ab0CJgEaIgAC9AF1A1MD/wVTA/8CUwT/AVMC/wVTAfQCAAHwBfcEkgHv + Af8GAAH/AQcBjQOOAY0B7wHzAf8FAAHjASYBTQL/Ab0CJgF1Av8B9AGaAZQBkwESAewBvQImAXUC/wF1 + AiYB8yIAAvQEUwP/BVMD/wJTAfYG/wVTAfQCAAGNAbwDGwHDBJoBjQH0BQAB/wGNAY4FlAGOAY0B8wUA + AZQCJgH2Av8BTQImAb0F/wHzARIBRAImAb0C/wMmAf8iAAL0BFMD/wVTA/8DUwT/AVMB9gRTAvQCAAGN + AbwDGwHDBJoBjQH0AQAB/wH1AgABvAGOAZQFsQGUAY4B7wH/BAABGgImAXUC/wGaAyYBdQG9AfUB9gEb + AZQBTAEUAUQBdQL/AZoCJgF1Af8iAAL0AfMBdQJTA/8BwwRTA/8DUwX/BVMC9AIAAY0BvAMbAcMEmgGN + AfQBAAHzAY0B9AEAAfcClAaxAZQBjgHzBAAB/wMmAb0C/wGUCiYBFAFtAv8BTQImAfUjAAP0GlMBmgL0 + AgABjQG8AxsBwwSaAY0B8gL0AQcB7wH0AY0BlAexAZQBjgHuBQABGgImAU0B9QL/AZoBTQcmAXUBBwGL + AbMBtAFuAUYBlCQAA/QBmgF1GFMD9AIAAY0BvAMbAcMEmgaNAQcBjgGUB7EBlAGOAQcGAAGUAiYBTQH1 + A/8BvQJNASYBTQGUAfUC/wG0ArMCrQEJJAAE9BhTBPQCAAGNAbwDGwHDBJoBjQH0AQAB/wIHAf8BjQGU + B7EBlAGOAfAGAAH1AU0CJgFNAb0K/wH0AewBrQKzAa0BswH0IwAF9BZTAXUE9AIAAY0BvAMbAcMEmgGN + AfQBAAH0AQcB/wEAAe8ClAaxAZQBjQH/BwAB/wFNAyYBdQj/AZoCJgKtArMBrQG0IwAG9AF1E1MBdQX0 + AgABjQG8AxsBwwSaAY0B9AUAAfEBjQKUBLEBlAGOAQcJAAH1AZQEJgFNBHUB4wFNAyYBrgKtAZEB9wH/ + IwAH9BJTAXUG9AIAAY0BvAMbAcMDmgEaAY0B9AUAAf8BBwGNBZQBjgGNAf8LAAEbDCYBmgH/AbQBrQH/ + AeoB7CMACPQBUwF1DlMBGgf0AgAB8wEHCO8B8AH/BgAB/wHxAe8BjQGOAY0B9wG8Af8NAAH/ARoBlAF1 + AU0CJgJNAZQBGgH1AgAB/wHzAQAB8wHxIwAJ9AHzDVMJ9BcAAf8B9AH/RgAM9AF1AVMBdQNTAXUBUwEa + C/RgACD0gQAfZ2AAAfQBZx2YAWdgAAHtAWcdmAFnYAAB7QFnDJgBbQNnAesMmAFnJwAB/wGUGwAB/wEW + AWoIjwFnAUoIOAFZAZoB/wQAAe0BZwqYAewHZwGSCpgBZwUAAW0V6gHyCwAB/wG9AwAB8waaARoB/w8A + ARYKjwFnAUoKOAGaBAAB7QFnCZgDZwX/AmcB6wmYAWcEAAEHF+oOAAEaC5oB/w0AAWoKjwFnAUoKOAFZ + BAAB7QFnCZgBZwH3B/8CZwmYAWcEAAPqEvEBBwLqDAAB/w6aARsMAAuPAWcBSgs4BAAB7QFnCJgCZwn/ + AmcImAFnBAAD6hIAAfIC6gsAAf8DmgtuApoBGgEbAXoJAAuPAWcBSgs4BAAB7QFnB5gB6wFnBP8B8wHt + AfQE/wFnCJgBZwQAA+oSAAHyAuoKAAH/A5oB6wv0AfcCmgEbCgALjwFnAUoLOAQAAe0BZweYAmcD/wVn + A/8CZweYAWcEAAPqEgAB8gLqCgAEmgHyAe8J9AHxAfQDmgH/CQALjwFnAUoLOAQAAe0BZweYAWcD/wFt + AWcCmAHtAWcBBwP/AWcHmAFnBAAD6gYAAewEAAHxAf8FAAHyAuoIAAIaBJoB8gEHC/QEmgkAC48BZwFK + CzgEAAHtAWcHmAFnA/8BZwHsA5gCZwP/AWcHmAFnBAAD6gUAAesB6gFtAgAB/wLqAfQEAAHyAuoHAAH/ + AnoEmgHyAQcD9AEHAfcG9ASaAf8IAAuPAWcBSgtSBAAB7QFnB5gBZwP/AWcFmAFnA/8BZweYAWcEAAPq + BAAB6wLqBAAB8gLqAfQDAAHyAuoIAAJ6BJoB8gEHAvQBBwG8Ae0B9AG8BPQEmgEbCAALjwFnDEMEAAHt + AWcHmAFnA/8BZwWYAWcD/wFnB5gBZwQAA+oDAAHrAuoGAAHyAuoB9AIAAfIC6ggAAfQFmgHyAQcB9ALt + AfQBtQH0ApID9AWaCAALjwFnAUkLcQQAAe0BZweYAWcD/wFnAZIDmAHqAWcD/wFnB5gBZwQAA+oCAAEH + AuoB/wcAAZIC6gIAAfIC6ggAARsFmgHyAQcC9wL0AbUC9ALtAvQFmggAC48BZwFJC3EEAAHtAWcHmAFn + A/8CZwOYAWcBjQP/AWcHmAFnBAAD6gMAAfcC6gH/BQABBwLqAf8CAAHyAuoIAAEaBZoB8gEHAu0C9AHt + AQcB9ALtAvQFmggAC48BZwFJC3EEAAHtAWcHmAFnAesD/wVnA/8CZweYAWcEAAPqBAABkgLqAf8DAAEH + AuoB/wMAAfIC6ggAARoFmgHyAQcB9ALtAfQBkgL3AbUD9AWaCAALjwFnAUkLcQQAAe0BZweYAesBZwT/ + AfcBZwG8BP8BZwiYAWcEAAPqBQAB9wHqAesCAAH/AuoB/wQAAfIC6ggAARsFmgHyAQcC9AGSAfQBBwHt + Ae8E9AWaCAAMQwFJC3EEAAHtAWcImAFnAW0J/wJnCJgBZwQAA+oGAAHvBAAB9AH/BQAB8gLqCAAB/wGa + AfYDmgHyAQcF9AG1BfQFmggAC6MBZgFJC3EEAAHtAWcImAHsAWcB8wf/AZIBZwOYBWcBmAFnBAAD6hIA + AfIC6gkAAZoB/wHDApoB8gEHB/QB7QNtBJoB9AgAC8YBZwFJC3EEAAHtAWcJmANnBf8DZwOYBWcBmAFn + BAAD6hIAAfIC6gkAARoEmgHyAQcG9AEHA7sBbgSaCQALxgFnAUkLcQQAAe0BZwqYAW0HZwHsBJgBZwPj + AWcBmAFnBAAD6hIAAfIC6gkAAf8EmgHyAQcG9AHsArsBcwOaARoBGwkAC8YBZwFJC3EEAAHtAWcMmAVn + BpgFZwGYAWcEAAPqEuwBbQLqBwAB/wFqAQABGwOaAbwCBwHyBAcB7AG7AXMFmgoAC8YBZwFJC3EEAAHt + AWcXmAFtA2cB7AGYAWcEABjqCwABGgKaAW4B7wa8AewBHAWaAf8BAAH/AfQHAAvGAWcBSQtxBAAB8AFn + HZgBZwQAGOoMABCaAf8CAAHzAb0HAAvGAWcBSQpxAVYFAB9nBAAB6xfqDQABGw2aAwAB/wkAAbAKxgFn + AUkKcQF4BgAFBwJnD24BZwHsBQcFAAH0FuoBbQ8AARoJmgH2AwAB9AJZCAAB/wGwAYAIxgFnAUkIcQFW + AXgB9AsAAfABZw+aAWcB/wsAAfQB6xLqAW0B7xIAAf8B8wEbARoBGwH0BQAC9AJZLAABZw+aAWdvAAFn + D5oBZ28AEWdvAAH0D2cB/1MAAfQGVQF3Af82AAolAW80AA1VMgAPJTAAB1UBlwGYAXcGVQF3EgAL9BEA + CSUBTAglAW8tAARVAZgJAAF3BFUPAA/rDgAFJQFvCQABRgUlKgAB9ANVAZ0NAAGXA1UB/wwAAusB8gsA + AQcC6wwABCUBTA0ABSUTAAL0EwAB/wNVEAAB/wNVDAAB6wHtDQAC6wsABCUQAAH0BCUSAAL/EwADVRIA + Af8DVQsAAesB8gEAAusCAAHyAesDAAHrAewBAAHsAesKAAQlEgAB/wMlAW8FAAH0AfEB/wkAAv8JAAH/ + AfEB9AYAA1UUAAH0AlUBlwoAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesJAAH/AyUUAAH0AyUFAAH/ + AbwBcwHxAf8HAAL0BwAB/wHxAXMBvAH/BQAB/wJVAQgHAAHxDQABdwJVCgAB6wH0AQAC6wIAAfIB6wMA + AesB7AEAAZIB6wkAAyUBFhUAAUYDJQYAAf8BBwEcAfMB/wUAAv8FAAH/AfMBHAEHAf8HAANVCAACVQ0A + AlUBdwkAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesIAAH/AyUFAAz/BgADJQgAAf8BBwEcAfMB/wMA + AvQDAAH/AfMBHAEHAf8JAAJVAfQIAANVDAABdwJVCQAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgA + AyUB8wUAAW8LJQYAAUYCJQFvAwAB8wFyARwB8wIAAf8BBwEcAfMB/wEAAvQBAAH/AfMBHAEHAf8CAAG8 + AfIBHAH0BAABCAJVCQAEVQHxCwACVQH/CAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFv + CyUHAAMlAwAB/wEcAfMFAAH/AQcBHAHzAv8B8wEcAQcB/wQAAf8BcwG8BQADVQkABlUKAAJVAXcIAAHr + AfQBAALrAgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUDAAH/AfQBcwH/BgAB/wG8AnMBvAH/ + BgAB9AEcAe8FAAJVAZcJAAdVCQADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAH/AyUGAAFv + CyUHAAMlAwAB9AIHAfQHAATwBwAB8AH0AfAB9AQAAlUB8wkACFUBCAcAA1UIAAHrAfQBAALrAgAB8gHr + AwAB6wHsAQABkgHrBwABlAIlARoGAAFvCyUHAAMlCgAC/wHxAf8BAALxAQAB/wHxAv8LAAJVAfQJAAlV + BwABnQJVCAAB6wH0AQAC6wIAAfIB6wMAAesB7AEAAZIB6wcAAUYCJQH0BgABbwslBwABbwIlCQAB9AH/ + AfMDAALxAwAB8wH/AfQKAAJVAfMJAAhVCAADVQgAAesB9AEAAusCAAHyAesDAAHrAewBAAGSAesHAAGT + AiUBGgYAAW8LJQcAAyUHAAP0BQAC8QUAA/QIAAJVAZcJAAZVAQgJAANVCAAB6wH0AQAC6wIAAfIB6wMA + AesB7AEAAZIB6wcAAf8CJQFMBgABbwslBwADJQcAAv8GAALxBgAC/wgAA1UJAAVVAf8KAANVCAAB6wH0 + AQAC6wIAAfIB6wMAAesB7AEAAZIB6wgAAyUGAAFvCyUHAAMlDwAC8RAAAZgCVQkABFUMAAJVAfQIAAHr + AfQBAALrAgAB8gHrAwAB6wHsAQABkgHrCAADJQYAAW8LJQcAAyUPAALxEQACVQH/CAACVQEIDAABlwJV + CQAB6wH0DQABkgHrCAADJQH/BQABbwslBgABFgMlDwAC8REAA1UIAAFVDgADVQcAAv8B6wHwDf8B7AHr + Av8GAAH0AyUFAAEWC0YGAAMlAf8PAALxEQAB9AJVAfMVAAGXAlUIABXrBwADJQHzFQABbwMlEAAC8RIA + A1UVAANVCAAV6wcAARoDJRUAAyURAALxEwADVRMAA1UJABXrCAAEJRMABCURAALxAgAB/xAAAfIDVREA + A1UPAALrBwAB6wHsDgAEJREABCUSAALxAgABHBEAAQgDVQHyDQABmANVAfQPAALrAfQFAAG8AesB7w8A + BCUB8w0AAZMEJRMAAvEBAAH/AXIB9BEAAfIEVQH/CQAB8gRVEgAJ6xEABSUB/wkAAfMFJRQAAvEBAAEI + AfABHBMABlUBlwHxAfQB8QdVFAAB8QWSAfQTAAclAW8BGwH0ARoBRgclFQAC/wEAAfIB/wHzAf8TAAH0 + DVUB/zAAARoPJQH/MwABmAdVAfA1AAH0CyUB/3cAAf8BkwFGAZMB/3AAAZcDVQEIIQABwghaAfNPAAHC + BlUB9B0AAfMMWgH0TQAJVQH/GgAQWg4AAfQDBwHyDgAB9AMHAfImAApVAZcYAAZaAQgEAAGeBVoNAAH0 + AXMB8gLzAfQOAAH/A/MBBwHyBgABvBkUBQAMVQHCFQAFWgH/CAAB/wNaDQAB8wEHFgAB8wEHBgABvAEU + BLgBkA0UBLgBkAEUBQAOVQH/EgABngRaDAAB5AH/DQAB8wEHAgAB/wLzAvQB/wIAAv8CAAH/AwAB/wMA + AfMBBwYAAbwBFAG4A5ABbAcUAYsBkAQUA5ABuAGQARQFABBVEQAEWhwAAfMBBwUAAf8B8wHwAgAB8wFy + AbwCBwEAAf8CBwMAAfMBBwYAAbwBFAG4CRQBbAPZAWwGFAG4AZABFAUAEVUBmA4ABFodAAH/AfQCAAHz + AgcBvAH0AgAB8AH/AfQB8QHzAf8B8wHvAfIB/wHyAf8BAAH/AfQGAAG8ARQBuAgUAZAC2QGzApACuAGQ + AxQBuAGQARQFABNVAfIMAANaAf8jAAH/AfQBcwEcAf8B9AEcAQAB8AIAAXMB9AH/AXMBBwH/CQABvAEU + AbgHFAGQAtkBbAGQBNkBkAMUAbgBkAEUBQAVVQH/CQABngNaIQAB/wMHAfEB9gHyAe8B9AHyARwB/wHw + Af8BBwHyAfQBBwsAAbwIFAFsAtkBbAGyAdkBuAKLAbMBkAYUBQAWVQGXCAADWgH/JAAB/wG8AXMB/wH0 + AXIB/wHvAfICAAH/AQcBAAEHCwABvAgUAbgB2QFsAZAB2QG4ARQBkALZAbIGFAUAGFUBmAYAA1oUAANa + CQAIBwHvDwcHAAEZGd8FABpVAfQEAANaEwABCARaLwABGgFZARsBGgFZAfQBGgFZAZoBAAGaAVkBGgoA + G1UBmAIAAf8DWhIAAf8GWggAAfQB8gH0AfIC8wH0Af8B8wH0AfMB9ALzAfQB8wH0AfMB9AHzAfQB8xAA + AZoBWQH0AXoBmgH/AnoB9gGaAXoBGgH/CgAcVQH/AQABngJaAZ4SAAdaAQgHAAHzAQcB8wEHAfMBCAIA + AfIBvAHyAbwB8gG8AfMBBwHzAQcB8wG8AfMBBxAAAZoBWQH/AVkBGgEbAVkB/wHzAVkBmgH/AZoKABxV + AZgBAANaAcIRAAlaAf8GAAH/AfQB8wHvAfMBHAH/AfMB9AFzAfYB9AHwAvIB8AH/AfQB8gHwAfIBvA0A + AvQBAAGaAXoB/wFZAhoBegEAAZoBegH0AnoKABxVARsBAAGeAloBnhAAC1oB/wcAAfQBcwH2AXID/wG8 + AXMB7wEcAQABBwL/AQABvAH0AfAB8w0AAnoBAAGaAVkB/wFZAXoB/wH2AfQBWQEaARsBWQEaCgAcVQIA + Af8DWg8ABFoBngNaAf8EWgYAAQcB/wFzAfQBHAHzAvQB/wH0AfMB9gHwAQcB/wEHAQABBwH/AQcB/w0A + AZoBegH/ARoBWQHzARsCegEaAXoBmgH/AZoBegH/CgAaVQGXBAADWg8ABFoBAANaAQAB/wNaBgABBwHy + AfMBvAH/ARwB/wH0AfEB9gEHAXMBBwH/Ae8B8AH0AQcB/wEHDgABGwFZARsB9gFZAXoB/wEbAXoBWQF6 + Af8BmgFZARsLABlVAf8FAANaDwADWgIAA1oCAAHAAloGAAH/Ae8C/wEAAfMBHAHzAv8B8wL0AQcBvAH0 + AXMB9AEHAfEOAAH/AnoB/wHzAnoBGwH/AvQBmgFZARoB/wsAF1UB8QcAA1oQAAEbAgAB8wNaAwAB/wgA + AbwB8AEAAvQB/wHvAXIBHAEHAnMB9AH/ARwB9AHzAXMB/w8AARoBWQEaAQAB/wF6BVkBmgH/DAAVVgGY + CQABfANaEgADWgGeDAAB/wEcAfIB/wEHAbwB9AH2AvMB9AH/AfABHAHzAQABBwH/EAAB9gJ6ARoC/wHz + AxoB9A4AFFYB/wsAA1oRAAH/A1oJAAH0AfIEAAEcAfAB/wHzAnMCHAFzAVAB8AcAAfQB8ggAAfcEAAH/ + AXoBWQF6AfMB/woAAfcB8QYAElYB9A0ABFoQAARaCQAB8wEHBAAB/wG8Ae8B8gH/AfQC8wH0Af8B8wEI + Af8FAAHzAQcIAAH3BQAB/wEaAXoBWQJ6AZoBGgcAAfcB8QYAEFYBCBAABFoOAARaCgAB8wEHBgAB/wEH + AXIBcwEcAe8BHAFQARwB9AYAAfMBBwgAAfcHAAH/ARsBmgF6AVkBGgcAAfcB8QYADlYBlxIABVoMAARa + AZ4KAAHzAQcIAAH/AfQC8wH0Af8IAAHzAQcIAAH3A/EB9A0AA/EB9wHxBgANVgH/FAAFWgoABVoLAAH/ + AVAB7wIHAfIOAAH0AwcBcwH0CAAE9wHxDQAE9wHxBgALVgH0FwAGWgYABloNAAH/A/MB9A4AAf8D8wH0 + JgAJVgEIGgAQWkwAAZgGVgGXHQAB5AxaAZ5OAAVWAf8gAApaUQACCAH/JQAB9AKeAf//ADMAAfMDWigA + AfMDWjAAAfYbWQQAAfMBWgEAAVomAARaAQAEWhQAAWwB9AHzFgAdWQMAAfMDWiMAAf8CWgH0AQAB8wNa + AgABCAJaEQABbAH0AWYXAB1ZBAAC8wHCAVohAAGeAVoB/wQAA/MEAAHCAVoB/w4AAWwC9AH/AwAB/wGu + EgAdWQcAAfQBWh8AAloPAAFaAcIMAAFsAvQBZgQAAWwBtRIAHVkIAAH/AVodAAHkAVoRAAFaAf8KAAFs + AvQBZgQAAfIB9AGREgAdWQkAAf8BWhsAAf8BWhMAAVoJAAG8AvQBrgUAAe0B9AFmEgAdWQoAAfQBWhoA + AVoUAAHCAVoIAAH3AvQBZgQAAewC9AHzEgAdWQsAAfQBWhgAAf8BWhUAAVoHAAFsBPQBvAH3AgABZgL0 + EwAdWQwAAf8BWhcAAVoWAAEIAVoGAAT0AfcBbAHzAWwBZgEJAWYBrhMAHVkNAAH/AVoWAAFaFwABWgUA + Aa4B8wX0AfMBbAH/AfECCQFsEgAdWQ4AAfQBWhUAAVoXAAFaBgABZgL0AWwE9AG8Aa4B/wGuAQkBkQG8 + EAAdWQ8AAfQBWhIAAfMDWhQAAfMDWgQAAf8B9AFmAgABbAGRAvQB8AH0Aa4B8QH/Aa4BCQFsAW0BuwHt + DAAdWRAAAf8BWhEAAfMBWgEAAVoUAAHzAVoBAAFaBAABbAHxAgABBwEJAbsBbAP0Aa4B9AFmAv8CCQJm + DAAdWREAAf8BWhAAAfMDWhQAAfMDWgMAAfMBZgH/AgACkQEAAWYBbAEJAWYC9AGuAQcBZgH/Ae8BbAG7 + AfcLAB1ZEgAB9AFaEAAB8wFaAfMVAAHzAVoB8wcAAfMBCQEHAgABbQH0AWwBuwGuAvQBtQFsAfcB/wGu + AfALAB1ZEwAB9AFaEAABWhcAAVoIAAHzAWwFAAFmAf8BkQGuAQcC9AHzA2YLAB1ZFAAB/wFaDwABWhYA + AfQBWg0AAZIB/wFmAf8BbAH/AQkBZgT0AfABbAFmCQABMRtZATEVAAH/AVoOAAGeAVoVAAFaDwABZgH/ + AgAB9wG8Ae0BCQFmAfQB8gP0AZEB8AcAAzEBWBX/BDEWAAH0AVoOAAFaFAAB/wFaFQABbAH/AWwBrgb0 + AWwB/wUAAzEBWBX/BDEXAAH0AVoNAAEbAVoTAAFaAf8WAAH/AfMBAAGuAfAG9AFsBAAdMRgAAf8BWg0A + AloRAAFaAZ4cAAFmBvQB8gGuAgAbMQF5GgAB/wFaDQACWg8AAlofAAFsBfQBZgIAEjElAAH0AVoNAAJa + DQABWgHkIQABvAGSAvQB8wMAETEBmSYAAcIDWgsAARsCWgIAAfMDWgMAAloB/yQAAWwB9AFsAwARMScA + AfMBWgEAAVoNAAGeBFoBAARaAf9kAAHzA1oQAAHzA1ppAAPzEQAD8/8ANgABsxAAAf8Bu20AAbIRAAGy + bAABsgEJAbICCQGzAgkBugIJAbsHCQG6AbNqAAL/AQABswIAAQkCAAHzAgAB/wgAAQlqAAH/AgABswIA + AQkCAAHzAgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRQAC7IBswYAHfQGAAH/AgABswIAAQkCAAHz + AgAB/wgAARkJAAH/BQkB9AIAARkFCQH/AgAGCRMAAQkMsgUAH4oFAAH/ArMBshKzCQAB/wIJAf8CCQH0 + AgABGQEJARkB/wIJAf8CAAMJAf8B8gEJCgABswqyAfQIAAG6AbIEAAG0AYoBZQK7GhkBigUAAf8UAAEZ + CQAB/wIJAQACCQH0AgABGQEJAfMBAAIJAf8CAAMJAQAB8wEJCQAB8wGzCAABugGyAfQIAAG6AbIEAAGz + AYoCZQK7GRkBigUAAf8UAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkJAAG6AfQIAAEJDLIEAAGzAYoBuwJl + AbsBCRgZAYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0CQAMsgQAAbMBigG7ARkCZQG7 + AQkJGQEJDBkBuwGKBQAB/xQAARkKAAH/AgkC/wMAAv8DCQH/AwAC/wIJAfMB/wkAAboB9BkAAbMBigG7 + AhkCZQG7CBkCuwsZAQkBZQGKBQAB/xQAARkLAAIJBwADCQYAAgkB9AoAAboB9BkAAbMBigG7AxkCZQG7 + BhkBuwJlAbsKGQJlAYoFAAH/FAABGQsAAgkH/wMJBv8CCQH0CgABugH0CQALsgGzBAABswGKAbsEGQJl + AbsFGQFmAmUBZgEJCBkBuwFlARkBigUAAf8UAAEZCwAUCQH0CgABugH0CAABCQyyBAABswGKAbsFGQJl + AbsDGQG7AWUBZgGRAWUBuwcZAQkCZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AQABPQBswGyAfQIAAG6 + AbIEAAGzAYoBuwYZAWUBZgG7AQkBuwJlAhkBZQFmAQkGGQFmAWUCGQGKBQAB/xWyFAAB8wIJEwABugH0 + AgAIsgH0CAABugGyBAABswGKAbsGGQG7AmUBuwJlAxkBCQFlAbsFGQG7AWUBbAIZAYoFAAH/AgABswIA + AQkCAAHzAgAB/wgAARkUAAHzAgkTAAG6AfQCAAGyBQABCQyyBAABswGKAbsHGQG1A2UFGQJlAbsDGQEJ + AmUDGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDQAH/wEZAgkH/wwAAboB9AIAAbIGAAyyBAABswGK + AbsQGQEJAWUBuwMZAa4BZQQZAYoFAAH/AgABswIAAQkCAAHzAgAB/wgAARkMAAHzEgkLAAG6AfQCAAGy + FgABswGKAbsCGQFmAmUMGQJlAbsBGQG7AmUEGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZDAAB8wEJ + Dv8DCQsAAboB9AIAAbIWAAGzAYoBuwEZAWUBiwIZAWUMGQFlArsCZQUZAYoEAAH/AbIVtAGyCwAB8wEJ + DgADCQoAB7IBswQAC7IBswQAAbMBigG7ARkBZQG7AhkBZQwZBGUBkQUZAYoEAAGyFwABsgoAAfMBCQMA + AgkJAAMJCQABCQiyAwABCQyyBAABswGKAbsBGQFlAbsCCQFlDhkBtQcZAYoEAAGyF7MBsgoAAfMBCQMA + AgkJAAMJCQABugGyAfQEAAG6AbID9AGzAbIB9AgAAboBsgQAAbMBigG7AhkDZQG7FhkBigQAAboXAAGy + CgAB8wEJDgADCQkAAboBsgH0BAABugayAfQIAAG6AbIEAAGzAYoBuxwZAYoEAAG6FwABsgoAAfMBCQ4A + AwkJAAEJCLIDAAEJDLIEAAGzAYoduwGKBAABuhcAAbIKAAHzEgkKAAiyBAAMsgUAH4oEAAG6BAABsgH0 + CwABCQGyBAABsgoAAf8RCQHzJwAB/xytAbQFAAG6AwABsgEAAbMLAAEJAQABsgMAAbJnAAG6AgABsgMA + AbIJAAGyAwABswIAAbJnAAG6AbMBugQAAboIAALzAwAB/wG6AbMBCW8AAbIBCQUAAboBs3kAAboDsgEJ + bQABQgFNAT4HAAE+AwABKAMAAYADAAHAAwABAQEAAQEGAAEMFgAD/wUACP8IAAL/Af4BPwT/CAABwAED + AfwBHwH/AeABBwH/CAABgAEDAfgBDwH/AcABAwH/CAABgAEDAfABBwH/AgAB/wgAAcABBwHgAQMB/gIA + AT8IAAHgAQABoAEBAfgCAAEfCAAB4AEAAaABAQH4AgABHwgAAfABAAGgAQEB8AIAAQ8IAAH4AR8B4AED + AfACAAEPCAAB+AE/AfABBwHgAgABBwgAAfgBPwH4AQ8B4AIAAQMIAAH8AX8B/AEfAeACAAEDCAAB/gH/ + Af4BPwHgAgABAwgAAfgBvwH8AQ8B4AIAAQMIAAH4AT8B/AEPAeACAAEDCAAB+AE/Af8BPwHgAgABAwgA + Af4BfwH8AQ8B4AIAAQMIAAHAAQMB8AEDAeACAAEDCAABwAEDAeABAwHgAgABAwgAAcABAgFgAQEB4AIA + AQMIAAHAAQIBIAEBAeACAAEHCAABwAIAAQEB8AIAAQ8IAAHAAgABAQH4AgABDwgAAcABAgEAAQEB+AIA + AQcIAAHAAQIBIAEBAfwCAAEHCAABwAEDAeABAwH+AgABBwgAAcABAwHgAQMB/wGAAQABBwgAAcABAwHw + AQcB/wHAAQMBJwgAAv8B/gE/BP8IAAj/CAAI/wQABP8BgAMADP8EAAz/BAAM/wQABP8B/gF/Av8B8AIA + AQ8EAAH4AgABDwH+AXABBwH/AfACAAEPBAAB8AIAAQ8B/wHAAQEB/wHwAgABDwQAAfACAAEPAf8CAAH/ + AfACAAEPBAAB8QL/AY8B/gIAAR8B8AIAAQ8EAAHxAv8BjwH8AgABPwHwAgABDwQAAfEC/wGPAfwCAAEf + AfACAAEPBAAB8QH7Ac8BjwHwAgABHwHwAgABDwQAAvEBhwGPAeACAAEPAfACAAEPBAAB8QHjAcMBjwHw + AgABDwHwAgABDwQAAfEBxwHhAY8B8AIAAQ8B8AIAAQ8EAAHxAYcB8QGPAfACAAEPAfACAAEPBAAB8QHD + AeEBjwHwAgABDwHwAgABDwQAAfEB4QHDAY8B8AIAAQ8B8AIAAQ8EAALxAYcBjwHwAgABDwHwAgABDwQA + AfEB+wHPAY8B8AIAAQ8B8AIAAQ8EAAHxAv8BjwH4AgABDwHwAgABDwQAAfEC/wGPAfgCAAEfAfACAAEP + BAAB8QL/AY8B+AIAAR8B8AIAAQ8EAAHwAgABDwHkAgABPwHwAgABDwQAAfACAAEPAf4CAAEnAfACAAEP + BAAB8AIAAQ8B/wIAAWcB8AIAAQ8BgAMAAfACAAEPAf8BgAEBAd8B8AIAAQ8BwAIAAQEB8AIAAQ8B/wHg + AQMBjwHwAgABDwH+AgABPwH4AgABHwH/AfgBHwEPBf8CAAF/Df8CAAF/Df8CAAF/Df8CAAF/Cf8B8AEH + Bv8B4AEDBv8BwAEBBv8BgAEABv8CAAF/Af8B4AEDAf8B/gIAAT8E/wH+AQ8B+AE/Af8BgAEAAf8B/AEP + AfgBHwT/AfgBPwH+AQ8B/wEfAfwBfwH4AT8B/gEPAf8B/gF/Af8B8AL/AQ8B/wE/Af4BfwHwAv8BBwH/ + Af4BfwH/AfEC/wGHAf8BJgFyAX8B4QL/AYMB4wH+AX8BxwHjAv8BwwH/ASYBcgF/AcMC/wHDAeAB/gF/ + AQcBwwH7Af8B4wH/ASYBcgF/AcMC/wHhAfgBPgF8AR8BxwH5Af8B8QH/ASYBcgF/AYcBwAEDAfEB/gEO + AXABfwHHAfgB/wHxAf8BJgFyAX8BhwHAAQMB8AHhAYIBQQGHAY8B+AE/AfgB/wEmAXIBfwGPAcABAwH4 + AeMB4AEHAo8B+AEfAfgB/wEmAXIBfwGPAcABAwH4AeEB+AEfAo8B+AEPAfgB/wEmAXIBfwEPAcABAwH4 + AeEB/AE/AYcBjwH4AQMB+AH/ASYBcgF/AQ8BwAEDAfgB/wHCAUMB/wGPAfgBAwH4Af8BJgFyAX8BDwHA + AQMB+AH/AY4BcQH/AY8B+AEHAfgB/wEmAXIBfwEPAcABAwH4Af4BPgF8AX8BjwH4AQ8B+AH/ASYBcgF/ + AQ8BwAEDAfgB/gJ+AX8BjwH4AR8B+AH/ASYBcgF/AY8BwAEDAfgB/wH+AX8B/wGPAfgBfwH4Af8BJgFy + AX8BjwHAAQMB+AH/Af4BfwH/AccB+AH/AfEB/wE/Af4BfwGHAcABAwHwAf8B/gF/Af8BxwH7Af8B8QH8 + AgABHwGHAcABAwHwAf8B/gF/Af8BwwL/AeMB/AIAAR8BwwL/AeEB/wH+AX8B/wHjAv8B4wH8AgABHwHD + Av8B4wH/Af4BfwH/AfEC/wHHAfwCAAEfAeEC/wHDAf8B/gFvAf8B8AL/AY8B/wHnAfMB/wHwAv8BhwH/ + Af4BbwH/AfgBPwH+AQ8B/wLjAf8B+AE/Af4BDwH/Af4BRwH/AfwBDwH4AT8B/wHwAQcB/wH8AQ8B+AEf + Af8B/gFHAv8CAAF/Af8B+AEPAf8B/gIAAT8B/wH+AUMC/wGAAQAG/wIAAX8F/wHwAQcG/wHAAQEO/wH8 + AR8N/wHgBP8BgAEfCf8BwAE/Av8B/gEAAQcJ/wHAAQ8C/wH8AQABAwH/AfABfwH+AQ8E/wHAAQcC/wH4 + AQ8BAwH/AeABfwH+AQcB4AIAAQcBwAEBAv8B8AE/AcMB/wHnAv8B5wHgAgABBwHAAQABfwH/AeAB/wHz + Af8B5gEGAW4B5wHgAgABBwHAAQABPwH/AeED/wHnAcYBCAHnAeACAAEHAcABAAEPAf8BwwP/AeYBDAEA + AScB4AIAAQcBwAEAAQMB/wHDBP8BgAGwAT8B4AIAAQcBwAIAAf8BhwP/AfwCAAH/AeACAAEHAcACAAF/ + AYcE/wGAATIB/wHgAgABBwHAAgABHwGPAv8BHwHwAgABDwHgAgABBwHAAgABBwGPAf8B/gEPBf8B4AEI + Af8BwAIAAQMBDwH/AfwBBwH4AgABHwH/AeABAAH/AcACAAEBAQ8B/wH8AQMB+AEYAQABHwH/AeABAAH/ + AcACAAEBAQ8B/wH4AQEB+AIAAR8B/wIgAf8BwAIAAQEBDwH/AfABAAH+AQABIgEfAf8BIAEAAf8BwAIA + AQMBDwH/AeABAAH8AQABAgEfAf8CAAH/AcACAAEHAY8B/wHhARAB/AIAAT8B/wEAAQEB/wHAAgABDwGP + Af8B4wEYAfwBIAEAAT8B/wEAAQEB/wHAAgABPwGPAf8B9gEdAf4BQAEAAT8B/wGIAQMB/wHAAgAB/wGH + Af8B/gEfAf4BAAECAX8B/wGAAQ8B/wHAAQABAQH/AccB/wH8AT8B5wGAAQ8B5wH7AcAB/wHPAcABAAEH + Af8BwwH/AfwBPwHnAYABAwHnAfsB4AEfAc8BwAEAAR8B/wHhAf8B+AF/AecB4AEHAecB+wH4AR8BzwHA + AQABfwH/AeAB/wHwAX8B5wH4AR8B5wH4AT8B/gEPAcABAAL/AfABfwHgAf8B4AF/Af4BBwH4AT8B/gEP + AcABAwL/AfgBHwGBAf8B8AF/Af4BDwT/AcABDwL/AfwBAAEDCf8BwAE/Av8B/gEAAQcJ/wHgAX8D/wGA + AR8J/wHxBP8B8Cb/AcME/wH8AT8F/wHAAgABAwHLBP8B8AGHAv8BjwL/AcACAAEBAcME/wGEATEC/wEf + Av8BwAIAAQEB4QT/AR4BPAF/Af4BHAL/AcACAAEBAfwD/wH+AX8B/wE/AfwBPAL/AcACAAEBAf4BfwL/ + AfwC/wGfAfgBeAL/AcACAAEBAf8BPwL/AfkC/wHfAfAB+AL/AcACAAEBAf8BnwL/AfsC/wHPAvAC/wHA + AgABAQH/Ac8C/wHzAv8B7wHgATEC/wHAAgABAQH/AecC/wH3Av8B5wHgAQEC/wHAAgABAQH/AfMC/wH3 + Av8B9wHAAQAC/wHAAgABAQH/AfkC/wH3Av8B9wHgAQABPwH/AcACAAEBAf8B/AL/AcMC/wHDAcYBAAED + Af8BwAIAAQEB/wH+AX8B/wHLAv8BywHMAQABAwH/AcACAAEBAv8BPwH/AcMC/wHDAYwBgAEBAf8BwAIA + AQEC/wGfAf8B4wL/AeMB+AHAAQEB/wHAAgABAQL/Ac8B/wH3Av8B9wH5AfABAQH/AcACAAEBAv8B5wH/ + AfcC/wHnAf8BwAEAAX8BwAIAAQEC/wHzAf8B8wL/Ae8B/wHmAQABHwHAAgABAQL/AfkB/wH7Av8BzwL/ + AYABBwHAAgABAQL/AfwB/wH5Av8BzwL/AcgBAwHAAgABAQL/Af4BfwH8Av8BnwL/Af4BAAHAAgABAwP/ + AT8B/gF/Af8BPwP/AYABwAEAAQ8E/wGfAf8BPwH+AX8D/wHBAcABAAEPBP8BwwH/AYwBOAT/AfEBwAEA + AR8E/wHLAf8B4AGDDP8BwwH/AfwBPwz/AeMB/wH+AT8l/wH+Av8BPwz/Af4C/wG/DP8B/AIAAR8M/wH5 + AW0BvwHfDP8B+wFtAb8B3wHwARgBDAEPAv8BAAEPAcACAAEBAfsBbQG/Ad8B8AEYAQwBDwH/Af4BAAEP + AYADAAH4AgABHwHwARgBDAEPAfwBAAE/Ac8EAAH7Av8B3wHxARgBjAFPAfkB/gE/Ac8EAAH7Av8B3wHw + ARgBDAEPAfkB/gEAAQ8EAAH7Av8B3wHwARgBDAEPAfkB/wEAAQ8EAAH7Av8B3wH4ATgBHAEPAfkD/wQA + AfsC/wHfAfwB/gE/AR8B+QP/BAAB+wL/Ad8B/AIAAR8B+QH/AQABDwQAAfsC/wHfAfwCAAEfAfkB/gEA + AQ8EAAH7Av8B3wH8AgABHwH5AeABPwHPBAAB+AIAAR8B/wH+AT8B/wH5AYABPwHPBAAB+wFtAb8B3wH/ + Af4BPwH/AfkBvgEAAQ8EAAH7AW0BvwHfAf8CAAF/AfkBvwEAAQ8EAAH7AW0BvwHfAf4CAAE/AfkBvwL/ + BAAB+wFtAb8B3wH+AgABPwH5Ab8C/wQAAfACAAEPAf4BfwH+AT8B8AEPAQABDwQAAfcC/wH3Af4BcwH+ + AT8B4AEOAQABDwQAAfACAAEHAf4BcwH+AT8B4wHAAT8BzwQAAfcC/wH3Af4BfwH+AT8B4wHAAT8BzwQA + AfcC/wH3Af4BfwH+AT8B4AEOAQABDwQAAfcC/wH3Af4CAAE/AfABDwEAAQ8BgAMAAfcBnwH8AfcB/gIA + AT8E/wGAAgABAQH3AV8B/QF3DP8B9gHvAfsBtwz/AfEB7wHzAYcN/wHzAecO/wH8AR8N/ws= - 132, 17 + 272, 17 AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 - KQAAAk1TRnQBSQFMAgEBDAEAARgBAAEIAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABQAMAAQEBAAEgBgABQP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A4gABIwEhASMBMAGt + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABc + LwAAAk1TRnQBSQFMAgEBDgEAASABAAEgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABQAMAAQEBAAEgBgABQP8AYwABVgFUAXABu7QAA1ABmgNYAf8DWAH/A1gB/wNYAf8DWAH/A1gB/wNY + Af8DWAH/A1gB/wNYAf8DWAH/HAABXQFjAWcBsAGiAeAB/AH/AaIB4AH8Af8BogHgAfwB/wGiAeAB/AH/ + AaIB4AH8Af8DDgETmAADWAH/A1gB/yQAA1gB/xgAAaIB4AH8Af8BogHgAfwB/wFbAXIBjwH/AVsBcgGP + Af8BWwFyAY8B/wFbAXIBjwH/AVsBcgGPAf8BnwHbAfcB/wFtAXsBgQHIAVwBvAHiAfiQAANYAf8DWAH/ + JAADWAH/FAABnAHRAecB+gGiAeAB/AH/AeEB4wHdAf8B9QH3Ae0B/wH1AfcB7QH/AfUB9wHtAf8B9QH3 + Ae0B/wH1AfcB7QH/AfUB9wHtAf8BogHgAfwB/wMKAQ2QAANYAf8DWAH/CAADXgHoA1gB9wQAA1gB/wMd + ASkIAANYAf8QAAFWAc0B+wH/AaAB4AH8Af8BogHgAfwB/wHhAeMB3QH/AfUB9wHtAf8B9QH3Ae0B/wGi + AZoBoAH/AfUB9wHtAf8B9QH3Ae0B/wH1AfcB7QH/AaIB4AH8Af8BogHgAfwB/5AAA1gB/wNYAf8EAANa + AeQDVQH6DAADWAH/AxoBJQQAA1gB/xAAAzMBUwGiAeAB/AH/AaIB4AH8Af8B4QHjAd0B/wH1AfcB7QH/ + AZwBiQGRAf8BygKhAf8BmwGSAZgB/wH1AfcB7QH/AfUB9wHtAf8BogHgAfwB/wGiAeAB/AH/kAADWAH/ + A1gB/wQAA1cBtwNYAf8MAANYAf8DBgEIBAADWAH/EAABYwFuAXIBvAGiAeAB/AH/AaIB4AH8Af8B4QHj + Ad0B/wGXAYsBkwH/AfUB9wHtAf8BoAGHAY8B/wH1AfcB7QH/AaMBjAGSAf8B9QH3Ae0B/wGiAeAB/AH/ + AaIB4AH8Af+QAANYAf8DWAH/CAADVQGyA1wB5wQAA1gB/wMEAQYIAANYAf8QAAFHAkgBfgGiAeAB/AH/ + AaIB4AH8Af8B4QHjAd0B/wH1AfcB7QH/AZ0BlQGcAf8BugK5Af8BrQGoAawB/wH1AfcB7QH/AfUB9wHt + Af8BogHgAfwB/wGiAeAB/AH/kAADWAH/A1gB/yQAA1gB/xQABP8BogHgAfwB/wHhAeMB3QH/AfUB9wHt + Af8B9QH3Ae0B/wH1AfcB7QH/AfUB9wHtAf8BYQFkAWYB/wFhAWQBZwH/AaIB4AH8Af8BogHgAfwB/5AA + A1gB/wNYAf8kAANYAf8UAAGiAeAB/AH/AaIB4AH8Af8B4QHjAd0B/wH1AfcB7QH/AfUB9wHtAf8B9QH3 + Ae0B/wGHAYkBjgH/Ac0B0AGHAf8BogHgAfwB/wGiAeAB/AH/AVQBVwFZAZuQAANYAf8DWAH/A1gB/wNY + Af8DWAH/A1gB/wNYAf8DWAH/A1gB/wNYAf8DWAH/A1gB/xgAAaIB4AH8Af8BVQFqAYcB/wHMAc8BzAH/ + AcwBzwHMAf8BzAHPAcwB/wF3AXoBhAH/AaIB4AH8Af8BogHgAfwB/wGiAeAB/AH/BAADJgE4jAADXAHq + A1gB/wNYAf8DWAH/A1gB/wNYAf8DWAH/A1gB/wNYAf8DWAH/A1gB/wNYAf8cAAGiAeAB/AH/AaIB4AH8 + Af8BogHgAfwB/wGiAeAB/AH/AaIB4AH8Af8BogHgAfwB/wGUAcMB2QH1BAADBAEFlAADWwHpA1gB/wNY + Af8DWAH/A1gB/wNYAf8DWAH/A1gB/wNYAf8DWAH/A1IBoyQAAT8CQAFsAVoBYAFiAaoDKgFBCAADMAFL + ARYBvAHxAf//AP8A/wBLAAMhATABrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8UAAH/AfYB6wH/cAADIwEzA04BmQM4AVwcAANOAZkDTgGZCAABVgFU + AVkBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wFnAVsBawH/ + AU0BKQFYAf8BdAFzAXUB/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/xAAAf8B9gHrAf8DBgEIBAADDAEQKAABSAFAATAB/wHUAbgBAAH/AdQBuAEAAf8BSAFAATAB/wFI + AUABMAH/AUgBQAEwAf8BSAFAATAB/wFIAUABMAH/AUgBQAEwAf8BSAFAATAB/wHUAbgBAAH/AdQBuAEA + Af8BSAFAATAB/wwAA04BmSwAA04BmQQAAVYBVAFZAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/AU0BKQFYDf8BTQEpAVgB/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8MAAH/AfYB6wH/AWABRAErAf8IAAH/AfYB6wH/KAABSAFAATAB/wFIAUABMAH/AUgBQAEw + Af8BSAFAATAB/wFIAUABMAH/AUgBQAEwAf8B9AHbAQAB/wH+AeQBAAH/AUgBQAEwAf8BSAFAATAB/wFI + AUABMAH/AdQBuAEAAf8BSAFAATAB/wwAA04BmQgAAwsBDwNCAXQEAAFOAWwBYQHwAVACUQGfBAABTgJP + AZcIAANOAZkEAAFWAVQBWQG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BTQEpAVgV/wFN + ASkBWAH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAG0AaEBkAL/AfYB6wH/CAABXAJZ + Ac8B/wH2AesB/ygAAUgBQAEwAf8BSAFAATAB/wFIAUABMAH/AUgBQAEwAf8BSAFAATAC/wHlAQAB/wFY + AU8BKwL/AeUBAAL/AeUBAAH/AasBmQETAf8BSAFAATAB/wHUAbgBAAH/AUgBQAEwAf8YAAMoAT0BVQJW + AbEDJAE1CAABVgFqAWQB5wMIAQsBTwJQAZsMAAFWAVQBWQG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8BWwE6AWUF/wFNASkBWAH/AU0BKQFYAf8BUQEtAVsF/wFPASsBWgH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wL/AfYB6wH/AXMBWQFCAf8BagFPATcB/wHiAcoBsAH/ + AYUBZAFOAf8oAAFIAUABMAH/AUgBQAEwAf8BSAFAATAB/wFIAUABMAH/AdIBvQEHAf8BXwFVASkC/wHl + AQAB/wFIAUABMAL/AeUBAAH/AcIBrgEMAf8BSAFAATAB/wFIAUABMAH/AUgBQAEwAf8YAAFIAkkBiAMV + AR0BTgF0AWcB8gFTAlUBrQQAAwgBCxQAAVYBVAFZAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8J/wGEAY0BgQH/Aa0B2wGfAf8BUQExAVsJ/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + CAAB/wH2AesB/wFqAU8BNwL/AfYB6wL/AfYB6wH/AZMBdwFlAf8BjgFwAV0B/wGoAY8BbQH/NAABRgG3 + Av8DTAGQAywBRAFGAbcC/wQAAUYBtwL/UAABVgFUAVkBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGo + AdIBnAn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf + Af8EAAFqAU8BNwH/BAACTAFLAY8BywGyAZkB/wH7AfEB5QL/AfYB6wH/AfsB8QHlBf8B2wHCAagB/wFg + AUQBKwH/LAABRgG3Av8BRgG3Av8DQAFvAyEBMAFGAbcC/wMiATIcAANOAZkDTgGZA0oBiwQAA0gBhgNI + AYUBSAJJAYcDSwGOAUwCTQGRA0gBhQNLAY4IAAFWAVQBWQG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfCf8BTQEpAVgB/wGtAdsBnwH/AU0BKQFYCf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wwAAeIBygGwAf8EAAFkAVwBVAHnAXIBWQFCAf8BgAFfAUgC/wH2AesB/wF0AVsBRAX/AzsBZCAA + AVQBkQG4AfUEAAFGAbcC/wFGAbAB6gH9AwQBBgMsAUQDRwGCAUYBtwL/IAABWwFmAWEB4AFRAX8BawH3 + Aw0BEQNIAYUBUwJVAa0EAAMSARkEAAMjATMDMQFNCAABVgFUAVkBvgGtAdsBnwH/Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/AU0BKQFYCf8BVQEzAWAJ/wFNASkBWAH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ + Aa0B2wGfAf8UAAFXAlYBuAFgAUQBKwH/AW4BVQE+Af8B4gHKAbAC/wH2AesC/wH2AesB/wHjAdYByQH/ + AWABRAErAf8cAAM3AVsDPgFrAUYBtwL/AwMBBAFNAaIB1AH6AVcBiwGtAfIBVwFaAVsBvQM9AWgcAAFL + AkwBkAMxAU4DBQEHAwABAQM6AWIBUQJSAaEBTQJOAZYDUgGpAyMBNAMAAQEMAAFWAVQBWQG+Aa0B2wGf + Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BggGJAYAB/wHpAeQB6g3/AZ0BiQGjAf8BqQHTAZwB/wGt + AdsBnwH/AU0BKQFYAf8BTQEpAVgB/wGtAdsBnwH/JAAB+wH6AfkB/wGTAXQBXwL/AfYB6wL/AfYB6wL/ + AfYB6wH/AwYBCBgAAUYBtwL/BAABUgGOAbYB9AFGAbcC/wFGAbcC/wFQAlIBoyQAA0ABcAMmATkDBAEG + AUgBdAFiAfYBUAJRAZ8BWQFqAWUB5QMCAQMDIgEyAVoBYgFhAdwMAAFWAVQBWQG+Aa0B2wGfAf8BrQHb + AZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wFkAVUBaQH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/ + A3YB/wGtAdsBnwH/Aa0B2wGfAf8BbQFMAfAB/wFtAUwB8AH/Aa0B2wGfAf8wAAH/AfYB6wL/AfYB6wL/ + AfYB6wH/AewB4QHUAf8UAAMKAQ4BRgG3Av8DNQFWFAABrgGkAZAB/xAAAzgBXAgAA0IBdAMxAU8BVgFq + AWQB5wFTAlUBsAFHAXoBXQH4EAADOAFcBAABVgFUAVkBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGt AdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf - Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/xQA - Af8B9gHrAf9wAAMjATMBTgFQAU4BmQM4AVwcAAFOAVABTgGZAU4BUAFOAZkIAAFUAUEBWwG+Aa0B2wGf - Af8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/AWoBXgFuAf8BUAEsAVsB/wF3 - AXYBeAH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/EAAB/wH2 - AesB/wMGAQgEAAMMARAoAAFLAUMBMwH/AdQBuAEAAf8B1AG4AQAB/wFLAUMBMwH/AUsBQwEzAf8BSwFD - ATMB/wFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AdQBuAEAAf8B1AG4AQAB/wFLAUMBMwH/ - DAABTgFQAU4BmSwAAU4BUAFOAZkEAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGf - Af8BrQHbAZ8B/wFQASwBWw3/AVABLAFbAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGt - AdsBnwH/DAAB/wH2AesB/wFjAUcBLgH/CAAB/wH2AesB/ygAAUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/ - AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AfQB2wEAAf8B/gHkAQAB/wFLAUMBMwH/AUsBQwEzAf8BSwFD - ATMB/wHUAbgBAAH/AUsBQwEzAf8MAAFOAVABTgGZCAADCwEPA0IBdAQAAU4BdgFmAfABUAJRAZ8EAAFO - Ak8BlwgAAU4BUAFOAZkEAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEs - AVsV/wFQASwBWwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAG0AaEBkAL/AfYB6wH/ - CAABXQFZAVcBzwH/AfYB6wH/KAABSwFDATMB/wFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwL/ - AeUBAAH/AVsBUgEuAv8B5QEAAv8B5QEAAf8BqwGZARYB/wFLAUMBMwH/AdQBuAEAAf8BSwFDATMB/xgA - AygBPQFVAVcBVgGxAyQBNQgAAVMBcgFkAecDCAELAU8BUQFQAZsMAAFUAUEBWwG+Aa0B2wGfAf8BrQHb - AZ8B/wGtAdsBnwH/Aa0B2wGfAf8BXgE9AWgF/wFQASwBWwH/AVABLAFbAf8BVAEwAV4F/wFSAS4BXQH/ - Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wL/AfYB6wH/AXYBXAFFAf8BbQFS - AToB/wHiAcoBsAH/AYUBZwFRAf8oAAFLAUMBMwH/AUsBQwEzAf8BSwFDATMB/wFLAUMBMwH/AdIBvQEK - Af8BYgFYASwC/wHlAQAB/wFLAUMBMwL/AeUBAAH/AcIBrgEPAf8BSwFDATMB/wFLAUMBMwH/AUsBQwEz - Af8YAAFIAkkBiAMVAR0BSwF6AWcB8gFTAVcBVQGtBAADCAELFAABVAFBAVsBvgGtAdsBnwH/Aa0B2wGf - Af8BrQHbAZ8B/wGtAdsBnwn/AYQBjQGBAf8BrQHbAZ8B/wFUATQBXgn/Aa0B2wGfAf8BrQHbAZ8B/wGt - AdsBnwH/Aa0B2wGfAf8IAAH/AfYB6wH/AW0BUgE6Av8B9gHrAv8B9gHrAf8BkwF6AWgB/wGOAXMBYAH/ - AagBjwFwAf80AAFJAbcC/wFMAU0BTgGQAywBRAFJAbcC/wQAAUkBtwL/UAABVAFBAVsBvgGtAdsBnwH/ - Aa0B2wGfAf8BrQHbAZ8B/wGoAdIBnAn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/Aa0B2wGfAf8BrQHb - AZ8B/wGtAdsBnwH/Aa0B2wGfAf8EAAFtAVIBOgH/BAACTAFLAY8BywGyAZkB/wH7AfEB5QL/AfYB6wH/ - AfsB8QHlBf8B2wHCAagB/wFjAUcBLgH/LAABSQG3Av8BSQG3Av8DQAFvAyEBMAFJAbcC/wMiATIcAAFO - AVABTgGZAU4BUAFOAZkDSgGLBAADSAGGA0gBhQFIAkkBhwFLAUwBSwGOAUwCTQGRA0gBhQFLAUwBSwGO - CAABVAFBAVsBvgGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwn/AVABLAFbAf8BrQHbAZ8B/wFQ - ASwBWwn/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8MAAHiAcoBsAH/BAABZAFWAU0B5wF1 - AVwBRQH/AYABYgFLAv8B9gHrAf8BdwFeAUcF/wM7AWQgAAFRAZ4B0gH1BAABSQG3Av8BSQGzAfMB/QME - AQYDLAFEAkcBSAGCAUkBtwL/IAABVwFuAWQB4AFPAYIBawH3Aw0BEQNIAYUBUwFXAVUBrQQAAxIBGQQA - AyMBMwMxAU0IAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEsAVsJ/wFY - ATYBYwn/AVABLAFbAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/xQAAVcCVgG4AWMBRwEu - Af8BcQFYAUEB/wHiAcoBsAL/AfYB6wL/AfYB6wH/AeMB1gHJAf8BYwFHAS4B/xwAAzcBWwM+AWsBSQG3 - Av8DAwEEAU0BqQHjAfoBUwGbAckB8gFXAWIBaAG9Az0BaBwAAUsCTAGQAzEBTgMFAQcDAAEBAzoBYgFR - AlIBoQFNAk4BlgFSAVUBUwGpAyMBNAMAAQEMAAFUAUEBWwG+Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ - Aa0B2wGfAf8BggGJAYAB/wHpAeQB6g3/AZ0BiQGjAf8BqQHTAZwB/wGtAdsBnwH/AVABLAFbAf8BUAEs - AVsB/wGtAdsBnwH/JAAB+wH6AfkB/wGTAXcBYgL/AfYB6wL/AfYB6wL/AfYB6wH/AwYBCBgAAUkBtwL/ - BAABUgGcAc8B9AFJAbcC/wFJAbcC/wFQAVUBVgGjJAADQAFwAyYBOQMEAQYBSAF6AWIB9gFQAlEBnwFW - AXMBZQHlAwIBAwMiATIBVgFsAWEB3AwAAVQBQQFbAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHb - AZ8B/wGtAdsBnwH/AWcBWAFsAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8DeQH/Aa0B2wGfAf8BrQHb - AZ8B/wFwAU8B8AH/AXABTwHwAf8BrQHbAZ8B/zAAAf8B9gHrAv8B9gHrAv8B9gHrAf8B7AHhAdQB/xQA - AwoBDgFJAbcC/wM1AVYUAAGuAaQBkAH/EAADOAFcCAADQgF0AzEBTwFTAXIBZAHnAVMBVgFVAbABRwF9 - AWMB+BAAAzgBXAQAAVQBQQFbAb4BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/ - Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BrQHbAZ8B/wGtAdsBnwH/Aa0B2wGfAf8BUAEs - AVsB/wFQASwBWwH/Aa0B2wGfAf80AANAAXAB/wH2AesB/wHxAeYB2gH/HAADPwFtAU0BmgHMAfMCSQFK - AYgMAAGuAaQBkAH/EAABTgFQAU4BmQwAAUsCTAGQAVkBaQFgAdcBUgFWAVQBqgFHAYIBYQH7AxwBKAwA - AU4BUAFOAZkIAAFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQ - ASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFb - Af8BUAEsAVsB/0wAAa4BpAGQAf8BrgGkAZAB/xwAAa4BpAGQAf8BrgGkAZAB/xAAAUcBfQFjAfgBTgFQ - AU4BmQM4AVwcAAFOAVABTgGZAU4BUAFOAZkDIgExFAABUAEsAVsB/wGJAcoB/QH/AYkBygH9Af8BiQHK - Af0B/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AVABLAFbAf/cAAFQASwBWwH/AYkBygH9 - Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BUAEsAVsB/9wA - ASABHwEhASwBUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEsAVsB/wFQASwBWwH/AVABLAFbAf8BUAEs - AVsB/wMGAQj/AJEAAzIBUFAAASMB+gEUAf8BIwH6ARQB/wQAASMB+gEUAf8BIwH6ARQB/xgAAagBVQED - Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo - AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/GAADUAGe - AdsBlgELAf8B2wGWAQsB/wHbAZYBCwH/AwABARwAAzIBUAEiAfoBEwH/QAADUQGgAxIBGAgAAzIBUAgA - AT4BPwE+AWwDIQEwDAABewFkAUwB7wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8BrQHbAZ8B/wFNASkBWAH/AU0BKQFYAf8BrQHbAZ8B/zQAA0ABcAH/AfYB6wH/AfEB5gHaAf8cAAM/ + AW0BTQGMAbAB8wNJAYgMAAGuAaQBkAH/EAADTgGZDAABSwJMAZABWQFhAV0B1wNTAaoBRwF/AV8B+wMc + ASgMAANOAZkIAAFNASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFN + ASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AU0BKQFY + Af8BTQEpAVgB/0wAAa4BpAGQAf8BrgGkAZAB/xwAAa4BpAGQAf8BrgGkAZAB/xAAAUcBegFdAfgDTgGZ + AzgBXBwAA04BmQNOAZkDIgExFAABTQEpAVgB/wGJAcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/ + AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AU0BKQFYAf/cAAFNASkBWAH/AYkBygH9Af8BiQHKAf0B/wGJ + AcoB/QH/AYkBygH9Af8BiQHKAf0B/wGJAcoB/QH/AYkBygH9Af8BTQEpAVgB/9wAAx8BLAFNASkBWAH/ + AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AU0BKQFYAf8BTQEpAVgB/wFNASkBWAH/AwYBCP8AkQADMgFQ + UAABIAH6AREB/wEgAfoBEQH/BAABIAH6AREB/wEgAfoBEQH/GAABqAFSAQAB/wGoAVIBAAH/AagBUgEA + Af8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGo + AVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8YAANQAZ4B2wGWAQgB/wHbAZYBCAH/ + AdsBlgEIAf8DAAEBHAADMgFQAR8B+gEQAf9AAANRAaADEgEYCAADMgFQCAABPgE/AT4BbAMhATAMAAFw + AWIBTwHvAUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/xQAAdsBlgELAf8UAAHbAZYBCwH/IAABIgH6ARMB/zgAAVgBbAFW - Ac8kAAMhATAIAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wHhAb0BigH/EAABxgGWARkB/UAAASIB+gETAf9cAAM7AWQIAAF7AWQBTAHvAeEBvQGK - Af8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHh - Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/EAADNgFZ - HAAB2wGWAQsB/yQAASIB+gETAf8sAAEjAfoBFAH/LAABIwH6ARQB/wQAAXsBZAFMAe8B4QG9AYoB/wH6 - AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFSASkBEAH/AUwBIwEK - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8wAAM1AVcoAAEi - AfoBEwH/KAABIwH6ARQB/ywAASMB+gEUAf8EAAF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AUwBIwEKAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHr - AdIB/wH6AesB0gH/AeEBvQGKAf8BcAFNATQB/wH6AesB0gH/IAAB2wGWAQsB/zwAASIB+gETAf8gAAMy - AVAsAAMyAVAIAAF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEK - Af8B+gHrAdIB/wH6AesB0gH/IAAB2wGWAQsB/0AAASIB+gETAf8gAAEjAfoBFAH/LAABIwH6ARQB/wQA - AXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8QAAHbAZYBCwH/DAAB2wGWAQsB/xAAAZQBdwE6AfAwAAEiAfoBEwH/HAABIwH6ARQB/ywA - ASMB+gEUAf8EAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHpAcwBoQH/AUwBIwEKAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHnAc4B/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/FAACTAFLAZAIAAHbAZYBCwH/SAABIgH6ARMB/0QAAxIBGAgAAXsBZAFM + AesB0gH/FAAB2wGWAQgB/xQAAdsBlgEIAf8gAAEfAfoBEAH/OAABWQFhAVkBzyQAAyEBMAgAAXABYgFP + Ae8B4QG9AYoB/wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGK + Af8QAAG+AZYBHAH9QAABHwH6ARAB/1wAAzsBZAgAAXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AUkBIAEH + Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8QAAM2AVkcAAHbAZYBCAH/JAABHwH6 + ARAB/ywAASAB+gERAf8sAAEgAfoBEQH/BAABcAFiAU8B7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wFJ + ASABBwH/AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AU8BJgENAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8B+gHrAdIB/zAAAzUBVygAAR8B+gEQAf8oAAEgAfoBEQH/ + LAABIAH6AREB/wQAAXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/ + AeEBvQGKAf8BSQEgAQcB/wH6AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9 + AYoB/wFtAUoBMQH/AfoB6wHSAf8gAAHbAZYBCAH/PAABHwH6ARAB/yAAAzIBUCwAAzIBUAgAAXABYgFP Ae8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8YAAHbAZYBCwH/BAAB2wGWAQsB/wwAAdsBlgELAf88AAEiAfoBEwH/GAABIwH6ARQB/yQAAVIBVQFS - AagMAAGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ - AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV - AQMB/ygAAdsBlgELAf8DQAFwRAABIgH6ARMB/xgAASMB+gEUAf8cAAFXAWEBVgHHwAADMgFQIAABIwH6 - ARQB/wEjAfoBFAH/BAABIwH6ARQB/wEjAfoBFAH/zAADMgFQJAADMgFQ/wD/AP8APwAB2wGWAQkB/wHb - AZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8MAAGoAVUBAwH/AagBVQEDAf8BqAFV - AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ - AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wQAAagBVQEDAf8BqAFVAQMB/wGo - AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQED - Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/BAABqAFVAQMB/wGoAVUBAwH/ - AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV - AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8MAAFmAWEBVgHfEAAB2wGW - AQkB/xAAAloBWAHACAABewFkAUwB7wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHS + Af8gAAHbAZYBCAH/QAABHwH6ARAB/yAAASAB+gERAf8sAAEgAfoBEQH/BAABcAFiAU8B7wHhAb0BigH/ + AUkBIAEHAf8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AdoBtgGEAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/xAAAdsBlgEI + Af8MAAHbAZYBCAH/EAABhAFsAUIB8DAAAR8B+gEQAf8cAAEgAfoBEQH/LAABIAH6AREB/wQAAXABYgFP + Ae8B4QG9AYoB/wFJASABBwH/AekBzAGhAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2AecBzgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8UAAJMAUsBkAgAAdsBlgEIAf9IAAEfAfoBEAH/RAADEgEYCAABcAFiAU8B7wHhAb0BigH/AfoB6wHS Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHS + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/xgAAdsBlgEIAf8EAAHb + AZYBCAH/DAAB2wGWAQgB/zwAAR8B+gEQAf8YAAEgAfoBEQH/JAABUgFTAVIBqAwAAagBUgEAAf8BqAFS + AQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/ + AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/KAAB2wGWAQgB/wNA + AXBEAAEfAfoBEAH/GAABIAH6AREB/xwAAVkBWwFZAcfAAAMyAVAgAAEgAfoBEQH/ASAB+gERAf8EAAEg + AfoBEQH/ASAB+gERAf/MAAMyAVAkAAMyAVD/AP8A/wA/AAHbAZYBBgH/AdsBlgEGAf8B2wGWAQYB/wHb + AZYBBgH/AdsBlgEGAf8B2wGWAQYB/wwAAagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFS + AQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/ + AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/BAABqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGo + AVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEA + Af8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8EAAGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/ + AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFS + AQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wwAAWEBXgFXAd8QAAHbAZYBBgH/EAACWgFYAcAIAAFw + AWIBTwHvAUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFMAe8BTAEjAQoB/wHhAb0BigH/AfoB6wHS + AesB0gH/AXABYgFPAe8BSQEgAQcB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJ - Af8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wgAAXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/ - AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BewFkAUwB7wHhAb0BigH/ - AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wF7AWQBTAHv - AeEBvQGKAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/ - DAADKgFAMAABewFkAUwB7wHhAb0BigH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8BTAEjAQoB/wF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AUwBIwEKAf8B4QG9 - AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJAf8B2wGW - AQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wgAAXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHS - Af8BTAEjAQoB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFSASkBEAH/AUwBIwEKAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/AfoB6wHS - Af8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AVIBKQEQAf8BTAEjAQoB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGK - Af8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BUgEpARAB/wFM - ASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/DAADKgFA - BAAB2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/xAAAloBWAHACAABewFkAUwB7wHhAb0BigH/ - AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8B5wHV - AbwB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AXABTQE0Af8B+gHrAdIB/wF7AWQBTAHv - AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wHhAb0BigH/AUwBIwEKAf8B+gHr - AdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BcAFNATQB/wH6AesB0gH/ - AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AeEBvQGKAf8BTAEj - AQoB/wH6AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFwAU0BNAH/ - AfoB6wHSAf8MAAMqAUAQAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8B2wGW - AQkB/wgAAXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8BTAEjAQoB/wH6 - AesB0gH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wFM - ASMBCgH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6 - AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/DAADKgFAMAABewFkAUwB7wHhAb0BigH/AUwBIwEK - Af8B+gHrAdIB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AdoBtgGEAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHvAeEBvQGK - Af8BTAEjAQoB/wH6AesB0gH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B2gG2AYQB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFM - Ae8B4QG9AYoB/wFMASMBCgH/AfoB6wHSAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 - AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS - Af8IAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/CAAB2wGWAQkB/wHbAZYBCQH/AdsBlgEJ - Af8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8IAAF7AWQBTAHvAeEBvQGKAf8BTAEjAQoB/wHpAcwBoQH/ - AUwBIwEKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHn - Ac4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXsBZAFMAe8B4QG9AYoB/wFMASMBCgH/ - AekBzAGhAf8BTAEjAQoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH2AecBzgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BewFkAUwB7wHhAb0BigH/ - AUwBIwEKAf8B6QHMAaEB/wFMASMBCgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfYB5wHOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEJ - Af8IAAJaAVgBwAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/xAAAloBWAHACAABewFkAUwB7wHhAb0BigH/ + AesB0gH/AfoB6wHSAf8BcAFiAU8B7wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wwAAyoBQBAAAdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/AdsBlgEG + Af8B2wGWAQYB/wHbAZYBBgH/CAABcAFiAU8B7wHhAb0BigH/AUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/ AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wF7AWQBTAHv + AdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFwAWIBTwHvAeEBvQGKAf8BSQEgAQcB/wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AXABYgFPAe8B4QG9AYoB/wFJASABBwH/ AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AXsBZAFMAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr - AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ - AfoB6wHSAf8IAAHbAZYBCQH/AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/CAAB2wGWAQkB/wHbAZYBCQH/ - AdsBlgEJAf8B2wGWAQkB/wHbAZYBCQH/AdsBlgEJAf8MAAGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo - AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQED - Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wQAAagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/ - AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFV - AQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/BAABqAFVAQMB/wGoAVUBAwH/AagBVQED - Af8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf8BqAFVAQMB/wGo - AVUBAwH/AagBVQEDAf8BqAFVAQMB/wGoAVUBAwH/AagBVQEDAf//AP8A/wADAAFCAU0BPgcAAT4DAAEo - AwABQAMAAUADAAEBAQABAQYAAQIWAAP/gQAG/wIAAfsD/wHHAfMCAAHyAf8BwAEBAd8B/QIAAeYB/wHA - AQEB2QEtAgABzAH/AcABAQH4AccCAAHAAf8BwAEBAfgBXwIAAcABfwH8AS8C/wIAAaABHwH8AQ8B4gED - AgAB6AEPAfQBDwHwAVMCAAH4AQcB8AEPAeABBwIAAf8BgQH6AR8B8AEHAgAB/wHwAfgB+wHYAT0CAAH/ - AfgB/gE7AdwBHQGAAQAC/wHnAfMBxwHxAfABBwb/AfABBwb/AfABBwz/Ab8B/wH8AZ8BgAEAAfwBHwHP - Af8B8wFnAgAB+wHvAfcB/wHvAfsCAAH3Af8B+wL/AfsCAAL3Af0B/wHfAf0CAAH/AfcB/gH/Ad8B/QIA - Af8BfwH/AX8BvwH7AgAB/wF/Af8BvwHfAf0CAAH3AXsB/wLfAf0CAAH7AX8B/wHvAf8B+wIAAf0BdwH/ - AfcB7wH7AYABAAH/Ac8B/wH7AvcF/wH7AfwBnwX/Af0B/wF/Gf8BAwGAAQABgAEAAYABAAHvAXsGAAHv - AQMGAAHvAf8GAAHvAQMGAAHoAXsGAAHvAQMGAAHvAf8GAAHDAQMGAAHYAXsGAAHDAQMBgAEAAYABAAGA - AQAY/ws= + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8MAAMqAUAwAAFwAWIBTwHv + AeEBvQGKAf8B+gHrAdIB/wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BSQEg + AQcB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/ + AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wFJASABBwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AUkBIAEHAf8BcAFiAU8B7wHhAb0BigH/AfoB6wHSAf8BSQEgAQcB/wHhAb0BigH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AUkBIAEHAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8BSQEgAQcB/wwAAyoBQBAAAdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/AdsBlgEGAf8B2wGW + AQYB/wHbAZYBBgH/CAABcAFiAU8B7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AeEBvQGK + Af8B+gHrAdIB/wHdAbkBhwH/AU8BJgENAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AUkBIAEHAf8B+gHrAdIB/wFwAWIBTwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AUkBIAEH + Af8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BTwEmAQ0B/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6AesB0gH/AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHS + Af8BSQEgAQcB/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFPASYBDQH/AUkBIAEHAf8B+gHrAdIB/wH6 + AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8MAAMqAUAEAAHbAZYBBgH/AdsBlgEG + Af8B2wGWAQYB/wHbAZYBBgH/EAACWgFYAcAIAAFwAWIBTwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8BSQEgAQcB/wHhAb0BigH/AUkBIAEHAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHr + AdIB/wH6AesB0gH/AeEBvQGKAf8BbQFKATEB/wH6AesB0gH/AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AeEBvQGKAf8BSQEgAQcB/wH6AesB0gH/AecB1QG8Af8B4QG9 + AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wFtAUoBMQH/AfoB6wHSAf8BcAFiAU8B7wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8B4QG9AYoB/wFJASABBwH/AfoB6wHSAf8B5wHV + AbwB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AW0BSgExAf8B+gHrAdIB/wwAAyoBQBAA + AdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/AdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/CAABcAFiAU8B7wHh + Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wFw + AWIBTwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8B+gHrAdIB/wH6AesB0gH/AUkBIAEHAf8B+gHrAdIB/wH6 + AesB0gH/AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8BSQEgAQcB/wH6 + AesB0gH/AfoB6wHSAf8MAAMqAUAwAAFwAWIBTwHvAeEBvQGKAf8BSQEgAQcB/wH6AesB0gH/AUkBIAEH + Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B2gG2AYQB/wFJ + ASABBwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXABYgFPAe8B4QG9AYoB/wFJASABBwH/AfoB6wHS + Af8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHa + AbYBhAH/AUkBIAEHAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BcAFiAU8B7wHhAb0BigH/AUkBIAEH + Af8B+gHrAdIB/wFJASABBwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6 + AesB0gH/AdoBtgGEAf8BSQEgAQcB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEGAf8B2wGW + AQYB/wHbAZYBBgH/AdsBlgEGAf8IAAHbAZYBBgH/AdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/AdsBlgEG + Af8B2wGWAQYB/wgAAXABYgFPAe8B4QG9AYoB/wFJASABBwH/AekBzAGhAf8BSQEgAQcB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2AecBzgH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8BcAFiAU8B7wHhAb0BigH/AUkBIAEHAf8B6QHMAaEB/wFJASABBwH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfYB5wHOAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFwAWIBTwHvAeEBvQGKAf8BSQEgAQcB/wHpAcwBoQH/ + AUkBIAEHAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHn + Ac4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/CAAB2wGWAQYB/wgAAloBWAHAAdsBlgEG + Af8B2wGWAQYB/wHbAZYBBgH/EAACWgFYAcAIAAFwAWIBTwHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AXABYgFPAe8B4QG9AYoB/wH6AesB0gH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BcAFiAU8B7wHhAb0BigH/ + AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr + AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEG + Af8B2wGWAQYB/wHbAZYBBgH/AdsBlgEGAf8IAAHbAZYBBgH/AdsBlgEGAf8B2wGWAQYB/wHbAZYBBgH/ + AdsBlgEGAf8B2wGWAQYB/wwAAagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGo + AVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEA + Af8BqAFSAQAB/wGoAVIBAAH/BAABqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/ + AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFS + AQAB/wGoAVIBAAH/AagBUgEAAf8EAAGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEA + Af8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGoAVIBAAH/AagBUgEAAf8BqAFSAQAB/wGo + AVIBAAH/AagBUgEAAf8BqAFSAQAB//8A/wD/AAMAAUIBTQE+BwABPgMAASgDAAFAAwABQAMAAQEBAAEB + BgABAhYAA/8BAAT/BAAC/wH3Af8EAAHAAQMB+AEPBAABzwH7AfABAwQAAc8B+wHgAQMEAAHMAZsBwAED + BAAByQHLAcABAwQAAckBywHAAQMEAAHMAZsBwAEDBAABzwH7AeABAwQAAc8B+wHgAQMEAAHAAQMB8AEF + BAABwAEDAfgBCwQAAeABAwH+ATMEAAT/BAAE/wQABv8CAAH7A/8BxwHzAgAB8gH/AcABAQHfAf0CAAHm + Af8BwAEBAdkBLQIAAcwB/wHAAQEB+AHHAgABwAH/AcABAQH4AV8CAAHAAX8B/AEvAv8CAAGgAR8B/AEP + AeIBAwIAAegBDwH0AQ8B8AFTAgAB+AEHAfABDwHgAQcCAAH/AYEB+gEfAfABBwIAAf8B8AH4AfsB2AE9 + AgAB/wH4Af4BOwHcAR0BgAEAAv8B5wHzAccB8QHwAQcG/wHwAQcG/wHwAQcM/wG/Af8B/AGfAYABAAH8 + AR8BzwH/AfMBZwIAAfsB7wH3Af8B7wH7AgAB9wH/AfsC/wH7AgAC9wH9Af8B3wH9AgAB/wH3Af4B/wHf + Af0CAAH/AX8B/wF/Ab8B+wIAAf8BfwH/Ab8B3wH9AgAB9wF7Af8C3wH9AgAB+wF/Af8B7wH/AfsCAAH9 + AXcB/wH3Ae8B+wGAAQAB/wHPAf8B+wL3Bf8B+wH8AZ8F/wH9Af8Bfxn/AQMBgAEAAYABAAGAAQAB7wF7 + BgAB7wEDBgAB7wH/BgAB7wEDBgAB6AF7BgAB7wEDBgAB7wH/BgABwwEDBgAB2AF7BgABwwEDAYABAAGA + AQABgAEAGP8L diff --git a/ToolLib.VisionJob/OperateProject.cs b/ToolLib.VisionJob/OperateProject.cs index fe0ba08..3ca1f71 100644 --- a/ToolLib.VisionJob/OperateProject.cs +++ b/ToolLib.VisionJob/OperateProject.cs @@ -61,6 +61,8 @@ namespace ToolLib.VisionJob if(newAddJob) { VisionJobParams.pVisionProject.Project.Add(jobName, new VisionJob(jobName)); + FormJobManage.Instance.tabJobUnion.SelectedTab = newTab; + // newTab.Select(); } InitJob(VisionJobParams.pVisionProject.Project[jobName]); } diff --git a/ToolLib.VisionJob/ToolLib.VisionJob.csproj b/ToolLib.VisionJob/ToolLib.VisionJob.csproj index 48473b9..9a39c72 100644 --- a/ToolLib.VisionJob/ToolLib.VisionJob.csproj +++ b/ToolLib.VisionJob/ToolLib.VisionJob.csproj @@ -34,6 +34,14 @@ ..\VisionEdit\bin\Debug\ThirdLib\DevComponents.DotNetBar2.dll + + False + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + + + False + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.Common.dll + diff --git a/ToolLib.VisionJob/VisionJob.cs b/ToolLib.VisionJob/VisionJob.cs index a67f854..8e235cc 100644 --- a/ToolLib.VisionJob/VisionJob.cs +++ b/ToolLib.VisionJob/VisionJob.cs @@ -653,7 +653,7 @@ namespace ToolLib.VisionJob /// /// /// - private void DeleteItem(object sender, EventArgs e) + private void DeleteItemOld(object sender, EventArgs e) { try { @@ -755,7 +755,123 @@ namespace ToolLib.VisionJob //LogHelper.SaveErrorInfo(ex); } } - + + /// + /// 删除项 + /// + /// + /// + internal void DeleteItem(object sender, EventArgs e) + { + try + { + if (GetJobTree().SelectedNode == null) + return; + isDrawing = true; + string nodeText = GetJobTree().SelectedNode.Text.ToString(); + int level = GetJobTree().SelectedNode.Level; + string fatherNodeText = string.Empty; + + //如果是子节点 + if (level == 1) + { + fatherNodeText = GetJobTree().SelectedNode.Parent.Text; + } + foreach (TreeNode toolNode in GetJobTree().Nodes) + { + if (level == 1) + { + if (toolNode.Text == fatherNodeText) + { + foreach (var itemNode in ((TreeNode)toolNode).Nodes) + { + if (itemNode != null) + { + if (((TreeNode)itemNode).Text == nodeText) + { + //移除连线集合中的这条连线 + for (int i = 0; i < D_itemAndSource.Count; i++) + { + if (((TreeNode)itemNode) == D_itemAndSource.Keys.ToArray()[i] || ((TreeNode)itemNode) == D_itemAndSource[D_itemAndSource.Keys.ToArray()[i]]) + D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[i]); + } + + ((TreeNode)itemNode).Remove(); + GetJobTree().SelectedNode = null; + } + } + } + } + } + else + { + if (((TreeNode)toolNode).Text == nodeText) + { + ((TreeNode)toolNode).Remove(); + break; + } + } + } + + //如果是父节点 + if (level == 0) + { + for (int i = 0; i < L_toolList.Count; i++) + { + if (L_toolList[i].toolName == nodeText) + { + try + { + //移除连线集合中的这条连线 + for (int j = D_itemAndSource.Count - 1; j >= 0; j--) + { + if (nodeText == D_itemAndSource.Keys.ToArray()[j].Parent.Text || nodeText == D_itemAndSource[D_itemAndSource.Keys.ToArray()[j]].Parent.Text) + D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[j]); + } + } + catch { } + + L_toolList.RemoveAt(i); + } + } + } + else + { + for (int i = 0; i < L_toolList.Count; i++) + { + if (L_toolList[i].toolName == fatherNodeText) + { + for (int j = 0; j < L_toolList[i].toolInput.Count; j++) + { + if (L_toolList[i].toolInput[j].value.ToString() == string.Empty) //未连接源 + { + if (string.Format("<--{0}", L_toolList[i].toolInput[j].IOName) == nodeText) + L_toolList[i].RemoveInputIO(nodeText); + } + else //已连接源 + { + if (string.Format("<--{0}{1}", L_toolList[i].toolInput[j].IOName, L_toolList[i].toolInput[j].value.ToString()) == nodeText) + L_toolList[i].RemoveInputIO(nodeText); + } + } + for (int j = 0; j < L_toolList[i].toolOutput.Count; j++) + { + if (L_toolList[i].toolOutput[j].IOName == nodeText.Substring(3)) + L_toolList[i].RemoveOutputIO(nodeText.Substring(3)); + } + } + } + } + + isDrawing = false; + DrawLine(); + } + catch (Exception ex) + { + // Log.SaveError(ex); + } + } + public void Run() { diff --git a/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj b/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj index c10219c..492e6e3 100644 --- a/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj +++ b/ToolLib.VisionToolList/ToolLib.VisionToolList.csproj @@ -54,6 +54,10 @@ {1C8D0DDC-2086-48A9-9586-F2B643E2FC54} CommonHelper + + {46ee89bb-5ec9-4ead-9e32-3e57288a0bf7} + EyeHandCalibTool + {3d2739db-5618-49bf-bf5c-5cccd6a55c64} FindCircleTool @@ -66,10 +70,18 @@ {F5669FB7-77EC-44B9-898B-6D575B7D26EA} HalconTool + + {6112406a-a986-4a68-9d22-f0d7f0f81e02} + HDevEngineTool + {C1C08195-2EC8-42E9-93BB-D5331E6C6687} PMAlignTool + + {1c61f57d-1a36-4a98-b7dd-a65f2dbbe468} + SDKCameraTool +