增加卡尺工具,修复了一些bug

This commit is contained in:
liu.wenjie
2019-08-13 13:57:51 +08:00
committed by liu.wenjie
parent 4dbab27caf
commit ca7c7ec644
132 changed files with 1315 additions and 259 deletions

Binary file not shown.

View File

@@ -5,12 +5,14 @@ using System.Text;
using System.Threading.Tasks;
using CommonMethods;
using HalconDotNet;
using HalconWindow.HalconWindow;
using ToolBase;
using static DataStruct.DataStruct;
namespace CaliperTool
{
[Serializable]
public class CaliperTool:IToolInfo
public class Caliper: IToolBase
{
public bool toolEnable = true;
/// <summary>
@@ -48,11 +50,11 @@ namespace CaliperTool
/// <summary>
/// 卡尺高
/// </summary>
public int length1 = 40;
public HTuple length1 = 40;
/// <summary>
/// 卡尺宽
/// </summary>
public int length2 = 40;
public HTuple length2 = 40;
/// <summary>
/// 找边极性,从明到暗或从暗到明
/// </summary>
@@ -77,86 +79,189 @@ namespace CaliperTool
/// 交点显示
/// </summary>
public bool dispCross = true;
/// <summary>
/// 找到的线
/// <summary
/// 是否显示的线
/// </summary>
public Point resultPoint = null;
/// <summary>
/// 显示的线
/// </summary>
public HObject LineDisp = null;
public bool LineDisp = true;
/// <summary>
/// 新的跟随姿态变化后的预期线信息
/// </summary>
HTuple newExpectLineStartRow = new HTuple(200), newExpectLineStartCol = new HTuple(200), newExpectLineEndRow = new HTuple(200), newExpectLineEndCol = new HTuple(600);
HTuple newExpectRecStartRow = new HTuple(200), newExpectRecStartColumn = new HTuple(200), newExpectPhi = new HTuple(0);
/// <summary>
/// 查找到的线的起点行坐标
/// </summary>
private HTuple _resultLineStartRow = 0;
internal HTuple ResultLineStartRow
private HTuple _resultRow = 0;
public HTuple ResulttRow
{
get
{
_resultLineStartRow = Math.Round((double)_resultLineStartRow, 3);
return _resultLineStartRow;
_resultRow = Math.Round((double)_resultRow, 3);
return _resultRow;
}
set { _resultLineStartRow = value; }
set { _resultRow = value; }
}
/// <summary>
/// 查找到的线的起点列坐标
/// </summary>
private HTuple _resultLineStartCol = 0;
internal HTuple ResultLineStartCol
private HTuple _resultCol = 0;
public HTuple ResultCol
{
get
{
_resultLineStartCol = Math.Round((double)_resultLineStartCol, 3);
return _resultLineStartCol;
_resultCol = Math.Round((double)_resultCol, 3);
return _resultCol;
}
set { _resultLineStartCol = value; }
}
/// <summary>
/// 查找到的线的终点行坐标
/// </summary>
private HTuple _resultLineEndRow = 0;
internal HTuple ResultLineEndRow
{
get
{
_resultLineEndRow = Math.Round((double)_resultLineEndRow, 3);
return _resultLineEndRow;
}
set { _resultLineEndRow = value; }
}
/// <summary>
/// 查找到的线的终点列坐标
/// </summary>
private HTuple _resultLineEndCol = 0;
internal HTuple ResultLineEndCol
{
get
{
_resultLineEndCol = Math.Round((double)_resultLineEndCol, 3);
return _resultLineEndCol;
}
set { _resultLineEndCol = value; }
}
/// <summary>
/// 查找到线的方向
/// </summary>
private HTuple _angle = 0;
internal HTuple Angle
{
get
{
_angle = Math.Round((double)_angle, 3);
return _angle;
}
set { _angle = value; }
set { _resultCol = value; }
}
public HObject inputImage { get; set; } = null;
public ToolRunStatu toolRunStatu { get; set; } = ToolRunStatu.Not_Run;
public void DispImage()
{
if (inputImage != null)
{
FormCaliper.Instance.myHwindow.HobjectToHimage(inputImage);
}
}
internal void DrawExpectLine(HWindow_Final myHwindow)
{
if (inputImage != null)
{
try
{
myHwindow.DrawModel = true;
myHwindow.Focus();
HOperatorSet.SetColor(myHwindow.hWindowControl.HalconWindow, new HTuple("green"));
HOperatorSet.DrawRectangle2Mod(myHwindow.hWindowControl.HalconWindow, expectRecStartRow, expectRecStartColumn, expectAngle, length1, length2,
out expectRecStartRow, out expectRecStartColumn, out expectAngle, out length1, out length2);
if (inputPose != null)
{
templatePose.X = inputPose.X;
templatePose.Y = inputPose.Y;
templatePose.U = inputPose.U;
}
// 输入
FormCaliper.Instance.tbx_expectCenterRow.Text = expectRecStartRow.TupleString("10.3f");
FormCaliper.Instance.tbx_expectCenterCol.Text = expectRecStartColumn.TupleString("10.3f");
FormCaliper.Instance.tbx_expectPhi.Text = expectAngle.TupleString("10.3f");
// 参数
FormCaliper.Instance.tbx_caliperLength1.Text = length1.TupleString("10.3f");
FormCaliper.Instance.tbx_caliperLength2.Text = length2.TupleString("10.3f");
myHwindow.DrawModel = false;
// Run();
}
catch (Exception ex)
{
FormCaliper.Instance.TextBoxMessageDisp(ex.Message, System.Drawing.Color.Red);
}
}
else
{
FormCaliper.Instance.TextBoxMessageDisp("图像为空", System.Drawing.Color.Red);
}
}
public void UpdateImage()
{
FormCaliper.Instance.myHwindow.ClearWindow();
DispImage();
}
public void Run()
{
HTuple HMeasureHandle = new HTuple();
HTuple resultRow, resultCol;
if (inputImage == null)
{
FormCaliper.Instance.TextBoxMessageDisp("图像为空", System.Drawing.Color.Red);
toolRunStatu = ToolRunStatu.Not_Input_Image;
return;
}
try
{
UpdateImage();
if (inputPose != null)
{
HTuple Row = inputPose.X - templatePose.X;
HTuple Col = inputPose.Y - templatePose.Y;
HTuple angle = inputPose.U - templatePose.U;
HTuple _homMat2D;
HOperatorSet.HomMat2dIdentity(out _homMat2D);
HOperatorSet.HomMat2dRotate(_homMat2D, (HTuple)(angle), (HTuple)templatePose.X, (HTuple)templatePose.Y, out _homMat2D);
HOperatorSet.HomMat2dTranslate(_homMat2D, (HTuple)(Row), (HTuple)(Col), out _homMat2D);
//对预期线的起始点做放射变换
HOperatorSet.AffineTransPixel(_homMat2D, (HTuple)expectRecStartRow, (HTuple)expectRecStartColumn, out newExpectRecStartRow, out newExpectRecStartColumn);
}
else
{
newExpectRecStartRow = expectRecStartRow;
newExpectRecStartColumn = expectRecStartColumn;
}
HTuple width, height, AmplitudeThreshold, distance;
HOperatorSet.GetImageSize(inputImage, out width, out height);
HOperatorSet.GenMeasureRectangle2(expectRecStartRow, expectRecStartColumn, expectAngle, length1, length2, width, height, "nearest_neighbor", out HMeasureHandle);
HOperatorSet.MeasurePos(inputImage, HMeasureHandle, sigma, threshold, polarity, edgeSelect, out resultRow, out resultCol, out AmplitudeThreshold, out distance);
if(resultRow.Length != 0)
{
ResulttRow = resultRow;
ResultCol = resultCol;
}
//把点显示出来
HOperatorSet.GenCrossContourXld(out crossDisp, ResulttRow, ResultCol, new HTuple(12), new HTuple(0));
DispMainWindow(FormCaliper.Instance.myHwindow);
// 参数传递
ParamsTrans();
FormCaliper.Instance.tbx_resultStartRow.Text = ResulttRow.ToString();
FormCaliper.Instance.tbx_resultStartCol.Text = ResultCol.ToString();
FormCaliper.Instance.TextBoxMessageDisp("运行成功", System.Drawing.Color.Green);
toolRunStatu = ToolRunStatu.Succeed;
}
catch (Exception ex)
{
FormCaliper.Instance.TextBoxMessageDisp("工具运行异常" + ex.Message, System.Drawing.Color.Red);
}
finally
{
//homMat2DArrow.Dispose();
//arrow.Dispose();
//arrowTrans.Dispose();
}
}
/// <summary>
/// 将数据传递给FindlineToolInterface
/// </summary>
private void ParamsTrans()
{
FormCaliper.Instance.myToolInfo.toolOutput.Clear();
FormCaliper.Instance.myToolInfo.toolOutput.Add(new ToolIO("outputCenterRow", ResulttRow, DataType.IntValue));
FormCaliper.Instance.myToolInfo.toolOutput.Add(new ToolIO("outputCenterColumn", ResultCol, DataType.IntValue));
}
public void DispMainWindow(HWindow_Final window)
{
// 显示矩形
if (dispRec)
{
window.DispObj(contoursDisp, "blue");
}
// 显示交点
if (dispCross)
{
window.DispObj(crossDisp, "orange");
}
//显示找到的线
// window.DispObj(LineDisp, "green");
}
}
}

View File

@@ -35,6 +35,8 @@
</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" />
@@ -44,6 +46,12 @@
</ItemGroup>
<ItemGroup>
<Compile Include="CaliperTool.cs" />
<Compile Include="FormCaliper.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormCaliper.Designer.cs">
<DependentUpon>FormCaliper.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
@@ -55,6 +63,19 @@
<Project>{DF3D4D4C-02DF-4F92-9FD4-0A861F64B0EF}</Project>
<Name>DataStruct</Name>
</ProjectReference>
<ProjectReference Include="..\HalconWindowTest\HalconWindow.csproj">
<Project>{4ADC75AE-59C7-4D36-B675-A6CE51B6F5BA}</Project>
<Name>HalconWindow</Name>
</ProjectReference>
<ProjectReference Include="..\ToolBase\ToolBase.csproj">
<Project>{7CD50B44-BF56-4E8E-8FA1-05F6968C1835}</Project>
<Name>ToolBase</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="FormCaliper.resx">
<DependentUpon>FormCaliper.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.

519
CaliperTool/FormCaliper.Designer.cs generated Normal file
View File

