1、添加手眼标定工具,可选择4点或者9点标定,输出标定矩阵

2、修正Halcon引擎运行工具
3、添加相机SDK工具,但需完善
4、HalconTool取图工具增加选择文件夹功能
5、实现Job窗体可添加多个流程
This commit is contained in:
liu.wenjie
2022-04-21 14:10:04 +08:00
parent 9eb84c6265
commit 7ca84a8720
54 changed files with 5628 additions and 593 deletions

Binary file not shown.

View File

@@ -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;

View File

@@ -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

View File

@@ -7,7 +7,7 @@ using HalconDotNet;
namespace DataStruct
{
public class DataStruct
public class DataStructClass
{
/// <summary>
/// XYU结果

View File

@@ -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
{
/// <summary>
/// 仿射变换矩阵
/// </summary>
public HTuple homMat2D = new HTuple();
/// <summary>
/// 标定类型 四点标定|九点标定
/// </summary>
public CalibType calibType = CalibType.Four_Point;
/// <summary>
/// 标定表源数据
/// </summary>
public DataTable CalibSourceDataTable { get; set; } = null;
/// <summary>
/// 输入点信息
/// </summary>
public Point inputPoint = new Point();
/// <summary>
/// 输出点信息
/// </summary>
public Point outputPoint = new Point();
/// <summary>
/// 矩阵名称
/// </summary>
public string homMat2DName { get; set; } = Guid.NewGuid().ToString();
/// <summary>
/// X平移
/// </summary>
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;
}
}
/// <summary>
/// Y平移
/// </summary>
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;
}
}
/// <summary>
/// X缩放
/// </summary>
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;
}
}
/// <summary>
/// Y缩放
/// </summary>
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;
}
}
/// <summary>
/// 角度旋转
/// </summary>
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;
}
}
/// <summary>
/// 轴斜切
/// </summary>
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;
}
}
/// <summary>
/// 初始化标定数据源
/// </summary>
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);
}
}
/// <summary>
/// 导入标定数据
/// </summary>
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;
}
}
}
/// <summary>
/// 导出标定数据
/// </summary>
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 <CalibSourceDataTable.Rows.Count; i++)
{
for (int j = 0; j < 4; j++)
{
data += CalibSourceDataTable.Rows[i][j];
if (j < 3)
data += ",";
}
data += Environment.NewLine;
}
File.AppendAllText(dig_saveImage.FileName, data, Encoding.Default);
}
}
catch (Exception ex)
{
Logger.LoggerClass.WriteLog("导出标定数据时出错", ex);
}
}
public bool ManulCalib()
{
try
{
List<double> pixelRowList = new List<double>();
List<double> pixelColList = new List<double>();
List<double> MechanicalXList = new List<double>();
List<double> MechanicalYList = new List<double>();
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;
}
}
}
/// <summary>
/// 标定类型 四点|九点
/// </summary>
[Serializable]
public enum CalibType
{
Four_Point = 4,
Nine_Point = 9,
}
}

View File

@@ -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<IToolInfo> L_toolList)
{
// throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>EyeHandCalibTool</RootNamespace>
<AssemblyName>EyeHandCalibTool</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="halcondotnet">
<HintPath>C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll</HintPath>
</Reference>
<Reference Include="SunnyUI">
<HintPath>..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="EyeHandCalib.cs" />
<Compile Include="EyeHandCalibRun.cs" />
<Compile Include="FormEyeHandCalib.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormEyeHandCalib.Designer.cs">
<DependentUpon>FormEyeHandCalib.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="FormEyeHandCalib.resx">
<DependentUpon>FormEyeHandCalib.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CommonMethods\CommonHelper.csproj">
<Project>{1c8d0ddc-2086-48a9-9586-f2b643e2fc54}</Project>
<Name>CommonHelper</Name>
</ProjectReference>
<ProjectReference Include="..\DataStruct\DataStruct.csproj">
<Project>{df3d4d4c-02df-4f92-9fd4-0a861f64b0ef}</Project>
<Name>DataStruct</Name>
</ProjectReference>
<ProjectReference Include="..\ImageWindow\HWindow_Tool.csproj">
<Project>{9baa53fd-89b5-43e2-ac59-a27b006debb6}</Project>
<Name>HWindow_Tool</Name>
</ProjectReference>
<ProjectReference Include="..\ToolBase\ToolBase.csproj">
<Project>{7cd50b44-bf56-4e8e-8fa1-05f6968c1835}</Project>
<Name>ToolBase</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.Log\Logger\Logger.csproj">
<Project>{d4e052b9-e541-4b67-a1f9-273073ef1d4b}</Project>
<Name>Logger</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,609 @@
namespace EyeHandCalibTool
{
partial class FormEyeHandCalib
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@@ -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();
}
}
/// <summary>
/// 窗体对象实例
/// </summary>
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("仿射矩阵已经保存成功!");
}
}
/// <summary>
/// 设定工具运行状态
/// </summary>`
/// <param name="msg">运行中的信息</param>
/// <param name="status">运行状态</param>
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);
}
}
}

View File

@@ -0,0 +1,384 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>40, 19</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tsbtRunTool.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>150, 19</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
</root>

View File

@@ -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")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace EyeHandCalibTool.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 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() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[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;
}
}
/// <summary>
/// 使用此强类型资源类,为所有资源查找
/// 重写当前线程的 CurrentUICulture 属性。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -1,6 +1,6 @@
using System;
using HalconDotNet;
using static DataStruct.DataStruct;
using static DataStruct.DataStructClass;
using ToolBase;
using CommonMethods;
using ViewROI;

View File

@@ -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
/// <summary>
/// 输入姿态
/// </summary>
public PosXYU inputPose = new PosXYU();
/// <summary>
/// 输入姿态
/// </summary>
public HTuple inputPoseHomMat2D = new HTuple();
/// <summary>
/// 位置修正姿态
/// </summary>
public HTuple changePoseHomMat2D = new HTuple();
/// <summary>
/// 制作模板时的位姿
/// </summary>
public PosXYU templatePose = new PosXYU();
/// <summary>
/// 修改的位姿
/// </summary>
public HTuple changedPose = new HTuple();

