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

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