mirror of
https://github.com/eggplantlwj/VisionEdit.git
synced 2026-03-28 11:16:34 +08:00
传输优化
This commit is contained in:
123
ToolLib.VisionJob/FormJobManage.Designer.cs
generated
Normal file
123
ToolLib.VisionJob/FormJobManage.Designer.cs
generated
Normal file
@@ -0,0 +1,123 @@
|
||||
namespace ToolLib.VisionJob
|
||||
{
|
||||
partial class FormJobManage
|
||||
{
|
||||
/// <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(FormJobManage));
|
||||
this.tabJobUnion = new System.Windows.Forms.TabControl();
|
||||
this.btnCycleRun = new System.Windows.Forms.Button();
|
||||
this.btnSignael = new System.Windows.Forms.Button();
|
||||
this.picDeleteJob = new System.Windows.Forms.PictureBox();
|
||||
this.picNewJob = new System.Windows.Forms.PictureBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picDeleteJob)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picNewJob)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tabJobUnion
|
||||
//
|
||||
this.tabJobUnion.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.tabJobUnion.Location = new System.Drawing.Point(-1, 1);
|
||||
this.tabJobUnion.Name = "tabJobUnion";
|
||||
this.tabJobUnion.SelectedIndex = 0;
|
||||
this.tabJobUnion.Size = new System.Drawing.Size(373, 588);
|
||||
this.tabJobUnion.TabIndex = 0;
|
||||
//
|
||||
// btnCycleRun
|
||||
//
|
||||
this.btnCycleRun.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnCycleRun.Location = new System.Drawing.Point(218, 595);
|
||||
this.btnCycleRun.Name = "btnCycleRun";
|
||||
this.btnCycleRun.Size = new System.Drawing.Size(63, 33);
|
||||
this.btnCycleRun.TabIndex = 1;
|
||||
this.btnCycleRun.Text = "连续运行";
|
||||
this.btnCycleRun.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// btnSignael
|
||||
//
|
||||
this.btnSignael.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.btnSignael.Location = new System.Drawing.Point(297, 595);
|
||||
this.btnSignael.Name = "btnSignael";
|
||||
this.btnSignael.Size = new System.Drawing.Size(63, 33);
|
||||
this.btnSignael.TabIndex = 1;
|
||||
this.btnSignael.Text = "单次运行";
|
||||
this.btnSignael.UseVisualStyleBackColor = true;
|
||||
this.btnSignael.Click += new System.EventHandler(this.btnSignael_Click);
|
||||
//
|
||||
// picDeleteJob
|
||||
//
|
||||
this.picDeleteJob.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.picDeleteJob.Image = ((System.Drawing.Image)(resources.GetObject("picDeleteJob.Image")));
|
||||
this.picDeleteJob.Location = new System.Drawing.Point(53, 595);
|
||||
this.picDeleteJob.Name = "picDeleteJob";
|
||||
this.picDeleteJob.Size = new System.Drawing.Size(35, 40);
|
||||
this.picDeleteJob.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.picDeleteJob.TabIndex = 2;
|
||||
this.picDeleteJob.TabStop = false;
|
||||
//
|
||||
// picNewJob
|
||||
//
|
||||
this.picNewJob.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.picNewJob.Image = ((System.Drawing.Image)(resources.GetObject("picNewJob.Image")));
|
||||
this.picNewJob.Location = new System.Drawing.Point(12, 595);
|
||||
this.picNewJob.Name = "picNewJob";
|
||||
this.picNewJob.Size = new System.Drawing.Size(35, 40);
|
||||
this.picNewJob.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||
this.picNewJob.TabIndex = 2;
|
||||
this.picNewJob.TabStop = false;
|
||||
//
|
||||
// FormJobManage
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(372, 636);
|
||||
this.Controls.Add(this.picDeleteJob);
|
||||
this.Controls.Add(this.picNewJob);
|
||||
this.Controls.Add(this.btnSignael);
|
||||
this.Controls.Add(this.btnCycleRun);
|
||||
this.Controls.Add(this.tabJobUnion);
|
||||
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 = "FormJobManage";
|
||||
this.Text = "JobManage";
|
||||
this.Load += new System.EventHandler(this.FormJobManage_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.picDeleteJob)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.picNewJob)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
private System.Windows.Forms.Button btnCycleRun;
|
||||
private System.Windows.Forms.Button btnSignael;
|
||||
private System.Windows.Forms.PictureBox picNewJob;
|
||||
private System.Windows.Forms.PictureBox picDeleteJob;
|
||||
public System.Windows.Forms.TabControl tabJobUnion;
|
||||
}
|
||||
}
|
||||
46
ToolLib.VisionJob/FormJobManage.cs
Normal file
46
ToolLib.VisionJob/FormJobManage.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
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 ToolLib.VisionJob
|
||||
{
|
||||
public partial class FormJobManage : DockContent
|
||||
{
|
||||
public FormJobManage()
|
||||
{
|
||||
InitializeComponent();
|
||||
_instance = this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 窗体对象实例
|
||||
/// </summary>
|
||||
private static FormJobManage _instance;
|
||||
public static FormJobManage Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null)
|
||||
_instance = new FormJobManage();
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
private void FormJobManage_Load(object sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void btnSignael_Click(object sender, EventArgs e)
|
||||
{
|
||||
string jobName = tabJobUnion.SelectedTab.Text;
|
||||
VisionJobParams.pVisionProject.Project[jobName].Run();
|
||||
}
|
||||
}
|
||||
}
|
||||
273
ToolLib.VisionJob/FormJobManage.resx
Normal file
273
ToolLib.VisionJob/FormJobManage.resx
Normal file
@@ -0,0 +1,273 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="picDeleteJob.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABGdBTUEAALGPC/xhBQAACJNJREFUeF7t
|
||||
nWF120oYRAshEAqhEAohEAIhEMogEAKhEALhQSiEQHjvm9Pteel0O/Y6lmznu/ec+We58t0dS1qp8ScA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOIXHx8e7ypeRrzvkc+Vu/PMA10NNTJVAvFR+VF4r/14w
|
||||
2ofvFfFl7CbAftTE0xFC/FOZTdJrigrzMHYdYDtqoqkY38akm03Ga8/T+CgA56Uml06lbuGIcSj6DJx6
|
||||
wfmoCSUufW1x7jyOjwdwOppIxWyCfYRwygWnUxNIzCbWRwpHElhHE6eYTaiPmPvxsQEOUxNGq1Uf7Zoj
|
||||
RZ/18/j4AJmaLE9vJk+XfB8fH+Dv1ETRcu5sAq1E90l0Z/15p/y6iz/bl5V8HRoA5tQk0Y3A2eQ5FE1S
|
||||
PRd10Weixj7oUZPZPh7K83gbgD+pCaJrj9VvYt14u7pvXu3T2LfZPv8tr2NzgD+pCXJvE+ZQVKarvbit
|
||||
fVPhV0vCc1swpyaHmE2aWbTyc/WPbNQ+rq7IfRubAvxOTQ5d8M4mzSw3M5G0r7bvKaxmwRxNDpssKTdz
|
||||
c632dWVl7mVsBvA7NTlWztdv5saa9tX2PeWfsRnA72hy2GRJoSDQC00OmywpFAR6oclhkyWFgsB+1MA8
|
||||
VPQM1CWzshyqFa/Ze1xjVlbn5ECLFcfk16MuK5ntn4eni52SInmzASP9wiMvjqSYJNI3FMSRFJNE+oaC
|
||||
OJJikkjfUBBHUkwS6RsK4kiKSSJ9Q0EcSTFJpG8oiCMpJon0DQVxJMUkkb6hII6kmCTSNxTEkRSTRPqG
|
||||
gjiSYpJI31AQR1JMEukbCuJIikkifUNBHEkxSaRvKIgjKSaJ9A0FcSTFJJG+oSCOpJgk0jcUxJEUk0T6
|
||||
hoI4kmKSSN9QEEdSTBLpGwrilBT9kWX9eZpjsvK3ZlW82XuQ92flS01/rWT2HtOMaQGnUALFbBBm4aeO
|
||||
N6LcrnxRMQ57UbLFbBBm4c/5b0S5FTPns3DatBcle+Wbix+E2Yhyu/KDQxRkLyTb5KfwV/o2Qm7NdQq/
|
||||
O7IXkm3yUyjIRpRb/Q7izPksFGQvJNvkp/DTxhsht+Y6hYLshWSb/BQKshFya65TKMheSLbJT6EgGyG3
|
||||
5jqFguyFZJv8FAqyEXJrrlMoyF5ItslPObog9VrdzT8qY5OTmb3n3zI2OZnZe/4tY5OjqNdTkGtEsk1+
|
||||
ykpBdvuFqdpezN53lnfd7Kzt9fjG7H1nOfoXpuq1FOQakWyTn0JBKEgvJNvkp1AQCtILyTb5KRSEgvRC
|
||||
sk1+CgWhIL2QbJOfQkEoSC8k2+SnUBAK0gvJNvkpFISC9EKyTX4KBaEgvZBsk59CQShILyTb5KdQEArS
|
||||
C8k2+SkUhIL0QrJNfgoFoSC9kGyTn0JBKEgvJNvkp1AQCtILyTb5KRSEgvRCsk1+CgWhIL2QbJOfQkEo
|
||||
SC8k2+SnUBAK0gvJNvkpFISC9EKyTX4KBaEgvZBsk59CQShILyTb5KdQEArSC8k2+SkUhIL0QrJNfgoF
|
||||
oSC9kGyTn0JBKEgvJNvkp1AQCtILyTb5KRSEgvRCsk1+CgWhIL2QbJOfQkEoSC8k2+SnUBAK0gvJNvkp
|
||||
FISC9EKyTX4KBaEgvZBsk59CQShILyTb5KdQEArSC8k2+SkUhIL0QrJNfgoFoSC9kGyTn0JBKEgvJNvk
|
||||
p1AQCtILyTb5KRSEgvRCsk1+CgWhIL2QbJOfQkEoSC8k2+SnUBAK0gvJNvkpFISC9EKyTX4KBaEgvZBs
|
||||
k59CQShILyTb5KdQEArSC8k2+SkUhIL0QrJNfgoFoSC9kGyTn0JBKEgvJNvkp1AQCtILyTb5KRSEgvRC
|
||||
sk1+CgWhIL2QbJOfQkEoSC8k2+SnUBAK0gvJNvkpFISC9EKyTX4KBaEgvZBsk59CQShILyTb5KdQEArS
|
||||
C8k2+SkUhIL0QrJNfgoFoSC9kGyTn0JBKEgvJNvkp1AQCtILyTb5KRSEgvRCsk1+CgWhIL2QbJOfQkEo
|
||||
SC8k2+SnUBAK0gvJNvkpFISC9EKyTX4KBaEgvZBsk59CQShILyTb5KdQEArSC8k2+SkUhIL0QrJNfgoF
|
||||
oSC9kGyTn0JBKEgvJNvkp1AQCtILyTb5KRSEgvRCsk1+CgWhIL2QbJOfQkEoSC8k2+SnUBAK0gvJNvkp
|
||||
FISC9EKyTX4KBaEgvSjZzyY/hYJQkF6U7CeTn/I4NjtIvZSCrBXkwbZNeR6bwdaU7G8mP4WCbFcQMXuP
|
||||
WZ7GZrA1JXulIEdPrnotBaEgt0/J3uTQXq+lIGsF2eRUF95Jub5/I/5Qjr44rNfqyKQFgGPy3oLoAnf2
|
||||
vrPcj81Oora/s/dLOfqbfrx+5nyWd30GWKBka8BngzDL69gMzky5XVluf9cXCixSwl9tAFLuxmZwJuS0
|
||||
cuwY8CW1NyX9xQYh5eh7IXAccmqOU17GZrAXJX3lApE1+DNTTldWElnB2puSvnKhrlMBzoHPRLlcOb1S
|
||||
uEC/BCX+hw1EyruWSuF/5NLcpqhIXANeghK/cpqlfBmbwonIYWXl6MEzWJei5K/cAFN0xOHb7ETkrrKy
|
||||
OKJwenVJagBWTrMUfftxJFlEziqrrn+MzeFS1CCsXKy/jW5ysfx7ADmq6FR25bTqV3i85BqocVh5hsqj
|
||||
gddpgwqjiUB+PkIip6tHjLfR9pzOXgM1EDr8zwaJXC4cna+JGpCVB+fItmHl6tqoQdEKy3tOtch5wqnV
|
||||
taKBqZxyMUnOE1YIr50aIN0boST7R8657rgFaqBOWbMnp0fl4IbgrVGDxoX79tESOdcct0oNnv7/Oqdc
|
||||
54+cPgzNcOvUYIrV54jIn5FDwVHjI1IDq4t4oYHmOiVHRwkt28qVHnFnhaorGvyKnjsiP11whAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAWfPr0H/jQ1+arHDMPAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="picNewJob.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuVEQrblRFq25YSftuWEn7blhJ+25YSftuW
|
||||
En7blhJ+25YSftuWEn7blhJ+2pURaNqVEQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25URsduWEv/blhL/25YS/9uW
|
||||
Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25URsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
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
|
||||
EgoAAAAA25YSftqVEoEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25URCtuW
|
||||
EWzalRH325UShduWEn7blhK/25USv9qVEWjalREKAAAAAAAAAAAAAAAA25URCtuVEWrblhJ+25YSftuW
|
||||
En7blhJ+25YSftuWEn7blhJ+25YSftuWEn7alRFo2pURCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AADblRGx25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uVEbEAAAAAAAAAAAAAAADblRGx25YS/9uW
|
||||
Ev/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uWEv/blRGxAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAA25IQBNuVEffblRH725YRg9uWEn7blhJ+25YSftuWEoXalRL525YR+9uTEAjbkxAI2pMQDNuV
|
||||
EffblRH725YRg9uWEn7blhJ+25YSftuWEn7blhJ+25YSftuWEn7blhKF2pUS+duWEfsAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAADbkxAI25UR99uVEffbkxAIAAAAAAAAAAAAAAAA2ZUSCtqVEvXblhL/25UR99uV
|
||||
EffalRH32pUS/9uVEffbkxAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANmVEgralRL125YS/wAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAANqTEAbalRH125UR+9uVEYPblhJ+25YSftuWEn7blRKF2pUS+duW
|
||||
Ev0AAAAAAAAAANqTEAbalRH125UR+9uVEYPblhJ+25YSftuWEn7blhJ+25YSftuWEn7blhJ+25UShdqV
|
||||
EvnblhL9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANuVEa3blhL/25YS/9uWEv/blhL/25YS/9uW
|
||||
Ev/blhL/2pURrwAAAAAAAAAAAAAAANuVEa3blhL/25YS/9uWEv/blhL/25YS/9uWEv/blhL/25YS/9uW
|
||||
Ev/blhL/25YS/9qVEa8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA25URCtuVEWbblhJ+25YSftuW
|
||||
En7blhJ+25YSftqVEmbblREKAAAAAAAAAAAAAAAA25URCtuVEWbblhJ+25YSftuWEn7blhJ+25YSftuW
|
||||
En7blhJ+25YSftuWEn7alRJm25URCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////gAP/gA/j/j8f8/7/j+P+/4AD/v/
|
||||
///7////+/////v+AA/7/j+P+4B/z/u+P4/7vgAP+7////u////5P///4A4AD+OOP4/nwH/P444/j+AO
|
||||
AA////////////////////////////////8=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
||||
234
ToolLib.VisionJob/FormToolBox.Designer.cs
generated
Normal file
234
ToolLib.VisionJob/FormToolBox.Designer.cs
generated
Normal file
@@ -0,0 +1,234 @@
|
||||
namespace ToolLib.VisionJob
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
88
ToolLib.VisionJob/FormToolBox.cs
Normal file
88
ToolLib.VisionJob/FormToolBox.cs
Normal file
@@ -0,0 +1,88 @@
|
||||
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 WeifenLuo.WinFormsUI.Docking;
|
||||
using ToolLib.VisionJob;
|
||||
using VisionJobFactory;
|
||||
|
||||
namespace ToolLib.VisionJob
|
||||
{
|
||||
public partial class FormToolBox : DockContent
|
||||
{
|
||||
public FormToolBox()
|
||||
{
|
||||
InitializeComponent();
|
||||
VisionToolFactory.InitVisionToolTypeDic();
|
||||
}
|
||||
/// <summary>
|
||||
/// 窗体对象实例
|
||||
/// </summary>
|
||||
private static FormToolBox _instance;
|
||||
public static FormToolBox Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null)
|
||||
_instance = new FormToolBox();
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
|
||||
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(VisionJobParams.pVisionProject.Project.Count == 0) // 若当前无流程,需要先建立项目和流程树,并对其进行初始化
|
||||
{
|
||||
OperateProject.Instance.CreateNewJob();
|
||||
}
|
||||
if (VisionJobParams.pVisionProject.Project.Count > 0) //再次确认已存在流程
|
||||
{
|
||||
object selectTag = tvw_ToolBox.SelectedNode.Tag;
|
||||
OperateTreeView.Instance.Add_Tool((ToolType)Enum.Parse(typeof(ToolType), selectTag.ToString()));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("添加流程失败!", ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void tvw_ToolBox_Click(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
450
ToolLib.VisionJob/FormToolBox.resx
Normal file
450
ToolLib.VisionJob/FormToolBox.resx
Normal 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>
|
||||
195
ToolLib.VisionJob/OperateProject.cs
Normal file
195
ToolLib.VisionJob/OperateProject.cs
Normal file
@@ -0,0 +1,195 @@
|
||||
/*
|
||||
* ==============================================================================
|
||||
*
|
||||
* Filename: OperateJob
|
||||
* Description:
|
||||
*
|
||||
* Version: 1.0
|
||||
* Created: 2021/2/25 15:23:31
|
||||
*
|
||||
* Author: liu.wenjie
|
||||
*
|
||||
* ==============================================================================
|
||||
*/
|
||||
using CommonMethods;
|
||||
using Logger;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ToolLib.VisionJob
|
||||
{
|
||||
public class OperateProject
|
||||
{
|
||||
private static OperateProject _instance;
|
||||
private static readonly object lockObject = new object();
|
||||
private OperateProject() { }
|
||||
/// <summary>
|
||||
/// 操作者单例模式调用
|
||||
/// </summary>
|
||||
public static OperateProject Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_instance == null)
|
||||
{
|
||||
lock (lockObject)
|
||||
{
|
||||
if (_instance == null)
|
||||
{
|
||||
_instance = new OperateProject();
|
||||
}
|
||||
}
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
public void CreateNewJob(string jobName = "newJob", bool newAddJob = true)
|
||||
{
|
||||
TabPage newTab = new TabPage(jobName);
|
||||
newTab.Controls.Add(new TreeView());
|
||||
FormJobManage.Instance.tabJobUnion.TabPages.Add(newTab);
|
||||
if(newAddJob)
|
||||
{
|
||||
VisionJobParams.pVisionProject.Project.Add(jobName, new VisionJob(jobName));
|
||||
}
|
||||
InitJob(VisionJobParams.pVisionProject.Project[jobName]);
|
||||
}
|
||||
|
||||
public void SaveJob()
|
||||
{
|
||||
// Serialize.BinarySerialize($"{VisionJobParams.sSysConfigPath}Vision.prj" , VisionJobParams.myProject);
|
||||
//SaveFileDialog saveFileDialog = new SaveFileDialog();
|
||||
//saveFileDialog.Title = "请指定项目保存路径";
|
||||
//saveFileDialog.Filter = "项目文件|*.pjt";
|
||||
//saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
|
||||
//if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
//{
|
||||
// try
|
||||
// {
|
||||
// Serialize.BinarySerialize(saveFileDialog.FileName, VisionJobParams.myProject);
|
||||
// LoggerClass.WriteLog("项目保存成功");
|
||||
// }
|
||||
// catch (Exception ex)
|
||||
// {
|
||||
// LoggerClass.WriteLog("项目保存失败", ex);
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
public void InitJob(VisionJob myJob)
|
||||
{
|
||||
myJob.GetJobTree().Dock = DockStyle.Fill;
|
||||
myJob.GetJobTree().ImageList = FormToolBox.Instance.imageListTool;
|
||||
myJob.GetJobTree().Font = new Font("微软雅黑", 9, FontStyle.Bold);
|
||||
|
||||
myJob.GetJobTree().Scrollable = true;
|
||||
myJob.GetJobTree().ItemHeight = 20;
|
||||
myJob.GetJobTree().ShowLines = false;
|
||||
myJob.GetJobTree().AllowDrop = true;
|
||||
//myTreeView.ImageList = Job.imageList;
|
||||
|
||||
// 在窗体UI出现变化时,更新画线
|
||||
myJob.GetJobTree().AfterSelect += myJob.tvw_job_AfterSelect;
|
||||
myJob.GetJobTree().ChangeUICues += myJob.MyJobTreeView_ChangeUICues;
|
||||
FormJobManage.Instance.SizeChanged += myJob.tbc_jobs_SelectedIndexChanged;
|
||||
//节点间拖拽
|
||||
myJob.GetJobTree().ItemDrag += new ItemDragEventHandler(myJob.TvwJob_ItemDrag);
|
||||
myJob.GetJobTree().DragEnter += new DragEventHandler(myJob.TvwJob_DragEnter);
|
||||
myJob.GetJobTree().DragDrop += new DragEventHandler(myJob.TvwJob_DragDrop);
|
||||
|
||||
//以下事件为画线事件
|
||||
myJob.GetJobTree().MouseMove += myJob.DrawLineWithoutRefresh;
|
||||
myJob.GetJobTree().AfterExpand += myJob.Draw_Line;
|
||||
myJob.GetJobTree().AfterCollapse += myJob.Draw_Line;
|
||||
// 在流程节点上操作时
|
||||
myJob.GetJobTree().MouseDoubleClick += TreeViewJob_DoubleClick; ;
|
||||
myJob.GetJobTree().MouseClick += myJob.tvw_job_MouseClick;
|
||||
Application.DoEvents();
|
||||
if (myJob.GetJobTree().Nodes.Count > 0)
|
||||
{
|
||||
//默认选中第一个工具节点
|
||||
myJob.GetJobTree().SelectedNode = myJob.GetJobTree().Nodes[0];
|
||||
}
|
||||
//展开已默认添加的工具的输入输出项
|
||||
myJob.GetJobTree().ExpandAll();
|
||||
}
|
||||
public void InitJob(Dictionary<string, VisionJob> myProject, string jobName)
|
||||
{
|
||||
myProject[jobName].GetJobTree().Dock = DockStyle.Fill;
|
||||
myProject[jobName].GetJobTree().ImageList = FormToolBox.Instance.imageListTool;
|
||||
myProject[jobName].GetJobTree().Font = new Font("微软雅黑", 9, FontStyle.Bold);
|
||||
|
||||
myProject[jobName].GetJobTree().Scrollable = true;
|
||||
myProject[jobName].GetJobTree().ItemHeight = 20;
|
||||
myProject[jobName].GetJobTree().ShowLines = false;
|
||||
myProject[jobName].GetJobTree().AllowDrop = true;
|
||||
//myTreeView.ImageList = Job.imageList;
|
||||
|
||||
// 在窗体UI出现变化时,更新画线
|
||||
myProject[jobName].GetJobTree().AfterSelect += myProject[jobName].tvw_job_AfterSelect;
|
||||
myProject[jobName].GetJobTree().ChangeUICues += myProject[jobName].MyJobTreeView_ChangeUICues;
|
||||
FormJobManage.Instance.SizeChanged += myProject[jobName].tbc_jobs_SelectedIndexChanged;
|
||||
//节点间拖拽
|
||||
myProject[jobName].GetJobTree().ItemDrag += new ItemDragEventHandler(myProject[jobName].TvwJob_ItemDrag);
|
||||
myProject[jobName].GetJobTree().DragEnter += new DragEventHandler(myProject[jobName].TvwJob_DragEnter);
|
||||
myProject[jobName].GetJobTree().DragDrop += new DragEventHandler(myProject[jobName].TvwJob_DragDrop);
|
||||
|
||||
//以下事件为画线事件
|
||||
myProject[jobName].GetJobTree().MouseMove += myProject[jobName].DrawLineWithoutRefresh;
|
||||
myProject[jobName].GetJobTree().AfterExpand += myProject[jobName].Draw_Line;
|
||||
myProject[jobName].GetJobTree().AfterCollapse += myProject[jobName].Draw_Line;
|
||||
// 在流程节点上操作时
|
||||
myProject[jobName].GetJobTree().MouseDoubleClick += TreeViewJob_DoubleClick; ;
|
||||
myProject[jobName].GetJobTree().MouseClick += myProject[jobName].tvw_job_MouseClick;
|
||||
Application.DoEvents();
|
||||
if(myProject[jobName].GetJobTree().Nodes.Count > 0)
|
||||
{
|
||||
//默认选中第一个工具节点
|
||||
myProject[jobName].GetJobTree().SelectedNode = myProject[jobName].GetJobTree().Nodes[0];
|
||||
}
|
||||
//展开已默认添加的工具的输入输出项
|
||||
myProject[jobName].GetJobTree().ExpandAll();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TreeView双击
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public static void TreeViewJob_DoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
//判断是否在节点上双击
|
||||
object toolClass = new object();
|
||||
string jobName = FormJobManage.Instance.tabJobUnion.SelectedTab.Text;
|
||||
TreeViewHitTestInfo test = VisionJobParams.pVisionProject.Project[jobName].GetJobTree().HitTest(e.X, e.Y);
|
||||
TreeNode selectNode = test.Node.Level == 0 ? test.Node : test.Node.Parent;
|
||||
selectNode.ExpandAll();
|
||||
for (int i = 0; i < VisionJobParams.pVisionProject.Project[jobName].L_toolList.Count; i++)
|
||||
{
|
||||
if (selectNode.Text == VisionJobParams.pVisionProject.Project[jobName].L_toolList[i].toolName)
|
||||
{
|
||||
string AssemblyName = VisionJobParams.pVisionProject.Project[jobName].L_toolList[i].FormToolName.Split('.')[0];
|
||||
string className = VisionJobParams.pVisionProject.Project[jobName].L_toolList[i].FormToolName;
|
||||
toolClass = VisionJobParams.pVisionProject.Project[jobName].L_toolList[i];
|
||||
IToolInfo.FormTool = (Form)Assembly.Load(AssemblyName).CreateInstance(className, false, BindingFlags.Default, null, new object[] { toolClass }, null, null);
|
||||
IToolInfo.FormTool.ShowDialog();
|
||||
//VisionJobParams.myProject[jobName].L_toolList[i].SetFormTool(IToolInfo.FormTool);
|
||||
//VisionJobParams.myProject[jobName].L_toolList[i].GetFormTool().ShowDialog();
|
||||
//VisionJobParams.myProject[jobName].L_toolList[i].FormTool = (Form)Assembly.Load(AssemblyName).CreateInstance(className, false, BindingFlags.Default, null, new object[] { toolClass }, null, null);
|
||||
//VisionJobParams.myProject[jobName].L_toolList[i].FormTool.ShowDialog();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
163
ToolLib.VisionJob/OperateTreeView.cs
Normal file
163
ToolLib.VisionJob/OperateTreeView.cs
Normal file
@@ -0,0 +1,163 @@
|
||||
/*
|
||||
* ==============================================================================
|
||||
*
|
||||
* Filename: OperateTreeView
|
||||
* Description:
|
||||
*
|
||||
* Version: 1.0
|
||||
* Created: 2021/2/26 10:09:32
|
||||
*
|
||||
* Author: liu.wenjie
|
||||
*
|
||||
* ==============================================================================
|
||||
*/
|
||||
using CommonMethods;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using VisionJobFactory;
|
||||
|
||||
namespace ToolLib.VisionJob
|
||||
{
|
||||
public class OperateTreeView
|
||||
{
|
||||
private static OperateTreeView _instance;
|
||||
private static readonly object lockObject = new object();
|
||||
/// <summary>
|
||||
/// 禁止直接生成
|
||||
/// </summary>
|
||||
private OperateTreeView(){}
|
||||
/// <summary>
|
||||
/// 操作者单例模式调用
|
||||
/// </summary>
|
||||
public static OperateTreeView Instance
|
||||
{
|
||||
get
|
||||
{
|
||||
if(_instance == null)
|
||||
{
|
||||
lock (lockObject)
|
||||
{
|
||||
if(_instance == null)
|
||||
{
|
||||
return _instance = new OperateTreeView();
|
||||
}
|
||||
}
|
||||
}
|
||||
return _instance;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取当前流程所对应的流程树对象
|
||||
/// </summary>
|
||||
/// <param name="jobName">流程名</param>
|
||||
/// <returns>流程树控件对象</returns>
|
||||
public static TreeView GetJobTree(string jobName)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (var myJob in VisionJobParams.pVisionProject.Project)
|
||||
{
|
||||
if(myJob.Value.JobName == jobName)
|
||||
{
|
||||
return myJob.Value.GetJobTree();
|
||||
}
|
||||
}
|
||||
return new TreeView();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("获取JobTree时出错", ex);
|
||||
return new TreeView();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 向流程中添加工具,需要根据选择的工具名对工具类型等进行判断
|
||||
/// </summary>
|
||||
/// <param name="tool">工具类型</param>
|
||||
/// <param name="isInsert">插入位置,当为-1时,表示在末尾插入,当不为-1时,表示被插入的工具索引</param>
|
||||
public void Add_Tool(ToolType tool, bool newAddTool = true, int insertPos = -1, int imageKey = 0)
|
||||
{
|
||||
string jobName = FormJobManage.Instance.tabJobUnion.SelectedTab.Text;
|
||||
string toolName = GetNewToolName(jobName, tool.ToString());
|
||||
|
||||
IToolInfo insertTool = VisionToolFactory.CreateToolVision(tool, toolName);
|
||||
TreeNode insertNode = new TreeNode();
|
||||
insertNode = GetJobTree(jobName).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();
|
||||
if(newAddTool)
|
||||
{
|
||||
VisionJobParams.pVisionProject.Project[jobName].L_toolList.Add(insertTool);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
internal string GetNewToolName(string jobName, string toolType)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!TreeView_Contains_Key(jobName, toolType))
|
||||
{
|
||||
return toolType;
|
||||
}
|
||||
for (int i = 1; i < 101; i++)
|
||||
{
|
||||
if (!TreeView_Contains_Key(jobName, 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 jobName, string key)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (TreeNode node in VisionJobParams.pVisionProject.Project[jobName].GetJobTree().Nodes)
|
||||
{
|
||||
if (node.Text == key)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("TreeView_Contains_Key 函数出错", ex);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
36
ToolLib.VisionJob/Properties/AssemblyInfo.cs
Normal file
36
ToolLib.VisionJob/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 有关程序集的一般信息由以下
|
||||
// 控制。更改这些特性值可修改
|
||||
// 与程序集关联的信息。
|
||||
[assembly: AssemblyTitle("ToolLib.VisionJob")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ToolLib.VisionJob")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2021")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
//将 ComVisible 设置为 false 将使此程序集中的类型
|
||||
//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
|
||||
//请将此类型的 ComVisible 特性设置为 true。
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
|
||||
[assembly: Guid("16e8ff17-98a8-4452-ab9e-c433dc9c21f7")]
|
||||
|
||||
// 程序集的版本信息由下列四个值组成:
|
||||
//
|
||||
// 主版本
|
||||
// 次版本
|
||||
// 生成号
|
||||
// 修订号
|
||||
//
|
||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||
// 方法是按如下所示使用“*”: :
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
63
ToolLib.VisionJob/Properties/Resources.Designer.cs
generated
Normal file
63
ToolLib.VisionJob/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
// 运行时版本:4.0.30319.42000
|
||||
//
|
||||
// 对此文件的更改可能会导致不正确的行为,并且如果
|
||||
// 重新生成代码,这些更改将会丢失。
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace ToolLib.VisionJob.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 一个强类型的资源类,用于查找本地化的字符串等。
|
||||
/// </summary>
|
||||
// 此类是由 StronglyTypedResourceBuilder
|
||||
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
|
||||
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
|
||||
// (以 /str 作为命令选项),或重新生成 VS 项目。
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 返回此类使用的缓存的 ResourceManager 实例。
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ToolLib.VisionJob.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 使用此强类型资源类,为所有资源查找
|
||||
/// 重写当前线程的 CurrentUICulture 属性。
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
120
ToolLib.VisionJob/Properties/Resources.resx
Normal file
120
ToolLib.VisionJob/Properties/Resources.resx
Normal file
@@ -0,0 +1,120 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
116
ToolLib.VisionJob/ToolLib.VisionJob.csproj
Normal file
116
ToolLib.VisionJob/ToolLib.VisionJob.csproj
Normal file
@@ -0,0 +1,116 @@
|
||||
<?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>{16E8FF17-98A8-4452-AB9E-C433DC9C21F7}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>ToolLib.VisionJob</RootNamespace>
|
||||
<AssemblyName>ToolLib.VisionJob</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>..\..\..\..\优秀待学习源码\VM Pro 20200701.0.1.6\VM Pro 20200701.0.1.6\VisionAndMotion\bin\Debug\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="FormJobManage.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormJobManage.Designer.cs">
|
||||
<DependentUpon>FormJobManage.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FormToolBox.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="FormToolBox.Designer.cs">
|
||||
<DependentUpon>FormToolBox.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="OperateProject.cs" />
|
||||
<Compile Include="OperateTreeView.cs" />
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="VisionJob.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="VisionJobParams.cs" />
|
||||
<Compile Include="VisionProject.cs" />
|
||||
<Compile Include="VisionToolFactory.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="..\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>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="FormJobManage.resx">
|
||||
<DependentUpon>FormJobManage.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="FormToolBox.resx">
|
||||
<DependentUpon>FormToolBox.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
737
ToolLib.VisionJob/VisionJob.cs
Normal file
737
ToolLib.VisionJob/VisionJob.cs
Normal file
@@ -0,0 +1,737 @@
|
||||
using CommonMethods;
|
||||
using CommonMethods.Interface;
|
||||
using Logger;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ToolLib.VisionJob
|
||||
{
|
||||
[Serializable]
|
||||
public class VisionJob : IVisionJob
|
||||
{
|
||||
[Serializable]
|
||||
public delegate void CreateLineDelegate(TreeView inputTreeView, TreeNode startNode, TreeNode endNode);
|
||||
CreateLineDelegate createLineDelegateFun;
|
||||
public VisionJob(string jobName)
|
||||
{
|
||||
this.JobName = jobName;
|
||||
createLineDelegateFun = new CreateLineDelegate(CreateLine);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取当前流程所对应的流程树对象
|
||||
/// </summary>
|
||||
/// <param name="jobName">流程名</param>
|
||||
/// <returns>流程树控件对象</returns>
|
||||
public TreeView GetJobTree(string jobName)
|
||||
{
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < FormJobManage.Instance.tabJobUnion.TabCount; i++)
|
||||
{
|
||||
if (FormJobManage.Instance.tabJobUnion.TabPages[i].Text == jobName)
|
||||
{
|
||||
return (TreeView)(FormJobManage.Instance.tabJobUnion.TabPages[i].Controls[0]);
|
||||
}
|
||||
}
|
||||
return new TreeView();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerClass.WriteLog("获取流程树对象时出错!",ex);
|
||||
return new TreeView();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取当前流程所对应的流程树对象
|
||||
/// </summary>
|
||||
/// <param name="jobName">流程名</param>
|
||||
/// <returns>流程树控件对象</returns>
|
||||
public TreeView GetJobTree()
|
||||
{
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < FormJobManage.Instance.tabJobUnion.TabCount; i++)
|
||||
{
|
||||
if (FormJobManage.Instance.tabJobUnion.TabPages[i].Text == JobName)
|
||||
{
|
||||
return (TreeView)(FormJobManage.Instance.tabJobUnion.TabPages[i].Controls[0]);
|
||||
}
|
||||
}
|
||||
return new TreeView();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LoggerClass.WriteLog("获取流程树对象时出错!", ex);
|
||||
return new TreeView();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 拖动工具节点
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public void TvwJob_ItemDrag(object sender, ItemDragEventArgs e)//左键拖动
|
||||
{
|
||||
try
|
||||
{
|
||||
if (((TreeView)sender).SelectedNode != null)
|
||||
{
|
||||
if (((TreeView)sender).SelectedNode.Level == 1) //输入输出不允许拖动
|
||||
{
|
||||
GetJobTree().DoDragDrop(e.Item, DragDropEffects.Move);
|
||||
}
|
||||
|
||||
else if (e.Button == MouseButtons.Left)
|
||||
{
|
||||
GetJobTree().DoDragDrop(e.Item, DragDropEffects.Move);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("拖动节点出错 ", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 节点拖动
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public void TvwJob_DragEnter(object sender, DragEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"))
|
||||
{
|
||||
e.Effect = DragDropEffects.Move;
|
||||
}
|
||||
else
|
||||
{
|
||||
e.Effect = DragDropEffects.None;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("节点拖动出错,描述: ", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 释放被拖动的节点
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public void TvwJob_DragDrop(object sender, DragEventArgs e)//拖动
|
||||
{
|
||||
try
|
||||
{
|
||||
//获得拖放中的节点
|
||||
TreeNode moveNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
|
||||
//根据鼠标坐标确定要移动到的目标节点
|
||||
System.Drawing.Point pt;
|
||||
TreeNode targeNode; // 目标节点
|
||||
pt = ((TreeView)(sender)).PointToClient(new System.Drawing.Point(e.X, e.Y));
|
||||
targeNode = GetJobTree().GetNodeAt(pt);
|
||||
//如果目标节点无子节点则添加为同级节点,反之添加到下级节点的未端
|
||||
if (moveNode == targeNode) //若是把自己拖放到自己,不可,返回
|
||||
return;
|
||||
|
||||
if (targeNode == null) //目标节点为null,就是把节点拖到了空白区域,不可,直接返回
|
||||
return;
|
||||
|
||||
if (moveNode.Level == 1 && targeNode.Level == 1 && moveNode.Parent == targeNode.Parent) //都是输入输出节点,内部拖动排序
|
||||
{
|
||||
moveNode.Remove();
|
||||
targeNode.Parent.Nodes.Insert(targeNode.Index, moveNode);
|
||||
return;
|
||||
}
|
||||
|
||||
if (moveNode.Level == 0) // 被拖动的是子节点,也就是工具节点
|
||||
{
|
||||
if (targeNode.Level == 0) // 目标也是工具节点
|
||||
{
|
||||
moveNode.Remove();
|
||||
GetJobTree().Nodes.Insert(targeNode.Index, moveNode);
|
||||
|
||||
IToolInfo temp = new IToolInfo();
|
||||
for (int i = 0; i < L_toolList.Count; i++)
|
||||
{
|
||||
if (L_toolList[i].toolName == moveNode.Text)
|
||||
{
|
||||
SwapDataFun(L_toolList, i, targeNode.Index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 目标是子节点,则移动到该子节点的父节点的下一个节点上
|
||||
moveNode.Remove();
|
||||
GetJobTree().Nodes.Insert(targeNode.Parent.Index + 1, moveNode);
|
||||
for (int i = 0; i < L_toolList.Count; i++)
|
||||
{
|
||||
if (L_toolList[i].toolName == moveNode.Text)
|
||||
{
|
||||
SwapDataFun(L_toolList, i, targeNode.Parent.Index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else //被拖动的是输入输出节点
|
||||
{
|
||||
if (targeNode.Level == 0 && GetToolInfoByToolName(targeNode.Text).toolType == ToolType.Output)
|
||||
{
|
||||
// 如果目标节点是工具节点,并且工具节点类型为可接收输入的节点,则直接将输出添加,先不考虑该情况
|
||||
//string result = moveNode.Parent.Text + " . -->" + moveNode.Text.Substring(3);
|
||||
//GetToolInfoByToolName(jobName, targeNode.Text).input.Add(new ToolIO("<--" + result, "", DataType.String));
|
||||
//TreeNode node = targeNode.Nodes.Add("", "<--" + result, 26, 26);
|
||||
//node.ForeColor = Color.DarkMagenta;
|
||||
//D_itemAndSource.Add(node, moveNode);
|
||||
//targeNode.Expand();
|
||||
//DrawLine();
|
||||
return;
|
||||
}
|
||||
else if (targeNode.Level == 0)
|
||||
return;
|
||||
|
||||
//连线前首先要判断被拖动节点是否为输出项,目标节点是否为输入项
|
||||
if (moveNode.Text.Substring(0, 3) != "-->" || targeNode.Text.Substring(0, 3) != "<--")
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("拖动类型不匹配!");
|
||||
return;
|
||||
}
|
||||
|
||||
//连线前要判断被拖动节点和目标节点的数据类型是否一致
|
||||
if ((DataType)moveNode.Tag != (DataType)targeNode.Tag)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("被拖动节点和目标节点数据类型不一致,不可关联");
|
||||
return;
|
||||
}
|
||||
|
||||
string input = targeNode.Text;
|
||||
if (input.Contains("《")) //表示已经连接了源
|
||||
input = Regex.Split(input, "《")[0];
|
||||
else //第一次连接源就需要添加到输入输出集合
|
||||
D_itemAndSource.Add(targeNode, moveNode);
|
||||
GetToolInfoByToolName(targeNode.Parent.Text).GetInput(input.Substring(3)).value = "《- " + moveNode.Parent.Text + " . " + moveNode.Text.Substring(3);
|
||||
targeNode.Text = input + "《- " + moveNode.Parent.Text + " . " + moveNode.Text.Substring(3);
|
||||
DrawLine();
|
||||
|
||||
//移除拖放的节点
|
||||
if (moveNode.Level == 0)
|
||||
moveNode.Remove();
|
||||
}
|
||||
//更新当前拖动的节点选择
|
||||
GetJobTree().SelectedNode = moveNode;
|
||||
//展开目标节点,便于显示拖放效果
|
||||
targeNode.Expand();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("释放节点出错,原因: ", ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static Graphics graph;
|
||||
/// <summary>
|
||||
/// 绘制输入输出指向线
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
public void DrawLine()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!isDrawing)
|
||||
{
|
||||
isDrawing = true;
|
||||
Thread th = new Thread(() =>
|
||||
{
|
||||
GetJobTree().MouseWheel += new MouseEventHandler(CancelUpDowm_MouseWheel); //划线的时候不能滚动,否则画好了线,结果已经滚到其它地方了
|
||||
maxLength = 150;
|
||||
colValueAndColor.Clear();
|
||||
startNodeAndColor.Clear();
|
||||
list.Clear();
|
||||
TreeView tree = GetJobTree();
|
||||
graph = tree.CreateGraphics();
|
||||
tree.CreateGraphics().Dispose();
|
||||
|
||||
foreach (KeyValuePair<TreeNode, TreeNode> item in D_itemAndSource)
|
||||
{
|
||||
// 将此划线线程委托到JOB管理界面
|
||||
FormJobManage.Instance.Invoke(createLineDelegateFun, new object[] { tree, item.Key, item.Value });
|
||||
}
|
||||
Application.DoEvents();
|
||||
GetJobTree().MouseWheel -= new MouseEventHandler(CancelUpDowm_MouseWheel);
|
||||
isDrawing = false;
|
||||
});
|
||||
th.IsBackground = true;
|
||||
//th.ApartmentState = ApartmentState.STA;
|
||||
th.Start();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public void CancelUpDowm_MouseWheel(object sender, MouseEventArgs e)
|
||||
{
|
||||
HandledMouseEventArgs h = e as HandledMouseEventArgs;
|
||||
if (h != null)
|
||||
{
|
||||
h.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
#region 绘制输入输出指向线
|
||||
public void tvw_job_AfterSelect(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
nodeTextBeforeEdit = GetJobTree().SelectedNode.Text;
|
||||
}
|
||||
public void Draw_Line(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
GetJobTree().Refresh();
|
||||
DrawLine();
|
||||
}
|
||||
public void tbc_jobs_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
GetJobTree().Refresh();
|
||||
DrawLine();
|
||||
}
|
||||
public void DrawLineWithoutRefresh(object sender, MouseEventArgs e)
|
||||
{
|
||||
GetJobTree().Update();
|
||||
DrawLine();
|
||||
}
|
||||
public void MyJobTreeView_ChangeUICues(object sender, UICuesEventArgs e)
|
||||
{
|
||||
GetJobTree().Update();
|
||||
DrawLine();
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void tvw_job_MouseClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
//判断是否在节点单击
|
||||
TreeViewHitTestInfo test = GetJobTree().HitTest(e.X, e.Y);
|
||||
if (e.Button == MouseButtons.Right && test.Node.Level == 1)
|
||||
{
|
||||
GetJobTree().ContextMenuStrip = rightClickMenu;
|
||||
rightClickMenu.Items.Clear();
|
||||
if (test.Node.Text.Contains("《"))
|
||||
{
|
||||
rightClickMenu.Items.Add("删除连线");
|
||||
rightClickMenu.Items[0].Click += DeleteLine;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 画Treeview控件两个节点之间的连线
|
||||
/// </summary>
|
||||
/// <param name="treeview">要画连线的Treeview</param>
|
||||
/// <param name="startNode">结束节点</param>
|
||||
/// <param name="endNode">开始节点</param>
|
||||
private void CreateLine(TreeView treeview, TreeNode endNode, TreeNode startNode)
|
||||
{
|
||||
try
|
||||
{
|
||||
//得到起始与结束节点之间所有节点的最大长度,保证画线不穿过节点
|
||||
int startNodeParantIndex = startNode.Parent.Index;
|
||||
int endNodeParantIndex = endNode.Parent.Index;
|
||||
int startNodeIndex = startNode.Index;
|
||||
int endNodeIndex = endNode.Index;
|
||||
int max = 0;
|
||||
|
||||
if (!startNode.Parent.IsExpanded)
|
||||
{
|
||||
max = startNode.Parent.Bounds.X + startNode.Parent.Bounds.Width;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = startNodeIndex; i < startNode.Parent.Nodes.Count - 1; i++)
|
||||
{
|
||||
if (max < treeview.Nodes[startNodeParantIndex].Nodes[i].Bounds.X + treeview.Nodes[startNodeParantIndex].Nodes[i].Bounds.Width)
|
||||
max = treeview.Nodes[startNodeParantIndex].Nodes[i].Bounds.X + treeview.Nodes[startNodeParantIndex].Nodes[i].Bounds.Width;
|
||||
}
|
||||
}
|
||||
for (int i = startNodeParantIndex + 1; i < endNodeParantIndex; i++)
|
||||
{
|
||||
if (!treeview.Nodes[i].IsExpanded)
|
||||
{
|
||||
if (max < treeview.Nodes[i].Bounds.X + treeview.Nodes[i].Bounds.Width)
|
||||
max = treeview.Nodes[i].Bounds.X + treeview.Nodes[i].Bounds.Width;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int j = 0; j < treeview.Nodes[i].Nodes.Count; j++)
|
||||
{
|
||||
if (max < treeview.Nodes[i].Nodes[j].Bounds.X + treeview.Nodes[i].Nodes[j].Bounds.Width)
|
||||
max = treeview.Nodes[i].Nodes[j].Bounds.X + treeview.Nodes[i].Nodes[j].Bounds.Width;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!endNode.Parent.IsExpanded)
|
||||
{
|
||||
if (max < endNode.Parent.Bounds.X + endNode.Parent.Bounds.Width)
|
||||
max = endNode.Parent.Bounds.X + endNode.Parent.Bounds.Width;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < endNode.Index; i++)
|
||||
{
|
||||
if (max < treeview.Nodes[endNodeParantIndex].Nodes[i].Bounds.X + treeview.Nodes[endNodeParantIndex].Nodes[i].Bounds.Width)
|
||||
max = treeview.Nodes[endNodeParantIndex].Nodes[i].Bounds.X + treeview.Nodes[endNodeParantIndex].Nodes[i].Bounds.Width;
|
||||
}
|
||||
}
|
||||
max += 10; //箭头不能连着 节点,
|
||||
|
||||
if (!startNode.Parent.IsExpanded)
|
||||
startNode = startNode.Parent;
|
||||
if (!endNode.Parent.IsExpanded)
|
||||
endNode = endNode.Parent;
|
||||
|
||||
if (endNode.Bounds.X + endNode.Bounds.Width + 20 > max)
|
||||
max = endNode.Bounds.X + endNode.Bounds.Width + 20;
|
||||
if (startNode.Bounds.X + startNode.Bounds.Width + 20 > max)
|
||||
max = startNode.Bounds.X + startNode.Bounds.Width + 20;
|
||||
|
||||
//判断是否可以在当前处划线
|
||||
foreach (KeyValuePair<int, Dictionary<TreeNode, TreeNode>> item in list)
|
||||
{
|
||||
if (Math.Abs(max - item.Key) < 15)
|
||||
{
|
||||
foreach (KeyValuePair<TreeNode, TreeNode> item1 in item.Value)
|
||||
{
|
||||
if (startNode != item1.Value)
|
||||
{
|
||||
if ((item1.Value.Bounds.X < maxLength && item1.Key.Bounds.X < maxLength) || (item1.Value.Bounds.X < maxLength && item1.Key.Bounds.X < maxLength))
|
||||
{
|
||||
max += (15 - Math.Abs(max - item.Key));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Dictionary<TreeNode, TreeNode> temp = new Dictionary<TreeNode, TreeNode>();
|
||||
temp.Add(endNode, startNode);
|
||||
if (!list.ContainsKey(max))
|
||||
list.Add(max, temp);
|
||||
else
|
||||
list[max].Add(endNode, startNode);
|
||||
|
||||
if (!startNodeAndColor.ContainsKey(startNode))
|
||||
startNodeAndColor.Add(startNode, color[startNodeAndColor.Count]);
|
||||
|
||||
Pen pen = new Pen(startNodeAndColor[startNode], 1);
|
||||
Brush brush = new SolidBrush(startNodeAndColor[startNode]);
|
||||
|
||||
graph.DrawLine(pen, startNode.Bounds.X + startNode.Bounds.Width,
|
||||
startNode.Bounds.Y + startNode.Bounds.Height / 2,
|
||||
max,
|
||||
startNode.Bounds.Y + startNode.Bounds.Height / 2);
|
||||
graph.DrawLine(pen, max,
|
||||
startNode.Bounds.Y + startNode.Bounds.Height / 2,
|
||||
max,
|
||||
endNode.Bounds.Y + endNode.Bounds.Height / 2);
|
||||
graph.DrawLine(pen, max,
|
||||
endNode.Bounds.Y + endNode.Bounds.Height / 2,
|
||||
endNode.Bounds.X + endNode.Bounds.Width,
|
||||
endNode.Bounds.Y + endNode.Bounds.Height / 2);
|
||||
graph.DrawString("<", new Font("微软雅黑", 12F), brush, endNode.Bounds.X + endNode.Bounds.Width - 5,
|
||||
endNode.Bounds.Y + endNode.Bounds.Height / 2 - 12);
|
||||
Application.DoEvents();
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 交换List中的两个位置的值
|
||||
/// </summary>
|
||||
/// <param name="inputList">要交换的List</param>
|
||||
/// <param name="souceIndex">原位置索引</param>
|
||||
/// <param name="targetIndex">现位置索引</param>
|
||||
/// <returns></returns>
|
||||
public static List<IToolInfo> SwapDataFun(List<IToolInfo> inputList, int souceIndex, int targetIndex)
|
||||
{
|
||||
IToolInfo temp = inputList[targetIndex];
|
||||
inputList[targetIndex] = inputList[souceIndex];
|
||||
inputList[souceIndex] = temp;
|
||||
return inputList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据工具名获取工具信息
|
||||
/// </summary>
|
||||
/// <param name="jobName">下一版本去掉该参数,流程名</param>
|
||||
/// <param name="toolName">工具名</param>
|
||||
/// <returns></returns>
|
||||
public IToolInfo GetToolInfoByToolName(string toolName)
|
||||
{
|
||||
try
|
||||
{
|
||||
for (int i = 0; i < L_toolList.Count; i++)
|
||||
{
|
||||
if (L_toolList[i].toolName == toolName)
|
||||
{
|
||||
return L_toolList[i];
|
||||
}
|
||||
}
|
||||
return new IToolInfo();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("根据工具名获取工具信息出错!原因: ", ex);
|
||||
return new IToolInfo();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 通过TreeNode节点文本获取节点
|
||||
/// </summary>
|
||||
/// <param name="nodeText">节点文本</param>
|
||||
/// <returns>节点对象</returns>
|
||||
public TreeNode GetToolNodeByNodeText(string nodeText)
|
||||
{
|
||||
try
|
||||
{
|
||||
foreach (TreeNode toolNode in GetJobTree().Nodes)
|
||||
{
|
||||
if (((TreeNode)toolNode).Text != nodeText)
|
||||
{
|
||||
foreach (TreeNode itemNode in ((TreeNode)toolNode).Nodes)
|
||||
{
|
||||
if (((TreeNode)itemNode).Text.Substring(3) == nodeText)
|
||||
{
|
||||
return itemNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return toolNode;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("通过TreeNode节点文本获取节点错误!", ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除连线及值传递
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void DeleteLine(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (GetJobTree().SelectedNode == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
string nodeText = GetJobTree().SelectedNode.Text.ToString();
|
||||
int level = GetJobTree().SelectedNode.Level;
|
||||
string fatherNodeText = string.Empty;
|
||||
|
||||
foreach (TreeNode toolNode in GetJobTree().Nodes)
|
||||
{
|
||||
if (level == 1)
|
||||
{
|
||||
fatherNodeText = GetJobTree().SelectedNode.Parent.Text;
|
||||
if (toolNode.Text == fatherNodeText)
|
||||
{
|
||||
foreach (var itemNode in toolNode.Nodes)
|
||||
{
|
||||
if (itemNode != null)
|
||||
{
|
||||
if (((TreeNode)itemNode).Text == nodeText)
|
||||
{
|
||||
// 移除连线集合中的这条连线
|
||||
for (int i = 0; i < D_itemAndSource.Count; i++)
|
||||
{
|
||||
if (((TreeNode)itemNode) == D_itemAndSource.Keys.ToArray()[i] || ((TreeNode)itemNode) == D_itemAndSource[D_itemAndSource.Keys.ToArray()[i]])
|
||||
D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[i]);
|
||||
}
|
||||
// 修改节点的显示
|
||||
for (int i = 0; i < L_toolList.Count; i++)
|
||||
{
|
||||
if (L_toolList[i].toolName == fatherNodeText)
|
||||
{
|
||||
for (int j = 0; j < L_toolList[i].toolInput.Count; j++)
|
||||
{
|
||||
string last = Regex.Split(nodeText, "《")[1]; // "《"后边的部分
|
||||
string ConnectString = "《" + last; // 拼接后字符
|
||||
if (L_toolList[i].toolInput[j].value.ToString() == ConnectString)
|
||||
{
|
||||
string source = Regex.Split(nodeText, "《")[0]; // "《"之前的部分,即未连线初始部分
|
||||
L_toolList[i].toolInput[j].value = null; //重新置null
|
||||
((TreeNode)itemNode).Text = source;
|
||||
}
|
||||
}
|
||||
for (int j = 0; j < L_toolList[i].toolOutput.Count; j++)
|
||||
{
|
||||
if (L_toolList[i].toolOutput[j].IOName == nodeText.Substring(3))
|
||||
L_toolList[i].RemoveOutputIO(nodeText.Substring(3));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//LogHelper.SaveErrorInfo(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除项
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void DeleteItem(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (GetJobTree().SelectedNode == null)
|
||||
return;
|
||||
string nodeText = GetJobTree().SelectedNode.Text.ToString();
|
||||
int level = GetJobTree().SelectedNode.Level;
|
||||
string fatherNodeText = string.Empty;
|
||||
|
||||
//如果是子节点
|
||||
if (level == 1)
|
||||
{
|
||||
fatherNodeText = GetJobTree().SelectedNode.Parent.Text;
|
||||
}
|
||||
foreach (TreeNode toolNode in GetJobTree().Nodes)
|
||||
{
|
||||
if (level == 1)
|
||||
{
|
||||
if (toolNode.Text == fatherNodeText)
|
||||
{
|
||||
foreach (var itemNode in toolNode.Nodes)
|
||||
{
|
||||
if (itemNode != null)
|
||||
{
|
||||
if (((TreeNode)itemNode).Text == nodeText)
|
||||
{
|
||||
//移除连线集合中的这条连线
|
||||
for (int i = 0; i < D_itemAndSource.Count; i++)
|
||||
{
|
||||
if (((TreeNode)itemNode) == D_itemAndSource.Keys.ToArray()[i] || ((TreeNode)itemNode) == D_itemAndSource[D_itemAndSource.Keys.ToArray()[i]])
|
||||
D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[i]);
|
||||
}
|
||||
|
||||
((TreeNode)itemNode).Remove();
|
||||
GetJobTree().SelectedNode = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (((TreeNode)toolNode).Text == nodeText)
|
||||
{
|
||||
((TreeNode)toolNode).Remove();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//如果是父节点
|
||||
if (level == 0)
|
||||
{
|
||||
for (int i = 0; i < L_toolList.Count; i++)
|
||||
{
|
||||
if (L_toolList[i].toolName == nodeText)
|
||||
{
|
||||
try
|
||||
{
|
||||
//移除连线集合中的这条连线
|
||||
for (int j = D_itemAndSource.Count - 1; j >= 0; j--)
|
||||
{
|
||||
if (nodeText == D_itemAndSource.Keys.ToArray()[j].Parent.Text || nodeText == D_itemAndSource[D_itemAndSource.Keys.ToArray()[j]].Parent.Text)
|
||||
D_itemAndSource.Remove(D_itemAndSource.Keys.ToArray()[j]);
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
L_toolList.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < L_toolList.Count; i++)
|
||||
{
|
||||
if (L_toolList[i].toolName == fatherNodeText)
|
||||
{
|
||||
for (int j = 0; j < L_toolList[i].toolInput.Count; j++)
|
||||
{
|
||||
if (L_toolList[i].toolInput[j].value.ToString() == Regex.Split(nodeText, "《")[0])
|
||||
L_toolList[i].RemoveInputIO(Regex.Split(nodeText, "《")[0]);
|
||||
}
|
||||
for (int j = 0; j < L_toolList[i].toolOutput.Count; j++)
|
||||
{
|
||||
if (L_toolList[i].toolOutput[j].IOName == nodeText.Substring(3))
|
||||
L_toolList[i].RemoveOutputIO(nodeText.Substring(3));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//LogHelper.SaveErrorInfo(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void Run()
|
||||
{
|
||||
for (int i = 0; i < L_toolList.Count; i++)
|
||||
{
|
||||
TreeNode treeNode = GetToolNodeByNodeText(L_toolList[i].toolName);
|
||||
inputItemNum = (L_toolList[i]).toolInput.Count;
|
||||
outputItemNum = (L_toolList[i]).toolOutput.Count;
|
||||
// 通过要调用的程序集名称.类名,程序集名称 对类进行调用
|
||||
// FormToolName 中已存储程序集名称
|
||||
string assemblyName = $"{L_toolList[i].FormToolName.Split('.')[0]}.{L_toolList[i].toolType.ToString()}Run,{L_toolList[i].FormToolName.Split('.')[0]}";
|
||||
Type classType = Type.GetType(assemblyName);
|
||||
IToolRun myTool = (IToolRun)Activator.CreateInstance(classType);
|
||||
myTool.ToolRun(JobName, i, inputItemNum, treeNode, L_toolList);
|
||||
}
|
||||
}
|
||||
|
||||
public void FormLogDisp(string mes, Color color, TreeNode treeNode, Logger.MsgLevel msgLevel = Logger.MsgLevel.Info)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog(mes, msgLevel);
|
||||
treeNode.ForeColor = color;
|
||||
}
|
||||
}
|
||||
}
|
||||
34
ToolLib.VisionJob/VisionJobParams.cs
Normal file
34
ToolLib.VisionJob/VisionJobParams.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* ==============================================================================
|
||||
*
|
||||
* Filename: VisionJobParams
|
||||
* Description:
|
||||
*
|
||||
* Version: 1.0
|
||||
* Created: 2021/2/25 15:22:22
|
||||
*
|
||||
* Author: liu.wenjie
|
||||
*
|
||||
* ==============================================================================
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ToolLib.VisionJob
|
||||
{
|
||||
public class VisionJobParams
|
||||
{
|
||||
/// <summary>
|
||||
/// 当前项目,一个项目对应多个JOB
|
||||
/// </summary>
|
||||
public static VisionProject pVisionProject{ get; set; } = new VisionProject();
|
||||
/// <summary>
|
||||
/// 系统路径
|
||||
/// </summary>
|
||||
public static string sSysConfigPath { get; } = @"C:\MyCCDSystem\";
|
||||
}
|
||||
}
|
||||
75
ToolLib.VisionJob/VisionProject.cs
Normal file
75
ToolLib.VisionJob/VisionProject.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* ==============================================================================
|
||||
*
|
||||
* Filename: VisionProject
|
||||
* Description:
|
||||
*
|
||||
* Version: 1.0
|
||||
* Created: 2021/2/27 15:49:25
|
||||
*
|
||||
* Author: liu.wenjie
|
||||
*
|
||||
* ==============================================================================
|
||||
*/
|
||||
using CommonMethods;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ToolLib.VisionJob
|
||||
{
|
||||
public class VisionProject
|
||||
{
|
||||
/// <summary>
|
||||
/// 工程路径
|
||||
/// </summary>
|
||||
public string prjFilePath { get; set; } = @"D:\vision.prj";
|
||||
/// <summary>
|
||||
/// 工程名称
|
||||
/// </summary>
|
||||
public string prjName { get; set; }
|
||||
/// <summary>
|
||||
/// 工程中所包含的VisionJob
|
||||
/// </summary>
|
||||
public Dictionary<string, VisionJob> Project { get; set; } = new Dictionary<string, VisionJob>() { };
|
||||
|
||||
public bool LoadProject()
|
||||
{
|
||||
if(!File.Exists(prjFilePath))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
Project = Serialize.BinaryDeserialize<Dictionary<string, VisionJob>>(prjFilePath);
|
||||
foreach (var item in Project)
|
||||
{
|
||||
OperateProject.Instance.CreateNewJob(item.Key, false);
|
||||
foreach (var tool in item.Value.L_toolList)
|
||||
{
|
||||
OperateTreeView.Instance.Add_Tool((ToolType)Enum.Parse(typeof(ToolType), tool.toolType.ToString()), false);
|
||||
}
|
||||
OperateProject.Instance.InitJob(item.Value);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.LoggerClass.WriteLog("载入项目工程时出现异常!", ex);
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveObject()
|
||||
{
|
||||
Serialize.BinarySerialize(prjFilePath, Project);
|
||||
}
|
||||
}
|
||||
}
|
||||
146
ToolLib.VisionJob/VisionToolFactory.cs
Normal file
146
ToolLib.VisionJob/VisionToolFactory.cs
Normal file
@@ -0,0 +1,146 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using CommonMethods;
|
||||
using System.IO;
|
||||
|
||||
namespace VisionJobFactory
|
||||
{
|
||||
|
||||
public class VisionToolFactory
|
||||
{
|
||||
private static Dictionary<ToolType, Type> animalTypeDic = new Dictionary<ToolType, Type>();
|
||||
public static void InitVisionToolTypeDic()
|
||||
{
|
||||
animalTypeDic.Clear();
|
||||
|
||||
//读取所有带有VisionToolAttribute的类
|
||||
var classEnumerator = new ClassEnumerator(typeof(VisionToolAttribute), null, typeof(VisionToolAttribute).Assembly);
|
||||
var em = classEnumerator.Results.GetEnumerator();
|
||||
|
||||
while (em.MoveNext())
|
||||
{
|
||||
var classType = em.Current;
|
||||
var atts = classType.GetCustomAttributes(typeof(VisionToolAttribute), true);
|
||||
if (atts.Length > 0)
|
||||
{
|
||||
var att = atts[0] as VisionToolAttribute;
|
||||
if (null != att)
|
||||
{
|
||||
animalTypeDic.Add(att.ToolType, classType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static IToolInfo CreateToolVision(ToolType animalType, string toolName)
|
||||
{
|
||||
if (animalTypeDic.ContainsKey(animalType))
|
||||
{
|
||||
return (IToolInfo)Activator.CreateInstance(animalTypeDic[animalType], new object[] { toolName });
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public static IToolInfo CreateToolVision(ToolType animalType)
|
||||
{
|
||||
if (animalTypeDic.ContainsKey(animalType))
|
||||
{
|
||||
return (IToolInfo)Activator.CreateInstance(animalTypeDic[animalType]);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//根据Attribute提取类
|
||||
public class ClassEnumerator
|
||||
{
|
||||
protected List<Type> results = new List<Type>();
|
||||
|
||||
public List<Type> Results
|
||||
{
|
||||
get
|
||||
{
|
||||
return results;
|
||||
}
|
||||
}
|
||||
|
||||
private Type AttributeType;
|
||||
private Type InterfaceType;
|
||||
|
||||
public ClassEnumerator(Type InAttributeType, Type InInterfaceType, Assembly InAssembly, bool bIgnoreAbstract = true, bool bInheritAttribute = false, bool bShouldCrossAssembly = true)
|
||||
{
|
||||
AttributeType = InAttributeType;
|
||||
InterfaceType = InInterfaceType;
|
||||
|
||||
try
|
||||
{
|
||||
if (bShouldCrossAssembly)
|
||||
{
|
||||
//Assembly[] Assemblys = AppDomain.CurrentDomain.GetAssemblies();
|
||||
//if (Assemblys != null)
|
||||
//{
|
||||
// for (int i = 0, len = Assemblys.Length; i < len; i++)
|
||||
// {
|
||||
// CheckInAssembly(Assemblys[i], bIgnoreAbstract, bInheritAttribute);
|
||||
// }
|
||||
//}
|
||||
List<Assembly> allAssemblies = new List<Assembly>();
|
||||
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||
string[] FILES = Directory.GetFiles(path, "*.dll");
|
||||
foreach (string dll in Directory.GetFiles(path, "*.dll"))
|
||||
allAssemblies.Add(Assembly.LoadFile(dll));
|
||||
|
||||
|
||||
// 手动寻找该dll,若dll名称改变需要重新编译,不智能
|
||||
// Assembly assem = Assembly.LoadFile($"{AppDomain.CurrentDomain.BaseDirectory}ToolLib.VisionToolList.dll");
|
||||
if (allAssemblies != null)
|
||||
{
|
||||
for (int i = 0; i < allAssemblies.Count; i++)
|
||||
{
|
||||
CheckInAssembly(allAssemblies[i], bIgnoreAbstract, bInheritAttribute);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
CheckInAssembly(InAssembly, bIgnoreAbstract, bInheritAttribute);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.WriteLine("Error in enumerate classes: " + e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckInAssembly(Assembly InAssembly, bool bInIgnoreAbstract, bool bInInheritAttribute)
|
||||
{
|
||||
Type[] types = InAssembly.GetTypes();
|
||||
if (null == types)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0, len = types.Length; i < len; i++)
|
||||
{
|
||||
var type = types[i];
|
||||
if (InterfaceType == null || InterfaceType.IsAssignableFrom(type))
|
||||
{
|
||||
if (!bInIgnoreAbstract || (bInIgnoreAbstract && !type.IsAbstract))
|
||||
{
|
||||
if (type.GetCustomAttributes(AttributeType, bInInheritAttribute).Length > 0)
|
||||
{
|
||||
results.Add(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user