View File

@@ -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
{

46
FormLib/FormInputInfo.Designer.cs generated Normal file
View File

@@ -0,0 +1,46 @@
namespace FormLib
{
partial class FormInputInfo
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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
}
}

21
FormLib/FormInputInfo.cs Normal file
View File

@@ -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();
}
}
}

120
FormLib/FormInputInfo.resx Normal file
View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -37,6 +37,14 @@
<Reference Include="halcondotnet">
<HintPath>C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll</HintPath>
</Reference>
<Reference Include="SunnyUI, Version=3.0.9.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll</HintPath>
</Reference>
<Reference Include="SunnyUI.Common, Version=3.0.9.0, Culture=neutral, PublicKeyToken=5a271fb7ba597231, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.Common.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
@@ -64,15 +72,33 @@
<Compile Include="FormLog.Designer.cs">
<DependentUpon>FormLog.cs</DependentUpon>
</Compile>
<Compile Include="FormInputInfo.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormInputInfo.Designer.cs">
<DependentUpon>FormInputInfo.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ToolBaseForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ToolBaseForm.Designer.cs">
<DependentUpon>ToolBaseForm.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="FormImageWindow.cs.resx">
<DependentUpon>FormImageWindow.cs.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FormInputInfo.resx">
<DependentUpon>FormInputInfo.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="FormLog.resx">
<DependentUpon>FormLog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ToolBaseForm.resx">
<DependentUpon>ToolBaseForm.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CommonMethods\CommonHelper.csproj">

116
FormLib/ToolBaseForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,116 @@
namespace FormLib
{
partial class ToolBaseForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

20
FormLib/ToolBaseForm.cs Normal file
View File

@@ -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();
}
}
}

199
FormLib/ToolBaseForm.resx Normal file
View File

@@ -0,0 +1,199 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>1, 19</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tsbtRunTool.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>111, 19</value>
</metadata>
</root>

View File

@@ -0,0 +1,259 @@
namespace HDevEngineTool
{
partial class FormHDevEngineTool
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@@ -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();
}
}
/// <summary>
/// 窗体对象实例
/// </summary>
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();
}
}
}
}

View File