@@ -0,0 +1,519 @@
namespace CaliperTool
{
partial class FormCaliper
{
/// <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(FormCaliper));
this.tbx_resultStartRow = new System.Windows.Forms.TextBox();
this.label5 = new System.Windows.Forms.Label();
this.label16 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.label13 = new System.Windows.Forms.Label();
this.label11 = new System.Windows.Forms.Label();
this.tbx_caliperLength2 = new System.Windows.Forms.TextBox();
this.tbx_Sigma = new System.Windows.Forms.TextBox();
this.tbx_caliperLength1 = new System.Windows.Forms.TextBox();
this.tbx_threshold = new System.Windows.Forms.TextBox();
this.cbx_polarity = new System.Windows.Forms.ComboBox();
this.btn_runCaliperool = new System.Windows.Forms.Button();
this.btn_moveCliperRegion = new System.Windows.Forms.Button();
this.cbx_edgeSelect = new System.Windows.Forms.ComboBox();
this.tbx_resultStartCol = new System.Windows.Forms.TextBox();
this.txbLog = new System.Windows.Forms.TextBox();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.panel1 = new System.Windows.Forms.Panel();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.chBDispCaliperROI = new System.Windows.Forms.CheckBox();
this.chBDispCross = new System.Windows.Forms.CheckBox();
this.chBDispRec = new System.Windows.Forms.CheckBox();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.label3 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.tbx_expectPhi = new System.Windows.Forms.TextBox();
this.tbx_expectCenterCol = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.tbx_expectCenterRow = new System.Windows.Forms.TextBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label7 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.groupBox4.SuspendLayout();
this.groupBox3.SuspendLayout();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.SuspendLayout();
//
// tbx_resultStartRow
//
this.tbx_resultStartRow.Location = new System.Drawing.Point(98, 28);
this.tbx_resultStartRow.Margin = new System.Windows.Forms.Padding(2);
this.tbx_resultStartRow.Name = "tbx_resultStartRow";
this.tbx_resultStartRow.Size = new System.Drawing.Size(71, 21);
this.tbx_resultStartRow.TabIndex = 102;
//
// label5
//
this.label5.AutoSize = true;
this.label5.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label5.Location = new System.Drawing.Point(19, 201);
this.label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(79, 20);
this.label5.TabIndex = 279;
this.label5.Text = "结果选择:";
//
// label16
//
this.label16.AutoSize = true;
this.label16.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label16.Location = new System.Drawing.Point(19, 71);
this.label16.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label16.Name = "label16";
this.label16.Size = new System.Drawing.Size(65, 20);
this.label16.TabIndex = 302;
this.label16.Text = "卡尺宽:";
//
// label14
//
this.label14.AutoSize = true;
this.label14.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label14.Location = new System.Drawing.Point(19, 38);
this.label14.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(65, 20);
this.label14.TabIndex = 302;
this.label14.Text = "卡尺长:";
//
// label15
//
this.label15.AutoSize = true;
this.label15.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label15.Location = new System.Drawing.Point(21, 138);
this.label15.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(54, 20);
this.label15.TabIndex = 310;
this.label15.Text = "Sigma:";
//
// label13
//
this.label13.AutoSize = true;
this.label13.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label13.Location = new System.Drawing.Point(19, 105);
this.label13.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(51, 20);
this.label13.TabIndex = 310;
this.label13.Text = "阈值:";
//
// label11
//
this.label11.AutoSize = true;
this.label11.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label11.Location = new System.Drawing.Point(19, 171);
this.label11.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(51, 20);
this.label11.TabIndex = 298;
this.label11.Text = "极性:";
//
// tbx_caliperLength2
//
this.tbx_caliperLength2.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.tbx_caliperLength2.Location = new System.Drawing.Point(109, 68);
this.tbx_caliperLength2.Margin = new System.Windows.Forms.Padding(2);
this.tbx_caliperLength2.Name = "tbx_caliperLength2";
this.tbx_caliperLength2.Size = new System.Drawing.Size(92, 26);
this.tbx_caliperLength2.TabIndex = 301;
//
// tbx_Sigma
//
this.tbx_Sigma.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.tbx_Sigma.Location = new System.Drawing.Point(111, 135);
this.tbx_Sigma.Margin = new System.Windows.Forms.Padding(2);
this.tbx_Sigma.Name = "tbx_Sigma";
this.tbx_Sigma.Size = new System.Drawing.Size(92, 26);
this.tbx_Sigma.TabIndex = 309;
//
// tbx_caliperLength1
//
this.tbx_caliperLength1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.tbx_caliperLength1.Location = new System.Drawing.Point(109, 35);
this.tbx_caliperLength1.Margin = new System.Windows.Forms.Padding(2);
this.tbx_caliperLength1.Name = "tbx_caliperLength1";
this.tbx_caliperLength1.Size = new System.Drawing.Size(92, 26);
this.tbx_caliperLength1.TabIndex = 301;
//
// tbx_threshold
//
this.tbx_threshold.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.tbx_threshold.Location = new System.Drawing.Point(109, 102);
this.tbx_threshold.Margin = new System.Windows.Forms.Padding(2);
this.tbx_threshold.Name = "tbx_threshold";
this.tbx_threshold.Size = new System.Drawing.Size(92, 26);
this.tbx_threshold.TabIndex = 309;
//
// cbx_polarity
//
this.cbx_polarity.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cbx_polarity.FormattingEnabled = true;
this.cbx_polarity.Items.AddRange(new object[] {
"从明到暗",
"从暗到明"});
this.cbx_polarity.Location = new System.Drawing.Point(109, 168);
this.cbx_polarity.Name = "cbx_polarity";
this.cbx_polarity.Size = new System.Drawing.Size(92, 28);
this.cbx_polarity.TabIndex = 314;
this.cbx_polarity.Text = "从明到暗";
//
// btn_runCaliperool
//
this.btn_runCaliperool.BackColor = System.Drawing.Color.White;
this.btn_runCaliperool.Location = new System.Drawing.Point(430, 355);
this.btn_runCaliperool.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.btn_runCaliperool.Name = "btn_runCaliperool";
this.btn_runCaliperool.Size = new System.Drawing.Size(90, 48);
this.btn_runCaliperool.TabIndex = 270;
this.btn_runCaliperool.Text = "运行";
this.btn_runCaliperool.UseVisualStyleBackColor = false;
this.btn_runCaliperool.Click += new System.EventHandler(this.btn_runCaliperool_Click);
//
// btn_moveCliperRegion
//
this.btn_moveCliperRegion.BackColor = System.Drawing.Color.White;
this.btn_moveCliperRegion.Location = new System.Drawing.Point(296, 355);
this.btn_moveCliperRegion.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.btn_moveCliperRegion.Name = "btn_moveCliperRegion";
this.btn_moveCliperRegion.Size = new System.Drawing.Size(90, 48);
this.btn_moveCliperRegion.TabIndex = 269;
this.btn_moveCliperRegion.Text = "编辑卡尺";
this.btn_moveCliperRegion.UseVisualStyleBackColor = false;
this.btn_moveCliperRegion.Click += new System.EventHandler(this.btn_moveCliperRegion_Click);
//
// cbx_edgeSelect
//
this.cbx_edgeSelect.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.cbx_edgeSelect.FormattingEnabled = true;
this.cbx_edgeSelect.Items.AddRange(new object[] {
"all",
"first",
"last"});
this.cbx_edgeSelect.Location = new System.Drawing.Point(109, 199);
this.cbx_edgeSelect.Name = "cbx_edgeSelect";
this.cbx_edgeSelect.Size = new System.Drawing.Size(92, 28);
this.cbx_edgeSelect.TabIndex = 317;
this.cbx_edgeSelect.Text = "all";
//
// tbx_resultStartCol
//
this.tbx_resultStartCol.Location = new System.Drawing.Point(98, 61);
this.tbx_resultStartCol.Margin = new System.Windows.Forms.Padding(2);
this.tbx_resultStartCol.Name = "tbx_resultStartCol";
this.tbx_resultStartCol.Size = new System.Drawing.Size(71, 21);
this.tbx_resultStartCol.TabIndex = 104;
//
// txbLog
//
this.txbLog.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txbLog.Location = new System.Drawing.Point(1, 487);
this.txbLog.Name = "txbLog";
this.txbLog.ReadOnly = true;
this.txbLog.Size = new System.Drawing.Size(1127, 21);
this.txbLog.TabIndex = 276;
//
// splitContainer1
//
this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.splitContainer1.Location = new System.Drawing.Point(1, 2);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.panel1);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.BackColor = System.Drawing.Color.White;
this.splitContainer1.Panel2.Controls.Add(this.groupBox4);
this.splitContainer1.Panel2.Controls.Add(this.groupBox3);
this.splitContainer1.Panel2.Controls.Add(this.groupBox1);
this.splitContainer1.Panel2.Controls.Add(this.groupBox2);
this.splitContainer1.Panel2.Controls.Add(this.btn_runCaliperool);
this.splitContainer1.Panel2.Controls.Add(this.btn_moveCliperRegion);
this.splitContainer1.Size = new System.Drawing.Size(1127, 479);
this.splitContainer1.SplitterDistance = 562;
this.splitContainer1.TabIndex = 275;
//
// panel1
//
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(562, 479);
this.panel1.TabIndex = 272;
//
// groupBox4
//
this.groupBox4.Controls.Add(this.label14);
this.groupBox4.Controls.Add(this.cbx_edgeSelect);
this.groupBox4.Controls.Add(this.cbx_polarity);
this.groupBox4.Controls.Add(this.tbx_threshold);
this.groupBox4.Controls.Add(this.label5);
this.groupBox4.Controls.Add(this.tbx_caliperLength1);
this.groupBox4.Controls.Add(this.label16);
this.groupBox4.Controls.Add(this.tbx_Sigma);
this.groupBox4.Controls.Add(this.tbx_caliperLength2);
this.groupBox4.Controls.Add(this.label15);
this.groupBox4.Controls.Add(this.label11);
this.groupBox4.Controls.Add(this.label13);
this.groupBox4.Location = new System.Drawing.Point(14, 166);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(224, 271);
this.groupBox4.TabIndex = 320;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "卡尺参数";
//
// groupBox3
//
this.groupBox3.Controls.Add(this.chBDispCaliperROI);
this.groupBox3.Controls.Add(this.chBDispCross);
this.groupBox3.Controls.Add(this.chBDispRec);
this.groupBox3.Location = new System.Drawing.Point(296, 170);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(213, 124);
this.groupBox3.TabIndex = 319;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "显示";
//
// chBDispCaliperROI
//
this.chBDispCaliperROI.AutoSize = true;
this.chBDispCaliperROI.Location = new System.Drawing.Point(29, 92);
this.chBDispCaliperROI.Name = "chBDispCaliperROI";
this.chBDispCaliperROI.Size = new System.Drawing.Size(96, 16);
this.chBDispCaliperROI.TabIndex = 0;
this.chBDispCaliperROI.Text = "结果显示交点";
this.chBDispCaliperROI.UseVisualStyleBackColor = true;
//
// chBDispCross
//
this.chBDispCross.AutoSize = true;
this.chBDispCross.Location = new System.Drawing.Point(29, 60);
this.chBDispCross.Name = "chBDispCross";
this.chBDispCross.Size = new System.Drawing.Size(96, 16);
this.chBDispCross.TabIndex = 0;
this.chBDispCross.Text = "结果显示交点";
this.chBDispCross.UseVisualStyleBackColor = true;
//
// chBDispRec
//
this.chBDispRec.AutoSize = true;
this.chBDispRec.Location = new System.Drawing.Point(29, 29);
this.chBDispRec.Name = "chBDispRec";
this.chBDispRec.Size = new System.Drawing.Size(108, 16);
this.chBDispRec.TabIndex = 0;
this.chBDispRec.Text = "结果显示矩形框";
this.chBDispRec.UseVisualStyleBackColor = true;
//
// groupBox1
//
this.groupBox1.Controls.Add(this.label3);
this.groupBox1.Controls.Add(this.label1);
this.groupBox1.Controls.Add(this.tbx_expectPhi);
this.groupBox1.Controls.Add(this.tbx_expectCenterCol);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.tbx_expectCenterRow);
this.groupBox1.Location = new System.Drawing.Point(14, 19);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(224, 127);
this.groupBox1.TabIndex = 318;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "输入坐标";
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(22, 89);
this.label3.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(65, 12);
this.label3.TabIndex = 276;
this.label3.Text = "卡尺角度:";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(22, 31);
this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(77, 12);
this.label1.TabIndex = 272;
this.label1.Text = "中心行坐标:";
//
// tbx_expectPhi
//
this.tbx_expectPhi.Location = new System.Drawing.Point(131, 86);
this.tbx_expectPhi.Margin = new System.Windows.Forms.Padding(2);
this.tbx_expectPhi.Name = "tbx_expectPhi";
this.tbx_expectPhi.Size = new System.Drawing.Size(71, 21);
this.tbx_expectPhi.TabIndex = 275;
//
// tbx_expectCenterCol
//
this.tbx_expectCenterCol.Location = new System.Drawing.Point(131, 57);
this.tbx_expectCenterCol.Margin = new System.Windows.Forms.Padding(2);
this.tbx_expectCenterCol.Name = "tbx_expectCenterCol";
this.tbx_expectCenterCol.Size = new System.Drawing.Size(71, 21);
this.tbx_expectCenterCol.TabIndex = 273;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(22, 60);
this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(77, 12);
this.label2.TabIndex = 274;
this.label2.Text = "中心列坐标:";
//
// tbx_expectCenterRow
//
this.tbx_expectCenterRow.Location = new System.Drawing.Point(131, 28);
this.tbx_expectCenterRow.Margin = new System.Windows.Forms.Padding(2);
this.tbx_expectCenterRow.Name = "tbx_expectCenterRow";
this.tbx_expectCenterRow.Size = new System.Drawing.Size(71, 21);
this.tbx_expectCenterRow.TabIndex = 271;
//
// groupBox2
//
this.groupBox2.Controls.Add(this.tbx_resultStartRow);
this.groupBox2.Controls.Add(this.tbx_resultStartCol);
this.groupBox2.Controls.Add(this.label7);
this.groupBox2.Controls.Add(this.label9);
this.groupBox2.Location = new System.Drawing.Point(296, 19);
this.groupBox2.Margin = new System.Windows.Forms.Padding(2);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Padding = new System.Windows.Forms.Padding(2);
this.groupBox2.Size = new System.Drawing.Size(201, 127);
this.groupBox2.TabIndex = 297;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "结果点";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(22, 31);
this.label7.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(77, 12);
this.label7.TabIndex = 103;
this.label7.Text = "中心行坐标:";
//
// label9
//
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(22, 64);
this.label9.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(77, 12);
this.label9.TabIndex = 105;
this.label9.Text = "中心列坐标:";
//
// FormCaliper
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1132, 509);
this.Controls.Add(this.txbLog);
this.Controls.Add(this.splitContainer1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FormCaliper";
this.Text = "卡尺工具";
this.Load += new System.EventHandler(this.FormCaliper_Load);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.groupBox4.ResumeLayout(false);
this.groupBox4.PerformLayout();
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
public System.Windows.Forms.TextBox tbx_resultStartRow;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label16;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.Label label15;
private System.Windows.Forms.Label label13;
private System.Windows.Forms.Label label11;
public System.Windows.Forms.TextBox tbx_caliperLength2;
public System.Windows.Forms.TextBox tbx_Sigma;
public System.Windows.Forms.TextBox tbx_caliperLength1;
public System.Windows.Forms.TextBox tbx_threshold;
public System.Windows.Forms.ComboBox cbx_polarity;
public System.Windows.Forms.Button btn_runCaliperool;
private System.Windows.Forms.Button btn_moveCliperRegion;
public System.Windows.Forms.ComboBox cbx_edgeSelect;
public System.Windows.Forms.TextBox tbx_resultStartCol;
public System.Windows.Forms.TextBox txbLog;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.CheckBox chBDispCross;
private System.Windows.Forms.CheckBox chBDispRec;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label1;
public System.Windows.Forms.TextBox tbx_expectPhi;
public System.Windows.Forms.TextBox tbx_expectCenterCol;
private System.Windows.Forms.Label label2;
public System.Windows.Forms.TextBox tbx_expectCenterRow;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.GroupBox groupBox4;
private System.Windows.Forms.CheckBox chBDispCaliperROI;
}
}

