传输优化

This commit is contained in:
liu.wenjie
2021-03-17 16:08:13 +08:00
parent 1451352125
commit 0af0e8b01a
348 changed files with 12192 additions and 863190 deletions

63
.gitattributes vendored Normal file
View File

@@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

242
.gitignore vendored Normal file
View File

@@ -0,0 +1,242 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
[Xx]64/
[Xx]86/
[Bb]uild/
bld/
[Bb]in/
[Oo]bj/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Un-comment the next line if you do not want to checkin
# your web deploy settings because they may include unencrypted
# passwords
#*.pubxml
*.publishproj
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directory
AppPackages/
BundleArtifacts/
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# LightSwitch generated files
GeneratedArtifacts/
ModelManifest.xml
# Paket dependency manager
.paket/paket.exe
# FAKE - F# Make
.fake/

Binary file not shown.

View File

@@ -1,13 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CommonMethods;
using HalconDotNet;
using HalconWindow.HalconWindow;
using ToolBase;
using static DataStruct.DataStruct;
using ChoiceTech.Halcon.Control;
namespace CaliperTool
{
@@ -16,7 +13,7 @@ namespace CaliperTool
{
public bool toolEnable = true;
/// <summary>
/// 输入姿态
/// 输入姿态..
/// </summary>
public PosXYU inputPose = new PosXYU();
/// <summary>
@@ -119,7 +116,32 @@ namespace CaliperTool
public ToolRunStatu toolRunStatu { get; set; } = ToolRunStatu.Not_Run;
public SoftwareRunState softwareRunState { get; set; } = SoftwareRunState.Debug;
public string runMessage
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public string runTime
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public void DispImage()
{

View File

@@ -46,6 +46,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="CaliperTool.cs" />
<Compile Include="CaliperToolRun.cs" />
<Compile Include="FormCaliper.cs">
<SubType>Form</SubType>
</Compile>
@@ -63,14 +64,30 @@
<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 Include="..\FormLib\FormLib.csproj">
<Project>{8C6FC8C6-8874-494B-8260-071F291AA33D}</Project>
<Name>FormLib</Name>
</ProjectReference>
<ProjectReference Include="..\ImageWindow\HWindow_Tool.csproj">
<Project>{9baa53fd-89b5-43e2-ac59-a27b006debb6}</Project>
<Name>HWindow_Tool</Name>
</ProjectReference>
<ProjectReference Include="..\ToolBase\ToolBase.csproj">
<Project>{7CD50B44-BF56-4E8E-8FA1-05F6968C1835}</Project>
<Name>ToolBase</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.Log\LogForm\LogForm.csproj">
<Project>{6b38d68f-e77b-4761-bde5-a261ea8925dd}</Project>
<Name>LogForm</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.Log\Logger\Logger.csproj">
<Project>{d4e052b9-e541-4b67-a1f9-273073ef1d4b}</Project>
<Name>Logger</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.VisionJob\ToolLib.VisionJob.csproj">
<Project>{16E8FF17-98A8-4452-AB9E-C433DC9C21F7}</Project>
<Name>ToolLib.VisionJob</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="FormCaliper.resx">

View File

@@ -0,0 +1,85 @@
/*
* ==============================================================================
*
* Filename: CaliperToolRun
* Description:
*
* Version: 1.0
* Created: 2021/2/25 16:25:51
*
* Author: liu.wenjie
*
* ==============================================================================
*/
using CommonMethods;
using CommonMethods.Interface;
using FormLib;
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using ToolLib.VisionJob;
namespace CaliperTool
{
public class CaliperRun : IToolRun
{
public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List<IToolInfo> L_toolList)
{
Caliper myCaliper = (Caliper)L_toolList[toolIndex].tool;
VisionJob myJob = VisionJobParams.pVisionProject.Project[jobName];
for (int j = 0; j < inputItemNum; j++)
{
if (L_toolList[toolIndex].toolInput[j].IOName == "InputImage" && L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value == null)
{
selectNode.ForeColor = Color.Red;
Logger.LoggerClass.WriteLog($"{L_toolList[toolIndex].toolName} 无输入图像");
break;
}
else
{
if (L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value != null)
{
string sourceFrom = L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value.ToString();
string sourceToolName = Regex.Split(sourceFrom, " . ")[0];
sourceToolName = sourceToolName.Substring(3, Regex.Split(sourceFrom, " . ")[0].Length - 3);
string toolItem = Regex.Split(sourceFrom, " . ")[1];
if (L_toolList[toolIndex].toolInput[j].IOName == "InputImage")
{
myCaliper.inputImage = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as HObject;
}
if (L_toolList[toolIndex].toolInput[j].IOName == "inputCenterRow")
{
myCaliper.expectRecStartRow = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as HTuple;
}
if (L_toolList[toolIndex].toolInput[j].IOName == "inputCenterCol")
{
myCaliper.expectRecStartColumn = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as HTuple;
}
if (L_toolList[toolIndex].toolInput[j].IOName == "inputPhi")
{
myCaliper.expectAngle = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as HTuple;
}
}
}
}
myCaliper.Run(SoftwareRunState.Release);
if (myCaliper.toolRunStatu == ToolRunStatu.Succeed)
{
myCaliper.DispMainWindow(FormImageWindow.Instance.myHWindow);
myJob.FormLogDisp(L_toolList[toolIndex].toolName + " 运行成功", Color.Green, selectNode);
}
else
{
myJob.FormLogDisp(L_toolList[toolIndex].toolName + " 运行失败", Color.Red, selectNode);
}
}
}
}

View File

@@ -8,7 +8,7 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CommonMethods;
using HalconWindow.HalconWindow;
using ChoiceTech.Halcon.Control;
namespace CaliperTool
{

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,34 +1,34 @@
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\CaliperTool.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\CaliperTool.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\CommonMethods.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\DataStruct.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\halcondotnet.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\HalconWindow.exe
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\ToolBase.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\CommonMethods.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\DataStruct.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\HalconWindow.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\ToolBase.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\halcondotnet.xml
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.dll
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\CaliperTool.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\CaliperTool.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\CommonMethods.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\HalconWindow.exe
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\ToolBase.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\CommonMethods.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\HalconWindow.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\ToolBase.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.dll
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\CaliperTool.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\CaliperTool.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\CommonMethods.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\DataStruct.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\halcondotnet.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\HalconWindow.exe
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\ToolBase.dll
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\CommonMethods.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\DataStruct.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\HalconWindow.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\ToolBase.pdb
F:\VSCode\VisionEditTest\CaliperTool\bin\Debug\halcondotnet.xml
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.dll
F:\VSCode\VisionEditTest\CaliperTool\obj\Debug\CaliperTool.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\CaliperTool.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\CaliperTool.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\CommonMethods.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\HalconWindow.exe
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\ToolBase.dll
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\CommonMethods.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\HalconWindow.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\ToolBase.pdb
G:\VisionEdit\VisionEdit\CaliperTool\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csprojResolveAssemblyReference.cache
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.FormCaliper.resources
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.csproj.GenerateResource.Cache
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.dll
G:\VisionEdit\VisionEdit\CaliperTool\obj\Debug\CaliperTool.pdb

View File

@@ -33,6 +33,9 @@
<Reference Include="halcondotnet">
<HintPath>C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>G:\2D程序最新版本\G3\UMP_BandOnly_2D_V2.5.4\UMP_BandOnly_S3\bin\x64\Debug\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
@@ -46,10 +49,14 @@
</ItemGroup>
<ItemGroup>
<Compile Include="CommonMethods.cs" />
<Compile Include="FileOperate.cs" />
<Compile Include="Interface\CommonStruct.cs" />
<Compile Include="Interface\IToolInfo.cs" />
<Compile Include="Interface\IVisionJobInterface.cs" />
<Compile Include="Interface\ToolRun.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Serialize.cs" />
<Compile Include="VisionToolAttribute.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@@ -0,0 +1,144 @@
/*
* ==============================================================================
*
* Filename: FileOperate
* Description:
*
* Version: 1.0
* Created: 2021/2/26 16:59:16
*
* Author: liu.wenjie
*
* ==============================================================================
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CommonMethods
{
public class FileTimeInfo
{
public string FileName; //文件名
public DateTime FileCreateTime; //创建时间
}
public class FileOperate
{
public static void DelFile(string filePath)
{
if (File.Exists(filePath))
{
File.Delete(filePath);
}
}
/// <summary>
/// 文件夹及其子目录的删除
/// </summary>
/// <param name="directoryPath"></param>
public static void DeleteFolder(string directoryPath)
{
try
{
foreach (string d in Directory.GetFileSystemEntries(directoryPath))
{
if (File.Exists(d))
{
FileInfo fi = new FileInfo(d);
if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1)
fi.Attributes = FileAttributes.Normal;
File.Delete(d);
}
else
DeleteFolder(d); // 递归删除
}
Directory.Delete(directoryPath);
}
catch (Exception)
{ }
}
public static FileTimeInfo GetLatestFileTimeInfo(string dir)
{
List<FileTimeInfo> list = new List<FileTimeInfo>();
DirectoryInfo d = new DirectoryInfo(dir);
foreach (DirectoryInfo fi in d.GetDirectories())
{
list.Add(new FileTimeInfo()
{
FileName = fi.FullName,
FileCreateTime = fi.CreationTime
});
}
var qry = from x in list
orderby x.FileCreateTime
select x;
return qry.LastOrDefault();
}
/// <summary>
/// 获取某目录下的所有文件(包括子目录下文件)的数量
/// </summary>
/// <param name="srcPath"></param>
/// <returns></returns>
public static int GetFileNum(string srcPath)
{
int fileNum = 0;
try
{
string[] fileList = System.IO.Directory.GetFileSystemEntries(srcPath);
foreach (string file in fileList)
{
fileNum++;
}
}
catch (Exception e)
{
}
return fileNum;
}
public static void WriteFile(string filePath, string text)
{
try
{
using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.UTF8))
{
byte[] mybyte = Encoding.UTF8.GetBytes(text);
text = Encoding.UTF8.GetString(mybyte);
sw.Write(text);
}
}
catch
{
}
}
public static string ReadFile(string filePath)
{
string readResult = string.Empty;
try
{
if (File.Exists(filePath))
{
using (StreamReader sr = new StreamReader(filePath, Encoding.UTF8))
{
readResult = sr.ReadToEnd();
byte[] mybyte = Encoding.UTF8.GetBytes(readResult);
readResult = Encoding.UTF8.GetString(mybyte);
}
}
return readResult;
}
catch (Exception ex)
{
throw ex;
}
}
}
}

View File

@@ -7,6 +7,7 @@ using System.Windows.Forms;
namespace CommonMethods
{
[Serializable]
public class IToolInfo
{
/// <summary>
@@ -26,9 +27,9 @@ namespace CommonMethods
/// </summary>
public object tool { get; set; }
/// <summary>
/// 工具窗体
/// 工具窗体,由于无法对Form进行序列化所以作为静态变量
/// </summary>
public Form FormTool { get; set; }
public static Form FormTool { get; set; }
/// <summary>
/// 工具窗体名
/// </summary>
@@ -116,6 +117,16 @@ namespace CommonMethods
toolOutput.RemoveAt(i);
}
}
public Form GetFormTool()
{
return FormTool;
}
public void SetFormTool(Form myForm)
{
FormTool = myForm;
}
}
/// <summary>

View File

@@ -0,0 +1,27 @@
/*
* ==============================================================================
*
* Filename: IToolRun
* Description:
*
* Version: 1.0
* Created: 2021/2/25 14:49:20
*
* Author: liu.wenjie
*
* ==============================================================================
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CommonMethods.Interface
{
public interface IToolRun
{
void ToolRun(int toolIndex, int inputItemNum, TreeNode selectNode, FormLog myFormLog, FormImageWindow myFormWindow, List<IToolInfo> L_toolList);
}
}

View File

@@ -26,6 +26,10 @@ namespace CommonMethods
/// </summary>
public Dictionary<TreeNode, TreeNode> D_itemAndSource { get; set; } = new Dictionary<TreeNode, TreeNode>();
/// <summary>
/// JOB上的树结构,取消该参数TreeView无法二进制序列化
/// </summary>
//public TreeView tvwOnWorkJob { get; set; } = new TreeView();
/// <summary>
/// 工具输入项个数
/// </summary>
public int inputItemNum = 0;
@@ -34,9 +38,9 @@ namespace CommonMethods
/// </summary>
public int outputItemNum = 0;
/// <summary>
/// 流程运行结果图像
/// 流程运行结果图像,取消,无法序列化
/// </summary>
public HObject jobResultImage { get; set; } = new HObject();
public static HObject jobResultImage { get; set; } = new HObject();
/// <summary>
/// 流程树中节点的最大长度
/// </summary>
@@ -83,11 +87,11 @@ namespace CommonMethods
/// <summary>
/// 流程编辑时的右击菜单
/// </summary>
public ContextMenuStrip rightClickMenu { get; set; } = new ContextMenuStrip();
public static ContextMenuStrip rightClickMenu { get; set; } = new ContextMenuStrip();
/// <summary>
/// 在空白除右击菜单
/// </summary>
public ContextMenuStrip rightClickMenuAtBlank { get; set; }
public static ContextMenuStrip rightClickMenuAtBlank { get; set; }
}
}

View File

@@ -0,0 +1,27 @@
/*
* ==============================================================================
*
* Filename: ToolRun
* Description:
*
* Version: 1.0
* Created: 2021/2/25 15:27:56
*
* Author: liu.wenjie
*
* ==============================================================================
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CommonMethods.Interface
{
public interface IToolRun
{
void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List<IToolInfo> L_toolList);
}
}

168
CommonMethods/Serialize.cs Normal file
View File

@@ -0,0 +1,168 @@
/*
* ==============================================================================
*
* Filename: Serial
* Description:
*
* Version: 1.0
* Created: 2021/2/25 17:24:56
*
* Author: liu.wenjie
*
* ==============================================================================
*/
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace CommonMethods
{
public class Serialize
{
public static void XmlSerialize<T>(string objname, T obj)
{
try
{
string filename = objname + ".xml";
if (System.IO.File.Exists(filename))
System.IO.File.Delete(filename);
using (FileStream fileStream = new FileStream(filename, FileMode.Create))
{
// 序列化为xml
XmlSerializer formatter = new XmlSerializer(typeof(T));
formatter.Serialize(fileStream, obj);
fileStream.Close();
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
public static T XmlDeserailize<T>(string objname)
{
// System.Runtime.Serialization.IFormatter formatter = new XmlSerializer(typeof(Car));
string filename = objname + ".xml";
T obj;
if (!System.IO.File.Exists(filename))
throw new Exception("对反序列化之前,请先序列化");
//Xml格式反序列化
using (Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
XmlSerializer formatter = new XmlSerializer(typeof(T));
obj = (T)formatter.Deserialize(stream);
stream.Close();
}
return obj;
}
public static void BinarySerialize<T>(string filename, T obj)
{
try
{
//string filename = objname + ".ump";
if (System.IO.File.Exists(filename))
System.IO.File.Delete(filename);
using (FileStream fileStream = new FileStream(filename, FileMode.Create))
{
// 用二进制格式序列化
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(fileStream, obj);
fileStream.Close();
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
public static T BinaryDeserialize<T>(string filename)
{
System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();
//二进制格式反序列化
T obj;
//string filename = objname + ".ump";
if (!System.IO.File.Exists(filename))
throw new Exception("在反序列化之前,请先序列化");
using (Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
{
obj = (T)formatter.Deserialize(stream);
stream.Close();
}
return obj;
}
/// <summary>
/// 把对象序列化并返回相应的字节
/// </summary>
/// <param name="pObj">需要序列化的对象</param>
/// <returns>byte[]</returns>
public static byte[] SerializeObject(object pObj)
{
if (pObj == null)
return null;
System.IO.MemoryStream _memory = new System.IO.MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(_memory, pObj);
_memory.Position = 0;
byte[] read = new byte[_memory.Length];
_memory.Read(read, 0, read.Length);
_memory.Close();
return read;
}
/// <summary>
/// 把字节反序列化成相应的对象
/// </summary>
/// <param name="pBytes">字节流</param>
/// <returns>object</returns>
public static object DeserializeObject(byte[] pBytes)
{
object _newOjb = null;
if (pBytes == null)
return _newOjb;
System.IO.MemoryStream _memory = new System.IO.MemoryStream(pBytes);
_memory.Position = 0;
BinaryFormatter formatter = new BinaryFormatter();
_newOjb = formatter.Deserialize(_memory);
_memory.Close();
return _newOjb;
}
public static void JsonSerialize<T>(T obj, string filePath)
{
string resultJson = JsonConvert.SerializeObject(obj, Formatting.Indented);
FileInfo fi = new FileInfo(filePath);
if (!fi.Directory.Exists)
{
Directory.CreateDirectory(fi.Directory.FullName);
}
FileOperate.WriteFile(filePath, resultJson);
}
public static T JsonDeserializeObject<T>(string jsonString)
{
T obj;
try
{
obj = JsonConvert.DeserializeObject<T>(FileOperate.ReadFile(jsonString));
return obj;
}
catch (Exception)
{
throw;
}
}
}
}

View File

@@ -0,0 +1,31 @@
/*
* ==============================================================================
*
* Filename: VisionToolAttribute
* Description:
*
* Version: 1.0
* Created: 2021/2/26 13:46:51
*
* Author: liu.wenjie
*
* ==============================================================================
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CommonMethods
{
//自定义Attribute
public sealed class VisionToolAttribute : Attribute
{
public ToolType ToolType { get; private set; }
public VisionToolAttribute(ToolType toolType)
{
ToolType = toolType;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
G:\VisionEdit\VisionEdit\CommonMethods\bin\Debug\CommonMethods.dll
G:\VisionEdit\VisionEdit\CommonMethods\bin\Debug\CommonMethods.pdb
G:\VisionEdit\VisionEdit\CommonMethods\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\CommonMethods\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\CommonMethods\obj\Debug\CommonMethods.dll
G:\VisionEdit\VisionEdit\CommonMethods\obj\Debug\CommonMethods.pdb
G:\VisionEdit\VisionEdit\CommonMethods\bin\Debug\CommonMethods.dll
G:\VisionEdit\VisionEdit\CommonMethods\bin\Debug\CommonMethods.pdb
G:\VisionEdit\VisionEdit\CommonMethods\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\CommonMethods\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\CommonMethods\obj\Debug\CommonMethods.dll
G:\VisionEdit\VisionEdit\CommonMethods\obj\Debug\CommonMethods.pdb

View File

@@ -0,0 +1,104 @@
<?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>{184FB08B-0D43-4747-8637-978D4F25F94F}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CreateTool</RootNamespace>
<AssemblyName>CreateTool</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevComponents.DotNetBar2, Version=14.0.0.15, Culture=neutral, PublicKeyToken=c39c3242a43eee2b, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\DotNetBar for Windows Forms\DevComponents.DotNetBar2.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" />
<Reference Include="WeifenLuo.WinFormsUI.Docking">
<HintPath>C:\Users\18819\OneDrive\桌面\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="FormToolBox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="FormToolBox.Designer.cs">
<DependentUpon>FormToolBox.cs</DependentUpon>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="FormToolBox.resx">
<DependentUpon>FormToolBox.cs</DependentUpon>
<SubType>Designer</SubType>
</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="..\ToolBase\ToolBase.csproj">
<Project>{7cd50b44-bf56-4e8e-8fa1-05f6968c1835}</Project>
<Name>ToolBase</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.Log\LogForm\LogForm.csproj">
<Project>{6b38d68f-e77b-4761-bde5-a261ea8925dd}</Project>
<Name>LogForm</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.Log\Logger\Logger.csproj">
<Project>{d4e052b9-e541-4b67-a1f9-273073ef1d4b}</Project>
<Name>Logger</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.VisionJob\ToolLib.VisionJob.csproj">
<Project>{16e8ff17-98a8-4452-ab9e-c433dc9c21f7}</Project>
<Name>ToolLib.VisionJob</Name>
</ProjectReference>
<ProjectReference Include="..\VisionJobFactory\VisionJobFactory.csproj">
<Project>{4d539eb2-e847-4d42-b6fa-03b2546dafd7}</Project>
<Name>VisionJobFactory</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>

234
CreateTool/FormToolBox.Designer.cs generated Normal file
View File

@@ -0,0 +1,234 @@
namespace CreateTool
{
partial class FormToolBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("流程", 1, 1);
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Halcon窗口", 3, 3);
System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Basler");
System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("HIKVision");
System.Windows.Forms.TreeNode treeNode5 = new System.Windows.Forms.TreeNode("获取图像", new System.Windows.Forms.TreeNode[] {
treeNode2,
treeNode3,
treeNode4});
System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("滤波");
System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("平滑");
System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("去噪");
System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("图像预处理", new System.Windows.Forms.TreeNode[] {
treeNode6,
treeNode7,
treeNode8});
System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("形状匹配");
System.Windows.Forms.TreeNode treeNode11 = new System.Windows.Forms.TreeNode("可变形匹配");
System.Windows.Forms.TreeNode treeNode12 = new System.Windows.Forms.TreeNode("灰度匹配");
System.Windows.Forms.TreeNode treeNode13 = new System.Windows.Forms.TreeNode("匹配", new System.Windows.Forms.TreeNode[] {
treeNode10,
treeNode11,
treeNode12});
System.Windows.Forms.TreeNode treeNode14 = new System.Windows.Forms.TreeNode("找线");
System.Windows.Forms.TreeNode treeNode15 = new System.Windows.Forms.TreeNode("找圆");
System.Windows.Forms.TreeNode treeNode16 = new System.Windows.Forms.TreeNode("卡尺");
System.Windows.Forms.TreeNode treeNode17 = new System.Windows.Forms.TreeNode("几何", new System.Windows.Forms.TreeNode[] {
treeNode14,
treeNode15,
treeNode16});
System.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);
this.richTextBoxEx1 = new DevComponents.DotNetBar.Controls.RichTextBoxEx();
this.imageListTool = new System.Windows.Forms.ImageList(this.components);
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// tvw_ToolBox
//
this.tvw_ToolBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.tvw_ToolBox.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.tvw_ToolBox.ImageIndex = 4;
this.tvw_ToolBox.ImageList = this.imageList1;
this.tvw_ToolBox.Indent = 32;
this.tvw_ToolBox.Location = new System.Drawing.Point(0, 0);
this.tvw_ToolBox.Name = "tvw_ToolBox";
treeNode1.ImageIndex = 1;
treeNode1.Name = "NodeJob";
treeNode1.SelectedImageIndex = 1;
treeNode1.Text = "流程";
treeNode2.ImageIndex = 3;
treeNode2.Name = "节点1";
treeNode2.SelectedImageIndex = 3;
treeNode2.Tag = "HalconTool";
treeNode2.Text = "Halcon窗口";
treeNode3.ImageKey = "图像.png";
treeNode3.Name = "节点2";
treeNode3.SelectedImageIndex = 3;
treeNode3.Text = "Basler";
treeNode4.ImageKey = "图像.png";
treeNode4.Name = "节点3";
treeNode4.SelectedImageIndex = 3;
treeNode4.Text = "HIKVision";
treeNode5.ImageIndex = 4;
treeNode5.Name = "节点0";
treeNode5.Text = "获取图像";
treeNode6.Name = "节点5";
treeNode6.Text = "滤波";
treeNode7.Name = "节点6";
treeNode7.Text = "平滑";
treeNode8.Name = "节点7";
treeNode8.Text = "去噪";
treeNode9.Name = "节点4";
treeNode9.Text = "图像预处理";
treeNode10.Name = "节点9";
treeNode10.Text = "形状匹配";
treeNode11.Name = "节点10";
treeNode11.Text = "可变形匹配";
treeNode12.Name = "节点11";
treeNode12.Text = "灰度匹配";
treeNode13.Name = "节点8";
treeNode13.Text = "匹配";
treeNode14.ImageKey = "Line.png";
treeNode14.Name = "FindLine";
treeNode14.SelectedImageKey = "Line.png";
treeNode14.Tag = "FindLine";
treeNode14.Text = "找线";
treeNode15.ImageKey = "Circle.png";
treeNode15.Name = "FindCircle";
treeNode15.SelectedImageKey = "Circle.png";
treeNode15.Text = "找圆";
treeNode16.ImageKey = "卡尺.png";
treeNode16.Name = "Caliper";
treeNode16.SelectedImageKey = "卡尺.png";
treeNode16.Tag = "Caliper";
treeNode16.Text = "卡尺";
treeNode17.Name = "节点0";
treeNode17.Text = "几何";
this.tvw_ToolBox.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
treeNode1,
treeNode5,
treeNode9,
treeNode13,
treeNode17});
this.tvw_ToolBox.SelectedImageIndex = 4;
this.tvw_ToolBox.Size = new System.Drawing.Size(417, 543);
this.tvw_ToolBox.TabIndex = 1;
this.tvw_ToolBox.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvw_ToolBox_AfterSelect);
this.tvw_ToolBox.Click += new System.EventHandler(this.tvw_ToolBox_Click);
this.tvw_ToolBox.DoubleClick += new System.EventHandler(this.tvw_ToolBox_DoubleClick);
//
// imageList1
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.imageList1.Images.SetKeyName(0, "镜头.png");
this.imageList1.Images.SetKeyName(1, "流程.png");
this.imageList1.Images.SetKeyName(2, "流程图.png");
this.imageList1.Images.SetKeyName(3, "图像.png");
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
//
//
//
//
this.richTextBoxEx1.BackgroundStyle.Class = "RichTextBoxBorder";
this.richTextBoxEx1.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square;
this.richTextBoxEx1.Dock = System.Windows.Forms.DockStyle.Fill;
this.richTextBoxEx1.Location = new System.Drawing.Point(0, 0);
this.richTextBoxEx1.Name = "richTextBoxEx1";
this.richTextBoxEx1.Rtf = "{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\fnil\\fcharset134 \\\'cb\\\'ce\\\'cc\\\'e5;}}\r\n\\viewkind4\\u" +
"c1\\pard\\lang2052\\f0\\fs18 richTextBoxEx1\\par\r\n}\r\n";
this.richTextBoxEx1.Size = new System.Drawing.Size(417, 95);
this.richTextBoxEx1.TabIndex = 2;
this.richTextBoxEx1.Text = "richTextBoxEx1";
//
// imageListTool
//
this.imageListTool.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListTool.ImageStream")));
this.imageListTool.TransparentColor = System.Drawing.Color.Transparent;
this.imageListTool.Images.SetKeyName(0, "流程.png");
this.imageListTool.Images.SetKeyName(1, "流程图.png");
this.imageListTool.Images.SetKeyName(2, "图像.png");
this.imageListTool.Images.SetKeyName(3, "图像.png");
this.imageListTool.Images.SetKeyName(4, "图像.png");
this.imageListTool.Images.SetKeyName(5, "图像.png");
this.imageListTool.Images.SetKeyName(6, "line.png");
this.imageListTool.Images.SetKeyName(7, "Circle.png");
this.imageListTool.Images.SetKeyName(8, "卡尺.png");
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.tvw_ToolBox);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.richTextBoxEx1);
this.splitContainer1.Size = new System.Drawing.Size(417, 642);
this.splitContainer1.SplitterDistance = 543;
this.splitContainer1.TabIndex = 7;
//
// FormToolBox
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(417, 642);
this.Controls.Add(this.splitContainer1);
this.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FormToolBox";
this.Text = "工具箱";
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TreeView tvw_ToolBox;
private DevComponents.DotNetBar.Controls.RichTextBoxEx richTextBoxEx1;
public System.Windows.Forms.ImageList imageList1;
public System.Windows.Forms.ImageList imageListTool;
private System.Windows.Forms.SplitContainer splitContainer1;
}
}

156
CreateTool/FormToolBox.cs Normal file
View File

@@ -0,0 +1,156 @@
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 VisionJobFactory;
using WeifenLuo.WinFormsUI.Docking;
using ToolLib.VisionJob;
namespace CreateTool
{
public partial class FormToolBox : DockContent
{
FormJobManage myFormJobManage = null;
public FormToolBox(FormJobManage inputFormJob)
{
InitializeComponent();
myFormJobManage = inputFormJob;
VisionToolFactory.InitVisionToolTypeDic();
}
private void tvw_ToolBox_AfterSelect(object sender, TreeViewEventArgs e)
{
if(e.Node.Level == 0)
{
this.richTextBoxEx1.Text = e.Node.Text;
}
else if(e.Node.Level == 1)
{
object selectTag = tvw_ToolBox.SelectedNode.Tag;
if (selectTag != null)
{
IToolInfo insertTool = VisionToolFactory.CreateToolVision((ToolType)Enum.Parse(typeof(ToolType), selectTag.ToString()));
this.richTextBoxEx1.Text = insertTool.toolDescription;
}
else
{
this.richTextBoxEx1.Text = "此工具尚未开发";
}
}
}
private void tvw_ToolBox_DoubleClick(object sender, EventArgs e)
{
try
{
if (tvw_ToolBox.SelectedNode.SelectedImageIndex == 0) //如果双击的是文件夹节点,返回
return;
if (myFormJobManage.tabControl1.TabPages.Count > 0) //如果已存在流程
{
object selectTag = tvw_ToolBox.SelectedNode.Tag;
Add_Tool((ToolType)Enum.Parse(typeof(ToolType), selectTag.ToString()));
}
else
{
//如果当前不存在可用流程,先创建流程,在添加工具
OperateJob.CreateNewJob();
}
}
catch (Exception ex)
{
Logger.LoggerClass.WriteLog("添加流程失败!", ex);
}
}
/// <summary>
/// 向流程中添加工具,需要根据选择的工具名对工具类型等进行判断
/// </summary>
/// <param name="tool">工具类型</param>
/// <param name="isInsert">插入位置,当为-1时表示在末尾插入当不为-1时表示被插入的工具索引</param>
public void Add_Tool(ToolType tool, int insertPos = -1, int imageKey = 0)
{
string toolName = GetNewToolName(tool.ToString());
IToolInfo insertTool = VisionToolFactory.CreateToolVision(tool, toolName);
TreeNode insertNode = new TreeNode();
insertNode = VisionJobParams.myJobTreeView.Nodes.Add("", insertTool.toolName, (int)tool, (int)tool); // 该工具对应的节点
// 判断节点是否添加默认输入输出图
// 输入
for (int i = 0; i < insertTool.toolInput.Count; i++)
{
TreeNode childrenInputNode = insertNode.Nodes.Add("<--" + insertTool.toolInput[i].IOName);
childrenInputNode.Tag = insertTool.toolInput[i].ioType;
childrenInputNode.ForeColor = Color.DarkMagenta;
}
// 输出
for (int i = 0; i < insertTool.toolOutput.Count; i++)
{
TreeNode childrenOutputNode = insertNode.Nodes.Add("-->" + insertTool.toolOutput[i].IOName);
childrenOutputNode.Tag = insertTool.toolOutput[i].ioType;
childrenOutputNode.ForeColor = Color.Blue;
}
insertNode.Expand();
VisionJobParams.myVisionJob.L_toolList.Add(insertTool);
}
internal string GetNewToolName(string toolType)
{
try
{
if (!TreeView_Contains_Key(toolType))
{
return toolType;
}
for (int i = 1; i < 101; i++)
{
if (!TreeView_Contains_Key(toolType + "_" + i))
{
return toolType + "_" + i;
}
}
Logger.LoggerClass.WriteLog("此工具已添加个数已达到数量上限,无法继续添加", true);
return "Error";
}
catch (Exception ex)
{
Logger.LoggerClass.WriteLog("添加出错!",ex);
return "Error";
}
}
/// <summary>
/// 判断TreeView是否已经包含某节点
/// </summary>
/// <param name="key">节点文本</param>
/// <returns>是否包含</returns>
private bool TreeView_Contains_Key(string key)
{
try
{
foreach (TreeNode node in VisionJobParams.myJobTreeView.Nodes)
{
if (node.Text == key)
return true;
}
return false;
}
catch (Exception ex)
{
Logger.LoggerClass.WriteLog("TreeView_Contains_Key 函数出错",ex);
return false;
}
}
private void tvw_ToolBox_Click(object sender, EventArgs e)
{
}
}
}

450
CreateTool/FormToolBox.resx Normal file
View File

@@ -0,0 +1,450 @@
<?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="imageList1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA8
FgAAAk1TRnQBSQFMAgEBCAEAAUABAAFAAQABIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABgAMAAWADAAEBAQABCAYAATAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm
AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM
AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA
ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz
AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ
AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM
AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA
AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA
AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ
AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/
AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA
AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm
ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ
Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz
AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA
AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM
AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM
ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM
Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA
AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM
AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ
AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz
AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
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">
<value>132, 17</value>
</metadata>
<data name="imageListTool.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
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/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/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/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" />
<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>

View File

@@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("VisionEditTest")]
[assembly: AssemblyTitle("CreateTool")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("VisionEditTest")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyProduct("CreateTool")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -20,7 +20,7 @@ using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("bf03a00c-35b5-470e-a335-0a78fd0478a6")]
[assembly: Guid("184fb08b-0d43-4747-8637-978d4f25f94f")]
// 程序集的版本信息由下列四个值组成:
//

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
G:\VisionEdit\VisionEdit\DataStruct\bin\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\DataStruct\bin\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\DataStruct\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\DataStruct\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\DataStruct\obj\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\DataStruct\obj\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\DataStruct\bin\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\DataStruct\bin\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\DataStruct\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\DataStruct\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\DataStruct\obj\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\DataStruct\obj\Debug\DataStruct.pdb

Binary file not shown.

Binary file not shown.

View File

@@ -1,11 +1,13 @@
using System;
using HalconDotNet;
using static DataStruct.DataStruct;
using ToolBase;
using CommonMethods;
namespace FindCircle
{
[Serializable]
public class FindClrcle
public class FindClrcle: IToolBase
{
/// <summary>
/// 输入位姿
@@ -58,6 +60,72 @@ namespace FindCircle
return Math.Round(resultCircleRadius, 3);
}
}
public SoftwareRunState softwareRunState
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public ToolRunStatu toolRunStatu
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public string runMessage
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public string runTime
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
HObject IToolBase.inputImage
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
/// <summary>
/// 起始角度
/// </summary>
@@ -102,5 +170,15 @@ namespace FindCircle
/// 制作模板时的输入位姿
/// </summary>
internal PosXYU templatePose = new PosXYU();
public void Run(SoftwareRunState softwareRunState)
{
throw new NotImplementedException();
}
public void DispImage()
{
throw new NotImplementedException();
}
}
}

View File

@@ -55,13 +55,21 @@
<Compile Include="Properties\AssemblyInfo.cs" />
</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="..\HalconWindowTest\HalconWindow.csproj">
<Project>{4ADC75AE-59C7-4D36-B675-A6CE51B6F5BA}</Project>
<Name>HalconWindow</Name>
<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>
</ItemGroup>
<ItemGroup>

View File

@@ -1,6 +1,6 @@
using System;
using ChoiceTech.Halcon.Control;
using System;
using System.Windows.Forms;
using HalconWindow.HalconWindow;
namespace FindCircle
{

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,26 +1,26 @@
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\FindCircleTool.dll
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\FindCircleTool.pdb
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\DataStruct.dll
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\halcondotnet.dll
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\HalconWindow.exe
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\DataStruct.pdb
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\HalconWindow.pdb
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\halcondotnet.xml
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircleTool.csprojResolveAssemblyReference.cache
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircle.FormFindCircle.resources
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircleTool.dll
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircleTool.pdb
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\FindCircleTool.dll
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\FindCircleTool.pdb
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\HalconWindow.exe
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\HalconWindow.pdb
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csprojResolveAssemblyReference.cache
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircle.FormFindCircle.resources
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.dll
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.pdb
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\FindCircleTool.dll
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\FindCircleTool.pdb
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\DataStruct.dll
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\halcondotnet.dll
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\HalconWindow.exe
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\DataStruct.pdb
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\HalconWindow.pdb
F:\VSCode\VisionEditTest\FindCircle\bin\Debug\halcondotnet.xml
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircleTool.csprojResolveAssemblyReference.cache
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircle.FormFindCircle.resources
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircleTool.dll
F:\VSCode\VisionEditTest\FindCircle\obj\Debug\FindCircleTool.pdb
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\FindCircleTool.dll
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\FindCircleTool.pdb
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\HalconWindow.exe
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\HalconWindow.pdb
G:\VisionEdit\VisionEdit\FindCircle\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csprojResolveAssemblyReference.cache
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircle.FormFindCircle.resources
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.csproj.GenerateResource.Cache
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.dll
G:\VisionEdit\VisionEdit\FindCircle\obj\Debug\FindCircleTool.pdb

Binary file not shown.

View File

@@ -46,6 +46,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="FindLine.cs" />
<Compile Include="FindLineToolRun.cs" />
<Compile Include="FormFindLine.cs">
<SubType>Form</SubType>
</Compile>
@@ -68,14 +69,30 @@
<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 Include="..\FormLib\FormLib.csproj">
<Project>{8c6fc8c6-8874-494b-8260-071f291aa33d}</Project>
<Name>FormLib</Name>
</ProjectReference>
<ProjectReference Include="..\ImageWindow\HWindow_Tool.csproj">
<Project>{9BAA53FD-89B5-43E2-AC59-A27B006DEBB6}</Project>
<Name>HWindow_Tool</Name>
</ProjectReference>
<ProjectReference Include="..\ToolBase\ToolBase.csproj">
<Project>{7CD50B44-BF56-4E8E-8FA1-05F6968C1835}</Project>
<Name>ToolBase</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.Log\LogForm\LogForm.csproj">
<Project>{6b38d68f-e77b-4761-bde5-a261ea8925dd}</Project>
<Name>LogForm</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.Log\Logger\Logger.csproj">
<Project>{d4e052b9-e541-4b67-a1f9-273073ef1d4b}</Project>
<Name>Logger</Name>
</ProjectReference>
<ProjectReference Include="..\ToolLib.VisionJob\ToolLib.VisionJob.csproj">
<Project>{16e8ff17-98a8-4452-ab9e-c433dc9c21f7}</Project>
<Name>ToolLib.VisionJob</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@@ -0,0 +1,67 @@
/*
* ==============================================================================
*
* Filename: FindLineToolRun
* Description:
*
* Version: 1.0
* Created: 2021/2/25 16:23:29
*
* Author: liu.wenjie
*
* ==============================================================================
*/
using CommonMethods;
using CommonMethods.Interface;
using FormLib;
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using ToolLib.VisionJob;
namespace FindLineTool
{
public class FindLineRun : IToolRun
{
public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List<IToolInfo> L_toolList)
{
FindLine myFindLine = (FindLine)L_toolList[toolIndex].tool;
VisionJob myJob = VisionJobParams.pVisionProject.Project[jobName];
for (int j = 0; j < inputItemNum; j++)
{
if (L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value == null)
{
selectNode.ForeColor = Color.Red;
Logger.LoggerClass.WriteLog(L_toolList[toolIndex].toolName + " 无输入图像", Logger.MsgLevel.Exception);
}
else
{
string sourceFrom = L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value.ToString();
if (L_toolList[toolIndex].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];
myFindLine.inputImage = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as HObject;
}
}
}
myFindLine.Run(SoftwareRunState.Release);
if (myFindLine.toolRunStatu == ToolRunStatu.Succeed)
{
myFindLine.DispMainWindow(FormImageWindow.Instance.myHWindow);
myJob.FormLogDisp(L_toolList[toolIndex].toolName + " 运行成功", Color.Green, selectNode);
}
else
{
myJob.FormLogDisp(L_toolList[toolIndex].toolName + " 运行失败", Color.Red, selectNode, Logger.MsgLevel.Exception);
}
}
}
}

View File

@@ -70,7 +70,10 @@
this.btn_runFindLineTool = new System.Windows.Forms.Button();
this.btn_moveCliperRegion = new System.Windows.Forms.Button();
this.cbx_edgeSelect = new System.Windows.Forms.ComboBox();
this.txbLog = new System.Windows.Forms.TextBox();
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.lb_RunStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel();
this.lb_RunTime = new System.Windows.Forms.ToolStripStatusLabel();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
@@ -78,6 +81,7 @@
this.groupBox3.SuspendLayout();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.statusStrip.SuspendLayout();
this.SuspendLayout();
//
// splitContainer1
@@ -538,22 +542,41 @@
this.cbx_edgeSelect.TabIndex = 317;
this.cbx_edgeSelect.Text = "all";
//
// txbLog
// statusStrip
//
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(0, 487);
this.txbLog.Name = "txbLog";
this.txbLog.ReadOnly = true;
this.txbLog.Size = new System.Drawing.Size(1129, 21);
this.txbLog.TabIndex = 274;
this.statusStrip.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.lb_RunStatus,
this.toolStripStatusLabel2,
this.lb_RunTime});
this.statusStrip.Location = new System.Drawing.Point(0, 484);
this.statusStrip.Name = "statusStrip";
this.statusStrip.Size = new System.Drawing.Size(1127, 24);
this.statusStrip.TabIndex = 1;
this.statusStrip.Text = "statusStrip1";
//
// lb_RunStatus
//
this.lb_RunStatus.Name = "lb_RunStatus";
this.lb_RunStatus.Size = new System.Drawing.Size(0, 19);
//
// toolStripStatusLabel2
//
this.toolStripStatusLabel2.Name = "toolStripStatusLabel2";
this.toolStripStatusLabel2.Size = new System.Drawing.Size(137, 19);
this.toolStripStatusLabel2.Text = " ";
//
// lb_RunTime
//
this.lb_RunTime.Name = "lb_RunTime";
this.lb_RunTime.Size = new System.Drawing.Size(0, 19);
//
// FormFindLine
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1127, 508);
this.Controls.Add(this.txbLog);
this.Controls.Add(this.statusStrip);
this.Controls.Add(this.splitContainer1);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FormFindLine";
@@ -571,6 +594,8 @@
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.statusStrip.ResumeLayout(false);
this.statusStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@@ -611,7 +636,6 @@
public System.Windows.Forms.Button btn_runFindLineTool;
private System.Windows.Forms.Button btn_moveCliperRegion;
public System.Windows.Forms.ComboBox cbx_edgeSelect;
public System.Windows.Forms.TextBox txbLog;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label label15;
public System.Windows.Forms.TextBox tbx_Sigma;
@@ -620,5 +644,9 @@
private System.Windows.Forms.CheckBox chBDispRec;
private System.Windows.Forms.Label label16;
public System.Windows.Forms.TextBox tbx_caliperLength2;
public System.Windows.Forms.StatusStrip statusStrip;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2;
public System.Windows.Forms.ToolStripStatusLabel lb_RunTime;
public System.Windows.Forms.ToolStripStatusLabel lb_RunStatus;
}
}

View File

@@ -1,219 +1,234 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CommonMethods;
using HalconDotNet;
using HalconWindow.HalconWindow;
namespace FindLineTool
{
public partial class FormFindLine : Form
{
public FindLine myFindLine = null;
public IToolInfo myToolInfo = null;
public HWindow_Final myHwindow = new HWindow_Final();
/// <summary>
/// 窗体对象实例
/// </summary>
private static FormFindLine _instance;
public static FormFindLine Instance
{
get
{
if(_instance != null)
{
lock (_instance)
{
if (_instance == null)
{
object line = new object();
_instance = new FormFindLine(ref line);
}
return _instance;
}
}
else
{
object line = new object();
_instance = new FormFindLine(ref line);
return _instance;
}
}
}
public FormFindLine(ref object findLine)
{
InitializeComponent();
_instance = this;
myToolInfo = (IToolInfo)findLine;
myFindLine = (FindLine)myToolInfo.tool;
//myFindLine.inputImage = ComGlobalParams.inputImageGlobal; // 暂时直接将图像传递给该工具
myFindLine.DispImage();
}
private void FormFindLine_Load(object sender, EventArgs e)
{
this.panel1.Controls.Add(myHwindow);
myHwindow.Dock = DockStyle.Fill;
InitTool();
}
private void btn_moveCliperRegion_Click(object sender, EventArgs e)
{
myFindLine.UpdateImage();
myFindLine.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_runFindLineTool_Click(object sender, EventArgs e)
{
// 更改界面中参数,实时更新类中参数
myFindLine.expectLineStartRow = Convert.ToDouble(tbx_expectLineStartRow.Text.Trim());
myFindLine.expectLineStartCol = Convert.ToDouble(tbx_expectLineStartCol.Text.Trim());
myFindLine.expectLineEndRow = Convert.ToDouble(tbx_expectLineEndRow.Text.Trim());
myFindLine.expectLineEndCol = Convert.ToDouble(tbx_expectLineEndCol.Text.Trim());
// 运行参数
myFindLine.minScore = Convert.ToDouble(tbx_minScore.Text.Trim());
myFindLine.cliperNum = Convert.ToInt16(tbx_caliperNum.Text.Trim());
myFindLine.threshold = Convert.ToInt16(tbx_threshold.Text.Trim());
myFindLine.length = Convert.ToInt16(tbx_caliperLength.Text.Trim());
myFindLine.weidth = Convert.ToInt16(tbx_caliperLength2.Text.Trim());
myFindLine.polarity = cbx_polarity.SelectedItem.ToString() == "从明到暗" ? "negative":"positive";
myFindLine.edgeSelect = cbx_edgeSelect.SelectedItem.ToString();
myFindLine.sigma = Convert.ToDouble(tbx_Sigma.Text.Trim());
// Run
myFindLine.Run(SoftwareRunState.Debug);
}
public void InitTool()
{
this.Text = myToolInfo.toolName;
btn_runFindLineTool.Focus();
Application.DoEvents();
//myFindLine.Run(); //运行一下,使卡尺显示出来
tbx_expectLineStartRow.Text = myFindLine.expectLineStartRow.ToString();
tbx_expectLineStartCol.Text = myFindLine.expectLineStartCol.ToString();
tbx_expectLineEndRow.Text = myFindLine.expectLineEndRow.ToString();
tbx_expectLineEndCol.Text = myFindLine.expectLineEndCol.ToString();
cbx_edgeSelect.Text = myFindLine.edgeSelect;
tbx_minScore.Text = myFindLine.minScore.ToString();
cbx_polarity.Text = myFindLine.polarity == "positive" ? "从暗到明" : "从明到暗";
tbx_caliperNum.Text = myFindLine.cliperNum.ToString();
tbx_caliperLength.Text = myFindLine.length.ToString();
tbx_threshold.Text = myFindLine.threshold.ToString();
tbx_Sigma.Text = myFindLine.sigma.ToString();
tbx_caliperLength2.Text = myFindLine.weidth.ToString();
chBDispRec.Checked = myFindLine.dispRec;
chBDispCross.Checked = myFindLine.dispCross;
}
#region
private void tbx_expectLineStartRow_TextChanged(object sender, EventArgs e)
{
try
{
myFindLine.expectLineStartRow = Convert.ToDouble(tbx_expectLineStartRow.Text.Trim());
}
catch
{
TextBoxMessageDisp("输入了非法字符已自动替换为默认值200", Color.Red);
tbx_expectLineStartRow.Text = "200";
}
}
private void tbx_expectLineStartCol_TextChanged(object sender, EventArgs e)
{
try
{
myFindLine.expectLineStartCol = Convert.ToDouble(tbx_expectLineStartCol.Text.Trim());
}
catch
{
TextBoxMessageDisp("输入了非法字符已自动替换为默认值200", Color.Red);
tbx_expectLineStartCol.Text = "200";
}
}
private void tbx_expectLineEndRow_TextChanged(object sender, EventArgs e)
{
try
{
myFindLine.expectLineEndRow = Convert.ToDouble(tbx_expectLineEndRow.Text.Trim());
}
catch
{
TextBoxMessageDisp("输入了非法字符已自动替换为默认值200", Color.Red);
tbx_expectLineEndRow.Text = "200";
}
}
private void tbx_expectLineEndCol_TextChanged(object sender, EventArgs e)
{
try
{
myFindLine.expectLineEndCol = Convert.ToDouble(tbx_expectLineEndCol.Text.Trim());
}
catch
{
TextBoxMessageDisp("输入了非法字符已自动替换为默认值600", Color.Red);
tbx_expectLineEndCol.Text = "600";
}
}
private void chBDispRec_CheckedChanged(object sender, EventArgs e)
{
if(chBDispRec.Checked)
{
myFindLine.dispRec = true;
}
else
{
myFindLine.dispRec = false;
}
}
private void chBDispCross_CheckedChanged(object sender, EventArgs e)
{
if(chBDispCross.Checked)
{
myFindLine.dispCross = true;
}
else
{
myFindLine.dispCross = false;
}
}
#endregion
private void FormFindLine_FormClosing(object sender, FormClosingEventArgs e)
{
myHwindow.Dispose();
this.Dispose();
this.Dispose();
GC.Collect();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CommonMethods;
using HalconDotNet;
using ChoiceTech.Halcon.Control;
namespace FindLineTool
{
public partial class FormFindLine : Form
{
public FindLine myFindLine = null;
public IToolInfo myToolInfo = null;
public HWindow_Final myHwindow = new HWindow_Final();
/// <summary>
/// 窗体对象实例
/// </summary>
private static FormFindLine _instance;
public static FormFindLine Instance
{
get
{
if(_instance != null)
{
lock (_instance)
{
if (_instance == null)
{
object line = new object();
_instance = new FormFindLine(ref line);
}
return _instance;
}
}
else
{
object line = new object();
_instance = new FormFindLine(ref line);
return _instance;
}
}
}
public FormFindLine(ref object findLine)
{
InitializeComponent();
_instance = this;
if(findLine.GetType().FullName != "System.Object")
{
myToolInfo = (IToolInfo)findLine;
myFindLine = (FindLine)myToolInfo.tool;
//myFindLine.inputImage = ComGlobalParams.inputImageGlobal; // 暂时直接将图像传递给该工具
myFindLine.DispImage();
}
}
private void FormFindLine_Load(object sender, EventArgs e)
{
this.panel1.Controls.Add(myHwindow);
myHwindow.Dock = DockStyle.Fill;
InitTool();
}
private void btn_moveCliperRegion_Click(object sender, EventArgs e)
{
myFindLine.UpdateImage();
myFindLine.DrawExpectLine(myHwindow);
}
private void btn_runFindLineTool_Click(object sender, EventArgs e)
{
// 更改界面中参数,实时更新类中参数
myFindLine.expectLineStartRow = Convert.ToDouble(tbx_expectLineStartRow.Text.Trim());
myFindLine.expectLineStartCol = Convert.ToDouble(tbx_expectLineStartCol.Text.Trim());
myFindLine.expectLineEndRow = Convert.ToDouble(tbx_expectLineEndRow.Text.Trim());
myFindLine.expectLineEndCol = Convert.ToDouble(tbx_expectLineEndCol.Text.Trim());
// 运行参数
myFindLine.minScore = Convert.ToDouble(tbx_minScore.Text.Trim());
myFindLine.cliperNum = Convert.ToInt16(tbx_caliperNum.Text.Trim());
myFindLine.threshold = Convert.ToInt16(tbx_threshold.Text.Trim());
myFindLine.length = Convert.ToInt16(tbx_caliperLength.Text.Trim());
myFindLine.weidth = Convert.ToInt16(tbx_caliperLength2.Text.Trim());
myFindLine.polarity = cbx_polarity.SelectedItem.ToString() == "从明到暗" ? "negative":"positive";
myFindLine.edgeSelect = cbx_edgeSelect.SelectedItem.ToString();
myFindLine.sigma = Convert.ToDouble(tbx_Sigma.Text.Trim());
// Run
myFindLine.Run(SoftwareRunState.Debug);
}
public void InitTool()
{
this.Text = myToolInfo.toolName;
btn_runFindLineTool.Focus();
Application.DoEvents();
//myFindLine.Run(); //运行一下,使卡尺显示出来
tbx_expectLineStartRow.Text = myFindLine.expectLineStartRow.ToString();
tbx_expectLineStartCol.Text = myFindLine.expectLineStartCol.ToString();
tbx_expectLineEndRow.Text = myFindLine.expectLineEndRow.ToString();
tbx_expectLineEndCol.Text = myFindLine.expectLineEndCol.ToString();
cbx_edgeSelect.Text = myFindLine.edgeSelect;
tbx_minScore.Text = myFindLine.minScore.ToString();
cbx_polarity.Text = myFindLine.polarity == "positive" ? "从暗到明" : "从明到暗";
tbx_caliperNum.Text = myFindLine.cliperNum.ToString();
tbx_caliperLength.Text = myFindLine.length.ToString();
tbx_threshold.Text = myFindLine.threshold.ToString();
tbx_Sigma.Text = myFindLine.sigma.ToString();
tbx_caliperLength2.Text = myFindLine.weidth.ToString();
chBDispRec.Checked = myFindLine.dispRec;
chBDispCross.Checked = myFindLine.dispCross;
}
/// <summary>
/// 设定工具运行状态
/// </summary>
/// <param name="msg">运行中的信息</param>
/// <param name="status">运行状态</param>
public void SetToolStatus(string msg, ToolRunStatu status)
{
if(myFindLine!=null)
{
myFindLine.runMessage = msg;
myFindLine.toolRunStatu = status;
lb_RunStatus.Text = myFindLine.toolRunStatu == ToolRunStatu.Succeed ? "工具运行成功!" : $"工具运行异常, 异常原因:{myFindLine.runMessage}";
lb_RunTime.Text = myFindLine.runTime;
if (myFindLine.toolRunStatu == ToolRunStatu.Succeed)
{
statusStrip.BackColor = Color.LimeGreen;
}
else
{
statusStrip.BackColor = Color.Red;
}
}
}
#region
private void tbx_expectLineStartRow_TextChanged(object sender, EventArgs e)
{
try
{
myFindLine.expectLineStartRow = Convert.ToDouble(tbx_expectLineStartRow.Text.Trim());
}
catch
{
SetToolStatus("输入了非法字符已自动替换为默认值200", ToolRunStatu.Input_Value_Type_Error);
tbx_expectLineStartRow.Text = "200";
}
}
private void tbx_expectLineStartCol_TextChanged(object sender, EventArgs e)
{
try
{
myFindLine.expectLineStartCol = Convert.ToDouble(tbx_expectLineStartCol.Text.Trim());
}
catch
{
SetToolStatus("输入了非法字符已自动替换为默认值200", ToolRunStatu.Input_Value_Type_Error);
tbx_expectLineStartCol.Text = "200";
}
}
private void tbx_expectLineEndRow_TextChanged(object sender, EventArgs e)
{
try
{
myFindLine.expectLineEndRow = Convert.ToDouble(tbx_expectLineEndRow.Text.Trim());
}
catch
{
SetToolStatus("输入了非法字符已自动替换为默认值200", ToolRunStatu.Input_Value_Type_Error);
tbx_expectLineEndRow.Text = "200";
}
}
private void tbx_expectLineEndCol_TextChanged(object sender, EventArgs e)
{
try
{
myFindLine.expectLineEndCol = Convert.ToDouble(tbx_expectLineEndCol.Text.Trim());
}
catch
{
SetToolStatus("输入了非法字符已自动替换为默认值600", ToolRunStatu.Input_Value_Type_Error);
tbx_expectLineEndCol.Text = "600";
}
}
private void chBDispRec_CheckedChanged(object sender, EventArgs e)
{
if(chBDispRec.Checked)
{
myFindLine.dispRec = true;
}
else
{
myFindLine.dispRec = false;
}
}
private void chBDispCross_CheckedChanged(object sender, EventArgs e)
{
if(chBDispCross.Checked)
{
myFindLine.dispCross = true;
}
else
{
myFindLine.dispCross = false;
}
}
#endregion
private void FormFindLine_FormClosing(object sender, FormClosingEventArgs e)
{
myHwindow.Dispose();
this.Dispose();
this.Dispose();
GC.Collect();
}
}
}

View File

@@ -117,6 +117,9 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<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>

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.

File diff suppressed because it is too large Load Diff

View File

@@ -1,34 +1,34 @@
F:\VSCode\VisionEditTest\FindLine\bin\Debug\FindLineTool.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\FindLineTool.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\CommonMethods.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\DataStruct.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\halcondotnet.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\HalconWindow.exe
F:\VSCode\VisionEditTest\FindLine\bin\Debug\ToolBase.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\CommonMethods.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\DataStruct.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\HalconWindow.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\ToolBase.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\halcondotnet.xml
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.csprojResolveAssemblyReference.cache
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.FormFindLine.resources
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.dll
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\FindLineTool.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\FindLineTool.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\CommonMethods.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\HalconWindow.exe
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\ToolBase.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\CommonMethods.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\HalconWindow.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\ToolBase.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.csprojResolveAssemblyReference.cache
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.FormFindLine.resources
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.dll
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\FindLineTool.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\FindLineTool.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\CommonMethods.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\DataStruct.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\halcondotnet.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\HalconWindow.exe
F:\VSCode\VisionEditTest\FindLine\bin\Debug\ToolBase.dll
F:\VSCode\VisionEditTest\FindLine\bin\Debug\CommonMethods.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\DataStruct.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\HalconWindow.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\ToolBase.pdb
F:\VSCode\VisionEditTest\FindLine\bin\Debug\halcondotnet.xml
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.csprojResolveAssemblyReference.cache
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.FormFindLine.resources
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.dll
F:\VSCode\VisionEditTest\FindLine\obj\Debug\FindLineTool.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\FindLineTool.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\FindLineTool.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\CommonMethods.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\DataStruct.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\halcondotnet.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\HalconWindow.exe
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\ToolBase.dll
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\CommonMethods.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\DataStruct.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\HalconWindow.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\ToolBase.pdb
G:\VisionEdit\VisionEdit\FindLine\bin\Debug\halcondotnet.xml
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.csprojResolveAssemblyReference.cache
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.FormFindLine.resources
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.csproj.GenerateResource.Cache
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.dll
G:\VisionEdit\VisionEdit\FindLine\obj\Debug\FindLineTool.pdb

Binary file not shown.

Binary file not shown.

80
FormLib/FormImageWindow.cs.Designer.cs generated Normal file
View File

@@ -0,0 +1,80 @@
namespace FormLib
{
partial class FormImageWindow
{
/// <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(FormImageWindow));
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.panel1 = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// comboBox1
//
this.comboBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(0, 0);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(899, 28);
this.comboBox1.TabIndex = 3;
//
// panel1
//
this.panel1.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.panel1.BackColor = System.Drawing.SystemColors.Control;
this.panel1.Location = new System.Drawing.Point(0, 28);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(899, 552);
this.panel1.TabIndex = 2;
//
// FormImageWindow
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(899, 580);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.panel1);
this.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FormImageWindow";
this.Text = "图像";
this.Load += new System.EventHandler(this.FormImageWindow_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.Panel panel1;
}
}

View File

@@ -0,0 +1,44 @@
using ChoiceTech.Halcon.Control;
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 WeifenLuo.WinFormsUI.Docking;
namespace FormLib
{
public partial class FormImageWindow : DockContent
{
public HWindow_Final myHWindow = new HWindow_Final();
public FormImageWindow()
{
InitializeComponent();
_instance = this;
}
public string m_fileName = string.Empty;
/// <summary>
/// 窗体对象实例
/// </summary>
private static FormImageWindow _instance;
public static FormImageWindow Instance
{
get
{
if (_instance == null)
_instance = new FormImageWindow();
return _instance;
}
}
private void FormImageWindow_Load(object sender, EventArgs e)
{
this.panel1.Controls.Add(myHWindow);
myHWindow.Dock = DockStyle.Fill;
}
}
}

File diff suppressed because it is too large Load Diff

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