@@ -0,0 +1,265 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>225, 19</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tsbtRunTool.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA92SURBVHhe7V3BdeS4EZ0QHIJD8E1eX7y3cetihbAhOITJ
QCEohDlo5vnYISiEDWFCsOuDoNTqRpMgqwAChf/f+292Z9RoEqiP+gWA1BeCIAiCIAiC6Az//P7vv/zj
x+Pffvt5egIffjz+8ffXf/0HlP9/jnyRv/8uf57xZ/zvF/zbw+vpG4ifx2fl754eXr/+/vDfr3+NX0EQ
7QNCCIE7BTGC/vzw8+ub8NdvPx//V4yvj38GUc0ikmvAtcTLIoj6eBcDZvcaItjJmIkkC339PV46Qdij
F0Gscc40FAyhBjx+rBNglboUxBrfBcN6hshByBRSQ/ScJfYzLBD8EbuCICbM9kkC5GU8UaQZMgvFMjbm
mgKrQKkgIWdKkU8LNg5itjing4G8T/TZ6Sl2I+ENIWNIbZEefDKXoT6j/fIDCqMMKZSO8b5vQWEUJ4XS
GSiMY4g+x5mzOAxEa0DWCCsuXKo9mKdnjEUcFqIFIMVTGG2RtqsBeLJTEHgQuaN9GYwNbdcB6MVOxaBH
ERvOPGEfAaJG0IDYgFuzI/gZMPy8fHZqI7SF50U62c85PcfbIUoDgdLiLAshIBBwwBHXWNuHB+HAauLw
YYtZVcYM/RIvlyiB8EBQI1ljFgSCstWiFKIJ19iQYDCG8fIIK0RLJZYi3ek1OAlzOvHa40yIPsS1H92P
E0/neFmEFsdbqtMZs16rWWIv5mdd0vdcgbRcehxmqWTw4OVHGEAsAASxHDQJ0XLtwHGW6nQeeVaLq2SH
9Hu8BGIN0St/T3dkKY4tjGsEW1tZKFhIiF9P3ENNccxFN4VxH7WFApF4q/XMEAajgg+GMCBCCiMfqFNq
CQXjw7G5Qi1xMGPogL7DLJ/uWztSJBeI56mKrlShfY9LtUdhWiJO97UlERvxK8eEzOhPpcUBawCLEL+S
MEQN24XNzfh1YyGm62LikLbfhp+BKqCG7RpuHEuLQ2Y2PrRTGejz9FjYcJiaJKyIFCrIIbphU3IDgGVO
jYsFMbbuRYJZvaA43lhrHA+MQSnLFSZAr2McxPGz1OE4WqrWUMxyyQTrbqxxQyV2yGmp2sZ0tis9dhoi
Q8Wv8IFS4oDnjV9BNArUDanx09PJAccSm0oUR18otWrZ/VH5Eh2D9MpivD8Em12geO92j6REh1AcfaNQ
TPzqsmi3rjvQsV12BHED1A+pMd7PzuoR67qD4vAH60zSTT1iXne8Pv5JW+UPJexW8zvt1jcNoTV/08Ru
xHgxm0zRVtNOQ7yg2e4pbpancf0jHk2xE4nUvrHptmC5azp1GPc5RgFcQioO9rLJidVyZYLHR8aD6bEU
qVtjs23AdtWKbwIfFZYWvZlVLctCS9rhcu7gQAykYmMrEZNNrH6K6k2eS8YNccWKMJ1wjy7YTX0ji3Ii
wkVcRaUb7Xmw7iA+w6oeQTaKTdYFVppSF7SVEBnrDiIFqwm4esFumT2aXLMmmgCK7FTMbGX1LAJfl7qQ
7aS1IpZhZrVq7q1ZZA+omtaKWANixOJNONWyiFX26OZ48gJwDxR5eVjFXJUsIhdrcKTExwP3ch8vmJlY
R5UH9jTSsZTP4lnEQsmeAgoCeb+v19O3+NdEAZgV7CWziFH2cFOYXwoEFPFzybogEDuX/b2LpQ4yysXZ
ZA9HTwdeC+T9Hmm5iiAU7Ff9vY8FdtdTwbCdp5fYnAss9QktVxlInxss+xrHIZSLmTH9ZXnE570dRlyb
NGi57GGRRRCLpuMigaC3V60+CqnAmkBAWi575PT7Gk2LdYslNo9H2bcMFC2XHYyyiM0LsE3slcPsAWyd
yWi57GCSRSwWjCwep/VqMfYMEi2XDSyyiMlpDgkC1d6HWSprEJpZjJZLD+0ZLUxWsal9sHgdi+dA0KZ5
Wi4dUGin+nULVTYLwZ1qdAs9bQxew8QH03LthoXNwhjG5rZDba+cFuczLAQyk5ZrHwyy+D6bZaRO1y9i
sBQISMu1HYixVF9u4S6Xo/1iKNP7YFsLBKTl2g51sb5n01Bff/h/nLaEQGbScuUDsZbqw3zuqEP0jzn6
f89VSYGAtFx5QKyl+i+Xm+sQi/rD8+rVjNICAWm51lE9Xg0U6XZz8BI1BDKTlmsZMhaqFddNu+r6gR/j
dT41BQLSct2HtmbetCXB+iMPtQUC0nKlgZhL9VcuN9UhqQZyiS8aZZY7QiAzablugdhL9VUus+JWf/7K
xyt9cnCkQEBars9A7KX6KZdZzyxpU5V8fpjXiR4tEJCW6wPaOiSrUNc//zFG/QG0IJCZtFz6yT2rD7WD
PsL+x4yWBAKObrlw76l+yWXWSpYMusrHxWaGQGsCAUe3XJpCHZ+NzdyHZokXM1hsZgi0KJCZo1ouxGCq
P3K4KhDYo9QH8znOChbQskBABMtolkvGRHVwcbFEQGpOfSifY/1CnNYFAmJWHMlyaVeyFvtK+4zvrnP1
HaMHgcwcxXLJmKhWshaXernEuw09CQQcwXJpN7qLCmSkJV6gN4GA3i2Xeql3KdOq/RsF0g29Wi6tQGRM
79fR+Mf0h/I44IpJtwIBvVqu1L3mc+HxW+2Ax2aGQe8CAT1aLtxT6l5zuLibjn9MfSiXsZlh4EEgMz1Z
rjYF8lrod781DE8CAb1YLtxH6v7yuLDZjX9MfyiDFIgLerBcGoHgs7GZWxRr2Ck8CmRmz5ar2ERPgWyD
Z4GAGNMeLVcxgRRr2Cm8CwQUkXRnuYpN9BqBoCNjM8NgFIHIfXZ1hAiTdepecrgoEM0qFgXikadzj6cj
NALBPcdmbqEd8NjMMPAsEBTpvS75TlkvfV9rXNwHkQHnUZMN8CiQHi3VNVL3lc+Foybaw4oUSO/s01Jd
AjGYvrdcLhxW1Aok68VbjuBJID1bqktA4Kn7y+eCQLTPg1Ag/dGDpbqE9oGpxQ1SKVBUj9wuPo3lEP0L
pH9LdQ2IPX2veVyMYW3ji+pziJ4F4sVSXUPrgqCB2NQttAXO4hKZQ/QoEG+W6hraMVnNqJo15NGOm/Qn
EH+W6hqqRzaEq1lVBKI5xzLUbnpPAvFqqa5R7JjJjOIpyhF6EIh3S3UJgyXe9TeDYqZJfziPnl8pc432
BeLfUl0CsZfuh1xmvBkUs036w3kcaam3ZYGMYqkuod2mwOdjU/eh3mgZaCWrRYGMZKmuoS3Qs/pNvdQ7
UKHenkDGslTX0B1zl9jN7btqX9Q5WhLIiJbqEmrns2Vi1w78KHVICwIZ2VJdQruDvqk0MCh2hqhDjhfI
2JbqEtr6Axk4NrUO1iF5OFIgo1uqa6jLgq3bE9ovHOHo+xECoaW6RdX6Y4YMgurx2xHqkPoCoaVKQb25
vackwCyVaiyXI9ismgKhpboPibXd5wdB1NyxqXxo6xDQ+7GTGgKhpVqG1l6Bu7Oytg5BAMWmXKK8QGip
1qC1V4jx2NR2yADpfue0c5tVUiC0VOsILke7eqXZkpAAUNUh4C5/1wlKCISWKh8W8anu60MV2jjsBUJL
tQWIrXQ/5hGTkTpLy6CpbBboddAtBUJLtQ3oqynbpvszjxnPf6wh+Lxk41vos1i3EAgt1T6oi3Oh2Sqr
2mZJEHjMInqB0FLtgUX2kM/b/cInFNqpL9lCKD425wYagdBS7YdN9jCMRwubBcXH5txgj0BoqXQIsaje
n5NxsM7cejvh73zW9j6hpdLCJHuUWFk1sVnOssgWgdBS6WGWPUrtzVlcnKcskiMQWio7aJ8aDJQYLjZR
WWURLzZjXSC0VFZAUE+TTaqf82lanKdglOJc7K4vCYSWyhYmtYcIrPiYWGQR0MMThymB0FLZAxt6XWQP
wKpQQhuxyW5xKxBaqhJAv37u5+2skj1mWKQ7sNhqQiVcCoSWqgxMCnNhlewxI2SRxEVsJVTd84wLgdBS
lQPizMRaHRFnEhTqU75gzwU7MiAtVTmYxVjN7DHDSt0TOQMTn2FmrY50KVYrWuAI79Ei8oBYsJp8D8ke
l5AbUb1y5Z0OVrUIPab6Vr9qBSI2D184QfpKXdwe9lyPEDawqjvAZl47JTe1cuRiC1mPjAqrumOiweO0
Vghp0WLzMJL1yHgwrTukncOt1TUw86cudg9xg1w+HQfWE2yzJ8ZFJCbFVaB0WHOzAGGOIA7LuJG2YtPt
wbJgB7EKEZsmHALiwMJMauz3MDiP1t8HbWm1JjY8IxC7YS0OsFlrdQ3rG+fyrz/IxGe2nDuxoVWrHMAe
pW9kLzvrAOIubJdzhT3Wq9b1CMhM0jdiQW6aObqoO+5BOsO4HgFZk/SIKA7DDeWJ3dQd92Bdj4Bc3eoL
JQryiU7e+Wxfj0wi6c53DohS4nA1/iG9Gu6UzoT/5LGUdoGxKTXu7k5a4IZwY6kb1lJmKLe/xapXWL2J
5JpBHL0W5WsIM0ripm3IZeAWENyC+R7HxElwzk97Q/2pm7egdOAbDzkeh2kCtDxX9cEhxDGjpEhAWq76
QPCWsFQzhxtT893UG9Jy1UBJS/XBQceydMeGgo7ZpBiCEyiwSvWZg090Vm9pXCJrE1uEp/+KbPx95uFv
JGkFMksUOJKSIm2XBrOdKllrgMz8CZQu3Gey87cDwqhjpzg+iwipu/DsNFO+540DsYyYMbA6ZX5UKMVp
7PlWm0XUFEmgzIoUymdAGFhlrCUMkOLYgJDSKw7OB8euUSYrdfpWw0pdEmPNRZQdkIA1f34gj1KIiueO
l+EeU/1XvvhO83SGMOOlEFtRfkPxPmPaf/Y4uwUrK9nimEw99W33Dzu1gnDGp3Lav+XpjAHtebY7orZI
Ed8/UoauBgnSgyzXZ8bM8oLivmXB4NrkOp9CFjxYFB+kpSqKIy3XXYbshmMzp6ej7BiCLmRaXMOB1uke
ManQUlVCXApuKgBuOC0ffw/BKpkGlsJCPLMQpjZxTOd0Rl8gAJPX0QRPZ1xzvAWiFprMJrlE1oGIgtAl
yMPZJljIwHP4uynw3+LPNSyANHHNvddt3SP67CZqE/KS/J3xTaGNlS4yZkTuiLeKrm1Xx6Sd6gi0XfUI
YYTFCNqp/kChlOO0aODzlMGQoPWyYcgYWLqmMHyCQtnHWRisMQYBhCKD3vZmYxPs/wwaoUDYlcaONJeI
3zlnC+5+E5+A9ftRi/ogih+P3yEKZgtiFTjrBHuRCiYvhChooQg1kFmm4r5vwcyCmO0TRUEUAQQT6pbG
BUNBEE0AewIXoomncdNBW4KhfsDJ33i8HtdCQRDN4104H89u4KEqPImIo+3vR9ovj7PHYP81H4UPROBP
n4H40MZzWKY2esaEIAiCIAiCIKrhy5f/A2/46JDXUARZAAAAAElFTkSuQmCC
</value>
</data>
<data name="tsbReadHdev.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQcSURBVGhD7ZnZTxNRFMZ58dnEB1/0zQefjA/8AU0Xatsh
YpkhRAkxaFzwxS0GE1HcEvFB44IabaImGKOggIBbcBdXQBYJm7uCUUyoC7IKx3vunLG1DsiddgpN+ktO
mjkzc+/33XvudNqbECcWSEryznR4lC12j1Jul1JrIxk2j3LDLsmn2Ocqi8s7m7qMHI5k2e5YoPgdkgLm
R8oQG6RjTqcyg7oPD6srfY5F8vZi4/LiLDhQcBzOFZdGLBalL+XCl2evA8m75I8Rq9v72u5W5pEM49gl
pQAbTM9cAX7/V4g0GcuyueDrVbehv3+Am3KlpPOcxS132SRlFkkxBqv7Rmys8GwxdRlZgg1otLS2w0Il
k+dxzZEUY7DF9Sa0g0iybPVaLrS4tIIyKteqbvE8hlNKSyQ54phtYHf+fi5yzbocGB7+RVmAkZERSMtY
rprwyHtJjjhmG2hqboGk5DQudH3ONrhb/Qjq6ht55OTu4nm2DqpJjjhmG0DOFpWoIz1GWFyL3pEccaJh
AHlSUwcbN+f99SjFwNmxeeSjJEecaBkYC7YWKkmKMeIGwmB0dBSuXb/1NKz3o8k0cPveA74O2NvAXZIj
zmQauFRxVV3MHqWZ5IgTNxAGMW+gjAzYXMpzkiNO3ACjdwhgxxOAQw2UmCBTxsD9LoD19wC2PqLEBCkt
v8INWKXUJpIjzkQN+AcA6j6zb85RSgRR0KgaON+hHuMl7T3qzIxH1Ax8+AGQ91gVWcNMBPNtEGADy+M5
FI3UsmvwePdTgC99ak6PqBhoZaI2P1AFbXkI0B0iSCufXFY+2ux09QbuwbJ6zwZAj5JLl7kB/FlLcsQZ
z8DjTwAb76tCdrJF+vknnQgitHw0OpmJ7TRraAYHIhRTDfSwmtdKYxcrBSyVUL4HlU+bjkBcN3gvnt9U
/W8bmgG7W2kgOeKMZWB4BGDfM7VzFHnzA50IQq98grnTGTC4pxZgMPCTmGOqAaSfdXi0SRWAgWUSLHSs
8sFLyl4F7jtQr/9EMt0A8oupKWwNiMEnDILlo62P0PLRnkIYvmY28mw29bhYVskN2KTUepIjzv8MIDii
lW8A8lkZfKKFXP1RFahXPp3sqYPXlrzULy2NqBnQ4zCVT9ELShhgUg3gdwIa6PBTwgAXSiu4ARbPSI44
Rg28+MpeLbrpwCCTaiASxLwB/MOXG3ArdSRHnLiBMIh9AyXl3ABuBJIccWLeAL7KYiNmbTGNx8EjJ7QS
qiI54uBf29hIRlY2/Owb5+dThGluaYNkOUOdAY+SS3LEsS5Q5lqcKYPYEG6F+k4Wgu/UGdPimO8035nR
dm1YvHU40qaTHGOwMsrEDWhqMGphleQWHECSER5OyTufLSYf1qOpIclXedl65NTExJXTqPs4U5iEhN9b
v3y1RkE/lQAAAABJRU5ErkJggg==
</value>
</data>
<data name="tsbSaveHdev.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQwSURBVGhD7ZlrTxNREIb5H+oP8aP+GS+ticZrYjR+8oI0
3hJAlBaxpWjRqCjR0hYptFCUS9GiQou0XkCLBRRCuDnOTPeUw7alhXaXD+4kb3bPnt2Z91nmnCVQYYQR
RmTH5SN1u6+a649VmW2XhSxmW3WlyRaoNDX0lFsWzEv58XjUcqBhl2Jje1F1yLrnysG6OUwIOyKT7fc1
0729ip2tB715SvSyfRT8/ZMZNd/t4gLt40sbNDS1BoEvK3zeGV+G2AzA+GxaYymAjollnutOLMO4NCeL
8lJ+ty8G18/YVy0H6+a3DYFv4AIllM3nAwh9W4H+yVU+935egk+//q4bQ7PdCpgPIcZSOIfXgqEEeF6O
QCQxnwVAdbzdcbh51rVqOdKweNVs3a/YKj6KBfDjGx3+sZYZv0uurZtHvfmeBvMg2Mh0Guyps49zkG6d
tGcgZABSSRDFAPjQVGR6jY807kOzsnmCEWADP9bnbp6ww/MaK0yF73Aud1uEr6sBSNuGKARAb/Q9GqR+
J4PU/zHFIOkjthHdQ3O92GLiujAadNUDJNMAbY8Hua1yAZBkCNQ+xeLmUQhgcGoVgkpvv6belhZmFM9f
K2DUYvKCzgdArZYPgOTxT6QXNu5OtL0rNvNHIYABBCCDHtQHadHST0GA+SaWYJQWrTInpAZ44hrg+zcD
ILV3RPke9HZUsZk/CgG0K+0xiAtYNieDUYvJc0L0vAzgcLwtCoBE95A3xWb+KAiABdW9HUHDZJzmaFuV
52TxIq6th2QkDeB0DesP0KX6INHeL3ajnq8bwdSSt9EbCPNieEZ/AP4gKYaiKLEb0eJVL9os4bwbF2Xz
43cZ87oBPGzs4STh0dmMoRC+cTJA2+aGr3Aeya0m1PrmJ+d1NfZm1ZRVMoDH/5l7mBOVWTeO2zm/uqYs
vrcUABIVabH3wgNboGyifIXMk8oCsJMyAEi+QBweOfqgqa5TE1HujmAiZ+2SATxduIhPNqUTaahbp5rw
l7iJrPo8XwoAbXN0PT48BMsz45ooHh7iGi5c2Or6JQOID1muwuUU1cj1UTMAcgGknA5IVtcUpVSzg59Z
CPdAsrY267qQrgALQ0H4E/AUpYVwgJ9Z+jaCY2/WdSFdAbSQrgBbaSFZ6raRpSvAVlpIlrptZOkKoIUM
AAOgROkCEPH3wv1LLZmiHrubJcb3L7pgxB/i8+lYBO6cc/KRxoWe1R4gFQP/Azefz3/pZzkrH7LEmOY6
nW18Phrw85iONKbruZ5dnHzPuWlOU4C5sW4YeNYK1vMOmPnoY7243cIS4/rzduhvbeXzRMgN1aca+Ujj
zZ6di6ZraAogCmslA0D8i8ntjW5IsJMAr7xjAqDwH3d3/J98eUSeivrzOgXdaDFbzRaT9bRQ1WFrjeWw
tU0PcS2pNnkp2rwRRvxXUVHxD9G/toxhXUTIAAAAAElFTkSuQmCC
</value>
</data>
<data name="tsbReLoad.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAK+SURBVGhD7ZXPaxNBGIZzUK/in+DBqxGzpY0ICWkISTbr
joUFLz0JPXkTvEhJPGhSi+hFtBUUtIiGZFdFD3pRQRTUk39AD4IigiD0Ivhj3C/9lJq+2XxTmy7ovvBA
2J1559nd7GwqSZIk/0ls/7BXC5TeCmgtXnZzYnem9lQDZwUtNhqcz85dZzcv/3fJLMxsrwbuSyouXC3p
vbP7R0rhWql3EXbgPss9zm1jjY0nLGpQYfmWrffVLbjoZpJuWLp821l9Er6qs8bGEhbkKoHz3fZdbbUm
4IKjYGwuS09A1zrqa/j0D7COWez79q5qR72lO3HwYh4uNEpyC4XeU6h01XKx7e1kLXlqgbtEBcXrZZ2e
zcBFRkm6ntGlm1V+qd0l1pJndaIck/cj3cjAjihYSx5UEsVYKwtlETQWdUTBWvKgkihyi5NQFpG/Mgk7
omAteVBJFHY33KnOjEPhtVjN8fBLG+4woCMK1pIHlQyjEu7fJIjECas5oatt3uMNYS15UIkEurv5xWLv
u0E7CWE1s+Hfphh+mMzv/C9YSx5UEiesJQ8qiRPWkgeVxAlryYNK4oS15EElccJa8qASE17rC3+AxpjA
WvKgEhOSC+iDteRBJSYkF9AHa8mDSkxILqAP1pIHlQzi8vKJdcLDuBTOQV2DYC15UMkgnDtK33h3Eooi
aCzNQV2DYC15UEkU6t6UDj6dgsJroTE0FnVEwVryoJJheA88/XClCcUJOkdj0NxhsJY8qETC9KMj+umX
+XXydIzOoTkSWEseVCJl5sm0fv7t3G95+k3H0FgprCUPKjHh+Iuj+tWP8z3oNxpjAmvJg0pMOf3mWA90
zhTWkgeVxAlryYNK4oS15Kl01AdUFA/Oe9aSxw7cs7gsBnzVYi15vLa3w/bVfC049BGWbgnh2l01Ry6s
lSRJkn8rqdRPZ0b7i/SIonMAAAAASUVORK5CYII=
</value>
</data>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>335, 19</value>
</metadata>
</root>