109
CaliperTool/FormCaliper.cs Normal file
View File

@@ -0,0 +1,109 @@
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 CommonMethods;
using HalconWindow.HalconWindow;
namespace CaliperTool
{
public partial class FormCaliper : Form
{
public Caliper myCaliper = null;
public IToolInfo myToolInfo = null;
public HWindow_Final myHwindow = new HWindow_Final();
private static FormCaliper _instance;
public FormCaliper(ref object caliper)
{
InitializeComponent();
myToolInfo = (IToolInfo)caliper;
myCaliper = (Caliper)myToolInfo.tool;
_instance = this;
}
public static FormCaliper Instance
{
get
{
if(_instance!= null)
{
return _instance;
}
else
{
object caliper = new object();
_instance = new FormCaliper(ref caliper);
return _instance;
}
}
}
private void FormCaliper_Load(object sender, EventArgs e)
{
this.panel1.Controls.Add(myHwindow);
myHwindow.Dock = DockStyle.Fill;
InitTool();
}
private void InitTool()
{
this.Text = myToolInfo.toolName;
btn_runCaliperool.Focus();
Application.DoEvents();
// 预期设定值
tbx_expectCenterRow.Text = myCaliper.expectRecStartRow.ToString();
tbx_expectCenterCol.Text = myCaliper.expectRecStartColumn.ToString();
tbx_expectPhi.Text = myCaliper.expectAngle.ToString();
// 预期参数
tbx_caliperLength1.Text = myCaliper.length1.ToString();
tbx_caliperLength2.Text = myCaliper.length2.ToString();
cbx_edgeSelect.Text = myCaliper.edgeSelect;
cbx_polarity.Text = myCaliper.polarity == "positive" ? "从暗到明" : "从明到暗";
tbx_threshold.Text = myCaliper.threshold.ToString();
tbx_Sigma.Text = myCaliper.sigma.ToString();
// 显示
chBDispRec.Checked = myCaliper.dispRec;
chBDispCross.Checked = myCaliper.dispCross;
chBDispCaliperROI.Checked = myCaliper.LineDisp;
}
private void btn_moveCliperRegion_Click(object sender, EventArgs e)
{
myCaliper.UpdateImage();
myCaliper.DrawExpectLine(myHwindow);
}
public void TextBoxMessageDisp(string mes, Color setColor)
{
txbLog.BackColor = setColor;
txbLog.Text = mes;
txbLog.Font = new Font("微软雅黑", 10, FontStyle.Bold);
CommonMethods.CommonMethods.Delay(2000);
txbLog.BackColor = Color.White;
}
private void btn_runCaliperool_Click(object sender, EventArgs e)
{
// 更改界面中参数,实时更新类中参数
myCaliper.expectRecStartRow = Convert.ToDouble(tbx_expectCenterRow.Text.Trim());
myCaliper.expectRecStartColumn = Convert.ToDouble(tbx_expectCenterCol.Text.Trim());
myCaliper.expectAngle = Convert.ToDouble(tbx_expectPhi.Text.Trim());
// 运行参数
myCaliper.threshold = Convert.ToInt16(tbx_threshold.Text.Trim());
myCaliper.length1 = Convert.ToInt16(tbx_caliperLength1.Text.Trim());
myCaliper.length2 = Convert.ToInt16(tbx_caliperLength2.Text.Trim());
myCaliper.polarity = cbx_polarity.SelectedItem.ToString() == "从明到暗" ? "negative" : "positive";
myCaliper.edgeSelect = cbx_edgeSelect.SelectedItem.ToString();
myCaliper.sigma = Convert.ToDouble(tbx_Sigma.Text.Trim());
myCaliper.Run();
}
}
}

View File

@@ -0,0 +1,205 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAIyAAAAEAIACoEgAAFgAAACgAAAAjAAAAQAAAAAEAIAAAAAAAgBEAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAGyU0ZFdeafFscnz/bHJ8/2xyfP9scnz/bHJ8/2xyfP9scnz/bHJ8/2xyfP9scnz/bHJ8/2xy
fP9scnz/bHJ8/2xyfP9scnz/bHJ8/2xyfP9scnz/bHJ8/2xyfP9scnz/bHJ8/2xyfP9scnz/bHJ8/2xy
fP9scnz/bHJ8/1dfavUcJjRsAAAAABkjMgZbYWnz+fHY//nv0f/579H/+e/R//nv0f/579H/+e/R//nv
0f/579H/+e/R//nv0f/579H/+e/R//nv0f/579H/+e/R//nv0f/579H/+e/R//nv0f/579H/+e/R//nv
0f/579H/+e/R//nv0f/579H/+e/R//nv0f/579H/+vHX/19lbPcZIzIIGSQzCnBvZP/p2qj/QH6T/y6H
q/8th6v/Loer/2aLjv/15K7/9eSu//Tkrf/15K7/9eSu//Xjrf/15K7/9eSu//Xjrv/15K7/9eSt//Tj
rf/1463/9OSu//Tkrv/15K7/9OOt//Tjrf/15K7/9eSu//Tkrv/1467/9eSu//Tkrf/0467/cnJl/xki
Mg4ZJDMKcG9j/+fYp/9aiJb/Wpqy/1qasv9amrL/dpGQ//Xkrv/1467/9eSt//Xjrv/15K7/9eSt//Xk
rv/05K7/9eSt//Xkrv/1463/9OOt//Xkrv/05K3/9OOt//Xkrv/0463/9eOt//Xkrv/15K7/9OSu//Xj
rf/15K7/9OOt//Pjrf9xcGT/GSIyDhkkMwpwb2P/9OOt//Xkrv/15K7/9OOt//Tkrv/1467/9eSu//Xk
rv/05K3/9eSu//Tkrv/1463/9eSu//Tkrv/0463/9eSu//Tjrf/05K7/9eOu//Tkrf/0467/9eSu//Tj
rf/15K7/9eSu//Xjrf/05K7/9eSu//Xkrv/0463/cnJk/3FwZP8ZIjIOGSQzCnBvY//1463/9OSu//Xk
rv/15K3/9OSt//Tkrv/15K7/9eSu//Xkrf/15K7/9eSu//Xkrf/1467/9eSt//Xkrv/15K3/9eOt//Tk
rf/15K7/9OSt//Tkrv/15K7/9OOt//Tjrf/15K7/9eOu//Tkrv/1463/9eSu//Tjrf9qamD/cXBk/xki
Mg4ZJDMKcG9j//Tjrf/15K7/9eOu//Tjrf/05K3/9eSu//Xkrv/15K7/9OSt//Xkrv/15K7/9eOt//Xk
rv/15K7/9eOu//Xkrv/15K3/9OOt//Xjrf/05K7/9OSu//Xkrv/0463/9OOt//Xkrv/15K7/9OSu//Xj
rv/15K7/9OSt/2pqYP9xcGT/GSIyDhkkMwpwb2P/9OOt//Xkrv/15K7/9eSt//Tjrf/15K7/9eSu//Xj
rv/15K3/9eOu//Xkrv/15K3/9eSu//Tkrv/15K3/9eSu//Xjrf/0463/9eSu//Tkrf/0463/9eSu//Tj
rf/1463/9eSu//Xkrv/05K7/9eOt//Xkrv/0463/vbOP/3FwZP8ZIjIOGSQzCnBvY//0463/9eSu//Xk
rv/0463/9OSu//Xjrv/15K7/9eSu//Tkrf/15K7/9OSu//Xjrf/15K7/9OSu//Tjrf/15K7/9OOt//Tk
rv/1467/9OSt//Tjrv/15K7/9OOt//Xkrv/15K7/9eOt//Tkrv/15K7/9eSu//Tjrf92dGb/cXBk/xki
Mg4ZJDMKcG9j//Xjrf/05K7/9eSu//Xkrf/05K3/9OSu//Xkrv/15K7/9eSt//Xkrv/15K7/9eSt//Xj
rv/15K3/9eSu//Xkrf/1463/9OSt//Xkrv/05K3/9OSu//Xkrv/0463/9OOt//Xkrv/1467/9OSu//Xj
rf/15K7/9OOt/8/CmP9xcGT/GSIyDhkkMwpwb2P/9OOt//Xkrv/1467/9OOt//Tkrf/15K7/9eSu//Xk
rv/05K3/9eSu//Xkrv/1463/8+Ks/5CMdf90c2b/dHNm/3RzZv+Gg3D/796q//Tkrv/05K7/9eSu//Tj
rf/0463/9eSu//Xkrv/05K7/9eOu//Xkrv/05K3/9OOu/3FwZP8ZIjIOGSQzCnBvY//0463/9eSu//Xk
rv/15K3/9OOt//Xkrv/15K7/9eOu//Xkrf/1467/9eSu//Xkrf/VyJz/S0KD/4lp6P+Jaej/iWno/1hL
mf/EuZL/9OSt//Tjrf/15K7/9OOt//Xjrf/15K7/9eSu//Tkrv/1463/9eSu//Tjrf/05K7/cXBk/xki
Mg4ZJDMKcG9j//Tjrf/15K7/9eSu//Tjrf/05K7/9eOu//Xkrv/15K7/9OSt//Xkrv/05K7/9eOt/9DE
mf9TSpD/lnn+/5R3+/+WeP7/Y1Wq/8K3kf/05K3/9OOu//Xkrv/0463/9eSu//Xkrv/1463/9OSu//Xk
rv/15K7/9OOt//Tkrv9xcGT/GSIyDhkkMwpwb2L/9OOs//TjrP/046z/9OOs//TjrP/046z/9OOs//Tj
rP/046z/9OOs//TjrP/046z/0MOX/1NKkP+Xef//Mk16/4tx7P9jVar/wreQ//TjrP/046z/9OOs//Tj
rP/046z/9OOs//TjrP/046z/9OOs//TjrP/046z/9OOs/3FwY/8ZIjIOGSMyPlVVQ/+woVv/sKFb/7Ch
W/+woVv/sKFb/7ChW/+woVv/sKFb/7ChW/+woVv/sKFb/7ChW/+XjFT/U0qQ/5d5/v8oVHv/h27m/2NV
qv+NhFL/sKFb/7ChW/+woVv/sKFb/7ChW/+woVv/sKFb/7ChW/+woVv/sKFb/7ChW/+woVv/WVlE/xkj
MkJCRTz/iH9N/4h/Tf+If03/iH9N/4h/Tf+If03/iH9N/4h/Tf+If03/iH9N/4h/Tf+If03/iH9N/3Vw
Sf9TSpD/cGbK/x6Drv9iY7z/Y1Wq/25qR/+If03/iH9N/4h/Tf+If03/iH9N/4h/Tf+If03/iH9N/4h/
Tf+If03/iH9N/4h/Tf+If03/REc9/2dnWf/ZyY//wLOC/8K1g//u3Jv/w7aD/8u9h//w3p3/8N6d//De
nf/w3p3/8N6d//Denf/w3p3/zL+L/1NKkP9Uc6//K8X3/05/tf9jVar/v7OE//Denf/w3p3/8N6d//De
nf/w3p3/8N6d//Denf/w3p3/8N6d//Denf/w3p3/8N6d//Denf9paFn/aGhf/8W6k/+blXv/npd9/+7e
qv+el33/rKSF//Tkrv/15K7/9eSu//Xkrf/15K7/9eSu//Xkrf/QxJn/U0qQ/4Jr2v+Hf7j/gWzW/2NV
qv/Ct5H/9OSt//Tkrv/15K7/9OOt//Tjrf/15K7/9eOu//Tkrv/1463/9eSu//Tjrf/15K7/9OOt/2lp
X/9oaF//9eSu//Tjrf/15K7/9eOu//Tjrf/05K3/9eSu//Xkrv/15K7/9OSt//Xkrv/15K7/9eOt/9DE
mf9VTZH/mHv+/5h7//+Ye///ZVir/8K3kf/05K7/9OSu//Xkrv/0463/9OOt//Xkrv/15K7/9OSu//Xj
rv/15K7/9OSt//Tjrv/15K7/aWlf/2hoX//15K7/9OOt//Xkrv/15K7/9eSt//Tjrf/15K7/9eSu//Xj
rv/15K3/9eOu//Xkrv/15K3/6Nmn/1RZX/9pbnz/aW58/2lufP9SWGH/282f//Tkrf/0463/9eSu//Tj
rf/1463/9eSu//Xkrv/05K7/9eOt//Xkrv/0463/9OSu//Tjrv9paV//aGhf//Xkrv/0463/9eSu//Xk
rv/0463/9OSu//Xjrv/15K7/9eSu//Tkrf/15K7/9OSu//Xjrf/15K7/9OSu//Tjrf/15K7/9OOt//Tk
rv/1467/9OSt//Tjrv/15K7/9OOt//Xkrv/15K7/9eOt//Tkrv/15K7/9eSu//Tjrf/05K7/9OSu/2lp
X/9oaF//9OSu//Xjrf/05K7/9eSu//Xkrf/05K3/9OSu//Xkrv/15K7/9eSt//Xkrv/15K7/9eSt//Xj
rv/15K3/9eSu//Xkrf/1463/9OSt//Xkrv/05K3/9OSu//Xkrv/0463/9OOt//Xkrv/1467/9OSu//Xj
rf/15K7/9OOt//Xkrv/0463/aWlf/2lqYv/15K7/9OOt//Xkrv/1467/9OOt//Tkrf/15K7/9eSu//Xk
rv/05K3/9eSu//Xkrv/1463/9eSu//Xkrv/1467/9eSu//Xkrf/0463/9eOt//Tkrv/05K7/9eSu//Tj
rf/0463/9eSu//Xkrv/05K7/9eOu//Xkrv/05K3/9OOu//Xkrv9rbGT/Q0tX4fDs3v/79eH/+/Xh//v1
4f/79eH/+/Xh//v14f/79eH/+/Xh//v14f/79eH/+/Xh//v14f/79eH/+/Xh//v14f/79eH/+/Xh//v1
4f/79eH/+/Xh//v14f/79eH/+/Xh//v14f/79eH/+/Xh//v14f/79eH/+/Xh//v14f/79eH/8+7g/0hP
W+UZIzM0KjNBtz9IVMk/SFTJP0hUyT9IVMk/SFTJP0hUyTlFU/M3WXL/OkNQ6T9HVMs/R1TLP0dUyz9H
VMs/R1TLP0dUyz9HVMs/R1TLP0dUyz9HVMs/R1TLP0dUyz9HVMs6Q0/pN1lx/zhFVPU/SFTJP0hUyT9I
VMk/SFTJP0hUyT9IVMkqM0G5GSMzNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGjRIyRu3
7f8aJDOZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoj
M5cbseb/Gj1TzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAaNEjJG7nu/xokM5kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAGSQzlxuz5v8aPVPNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABo0R8kbue7/GiQzmwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaJDOXG7Xo/xo7UM0AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGig4rR25
7P8aOU7XGiQzBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGSMyBho2
Ss8duu7/Gio7swAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAZJDNcOo+v/xuTwP8ZMUbBGSMyhRokM4MZIzKDGiMzgxokM4MaJDODGiQzgxoj
M4MZIzODGSQzgxkjMoUZMEW/G5C7/zyUtf8aJDNiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkjMgQtN0W7cbHI/0zC7v8xqNj/MKbX/zCm
1/8wptf/MKbX/zCm1/8wptf/MKbX/zCm1/8wptf/MafX/0vB7v9xs8v/LzpHvxkjMgYAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkk
MgoeKDeHUlll5Wlxe/1qcnz/anJ8/2pyfP9qcnz/anJ8/2pyfP9qcnz/anJ8/2pyfP9qcXv9U1pm5x8o
N4kZIzIKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAGAAAACAAAAAIAAAAIAA
AAAgAAAAgAAAACAAAACAAAAAIAAAAIAAAAAgAAAAgAAAACAAAACAAAAAIAAAAIAAAAAgAAAAgAAAACAA
AACAAAAAIAAAAIAAAAAgAAAAgAAAACAAAACAAAAAIAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAACAA
AAD/H/8f4AAAAP8f/x/gAAAA/x//H+AAAAD/H/8f4AAAAP+AAD/gAAAA/4AAP+AAAAD/wAB/4AAAAA==
</value>
</data>
</root>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -16,6 +16,7 @@ namespace CommonMethods
BlobAnalyse,
FindLine,
FindCircle,
Caliper,
ShapeMatch,
EyeHandCalibration,
CircleCalibration,

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -53,9 +53,11 @@
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("几何", 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});
treeNode15,
treeNode16});
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);
@@ -122,14 +124,19 @@
treeNode15.Name = "FindCircle";
treeNode15.SelectedImageKey = "Circle.png";
treeNode15.Text = "找圆";
treeNode16.Name = "节点0";
treeNode16.Text = "几何";
treeNode16.ImageKey = "卡尺.png";
treeNode16.Name = "Caliper";
treeNode16.SelectedImageKey = "卡尺.png";
treeNode16.Tag = "Caliper";
treeNode16.Text = "卡尺";
treeNode17.Name = "节点0";
treeNode17.Text = "几何";
this.tvw_ToolBox.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
treeNode1,
treeNode5,
treeNode9,
treeNode13,
treeNode16});
treeNode17});
this.tvw_ToolBox.SelectedImageIndex = 4;
this.tvw_ToolBox.Size = new System.Drawing.Size(417, 543);
this.tvw_ToolBox.TabIndex = 1;
@@ -148,6 +155,7 @@
this.imageList1.Images.SetKeyName(4, "文件夹.png");
this.imageList1.Images.SetKeyName(5, "Line.png");
this.imageList1.Images.SetKeyName(6, "Circle.png");
this.imageList1.Images.SetKeyName(7, "卡尺.png");
//
// richTextBoxEx1
//
@@ -175,9 +183,9 @@
this.imageListTool.Images.SetKeyName(3, "图像.png");
this.imageListTool.Images.SetKeyName(4, "图像.png");
this.imageListTool.Images.SetKeyName(5, "图像.png");
this.imageListTool.Images.SetKeyName(6, "分析 数据.png");
this.imageListTool.Images.SetKeyName(7, "Line 1.png");
this.imageListTool.Images.SetKeyName(8, "Circle.png");
this.imageListTool.Images.SetKeyName(6, "line.png");
this.imageListTool.Images.SetKeyName(7, "Circle.png");
this.imageListTool.Images.SetKeyName(8, "卡尺.png");
//
// splitContainer1
//

View File