View File

@@ -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();
}
}
}
}

View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{6112406A-A986-4A68-9D22-F0D7F0F81E02}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>HDevEngineTool</RootNamespace>
<AssemblyName>HDevEngineTool</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="halcondotnet, Version=19.5.0.0, Culture=neutral, PublicKeyToken=4973bed59ddbf2b8, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll</HintPath>
</Reference>
<Reference Include="hdevenginedotnet">
<HintPath>C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\hdevenginedotnet.dll</HintPath>
</Reference>
<Reference Include="SunnyUI, Version=3.0.9.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>bin\Debug\SunnyUI.dll</HintPath>
</Reference>
<Reference Include="SunnyUI.Common, Version=3.0.9.0, Culture=neutral, PublicKeyToken=5a271fb7ba597231" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="FormHDevEngineTool.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormHDevEngineTool.Designer.cs">
<DependentUpon>FormHDevEngineTool.cs</DependentUpon>
</Compile>
<Compile Include="HDevEngineCode.cs" />
<Compile Include="HDevEngineToolRun.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CommonMethods\CommonHelper.csproj">
<Project>{1c8d0ddc-2086-48a9-9586-f2b643e2fc54}</Project>
<Name>CommonHelper</Name>
</ProjectReference>
<ProjectReference Include="..\FormLib\FormLib.csproj">
<Project>{8c6fc8c6-8874-494b-8260-071f291aa33d}</Project>
<Name>FormLib</Name>
</ProjectReference>
<ProjectReference Include="..\ImageWindow\HWindow_Tool.csproj">
<Project>{9baa53fd-89b5-43e2-ac59-a27b006debb6}</Project>
<Name>HWindow_Tool</Name>
</ProjectReference>
<ProjectReference Include="..\ToolBase\ToolBase.csproj">
<Project>{7cd50b44-bf56-4e8e-8fa1-05f6968c1835}</Project>
<Name>ToolBase</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.Log\Logger\Logger.csproj">
<Project>{d4e052b9-e541-4b67-a1f9-273073ef1d4b}</Project>
<Name>Logger</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.VisionJob\ToolLib.VisionJob.csproj">
<Project>{16e8ff17-98a8-4452-ab9e-c433dc9c21f7}</Project>
<Name>ToolLib.VisionJob</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="FormHDevEngineTool.resx">
<DependentUpon>FormHDevEngineTool.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -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<IToolInfo> L_toolList)
{
}
}
}

View File

@@ -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")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace HDevEngineTool.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 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() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[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;
}
}
/// <summary>
/// 使用此强类型资源类,为所有资源查找
/// 重写当前线程的 CurrentUICulture 属性。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -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;
}
}

View File

@@ -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;
}
}
/// <summary>
/// 将数据传递给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;
}
}
}
}
}

View File

@@ -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";

View File

@@ -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;

View File

@@ -25,7 +25,7 @@ using System.Text.RegularExpressions;
using HalconDotNet;
using FormLib;
using Logger;
using static DataStruct.DataStruct;
using static DataStruct.DataStructClass;
namespace PMAlignTool
{

View File

@@ -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<EventImageTrigger> ImageTrigger;
public int CloseCam()
{
throw new NotImplementedException();
}
public int OpenCam(CaptureMode captureMode)
{
throw new NotImplementedException();
}
public int Snap()
{
throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,134 @@
namespace SDKCameraTool
{
partial class FormSDKCameraTool
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
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;
}
}

View File

@@ -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();
}
}
}

View File

@@ -0,0 +1,199 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>225, 19</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tsbtRunTool.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>335, 19</value>
</metadata>
</root>

174
SDKCameraTool/ICamera.cs Normal file
View File

@@ -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
{
/// <summary>
/// CaemraID
/// </summary>
[CategoryAttribute("CaemraID")]
int cameraID { get; }
/// <summary>
///
/// </summary>
CamereaCompanyType CompanyType { get; }
/// <summary>
/// 相机名称
/// </summary>
[CategoryAttribute("相机名称")]
string cameraName { get; set; }
/// <summary>
/// bmp图像
/// </summary>
[CategoryAttribute("获取的图像")]
Bitmap bmpImage { get; }
/// <summary>
/// 曝光值
/// </summary>
[CategoryAttribute("相机曝光")]
float fExpTime { get; set; }
/// <summary>
/// 触发方式
/// </summary>
[CategoryAttribute("相机触发模式")]
TriggerMode triggerMode { get; set; }
/// <summary>
/// 触发源
/// </summary>
[CategoryAttribute("相机触发源")]
TriggerSouce triggerSource { get; set; }
/// <summary>
/// 相机序列号,相机调用唯一标识
/// </summary>
[CategoryAttribute("相机序列号")]
string sSerialNumber { get; set; }
/// <summary>
/// 增益
/// </summary>
[CategoryAttribute("相机增益")]
float fGain { get; set; }
/// <summary>
/// 伽马
/// </summary>
[CategoryAttribute("相机伽马值")]
float iGamma { get; set; }
/// <summary>
/// 伽马使能
/// </summary>
[CategoryAttribute("相机伽马使能")]
bool bGammaEnable { get; set; }
/// <summary>
/// 感兴趣区域宽度
/// </summary>
[CategoryAttribute("ROI宽")]
int Width { get; set; }
/// <summary>
/// 感兴趣区域高度
/// </summary>
[CategoryAttribute("ROI高")]
int Height { get; set; }
/// <summary>
/// X偏移
/// </summary>
[CategoryAttribute("X偏移")]
int OffsetX { get; set; }
/// <summary>
/// Y偏移
/// </summary>
[CategoryAttribute("Y偏移")]
int OffsetY { get; set; }
/// <summary>
/// 触发拍照延时
/// </summary>
int TriggerDelay { get; set; }
/// <summary>
/// 是否作为飞拍使用
/// </summary>
bool isFlowAcq { get; set; }
/// <summary>
/// 该相机触发次数
/// </summary>
int TriggerCount { get; set; }
/// <summary>
/// 该相机出来的图像是否需要经过标定
/// </summary>
bool IsNeedCalibration { get; set; }
string CxpFilePath { get; set; }
/// <summary>
/// 打开相机
/// </summary>
/// <returns></returns>
int OpenCam(CaptureMode captureMode);
/// <summary>
/// 关闭相机
/// </summary>
/// <returns></returns>
int CloseCam();
/// <summary>
/// 取图
/// </summary>
/// <returns></returns>
int Snap();
/// <summary>
/// 被动触发事件
/// </summary>
event EventHandler<EventImageTrigger> 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
}
/// <summary>
/// 每次需从相机读取的参数
/// </summary>
public class CameraInfo
{
}
}