@@ -124,9 +124,9 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAG
FAAAAk1TRnQBSQFMAgEBBwEAATgBAAE4AQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABgAMAAUADAAEBAQABCAYAASAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA8
FgAAAk1TRnQBSQFMAgEBCAEAAUABAAFAAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABgAMAAWADAAEBAQABCAYAATAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
@@ -153,64 +153,73 @@
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8AJAAB8wNaKAAB8wNa
MAAB9htZBAAB8wFaAQABWiYABFoBAARaLQAdWQMAAfMDWiMAAf8CWgH0AQAB8wNaAgABCAJaKwAdWQQA
AvMBwgFaIQABngFaAf8EAAPzBAABwgFaAf8pAB1ZBwAB9AFaHwACWg8AAVoBwigAHVkIAAH/AVodAAHk
AVoRAAFaAf8nAB1ZCQAB/wFaGwAB/wFaEwABWicAHVkKAAH0AVoaAAFaFAABwgFaJgAdWQsAAfQBWhgA
Af8BWhUAAVomAB1ZDAAB/wFaFwABWhYAAQgBWiUAHVkNAAH/AVoWAAFaFwABWiUAHVkOAAH0AVoVAAFa
FwABWiUAHVkPAAH0AVoSAAHzA1oUAAHzA1okAB1ZEAAB/wFaEQAB8wFaAQABWhQAAfMBWgEAAVokAB1Z
EQAB/wFaEAAB8wNaFAAB8wNaJAAdWRIAAfQBWhAAAfMBWgHzFQAB8wFaAfMkAB1ZEwAB9AFaEAABWhcA
AVolAB1ZFAAB/wFaDwABWhYAAfQBWiUAATEbWQExFQAB/wFaDgABngFaFQABWiYAAzEBWBX/BDEWAAH0
AVoOAAFaFAAB/wFaJgADMQFYFf8EMRcAAfQBWg0AARsBWhMAAVoB/yYAHTEYAAH/AVoNAAJaEQABWgGe
JwAbMQF5GgAB/wFaDQACWg8AAlooABIxJQAB9AFaDQACWg0AAVoB5CkAETEBmSYAAcIDWgsAARsCWgIA
AfMDWgMAAloB/yoAETEnAAHzAVoBAAFaDQABngRaAQAEWgH/ZAAB8wNaEAAB8wNaaQAD8xEAA/P/ADYA
AbMQAAH/AbttAAGyEQABsmwAAbIBCQGyAgkBswIJAboCCQG7BwkBugGzagAC/wEAAbMCAAEJAgAB8wIA
Af8IAAEJagAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkUAAuyAbMGAB30
BgAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkTAAEJDLIFAB+KBQAB/wKz
AbISswkAAf8CCQH/AgkB9AIAARkBCQEZAf8CCQH/AgADCQH/AfIBCQoAAbMKsgH0CAABugGyBAABtAGK
AWUCuxoZAYoFAAH/FAABGQkAAf8CCQEAAgkB9AIAARkBCQHzAQACCQH/AgADCQEAAfMBCQkAAfMBswgA
AboBsgH0CAABugGyBAABswGKAmUCuxkZAYoFAAH/FAABGQkAAf8FCQH0AgABGQUJAf8CAAYJCQABugH0
CAABCQyyBAABswGKAbsCZQG7AQkYGQGKBQAB/xQAARkJAAH/BQkB9AIAARkFCQH/AgAGCQkAAboB9AkA
DLIEAAGzAYoBuwEZAmUBuwEJCRkBCQwZAbsBigUAAf8UAAEZCgAB/wIJAv8DAAL/AwkB/wMAAv8CCQHz
Af8JAAG6AfQZAAGzAYoBuwIZAmUBuwgZArsLGQEJAWUBigUAAf8UAAEZCwACCQcAAwkGAAIJAfQKAAG6
AfQZAAGzAYoBuwMZAmUBuwYZAbsCZQG7ChkCZQGKBQAB/xQAARkLAAIJB/8DCQb/AgkB9AoAAboB9AkA
C7IBswQAAbMBigG7BBkCZQG7BRkBZgJlAWYBCQgZAbsBZQEZAYoFAAH/FAABGQsAFAkB9AoAAboB9AgA
AQkMsgQAAbMBigG7BRkCZQG7AxkBuwFlAWYBkQFlAbsHGQEJAmUBGQGKBQAB/xQAARkLABQJAfQKAAG6
AfQEAAT0AbMBsgH0CAABugGyBAABswGKAbsGGQFlAWYBuwEJAbsCZQIZAWUBZgEJBhkBZgFlAhkBigUA
Af8VshQAAfMCCRMAAboB9AIACLIB9AgAAboBsgQAAbMBigG7BhkBuwJlAbsCZQMZAQkBZQG7BRkBuwFl
AWwCGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZFAAB8wIJEwABugH0AgABsgUAAQkMsgQAAbMBigG7
BxkBtQNlBRkCZQG7AxkBCQJlAxkBigUAAf8CAAGzAgABCQIAAfMCAAH/CAABGQ0AB/8BGQIJB/8MAAG6
AfQCAAGyBgAMsgQAAbMBigG7EBkBCQFlAbsDGQGuAWUEGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZ
DAAB8xIJCwABugH0AgABshYAAbMBigG7AhkBZgJlDBkCZQG7ARkBuwJlBBkBigUAAf8CAAGzAgABCQIA
AfMCAAH/CAABGQwAAfMBCQ7/AwkLAAG6AfQCAAGyFgABswGKAbsBGQFlAYsCGQFlDBkBZQK7AmUFGQGK
BAAB/wGyFbQBsgsAAfMBCQ4AAwkKAAeyAbMEAAuyAbMEAAGzAYoBuwEZAWUBuwIZAWUMGQRlAZEFGQGK
BAABshcAAbIKAAHzAQkDAAIJCQADCQkAAQkIsgMAAQkMsgQAAbMBigG7ARkBZQG7AgkBZQ4ZAbUHGQGK
BAABshezAbIKAAHzAQkDAAIJCQADCQkAAboBsgH0BAABugGyA/QBswGyAfQIAAG6AbIEAAGzAYoBuwIZ
A2UBuxYZAYoEAAG6FwABsgoAAfMBCQ4AAwkJAAG6AbIB9AQAAboGsgH0CAABugGyBAABswGKAbscGQGK
BAABuhcAAbIKAAHzAQkOAAMJCQABCQiyAwABCQyyBAABswGKHbsBigQAAboXAAGyCgAB8xIJCgAIsgQA
DLIFAB+KBAABugQAAbIB9AsAAQkBsgQAAbIKAAH/EQkB8ycAAf8crQG0BQABugMAAbIBAAGzCwABCQEA
AbIDAAGyZwABugIAAbIDAAGyCQABsgMAAbMCAAGyZwABugGzAboEAAG6CAAC8wMAAf8BugGzAQlvAAGy
AQkFAAG6AbN5AAG6A7IBCW0AAUIBTQE+BwABPgMAASgDAAGAAwABQAMAAQEBAAEBBgABBBYAA/8BAAz/
BAAM/wQABP8BwwT/AfwBPwH/BAABwAIAAQMBywT/AfABhwH/BAABwAIAAQEBwwT/AYQBMQH/BAABwAIA
AQEB4QT/AR4BPAF/BAABwAIAAQEB/AP/Af4BfwH/AT8EAAHAAgABAQH+AX8C/wH8Av8BnwQAAcACAAEB
Af8BPwL/AfkC/wHfBAABwAIAAQEB/wGfAv8B+wL/Ac8EAAHAAgABAQH/Ac8C/wHzAv8B7wQAAcACAAEB
Af8B5wL/AfcC/wHnBAABwAIAAQEB/wHzAv8B9wL/AfcEAAHAAgABAQH/AfkC/wH3Av8B9wQAAcACAAEB
Af8B/AL/AcMC/wHDBAABwAIAAQEB/wH+AX8B/wHLAv8BywQAAcACAAEBAv8BPwH/AcMC/wHDBAABwAIA
AQEC/wGfAf8B4wL/AeMEAAHAAgABAQL/Ac8B/wH3Av8B9wQAAcACAAEBAv8B5wH/AfcC/wHnBAABwAIA
AQEC/wHzAf8B8wL/Ae8EAAHAAgABAQL/AfkB/wH7Av8BzwQAAcACAAEBAv8B/AH/AfkC/wHPBAABwAIA
AQEC/wH+AX8B/AL/AZ8EAAHAAgABAwP/AT8B/gF/Af8BPwQAAcABAAEPBP8BnwH/AT8B/gF/BAABwAEA
AQ8E/wHDAf8BjAE4Af8EAAHAAQABHwT/AcsB/wHgAYMB/wQAB/8BwwH/AfwBPwH/BAAH/wHjAf8B/gE/
Af8EAAz/BAAM/wQAAf4C/wE/DP8B/gL/Ab8M/wH8AgABHwz/AfkBbQG/Ad8M/wH7AW0BvwHfAfABGAEM
AQ8C/wEAAQ8BwAIAAQEB+wFtAb8B3wHwARgBDAEPAf8B/gEAAQ8BgAMAAfgCAAEfAfABGAEMAQ8B/AEA
AT8BzwQAAfsC/wHfAfEBGAGMAU8B+QH+AT8BzwQAAfsC/wHfAfABGAEMAQ8B+QH+AQABDwQAAfsC/wHf
AfABGAEMAQ8B+QH/AQABDwQAAfsC/wHfAfgBOAEcAQ8B+QP/BAAB+wL/Ad8B/AH+AT8BHwH5A/8EAAH7
Av8B3wH8AgABHwH5Af8BAAEPBAAB+wL/Ad8B/AIAAR8B+QH+AQABDwQAAfsC/wHfAfwCAAEfAfkB4AE/
Ac8EAAH4AgABHwH/Af4BPwH/AfkBgAE/Ac8EAAH7AW0BvwHfAf8B/gE/Af8B+QG+AQABDwQAAfsBbQG/
Ad8B/wIAAX8B+QG/AQABDwQAAfsBbQG/Ad8B/gIAAT8B+QG/Av8EAAH7AW0BvwHfAf4CAAE/AfkBvwL/
BAAB8AIAAQ8B/gF/Af4BPwHwAQ8BAAEPBAAB9wL/AfcB/gFzAf4BPwHgAQ4BAAEPBAAB8AIAAQcB/gFz
Af4BPwHjAcABPwHPBAAB9wL/AfcB/gF/Af4BPwHjAcABPwHPBAAB9wL/AfcB/gF/Af4BPwHgAQ4BAAEP
BAAB9wL/AfcB/gIAAT8B8AEPAQABDwGAAwAB9wGfAfwB9wH+AgABPwT/AYACAAEBAfcBXwH9AXcM/wH2
Ae8B+wG3DP8B8QHvAfMBhw3/AfMB5w7/AfwBHw3/Cw==
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8A/wD/AP8A
/wD/AP8A/wD/AP8A/wD/AP8A/wA0AAHzA1ooAAHzA1owAAH2G1kEAAHzAVoBAAFaJgAEWgEABFoUAAFs
AfQB8xYAHVkDAAHzA1ojAAH/AloB9AEAAfMDWgIAAQgCWhEAAWwB9AFmFwAdWQQAAvMBwgFaIQABngFa
Af8EAAPzBAABwgFaAf8OAAFsAvQB/wMAAf8BrhIAHVkHAAH0AVofAAJaDwABWgHCDAABbAL0AWYEAAFs
AbUSAB1ZCAAB/wFaHQAB5AFaEQABWgH/CgABbAL0AWYEAAHyAfQBkRIAHVkJAAH/AVobAAH/AVoTAAFa
CQAB7gL0Aa4FAAHtAfQBZhIAHVkKAAH0AVoaAAFaFAABwgFaCAAB9wL0AWYEAAHsAvQB8xIAHVkLAAH0
AVoYAAH/AVoVAAFaBwABbAT0Ae4B9wIAAWYC9BMAHVkMAAH/AVoXAAFaFgABCAFaBgAE9AH3AWwB8wFs
AWYBCQFmAa4TAB1ZDQAB/wFaFgABWhcAAVoFAAGuAfMF9AHzAWwB/wHxAgkBbBIAHVkOAAH0AVoVAAFa
FwABWgYAAWYC9AFsBPQB7gGuAf8BrgEJAZEBvBAAHVkPAAH0AVoSAAHzA1oUAAHzA1oEAAH/AfQBZgIA
AWwBkQL0AfAB9AGuAfEB/wGuAQkBbAFtAbsB7QwAHVkQAAH/AVoRAAHzAVoBAAFaFAAB8wFaAQABWgQA
AWwB8QIAAQcBCQG7AWwD9AGuAfQBZgL/AgkCZgwAHVkRAAH/AVoQAAHzA1oUAAHzA1oDAAHzAWYB/wIA
ApEBAAFmAWwBCQFmAvQBrgEHAWYB/wHvAWwBuwH3CwAdWRIAAfQBWhAAAfMBWgHzFQAB8wFaAfMHAAHz
AQkBBwIAAW0B9AFsAbsBrgL0AbUBbAH3Af8BrgHwCwAdWRMAAfQBWhAAAVoXAAFaCAAB8wFsBQABZgH/
AZEBrgEHAvQB8wNmCwAdWRQAAf8BWg8AAVoWAAH0AVoNAAGSAf8BZgH/AWwB/wEJAWYE9AHwAWwBZgkA
ATEbWQExFQAB/wFaDgABngFaFQABWg8AAWYB/wIAAfcBvAHtAQkBZgH0AfID9AGRAfAHAAMxAVgV/wQx
FgAB9AFaDgABWhQAAf8BWhUAAWwB/wFsAa4G9AFsAf8FAAMxAVgV/wQxFwAB9AFaDQABGwFaEwABWgH/
FgAB/wHzAQABrgHwBvQBbAQAHTEYAAH/AVoNAAJaEQABWgGeHAABZgb0AfIBrgIAGzEBeRoAAf8BWg0A
AloPAAJaHwABbAX0AWYCABIxJQAB9AFaDQACWg0AAVoB5CEAAbwBkgL0AfMDABExAZkmAAHCA1oLAAEb
AloCAAHzA1oDAAJaAf8kAAFsAfQBbAMAETEnAAHzAVoBAAFaDQABngRaAQAEWgH/ZAAB8wNaEAAB8wNa
aQAD8xEAA/P/ADYAAbMQAAH/AbttAAGyEQABsmwAAbIBCQGyAgkBswIJAboCCQG7BwkBugGzagAC/wEA
AbMCAAEJAgAB8wIAAf8IAAEJagAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZCQAB/wUJAfQCAAEZBQkB/wIA
BgkUAAuyAbMGAB30BgAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZCQAB/wUJAfQCAAEZBQkB/wIABgkTAAEJ
DLIFAB+KBQAB/wKzAbISswkAAf8CCQH/AgkB9AIAARkBCQEZAf8CCQH/AgADCQH/AfIBCQoAAbMKsgH0
CAABugGyBAABtAGKAWUCuxoZAYoFAAH/FAABGQkAAf8CCQEAAgkB9AIAARkBCQHzAQACCQH/AgADCQEA
AfMBCQkAAfMBswgAAboBsgH0CAABugGyBAABswGKAmUCuxkZAYoFAAH/FAABGQkAAf8FCQH0AgABGQUJ
Af8CAAYJCQABugH0CAABCQyyBAABswGKAbsCZQG7AQkYGQGKBQAB/xQAARkJAAH/BQkB9AIAARkFCQH/
AgAGCQkAAboB9AkADLIEAAGzAYoBuwEZAmUBuwEJCRkBCQwZAbsBigUAAf8UAAEZCgAB/wIJAv8DAAL/
AwkB/wMAAv8CCQHzAf8JAAG6AfQZAAGzAYoBuwIZAmUBuwgZArsLGQEJAWUBigUAAf8UAAEZCwACCQcA
AwkGAAIJAfQKAAG6AfQZAAGzAYoBuwMZAmUBuwYZAbsCZQG7ChkCZQGKBQAB/xQAARkLAAIJB/8DCQb/
AgkB9AoAAboB9AkAC7IBswQAAbMBigG7BBkCZQG7BRkBZgJlAWYBCQgZAbsBZQEZAYoFAAH/FAABGQsA
FAkB9AoAAboB9AgAAQkMsgQAAbMBigG7BRkCZQG7AxkBuwFlAWYBkQFlAbsHGQEJAmUBGQGKBQAB/xQA
ARkLABQJAfQKAAG6AfQEAAT0AbMBsgH0CAABugGyBAABswGKAbsGGQFlAWYBuwEJAbsCZQIZAWUBZgEJ
BhkBZgFlAhkBigUAAf8VshQAAfMCCRMAAboB9AIACLIB9AgAAboBsgQAAbMBigG7BhkBuwJlAbsCZQMZ
AQkBZQG7BRkBuwFlAWwCGQGKBQAB/wIAAbMCAAEJAgAB8wIAAf8IAAEZFAAB8wIJEwABugH0AgABsgUA
AQkMsgQAAbMBigG7BxkBtQNlBRkCZQG7AxkBCQJlAxkBigUAAf8CAAGzAgABCQIAAfMCAAH/CAABGQ0A
B/8BGQIJB/8MAAG6AfQCAAGyBgAMsgQAAbMBigG7EBkBCQFlAbsDGQGuAWUEGQGKBQAB/wIAAbMCAAEJ
AgAB8wIAAf8IAAEZDAAB8xIJCwABugH0AgABshYAAbMBigG7AhkBZgJlDBkCZQG7ARkBuwJlBBkBigUA
Af8CAAGzAgABCQIAAfMCAAH/CAABGQwAAfMBCQ7/AwkLAAG6AfQCAAGyFgABswGKAbsBGQFlAYsCGQFl
DBkBZQK7AmUFGQGKBAAB/wGyFbQBsgsAAfMBCQ4AAwkKAAeyAbMEAAuyAbMEAAGzAYoBuwEZAWUBuwIZ
AWUMGQRlAZEFGQGKBAABshcAAbIKAAHzAQkDAAIJCQADCQkAAQkIsgMAAQkMsgQAAbMBigG7ARkBZQG7
AgkBZQ4ZAbUHGQGKBAABshezAbIKAAHzAQkDAAIJCQADCQkAAboBsgH0BAABugGyA/QBswGyAfQIAAG6
AbIEAAGzAYoBuwIZA2UBuxYZAYoEAAG6FwABsgoAAfMBCQ4AAwkJAAG6AbIB9AQAAboGsgH0CAABugGy
BAABswGKAbscGQGKBAABuhcAAbIKAAHzAQkOAAMJCQABCQiyAwABCQyyBAABswGKHbsBigQAAboXAAGy
CgAB8xIJCgAIsgQADLIFAB+KBAABugQAAbIB9AsAAQkBsgQAAbIKAAH/EQkB8ycAAf8crQG0BQABugMA
AbIBAAGzCwABCQEAAbIDAAGyZwABugIAAbIDAAGyCQABsgMAAbMCAAGyZwABugGzAboEAAG6CAAC8wMA
Af8BugGzAQlvAAGyAQkFAAG6AbN5AAG6A7IBCW0AAUIBTQE+BwABPgMAASgDAAGAAwABYAMAAQEBAAEB
BgABBhYAA///AP8AAwAk/wHDBP8B/AE/Bf8BwAIAAQMBywT/AfABhwL/AY8C/wHAAgABAQHDBP8BhAEx
Av8BHwL/AcACAAEBAeEE/wEeATwBfwH+ARwC/wHAAgABAQH8A/8B/gF/Af8BPwH8ATwC/wHAAgABAQH+
AX8C/wH8Av8BnwH4AXgC/wHAAgABAQH/AT8C/wH5Av8B3wHwAfgC/wHAAgABAQH/AZ8C/wH7Av8BzwLw
Av8BwAIAAQEB/wHPAv8B8wL/Ae8B4AExAv8BwAIAAQEB/wHnAv8B9wL/AecB4AEBAv8BwAIAAQEB/wHz
Av8B9wL/AfcBwAEAAv8BwAIAAQEB/wH5Av8B9wL/AfcB4AEAAT8B/wHAAgABAQH/AfwC/wHDAv8BwwHG
AQABAwH/AcACAAEBAf8B/gF/Af8BywL/AcsBzAEAAQMB/wHAAgABAQL/AT8B/wHDAv8BwwGMAYABAQH/
AcACAAEBAv8BnwH/AeMC/wHjAfgBwAEBAf8BwAIAAQEC/wHPAf8B9wL/AfcB+QHwAQEB/wHAAgABAQL/
AecB/wH3Av8B5wH/AcABAAF/AcACAAEBAv8B8wH/AfMC/wHvAf8B5gEAAR8BwAIAAQEC/wH5Af8B+wL/
Ac8C/wGAAQcBwAIAAQEC/wH8Af8B+QL/Ac8C/wHIAQMBwAIAAQEC/wH+AX8B/AL/AZ8C/wH+AQABwAIA
AQMD/wE/Af4BfwH/AT8D/wGAAcABAAEPBP8BnwH/AT8B/gF/A/8BwQHAAQABDwT/AcMB/wGMATgE/wHx
AcABAAEfBP8BywH/AeABgwz/AcMB/wH8AT8M/wHjAf8B/gE/Jf8B/gL/AT8M/wH+Av8Bvwz/AfwCAAEf
DP8B+QFtAb8B3wz/AfsBbQG/Ad8B8AEYAQwBDwL/AQABDwHAAgABAQH7AW0BvwHfAfABGAEMAQ8B/wH+
AQABDwGAAwAB+AIAAR8B8AEYAQwBDwH8AQABPwHPBAAB+wL/Ad8B8QEYAYwBTwH5Af4BPwHPBAAB+wL/
Ad8B8AEYAQwBDwH5Af4BAAEPBAAB+wL/Ad8B8AEYAQwBDwH5Af8BAAEPBAAB+wL/Ad8B+AE4ARwBDwH5
A/8EAAH7Av8B3wH8Af4BPwEfAfkD/wQAAfsC/wHfAfwCAAEfAfkB/wEAAQ8EAAH7Av8B3wH8AgABHwH5
Af4BAAEPBAAB+wL/Ad8B/AIAAR8B+QHgAT8BzwQAAfgCAAEfAf8B/gE/Af8B+QGAAT8BzwQAAfsBbQG/
Ad8B/wH+AT8B/wH5Ab4BAAEPBAAB+wFtAb8B3wH/AgABfwH5Ab8BAAEPBAAB+wFtAb8B3wH+AgABPwH5
Ab8C/wQAAfsBbQG/Ad8B/gIAAT8B+QG/Av8EAAHwAgABDwH+AX8B/gE/AfABDwEAAQ8EAAH3Av8B9wH+
AXMB/gE/AeABDgEAAQ8EAAHwAgABBwH+AXMB/gE/AeMBwAE/Ac8EAAH3Av8B9wH+AX8B/gE/AeMBwAE/
Ac8EAAH3Av8B9wH+AX8B/gE/AeABDgEAAQ8EAAH3Av8B9wH+AgABPwHwAQ8BAAEPAYADAAH3AZ8B/AH3
Af4CAAE/BP8BgAIAAQEB9wFfAf0Bdwz/AfYB7wH7AbcM/wHxAe8B8wGHDf8B8wHnDv8B/AEfDf8L
</value>
</data>
<metadata name="imageListTool.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@@ -220,134 +229,137 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC2
HQAAAk1TRnQBSQFMAgEBCQEAASABAAEgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABMAMAAQEBAAEgBgABMP8AKwABKAH6ARkB/wEoAfoBGQH/BAABKAH6ARkB/wEoAfoBGQH/5AABQQGT
ATsBoAESARQBEgEYCAABMQFGATABUAgAATsBYAE4AWwBIQEpASEBMNgAATsBxQEwAc8kAAEhASkBIQEw
/AABOAFYATYBZNAAASgB+gEZAf8sAAEoAfoBGQH/zAABKAH6ARkB/ywAASgB+gEZAf/IAAExAUYBMAFQ
LAABMQFGATABUNAAASgB+gEZAf8sAAEoAfoBGQH/zAABKAH6ARkB/ywAASgB+gEZAf/4AAESARQBEgEY
1AABKAH6ARkB/yQAAUABmgE5AajYAAEoAfoBGQH/HAABPAG8ATMBx+QAASgB+gEZAf8BKAH6ARkB/wQA
ASgB+gEZAf8BKAH6ARkB//QAATEBRgEwAVD/AP8A/wBjAAEyATQBMgFQUAABJwH6ARgB/wEnAfoBGAH/
BAABJwH6ARgB/wEnAfoBGAH/GAABqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/
AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFa
AQgB/wGoAVoBCAH/AagBWgEIAf8YAAFkAVoBRgGeAdsBlgEQAf8B2wGWARAB/wHbAZYBEAH/AwABARwA
ATIBNAEyAVABJwH6ARgB/0AAAUsBawFHAaADEgEYCAABMgE0ATIBUAgAAT4BRQE+AWwDIQEwDAABkwFu
AUIB7wFRASgBDwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/xQAAdsBlgEQAf8UAAHbAZYBEAH/IAABJwH6ARgB/zgAAUcBogE/Ac8kAAMhATAIAAGTAW4BQgHv
AeEBvQGKAf8BUQEoAQ8B/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/
EAAB1QGWARQB/UAAAScB+gEYAf9cAAE6AUABOgFkCAABkwFuAUIB7wHhAb0BigH/AfoB6wHSAf8BUQEo
AQ8B/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AVEBKAEPAf8B4QG9AYoB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BUQEoAQ8B/xAAATkBNwE1AVkcAAHbAZYBEAH/
JAABJwH6ARgB/ywAAScB+gEYAf8sAAEnAfoBGAH/BAABkwFuAUIB7wHhAb0BigH/AfoB6wHSAf8B+gHr
AdIB/wFRASgBDwH/AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AVcBLgEVAf8BUQEoAQ8B/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AVEBKAEPAf8B+gHrAdIB/zAAATgBNwE1AVcoAAEnAfoBGAH/
KAABJwH6ARgB/ywAAScB+gEYAf8EAAGTAW4BQgHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8BUQEoAQ8B/wHhAb0BigH/AVEBKAEPAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6
AesB0gH/AeEBvQGKAf8BdQFSATkB/wH6AesB0gH/IAAB2wGWARAB/zwAAScB+gEYAf8gAAEyATQBMgFQ
LAABMgE0ATIBUAgAAZMBbgFCAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BUQEoAQ8B/wH6AesB0gH/AfoB6wHSAf8BUQEo
AQ8B/wH6AesB0gH/AfoB6wHSAf8gAAHbAZYBEAH/QAABJwH6ARgB/yAAAScB+gEYAf8sAAEnAfoBGAH/
BAABkwFuAUIB7wHhAb0BigH/AVEBKAEPAf8B+gHrAdIB/wFRASgBDwH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AdoBtgGEAf8BUQEoAQ8B/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/xAAAdsBlgEQAf8MAAHbAZYBEAH/EAABwAGLASEB8DAAAScB+gEYAf8cAAEnAfoBGAH/
LAABJwH6ARgB/wQAAZMBbgFCAe8B4QG9AYoB/wFRASgBDwH/AekBzAGhAf8BUQEoAQ8B/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2AecBzgH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8UAAFbAVMBRQGQCAAB2wGWARAB/0gAAScB+gEYAf9EAAMSARgIAAGT
AW4BQgHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/GAAB2wGWARAB/wQAAdsBlgEQAf8MAAHbAZYBEAH/PAABJwH6ARgB/xgAAScB+gEYAf8kAAFK
AXIBSAGoDAABqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFa
AQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/
AagBWgEIAf8oAAHbAZYBEAH/AUYBQwE+AXBEAAEnAfoBGAH/GAABJwH6ARgB/xwAAUgBlgFCAcfAAAEy
ATQBMgFQIAABJwH6ARgB/wEnAfoBGAH/BAABJwH6ARgB/wEnAfoBGAH/zAABMgE0ATIBUCQAATIBNAEy
AVD/AP8A/wA/AAHbAZYBDgH/AdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8B2wGWAQ4B/wwA
AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFa
AQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/
BAABqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGo
AVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEI
Af8EAAGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/
AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFa
AQgB/wwAAYcBcQFDAd8QAAHbAZYBDgH/EAABaAFfAVEBwAgAAZMBbgFCAe8BUQEoAQ8B/wHhAb0BigH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BkwFuAUIB7wFRASgBDwH/
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABK
HgAAAk1TRnQBSQFMAgEBCQEAASgBAAEoAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABMAMAAQEBAAEgBgABMP8AJwAB/wH2AesB//gAAf8B9gHrAf8DBgEIBAADDAEQ7AAB/wH2AesB/wFn
AUsBMgH/CAAB/wH2AesB/+gAAbQBoQGQAv8B9gHrAf8IAAFkAVIBQQHPAf8B9gHrAf/oAAH/AfYB6wL/
AfYB6wH/AXoBYAFJAf8BcQFWAT4B/wHiAcoBsAH/AYUBawFVAf/oAAH/AfYB6wH/AXEBVgE+Av8B9gHr
Av8B9gHrAf8BkwF+AWwB/wGOAXcBZAH/AagBjwF0Af/gAAFxAVYBPgH/BAABVAFMAUQBjwHLAbIBmQH/
AfsB8QHlAv8B9gHrAf8B+wHxAeUF/wHbAcIBqAH/AWcBSwEyAf/gAAHiAcoBsAH/BAABZgFQATsB5wF5
AWABSQH/AYABZgFPAv8B9gHrAf8BewFiAUsF/wFCAT4BOgFk5AABYAFRAUUBuAFnAUsBMgH/AXUBXAFF
Af8B4gHKAbAC/wH2AesC/wH2AesB/wHjAdYByQH/AWcBSwEyAf/wAAH7AfoB+QH/AZMBewFmAv8B9gHr
Av8B9gHrAv8B9gHrAf8DBgEI9AAB/wH2AesC/wH2AesC/wH2AesB/wHsAeEB1AH/9AABSAFCAT4BcAH/
AfYB6wH/AfEB5gHaAf//AP8A/wD/AP8ASQADMgFQUAABJwH6ARgB/wEnAfoBGAH/BAABJwH6ARgB/wEn
AfoBGAH/GAABqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZ
AQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/
AagBWQEHAf8YAAFYAVQBSwGeAdsBlgEPAf8B2wGWAQ8B/wHbAZYBDwH/AwABARwAAzIBUAEmAfoBFwH/
QAABSwFrAUcBoAMSARgIAAEyATQBMgFQCAABPgFFAT4BbAMhATAMAAGNAWsBRgHvAVABJwEOAf8B4QG9
AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/FAAB2wGWAQ8B/xQA
AdsBlgEPAf8gAAEmAfoBFwH/OAABRwGiAT8BzyQAAyEBMAgAAY0BawFGAe8B4QG9AYoB/wFQAScBDgH/
AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wGTAW4BQgHv
AVEBKAEPAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
DAADKgFAEAAB2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8IAAGT
AW4BQgHvAeEBvQGKAf8BUQEoAQ8B/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHh
Ab0BigH/AZMBbgFCAe8B4QG9AYoB/wFRASgBDwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AeEBvQGKAf8BkwFuAUIB7wHhAb0BigH/AVEBKAEPAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8B4QG9AYoB/wwAAyoBQDAAAZMBbgFCAe8B4QG9AYoB/wH6AesB0gH/AVEBKAEP
Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFRASgBDwH/AeEBvQGKAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AVEBKAEPAf8BkwFuAUIB7wHhAb0BigH/AfoB6wHS
Af8BUQEoAQ8B/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AVEBKAEPAf8B4QG9AYoB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BUQEoAQ8B/wGTAW4BQgHvAeEBvQGK
Af8B+gHrAdIB/wFRASgBDwH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BUQEoAQ8B/wHh
Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFRASgBDwH/DAADKgFA
EAAB2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8IAAGTAW4BQgHv
AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AVEBKAEPAf8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BVwEu
ARUB/wFRASgBDwH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BUQEoAQ8B/wH6AesB0gH/
AZMBbgFCAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8BUQEoAQ8B/wHhAb0BigH/AfoB6wHSAf8B3QG5
AYcB/wFXAS4BFQH/AVEBKAEPAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFRASgBDwH/
AfoB6wHSAf8BkwFuAUIB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wFRASgBDwH/AeEBvQGKAf8B+gHr
AdIB/wHdAbkBhwH/AVcBLgEVAf8BUQEoAQ8B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AVEBKAEPAf8B+gHrAdIB/wwAAyoBQAQAAdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8QAAFo
AV8BUQHACAABkwFuAUIB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AVEBKAEPAf8B4QG9
AYoB/wFRASgBDwH/AfoB6wHSAf8B5wHVAbwB/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/
AXUBUgE5Af8B+gHrAdIB/wGTAW4BQgHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BUQEo
AQ8B/wHhAb0BigH/AVEBKAEPAf8B+gHrAdIB/wHnAdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/
AeEBvQGKAf8BdQFSATkB/wH6AesB0gH/AZMBbgFCAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wFRASgBDwH/AeEBvQGKAf8BUQEoAQ8B/wH6AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/
AfoB6wHSAf8B4QG9AYoB/wF1AVIBOQH/AfoB6wHSAf8MAAMqAUAQAAHbAZYBDgH/AdsBlgEOAf8B2wGW
AQ4B/wHbAZYBDgH/AdsBlgEOAf8B2wGWAQ4B/wgAAZMBbgFCAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BUQEoAQ8B/wH6
AesB0gH/AfoB6wHSAf8BUQEoAQ8B/wH6AesB0gH/AfoB6wHSAf8BkwFuAUIB7wHhAb0BigH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFR
ASgBDwH/AfoB6wHSAf8B+gHrAdIB/wFRASgBDwH/AfoB6wHSAf8B+gHrAdIB/wGTAW4BQgHvAeEBvQGK
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AVEBKAEPAf8B+gHrAdIB/wH6AesB0gH/AVEBKAEPAf8B+gHrAdIB/wH6AesB0gH/DAADKgFA
MAABkwFuAUIB7wHhAb0BigH/AVEBKAEPAf8B+gHrAdIB/wFRASgBDwH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AdoBtgGEAf8BUQEoAQ8B/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wGTAW4BQgHvAeEBvQGKAf8BUQEoAQ8B/wH6AesB0gH/AVEBKAEPAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B2gG2AYQB/wFRASgBDwH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AZMBbgFCAe8B4QG9AYoB/wFRASgBDwH/AfoB6wHSAf8BUQEoAQ8B/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AVEBKAEP
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8IAAHbAZYBDgH/AdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/
CAAB2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8IAAGTAW4BQgHv
AeEBvQGKAf8BUQEoAQ8B/wHpAcwBoQH/AVEBKAEPAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B9gHnAc4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AZMBbgFCAe8B4QG9AYoB/wFRASgBDwH/AekBzAGhAf8BUQEoAQ8B/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2AecBzgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8BkwFuAUIB7wHhAb0BigH/AVEBKAEPAf8B6QHMAaEB/wFRASgBDwH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfYB5wHOAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgEOAf8IAAFoAV8BUQHAAdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/
EAABaAFfAVEBwAgAAZMBbgFCAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8QAAHSAZYBFQH9QAABJgH6
ARcB/1wAAToBQAE6AWQIAAGNAWsBRgHvAeEBvQGKAf8B+gHrAdIB/wFQAScBDgH/AeEBvQGKAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8BUAEnAQ4B/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wFQAScBDgH/EAADNgFZHAAB2wGWAQ8B/yQAASYB+gEXAf8sAAEnAfoBGAH/
LAABJwH6ARgB/wQAAY0BawFGAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8BUAEnAQ4B/wHhAb0BigH/
AfoB6wHSAf8B3QG5AYcB/wFWAS0BFAH/AVABJwEOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wFQAScBDgH/AfoB6wHSAf8wAAI2ATUBVygAASYB+gEXAf8oAAEnAfoBGAH/LAABJwH6ARgB/wQA
AY0BawFGAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFQAScBDgH/AeEBvQGKAf8BUAEn
AQ4B/wH6AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wF0AVEBOAH/
AfoB6wHSAf8gAAHbAZYBDwH/PAABJgH6ARcB/yAAATIBNAEyAVAsAAEyATQBMgFQCAABjQFrAUYB7wHh
Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/yAA
AdsBlgEPAf9AAAEmAfoBFwH/IAABJwH6ARgB/ywAAScB+gEYAf8EAAGNAWsBRgHvAeEBvQGKAf8BUAEn
AQ4B/wH6AesB0gH/AVABJwEOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B2gG2AYQB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/EAAB2wGWAQ8B/wwA
AdsBlgEPAf8QAAG1AYcBJwHwMAABJgH6ARcB/xwAAScB+gEYAf8sAAEnAfoBGAH/BAABjQFrAUYB7wHh
Ab0BigH/AVABJwEOAf8B6QHMAaEB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfYB5wHOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/xQA
AVEBTgFKAZAIAAHbAZYBDwH/SAABJgH6ARcB/0QAAxIBGAgAAY0BawFGAe8B4QG9AYoB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8BkwFuAUIB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8YAAHbAZYBDwH/BAAB2wGW
AQ8B/wwAAdsBlgEPAf88AAEmAfoBFwH/GAABJwH6ARgB/yQAAUoBcgFIAagMAAGoAVkBBwH/AagBWQEH
Af8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGo
AVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/ygAAdsBlgEPAf8BQQFA
AT8BcEQAASYB+gEXAf8YAAEnAfoBGAH/HAABSAGWAUIBx8AAAzIBUCAAAScB+gEYAf8BJwH6ARgB/wQA
AScB+gEYAf8BJwH6ARgB/8wAAzIBUCQAATIBNAEyAVD/AP8A/wA/AAHbAZYBDQH/AdsBlgENAf8B2wGW
AQ0B/wHbAZYBDQH/AdsBlgENAf8B2wGWAQ0B/wwAAagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEH
Af8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGo
AVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/BAABqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZ
AQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/
AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8EAAGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGo
AVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEH
Af8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wwAAX0BbAFKAd8QAAHbAZYBDQH/EAABYgFd
AVQBwAgAAY0BawFGAe8BUAEnAQ4B/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8BjQFrAUYB7wFQAScBDgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wGNAWsBRgHvAVABJwEOAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/DAADKgFAEAAB2wGWAQ0B/wHbAZYBDQH/AdsBlgEN
Af8B2wGWAQ0B/wHbAZYBDQH/AdsBlgENAf8IAAGNAWsBRgHvAeEBvQGKAf8BUAEnAQ4B/wHhAb0BigH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wGTAW4BQgHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/CAAB2wGWAQ4B/wHbAZYBDgH/AdsBlgEO
Af8B2wGWAQ4B/wgAAdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/AdsBlgEOAf8B2wGWAQ4B/wHbAZYBDgH/
DAABqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGo
AVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEI
Af8EAAGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/
AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFa
AQgB/wQAAagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEI
Af8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGoAVoBCAH/AagBWgEIAf8BqAFaAQgB/wGo
AVoBCAH//wD/AP8AAwABQgFNAT4HAAE+AwABKAMAAUADAAEwAwABAQEAAQEFAAGAAQEWAAP/AQAC/wYA
AfwBnwYAAfMBZwYAAe8B+wYAAf8B+wYAAd8B/QYAAd8B/QYAAb8B+wYAAd8B/QYAAd8B/QYAAf8B+wYA
Ae8B+wYAAvcGAAH8AZ8GAAH/AX8GAAL/BgAM/wG/Af8B/AGfAYABAAH8AR8BzwH/AfMBZwIAAfsB7wH3
Af8B7wH7AgAB9wH/AfsC/wH7AgAC9wH9Af8B3wH9AgAB/wH3Af4B/wHfAf0CAAH/AX8B/wF/Ab8B+wIA
Af8BfwH/Ab8B3wH9AgAB9wF7Af8C3wH9AgAB+wF/Af8B7wH/AfsCAAH9AXcB/wH3Ae8B+wGAAQAB/wHP
Af8B+wL3Bf8B+wH8AZ8F/wH9Af8Bfxn/AQMBgAEAAYABAAGAAQAB7wF7BgAB7wEDBgAB7wH/BgAB7wED
BgAB6AF7BgAB7wEDBgAB7wH/BgABwwEDBgAB2AF7BgABwwEDAYABAAGAAQABgAEAGP8L
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AY0BawFGAe8B4QG9AYoB/wFQAScBDgH/
AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BjQFrAUYB7wHhAb0BigH/
AVABJwEOAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wwAAyoBQDAA
AY0BawFGAe8B4QG9AYoB/wH6AesB0gH/AVABJwEOAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wFQAScBDgH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AVABJwEOAf8BjQFrAUYB7wHhAb0BigH/AfoB6wHSAf8BUAEnAQ4B/wHhAb0BigH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AVABJwEOAf8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8BUAEnAQ4B/wGNAWsBRgHvAeEBvQGKAf8B+gHrAdIB/wFQAScBDgH/AeEBvQGKAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8BUAEnAQ4B/wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wFQAScBDgH/DAADKgFAEAAB2wGWAQ0B/wHbAZYBDQH/AdsBlgENAf8B2wGW
AQ0B/wHbAZYBDQH/AdsBlgENAf8IAAGNAWsBRgHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AVABJwEO
Af8B4QG9AYoB/wH6AesB0gH/Ad0BuQGHAf8BVgEtARQB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8BUAEnAQ4B/wH6AesB0gH/AY0BawFGAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHS
Af8BUAEnAQ4B/wHhAb0BigH/AfoB6wHSAf8B3QG5AYcB/wFWAS0BFAH/AVABJwEOAf8B+gHrAdIB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFQAScBDgH/AfoB6wHSAf8BjQFrAUYB7wHhAb0BigH/AfoB6wHS
Af8B+gHrAdIB/wFQAScBDgH/AeEBvQGKAf8B+gHrAdIB/wHdAbkBhwH/AVYBLQEUAf8BUAEnAQ4B/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AVABJwEOAf8B+gHrAdIB/wwAAyoBQAQAAdsBlgEN
Af8B2wGWAQ0B/wHbAZYBDQH/AdsBlgENAf8QAAFiAV0BVAHACAABjQFrAUYB7wHhAb0BigH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AVABJwEOAf8B4QG9AYoB/wFQAScBDgH/AfoB6wHSAf8B5wHVAbwB/wHh
Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wHhAb0BigH/AXQBUQE4Af8B+gHrAdIB/wGNAWsBRgHvAeEBvQGK
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BUAEnAQ4B/wHhAb0BigH/AVABJwEOAf8B+gHrAdIB/wHn
AdUBvAH/AeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AeEBvQGKAf8BdAFRATgB/wH6AesB0gH/AY0BawFG
Ae8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFQAScBDgH/AeEBvQGKAf8BUAEnAQ4B/wH6
AesB0gH/AecB1QG8Af8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B4QG9AYoB/wF0AVEBOAH/AfoB6wHS
Af8MAAMqAUAQAAHbAZYBDQH/AdsBlgENAf8B2wGWAQ0B/wHbAZYBDQH/AdsBlgENAf8B2wGWAQ0B/wgA
AY0BawFGAe8B4QG9AYoB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8BUAEnAQ4B/wH6AesB0gH/AfoB6wHSAf8BUAEnAQ4B/wH6AesB0gH/
AfoB6wHSAf8BjQFrAUYB7wHhAb0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/wFQAScBDgH/
AfoB6wHSAf8B+gHrAdIB/wGNAWsBRgHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHr
AdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AVABJwEOAf8B+gHrAdIB/wH6AesB0gH/
AVABJwEOAf8B+gHrAdIB/wH6AesB0gH/DAADKgFAMAABjQFrAUYB7wHhAb0BigH/AVABJwEOAf8B+gHr
AdIB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AdoBtgGEAf8BUAEnAQ4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wGNAWsBRgHvAeEBvQGKAf8BUAEn
AQ4B/wH6AesB0gH/AVABJwEOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B2gG2AYQB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AY0BawFGAe8B4QG9
AYoB/wFQAScBDgH/AfoB6wHSAf8BUAEnAQ4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/
AfoB6wHSAf8B+gHrAdIB/wHaAbYBhAH/AVABJwEOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8IAAHb
AZYBDQH/AdsBlgENAf8B2wGWAQ0B/wHbAZYBDQH/CAAB2wGWAQ0B/wHbAZYBDQH/AdsBlgENAf8B2wGW
AQ0B/wHbAZYBDQH/AdsBlgENAf8IAAGNAWsBRgHvAeEBvQGKAf8BUAEnAQ4B/wHpAcwBoQH/AVABJwEO
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B9gHnAc4B/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AY0BawFGAe8B4QG9AYoB/wFQAScBDgH/AekBzAGh
Af8BUAEnAQ4B/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH2
AecBzgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BjQFrAUYB7wHhAb0BigH/AVABJwEO
Af8B6QHMAaEB/wFQAScBDgH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/AfYB5wHOAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wgAAdsBlgENAf8IAAFi
AV0BVAHAAdsBlgENAf8B2wGWAQ0B/wHbAZYBDQH/EAABYgFdAVQBwAgAAY0BawFGAe8B4QG9AYoB/wH6
AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8BjQFrAUYB7wHh
Ab0BigH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wGN
AWsBRgHvAeEBvQGKAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHS
Af8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6AesB0gH/AfoB6wHSAf8B+gHrAdIB/wH6
AesB0gH/CAAB2wGWAQ0B/wHbAZYBDQH/AdsBlgENAf8B2wGWAQ0B/wgAAdsBlgENAf8B2wGWAQ0B/wHb
AZYBDQH/AdsBlgENAf8B2wGWAQ0B/wHbAZYBDQH/DAABqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZ
AQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/
AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8EAAGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGo
AVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEH
Af8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wQAAagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/
AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZ
AQcB/wGoAVkBBwH/AagBWQEHAf8BqAFZAQcB/wGoAVkBBwH//wD/AP8AAwABQgFNAT4HAAE+AwABKAMA
AUADAAEwAwABAQEAAQEFAAGAAQEWAAP/AQAC/wYAAfsB/wYAAfIB/wYAAeYB/wYAAcwB/wYAAcAB/wYA
AcABfwYAAaABHwYAAegBDwYAAfgBBwYAAf8BgQYAAf8B8AYAAf8B+AYAAv8GAAL/BgAC/wYADP8BvwH/
AfwBnwGAAQAB/AEfAc8B/wHzAWcCAAH7Ae8B9wH/Ae8B+wIAAfcB/wH7Av8B+wIAAvcB/QH/Ad8B/QIA
Af8B9wH+Af8B3wH9AgAB/wF/Af8BfwG/AfsCAAH/AX8B/wG/Ad8B/QIAAfcBewH/At8B/QIAAfsBfwH/
Ae8B/wH7AgAB/QF3Af8B9wHvAfsBgAEAAf8BzwH/AfsC9wX/AfsB/AGfBf8B/QH/AX8Z/wEDAYABAAGA
AQABgAEAAe8BewYAAe8BAwYAAe8B/wYAAe8BAwYAAegBewYAAe8BAwYAAe8B/wYAAcMBAwYAAdgBewYA
AcMBAwGAAQABgAEAAYABABj/Cw==
</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