View File

@@ -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")]

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SDKCameraTool</RootNamespace>
<AssemblyName>SDKCameraTool</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="SunnyUI">
<HintPath>..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="BaslerCamera.cs" />
<Compile Include="FormSDKCameraTool.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormSDKCameraTool.Designer.cs">
<DependentUpon>FormSDKCameraTool.cs</DependentUpon>
</Compile>
<Compile Include="ICamera.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="FormSDKCameraTool.resx">
<DependentUpon>FormSDKCameraTool.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -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
//

View File

@@ -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);
}
}
}
}
}

View File

@@ -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
//

View File

@@ -118,15 +118,15 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
<value>157, 17</value>
</metadata>
<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
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=
</value>
</data>
<metadata name="imageListTool.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>132, 17</value>
<value>272, 17</value>
</metadata>
<data name="imageListTool.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
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
</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

View File

@@ -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]);
}

View File

@@ -34,6 +34,14 @@
<Reference Include="DevComponents.DotNetBar2">
<HintPath>..\VisionEdit\bin\Debug\ThirdLib\DevComponents.DotNetBar2.dll</HintPath>
</Reference>
<Reference Include="SunnyUI, Version=3.0.9.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll</HintPath>
</Reference>
<Reference Include="SunnyUI.Common, Version=3.0.9.0, Culture=neutral, PublicKeyToken=5a271fb7ba597231, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.Common.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />

View File

@@ -653,7 +653,7 @@ namespace ToolLib.VisionJob
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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);
}
}
/// <summary>
/// 删除项
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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()
{

View File

@@ -54,6 +54,10 @@
<Project>{1C8D0DDC-2086-48A9-9586-F2B643E2FC54}</Project>
<Name>CommonHelper</Name>
</ProjectReference>
<ProjectReference Include="..\EyeHandCalibTool\EyeHandCalibTool.csproj">
<Project>{46ee89bb-5ec9-4ead-9e32-3e57288a0bf7}</Project>
<Name>EyeHandCalibTool</Name>
</ProjectReference>
<ProjectReference Include="..\FindCircle\FindCircleTool.csproj">
<Project>{3d2739db-5618-49bf-bf5c-5cccd6a55c64}</Project>
<Name>FindCircleTool</Name>
@@ -66,10 +70,18 @@
<Project>{F5669FB7-77EC-44B9-898B-6D575B7D26EA}</Project>
<Name>HalconTool</Name>
</ProjectReference>
<ProjectReference Include="..\HDevEngineTool\HDevEngineTool.csproj">
<Project>{6112406a-a986-4a68-9d22-f0d7f0f81e02}</Project>
<Name>HDevEngineTool</Name>
</ProjectReference>
<ProjectReference Include="..\PMAlignTool\PMAlignTool.csproj">
<Project>{C1C08195-2EC8-42E9-93BB-D5331E6C6687}</Project>
<Name>PMAlignTool</Name>
</ProjectReference>
<ProjectReference Include="..\SDKCameraTool\SDKCameraTool.csproj">
<Project>{1c61f57d-1a36-4a98-b7dd-a65f2dbbe468}</Project>
<Name>SDKCameraTool</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@@ -1,7 +1,9 @@
using CaliperTool;
using CommonMethods;
using EyeHandCalibTool;
using FindLineTool;
using HalconTool;
using HDevEngineTool;
using PMAlignTool;
using System;
using System.Collections.Generic;
@@ -32,7 +34,6 @@ namespace VisionJobFactory
toolInput = new List<ToolIO>();
toolOutput = new List<ToolIO>() { outputImage };
}
/// <summary>
/// 只获取选择工具的描述信息..
/// </summary>
@@ -41,6 +42,39 @@ namespace VisionJobFactory
toolDescription = "Halcon采集图像接口,可直接连接网口、USB等相机";
}
}
[Serializable]
[VisionToolAttribute(ToolType.SDKBasler)]
public class SDKBaslerInterface : IToolInfo
{
// 必添加输出项
ToolIO outputImage = new ToolIO("OutputImage", null, DataType.Image);
/// <summary>
/// 获取工具的所有信息
/// </summary>
/// <param name="生成的工具名称"></param>
public SDKBaslerInterface(string toolName)
{
enable = true;
toolType = ToolType.HalconTool;
this.toolName = toolName;
tool = new HalconTool.HalconTool();
FormTool = null;
FormToolName = "SDKBaslerTool.FormSDKBaslerTool";
toolInput = new List<ToolIO>();
toolOutput = new List<ToolIO>() { outputImage };
}
/// <summary>
/// 只获取选择工具的描述信息..
/// </summary>
public SDKBaslerInterface()
{
toolDescription = "Basler相机采集图像接口,可直接连接网口、USB等Basler相机";
}
}
[Serializable]
[VisionToolAttribute(ToolType.FindLine)]
public class FindLineToolInterface : IToolInfo
@@ -108,6 +142,34 @@ namespace VisionJobFactory
}
[Serializable]
[VisionToolAttribute(ToolType.HDevEngineTool)]
public class HDevEngineToolToolInterface : IToolInfo
{
ToolIO inputImage = new ToolIO("InputImage", null, DataType.Image);
ToolIO inputPos = new ToolIO("InputPos", null, DataType.Pose);
ToolIO outObject = new ToolIO("OutObject", null, DataType.Object);
public HDevEngineToolToolInterface(string toolName)
{
enable = true;
toolType = ToolType.HDevEngineTool;
this.toolName = toolName;
tool = new HDevEngineCode();
FormToolName = "HDevEngineTool.FormHDevEngineTool";
FormTool = null;
toolInput = new List<ToolIO>() { inputImage, inputPos };
toolOutput = new List<ToolIO>() { outObject };
}
/// <summary>
/// 只获取选择工具的描述信息
/// </summary>
public HDevEngineToolToolInterface()
{
toolDescription = "使用Halcon引擎直接调用Halcon hdev代码";
}
}
[Serializable]
[VisionToolAttribute(ToolType.PMAlignTool)]
public class PMAlignToolToolInterface : IToolInfo
@@ -138,4 +200,31 @@ namespace VisionJobFactory
toolDescription = "模板匹配工具,可得到根据图像捕获特征的姿态";
}
}
[Serializable]
[VisionToolAttribute(ToolType.EyeHandCalib)]
public class EyeHandCalibrationInterface : IToolInfo
{
ToolIO inputPoint = new ToolIO("InputPoint", null, DataType.Point);
ToolIO outPose = new ToolIO("GetPose", null, DataType.Pose);
ToolIO outPoint = new ToolIO("OutPoint", null, DataType.Point);
public EyeHandCalibrationInterface(string toolName)
{
enable = true;
toolType = ToolType.EyeHandCalib;
this.toolName = toolName;
tool = new EyeHandCalib();
FormToolName = "EyeHandCalibTool.FormEyeHandCalib";
FormTool = null;
toolInput = new List<ToolIO> { inputPoint };
toolOutput = new List<ToolIO>() { outPose,outPoint};
}
/// <summary>
/// 只获取选择工具的描述信息
/// </summary>
public EyeHandCalibrationInterface()
{
toolDescription = "手眼标定工具,根据输入的图像坐标和机械坐标可测得姿态";
}
}
}

View File

@@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionEdit", "VisionEdit\VisionEdit.csproj", "{2CD1B0C2-D64A-4DA4-8A9E-64D5AB35DE25}"
EndProject
@@ -42,6 +42,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Controls", "UsingControl\Co
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Logger", "ToolLib.Log\Logger\Logger.csproj", "{D4E052B9-E541-4B67-A1F9-273073EF1D4B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HDevEngineTool", "HDevEngineTool\HDevEngineTool.csproj", "{6112406A-A986-4A68-9D22-F0D7F0F81E02}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDKCameraTool", "SDKCameraTool\SDKCameraTool.csproj", "{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EyeHandCalibTool", "EyeHandCalibTool\EyeHandCalibTool.csproj", "{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -232,6 +238,42 @@ Global
{D4E052B9-E541-4B67-A1F9-273073EF1D4B}.Release|x64.Build.0 = Release|Any CPU
{D4E052B9-E541-4B67-A1F9-273073EF1D4B}.Release|x86.ActiveCfg = Release|Any CPU
{D4E052B9-E541-4B67-A1F9-273073EF1D4B}.Release|x86.Build.0 = Release|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Debug|x64.ActiveCfg = Debug|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Debug|x64.Build.0 = Debug|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Debug|x86.ActiveCfg = Debug|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Debug|x86.Build.0 = Debug|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Release|Any CPU.Build.0 = Release|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Release|x64.ActiveCfg = Release|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Release|x64.Build.0 = Release|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Release|x86.ActiveCfg = Release|Any CPU
{6112406A-A986-4A68-9D22-F0D7F0F81E02}.Release|x86.Build.0 = Release|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Debug|x64.ActiveCfg = Debug|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Debug|x64.Build.0 = Debug|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Debug|x86.ActiveCfg = Debug|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Debug|x86.Build.0 = Debug|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Release|Any CPU.Build.0 = Release|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Release|x64.ActiveCfg = Release|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Release|x64.Build.0 = Release|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Release|x86.ActiveCfg = Release|Any CPU
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468}.Release|x86.Build.0 = Release|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Debug|x64.ActiveCfg = Debug|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Debug|x64.Build.0 = Debug|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Debug|x86.ActiveCfg = Debug|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Debug|x86.Build.0 = Debug|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Release|Any CPU.Build.0 = Release|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Release|x64.ActiveCfg = Release|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Release|x64.Build.0 = Release|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Release|x86.ActiveCfg = Release|Any CPU
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -250,5 +292,8 @@ Global
{C1C08195-2EC8-42E9-93BB-D5331E6C6687} = {4FA39290-D4E6-4FD0-8030-F605960DA331}
{6D2088CB-161B-47FB-9C35-0EE8DE61A3DF} = {E949A20C-A15B-4ADF-805F-FC3DABF46623}
{D4E052B9-E541-4B67-A1F9-273073EF1D4B} = {777855D2-1EB5-47E8-AC2D-66F6ACB85D0A}
{6112406A-A986-4A68-9D22-F0D7F0F81E02} = {4FA39290-D4E6-4FD0-8030-F605960DA331}
{1C61F57D-1A36-4A98-B7DD-A65F2DBBE468} = {4FA39290-D4E6-4FD0-8030-F605960DA331}
{46EE89BB-5EC9-4EAD-9E32-3E57288A0BF7} = {4FA39290-D4E6-4FD0-8030-F605960DA331}
EndGlobalSection
EndGlobal