View File

@@ -154,6 +154,10 @@
<None Include="Resources\保存21.png" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CaliperTool\CaliperTool.csproj">
<Project>{AABF8D49-FA00-4E25-9410-4A573D48DAB1}</Project>
<Name>CaliperTool</Name>
</ProjectReference>
<ProjectReference Include="..\CommonMethods\CommonHelper.csproj">
<Project>{1C8D0DDC-2086-48A9-9586-F2B643E2FC54}</Project>
<Name>CommonHelper</Name>

View File

@@ -8,6 +8,7 @@ using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using CaliperTool;
using CommonMethods;
using FindLineTool;
using HalconDotNet;
@@ -34,9 +35,6 @@ namespace VisionEdit
createLineDelegateFun = new CreateLineDelegate(CreateLine);
}
/// <summary>
/// 拖动工具节点
/// </summary>
@@ -700,7 +698,7 @@ namespace VisionEdit
}
break;
#endregion
#region
#region FindLine
case ToolType.FindLine:
FindLine myFindLine = (FindLine)L_toolList[i].tool;
for (int j = 0; j < inputItemNum; j++)
@@ -735,7 +733,47 @@ namespace VisionEdit
}
break;
#endregion
#endregion
case ToolType.Caliper:
Caliper myCaliper = (Caliper)L_toolList[i].tool;
if(L_toolList[i].FormTool == null)
{
FormLogDisp(L_toolList[i].toolName + " 运行失败", Color.Red, treeNode);
continue;
}
for (int j = 0; j < inputItemNum; j++)
{
if (L_toolList[i].toolInput[j].IOName == "inputImage" && L_toolList[i].GetInput(L_toolList[i].toolInput[j].IOName).value == null)
{
treeNode.ForeColor = Color.Red;
myFormLog.ShowLog(L_toolList[i].toolName + " 无输入图像");
}
else
{
string sourceFrom = L_toolList[i].GetInput(L_toolList[i].toolInput[j].IOName).value.ToString();
if (L_toolList[i].toolInput[j].IOName == "InputImage")
{
string sourceToolName = Regex.Split(sourceFrom, " . ")[0];
sourceToolName = sourceToolName.Substring(3, Regex.Split(sourceFrom, " . ")[0].Length - 3);
string toolItem = Regex.Split(sourceFrom, " . ")[1];
myCaliper.inputImage = GetToolInfoByToolName(GlobalParams.myVisionJob.JobName, sourceToolName).GetOutput(toolItem).value as HObject;
myCaliper.Run();
}
if (myCaliper.ResulttRow != null)
{
myCaliper.DispMainWindow(myFormImageWindow.myHWindow);
FormLogDisp(L_toolList[i].toolName + " 运行成功", Color.Green, treeNode);
}
else
{
FormLogDisp(L_toolList[i].toolName + " 运行失败", Color.Red, treeNode);
}
}
}
break;
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More