diff --git a/.vs/VisionEdit/v14/.suo b/.vs/VisionEdit/v14/.suo index 37388b0..7a038c5 100644 Binary files a/.vs/VisionEdit/v14/.suo and b/.vs/VisionEdit/v14/.suo differ diff --git a/CaliperTool/CaliperTool.csproj b/CaliperTool/CaliperTool.csproj index c880084..4d97414 100644 --- a/CaliperTool/CaliperTool.csproj +++ b/CaliperTool/CaliperTool.csproj @@ -44,6 +44,7 @@ + diff --git a/CaliperTool/CaliperToolRun.cs b/CaliperTool/CaliperToolRun.cs index 58d8fc7..4308cc3 100644 --- a/CaliperTool/CaliperToolRun.cs +++ b/CaliperTool/CaliperToolRun.cs @@ -30,10 +30,10 @@ namespace CaliperTool { public class CaliperRun : IToolRun { - public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList, IVisionJob runJob, Form myHalconWindowForm) { Caliper myCaliper = (Caliper)L_toolList[toolIndex].tool; - VisionJob myJob = VisionJobParams.pVisionProject.Project[jobName]; + VisionJob myJob = (VisionJob)runJob; for (int j = 0; j < inputItemNum; j++) { if (L_toolList[toolIndex].toolInput[j].IOName == "InputImage" && L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value == null) @@ -73,13 +73,14 @@ namespace CaliperTool myCaliper.Run(SoftwareRunState.Release); if (myCaliper.toolRunStatu == ToolRunStatu.Succeed) { - myCaliper.DispMainWindow(FormImageWindow.Instance.myHWindow); + myCaliper.DispMainWindow(((FormImageWindow)myHalconWindowForm).myHWindow); myJob.FormLogDisp(L_toolList[toolIndex].toolName + " 运行成功", Color.Green, selectNode); } else { myJob.FormLogDisp(L_toolList[toolIndex].toolName + " 运行失败", Color.Red, selectNode); } + L_toolList[toolIndex].toolRunStatu = myCaliper.toolRunStatu; } } diff --git a/CommonMethods/Interface/ToolRun.cs b/CommonMethods/Interface/ToolRun.cs index 09e4df5..f0f1dd8 100644 --- a/CommonMethods/Interface/ToolRun.cs +++ b/CommonMethods/Interface/ToolRun.cs @@ -22,6 +22,6 @@ namespace CommonMethods.Interface { public interface IToolRun { - void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList); + void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList, IVisionJob runJob, Form myHalconWindow); } } diff --git a/EyeHandCalibTool/EyeHandCalibRun.cs b/EyeHandCalibTool/EyeHandCalibRun.cs index 31d5ff5..854cbbd 100644 --- a/EyeHandCalibTool/EyeHandCalibRun.cs +++ b/EyeHandCalibTool/EyeHandCalibRun.cs @@ -11,9 +11,10 @@ namespace EyeHandCalibTool { public class EyeHandCalibRun : IToolRun { - public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList, IVisionJob runJob, Form myHalconWindowForm) { // throw new NotImplementedException(); + } } } diff --git a/FindLine/FindLine.cs b/FindLine/FindLine.cs index 1682b4a..5315c73 100644 --- a/FindLine/FindLine.cs +++ b/FindLine/FindLine.cs @@ -227,11 +227,15 @@ namespace FindLineTool public void UpdateModelLineLocation() { // 计算新的位置线和转换之后位置线之间的差异,再将差异补偿到模板位置线中 - HOperatorSet.VectorToSimilarity(new HTuple(newExpectLineStartRow, newExpectLineEndRow), new HTuple(newExpectLineStartCol, newExpectLineEndCol), + if(newExpectLineStartRow.Type != HTupleType.EMPTY) + { + HOperatorSet.VectorToSimilarity(new HTuple(newExpectLineStartRow, newExpectLineEndRow), new HTuple(newExpectLineStartCol, newExpectLineEndCol), new HTuple(expectLineStartRow, expectLineEndRow), new HTuple(expectLineStartCol, expectLineEndCol), out changePoseHomMat2D); - // 更新位置 - HOperatorSet.AffineTransPixel(changePoseHomMat2D, modelStartRow, modelStartCol, out modelStartRow, out modelStartCol); - HOperatorSet.AffineTransPixel(changePoseHomMat2D, modelEndRow, modelEndCol, out modelEndRow, out modelEndCol); + // 更新位置 + HOperatorSet.AffineTransPixel(changePoseHomMat2D, modelStartRow, modelStartCol, out modelStartRow, out modelStartCol); + HOperatorSet.AffineTransPixel(changePoseHomMat2D, modelEndRow, modelEndCol, out modelEndRow, out modelEndCol); + } + } public override void Run(SoftwareRunState softwareRunState) @@ -253,7 +257,7 @@ namespace FindLineTool { UpdateImage(); } - if (inputPoseHomMat2D != null) + if (inputPoseHomMat2D.Type != HTupleType.EMPTY) { //对预期线的起始点做放射变换 HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelStartRow, modelStartCol, out newExpectLineStartRow, out newExpectLineStartCol); diff --git a/FindLine/FindLineTool.csproj b/FindLine/FindLineTool.csproj index 5b451a7..6e5d676 100644 --- a/FindLine/FindLineTool.csproj +++ b/FindLine/FindLineTool.csproj @@ -47,6 +47,7 @@ + diff --git a/FindLine/FindLineToolRun.cs b/FindLine/FindLineToolRun.cs index 1511e39..2b72051 100644 --- a/FindLine/FindLineToolRun.cs +++ b/FindLine/FindLineToolRun.cs @@ -31,10 +31,10 @@ namespace FindLineTool { public class FindLineRun : IToolRun { - public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList, IVisionJob runJob, Form myHalconWindowForm) { FindLine myFindLine = (FindLine)L_toolList[toolIndex].tool; - VisionJob myJob = VisionJobParams.pVisionProject.Project[jobName]; + VisionJob myJob = (VisionJob)runJob; for (int j = 0; j < inputItemNum; j++) { if (L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value == null) @@ -74,8 +74,9 @@ namespace FindLineTool else { myJob.FormLogDisp($"{L_toolList[toolIndex].toolName} 运行成功,{myFindLine.runTime}", Color.Green, selectNode); - myFindLine.DispMainWindow(FormImageWindow.Instance.myHWindow); + myFindLine.DispMainWindow(((FormImageWindow)myHalconWindowForm).myHWindow); } + L_toolList[toolIndex].toolRunStatu = myFindLine.toolRunStatu; } } } diff --git a/FindLine/FormFindLine.cs b/FindLine/FormFindLine.cs index 65befc5..6f01142 100644 --- a/FindLine/FormFindLine.cs +++ b/FindLine/FormFindLine.cs @@ -87,7 +87,7 @@ namespace FindLineTool chBDispRec.Checked = myFindLine.dispRec; chBDispCross.Checked = myFindLine.dispCross; //// 将要编辑的线显示 - selected_drawing_object = myFindLine.inputPoseHomMat2D != null? HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.LINE, new HTuple[] { myFindLine.newExpectLineStartRow, myFindLine.newExpectLineStartCol, myFindLine.newExpectLineEndRow, myFindLine.newExpectLineEndCol }) + selected_drawing_object = myFindLine.inputPoseHomMat2D.Length != 0? HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.LINE, new HTuple[] { myFindLine.newExpectLineStartRow, myFindLine.newExpectLineStartCol, myFindLine.newExpectLineEndRow, myFindLine.newExpectLineEndCol }) :HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.LINE, new HTuple[] {myFindLine.modelStartRow, myFindLine.modelStartCol, myFindLine.modelEndRow, myFindLine.modelEndCol }); GC.KeepAlive(selected_drawing_object); selected_drawing_object.OnSelect(OnSelectDrawingObject); diff --git a/FormLib/FormHalconWindow.Designer.cs b/FormLib/FormHalconWindow.Designer.cs new file mode 100644 index 0000000..142670a --- /dev/null +++ b/FormLib/FormHalconWindow.Designer.cs @@ -0,0 +1,65 @@ +namespace FormLib +{ + partial class FormHalconWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormHalconWindow)); + this.panel1 = new System.Windows.Forms.Panel(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(831, 549); + this.panel1.TabIndex = 0; + // + // FormHalconWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(831, 549); + this.Controls.Add(this.panel1); + this.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FormHalconWindow"; + this.Text = "图像显示"; + this.Load += new System.EventHandler(this.FormHalconWindow_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/FormLib/FormHalconWindow.cs b/FormLib/FormHalconWindow.cs new file mode 100644 index 0000000..6f6f839 --- /dev/null +++ b/FormLib/FormHalconWindow.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using ViewROI; + +namespace FormLib +{ + public partial class FormHalconWindow : Form + { + public HWindowTool_Smart myHWindow = new HWindowTool_Smart(); + public string WindowName { get; set; } + + public FormHalconWindow(string inputName) + { + InitializeComponent(); + WindowName = inputName; + } + + private void FormHalconWindow_Load(object sender, EventArgs e) + { + panel1.Controls.Add(myHWindow); + myHWindow.Dock = DockStyle.Fill; + } + public void ClearWindow() + { + myHWindow.DispHWindow.ClearWindow(); + } + } +} diff --git a/FormLib/FormHalconWindow.resx b/FormLib/FormHalconWindow.resx new file mode 100644 index 0000000..34500af --- /dev/null +++ b/FormLib/FormHalconWindow.resx @@ -0,0 +1,569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAIAMDAAAAEAIACoJQAAJgAAAEBAAAABACAAKEIAAM4lAAAoAAAAMAAAAGAAAAABACAAAAAAAFAl + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACogIE83LCu6Mykn5DMp + JugzKSboMykm6DMpJugzKSboMykm6DMpJugzKSboMykm6DMpJugzKSboMykm6DMpJugzKSboMykm6DMp + JugzKSboMykm6DMpJugzKSboMykm6DMpJugzKSfkNywruSshHk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5HBwJNSoou0c7 + OvGSg4T/rp2e/66dnv+unZ7/rp2e/66dnv+unZ7/rp2e/66dnv+unZ7/rp2e/66dnv+unZ7/rp2e/66d + nv+unZ7/rp2e/66dnv+unZ7/rp2e/66dnv+unZ7/rp2e/66dnv+unZ7/koOD/0Y7OfE1Kii4ORwcCQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA0KimwZFhX98Cwsf+hkY//ZFpO/1lOQP9ZTkD/WU5A/1lOQP9ZTkD/TEIz/0U8Lf9FPC3/RTwt/0U8 + Lf9FPC3/RTwt/0U8Lf9FPC3/RTwt/0U8Lf9FPC3/RTwt/0U8Lf9NRTn/WFBE/1hQRP9kW1L/o5OQ/8Gv + sP9iV1b2NCsprQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACsjH0I/NTPywK+v/3NpWf9YUiL/k5ME/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/o6MB/2FgHv+TrUv/oL5S/6C+ + Uv+PpUv/Vlc3/3VsYP+/r7D/PzQz8i0gID8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADUqKamJeXn+qpuY/1ZQJP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+jowH/YmAe/5Ot + S/+gvlL/oL5S/6C+Uv+gvlL/oL5S/1NTN/+snZz/h3d3/jUrKqUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADctK9SklJX/dmtf/4N/Cf+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6Sk + Af9iYB7/k6xM/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/32PRP92a2P/o5SU/zgtK9IAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/ZFpL/5OT + BP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/paQA/2VkHP+QqEn/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/42nSv9kXFD/qpqa/zUr + KtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUr + Ktyqmpr/ZFpL/5OTBP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+lpAD/ZWQc/5CoSf+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/42n + Sv9kXFD/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADUrKtyqmpr/ZFpL/5OTBP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6WkAP9lZB3/kKhJ/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+ + Uv+gvlL/n71R/2tvRv+Bd23/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/ZFpL/5OTBP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/paQA/15ZG/+QqEn/oL5S/6C+Uv+gvlL/oL5S/6C+ + Uv+gvlL/oL5S/6C+Uv+fvVL/cnZJ/723mf+QhHv/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/ZFpL/5OTBP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+lpAD/cGov/6ymh/9zekj/oL5S/6C+ + Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/5+9Uv9ydkn/ysOk/93Yt/+QhHv/qpqa/zUrKtwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/ZVtM/5CP + Bf+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6SkAP9waTL/1M6u/+3n + xP/CvJz/c3pI/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/n71S/3F2Sf/JxKX/7efE/93Yt/+QhHv/qpqa/zUr + KtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUr + Ktyqmpr/iH10/2diMf+goAH/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pKQA/25p + L//Tza3/7efE/+3nxP/t58T/wryc/3N6SP+gvlL/oL5S/6C+Uv+fvVL/cHVI/8rFpf/t58T/7efE/93Y + t/+QhHv/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADUrKtyqmpr/kIR7/8zFp/9vaDT/oqIB/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+lpQD/cGov/9DKqf/t58T/7efE/+3nxP/t58T/7efE/8K8nP9zekj/oL5S/5+9Uv9wdUj/ysWl/+3n + xP/t58T/7efE/+fiwP+1qJ7/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/kIR7/93Yt//b1LT/cGk0/6KiAf+mpgD/pqYA/6am + AP+mpgD/pqYA/6WlAP9vaS//zMWm/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/Jw6P/amxI/2ts + Sv/Sy6v/7efE/+3nxP/t58T/7efE/+jjwP+6raL/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/kIR7/93Yt//t58T/2tOz/3Bp + Nf+jowH/pqYA/6amAP+mpgD/paUA/29pL//Mxab/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/93Yt/+QhHv/qpqa/zUrKtwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/kIR7/93Y + t//t58T/7efE/9rTs/9waTX/o6MB/6amAP+lpQD/dG4w/8zFpv/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+Lbuv+ckYf/qpqa/zUr + KtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUr + Ktyqmpr/kIR7/93Yt//t58T/7efE/+3nxP/d2Lf/cWk7/4yKBv9wajP/08yt/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/SxLf/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADUrKtyqmpr/kIR7/93Yt//t58T/7efE/+3nxP/t58T/5t+9/7Coif/g2rn/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/xcOp/3qIfv98iX3/19Kz/+3n + xP/t58T/7efE/97Yt/+RhXz/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/kIR7/93Yt//t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/AvqT/U4yR/1zl + +P9a4fP/Vn1+/9nTtP/t58T/7efE/+vkwv/FuKz/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/kIR7/93Yt//t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP9yhX3/XOb5/1zm+f9c5vn/Wt3u/4aQgv/t58T/7efE/+3nxP/Txrn/qpqa/zUrKtwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUrKtyqmpr/kIR7/93Y + t//t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP9yhn7/XOb5/1zm+f9c5vn/Wt3u/4eQg//t58T/7efE/+3nxP/Txrn/qpqa/zUr + KtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUr + Ktyqmpr/kIR7/93Yt//t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP+8uqL/UYqO/1zl+P9a4fP/U3h5/9jSs//t58T/7efE/+3n + xP/Txrn/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADUrKtyqmpr/kIR7/93Yt//t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/wsCl/3qIfv98iX3/08+x/+3n + xP/t58T/7efE/+3nxP/Txrn/qpqa/zUrKtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADctK9SklJX/m4+H/8/Iqv/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/Pwbf/o5SU/zgtK9IAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUqKamJeXn+t6il/5aPe//t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+vkw//FtrT/h3d3/jUrKqUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkiHkRCNzbywLCx/5uP + hf+ak37/1tCx/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7OXD/9HEuf/Br7D/QDY08isf + H0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAA0Kym6ZllY9sCwsf+zo6D/kIN7/3xyaf98cmn/fHJp/3xyaf98cmn/fHJp/3xyaf98cmn/fHJp/3xy + af98cmn/fHJp/3xyaf98cmn/fHJp/3xyaf98cmn/fHJp/3xyaf9/dGv/18y5/9nOvP/Ux7n/yLi0/8Gv + sP9lWFf2NSoptgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAzGhoKNSoou0c7OvGSg4T/r56f/7inqP+4p6j/uKeo/7inqP+4p6j/uKeo/7in + qP+4p6j/uKeo/7inqP+4p6j/uKeo/7inqP+4p6j/uKeo/7inqP+4p6j/uKeo/7inqP+4p6j/uKeo/7in + qP+vnp//koOD/0Y7OfE1Kii4ORwcCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACogIE83LCu6Mykn5C8lI/UvJSP1LyUj9S8l + I/UvJSP1LyUj9S8lI/UvJSP1LyUj9S8lI/UvJSP1LyUj9S8lI/UvJSP1LyUj9S8lI/UvJSP1LyUj9S8l + I/UvJSP1LyUj9S8lI/UzKSfkNywruSshHk0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA/+AAAAf/AAD/gAAAAf8AAP8AAAAA/wAA/wAAAAD/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/ + AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4A + AAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/ + AAD+AAAAAH8AAP4AAAAAfwAA/gAAAAB/AAD+AAAAAH8AAP8AAAAA/wAA/wAAAAD/AAD/gAAAAf8AAP/g + AAAH/wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP///////wAAKAAAAEAAAACAAAAAAQAgAAAAAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABKSIfSi0gHp8vJSTJLyUk0y8lJNMvJSTTLyUk0y8lJNMvJSTTLyUk0y8lJNMvJSTTLyUk0y8l + JNMvJSTTLyUk0y8lJNMvJSTTLyUk0y8lJNMvJSTTLyUk0y8lJNMvJSTTLyUk0y8lJNMvJSTTLyUk0y8l + JNMvJSTTLyUk0y8lJNMvJSTTLyUkyS0gHp8pIh9KAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAsHx8pLyUjziwiIf1RRkX5dWhn/3ttbf97bW3/e21t/3ttbf97bW3/e21t/3tt + bf97bW3/e21t/3ttbf97bW3/e21t/3ttbf97bW3/e21t/3ttbf97bW3/e21t/3ttbf97bW3/e21t/3tt + bf97bW3/e21t/3ttbf97bW3/e21t/3ttbf97bW3/e21t/3VoZ/9RRUT5KyIg/jAmI8wuISEnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsIx86LSQh9FNHRvusnJz/wrGy/8Kxsv/CsbL/wrGy/8Kx + sv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kx + sv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/6uc + nP9RRkX7LSQi8y0fHzkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHx8ZLiQi7mRYWP3AsLH/wrGy/4J4 + cP9KQTb/RTwx/0U8Mf9FPDH/RTwx/0U8Mf9FPDH/RTwx/z40Kv84LyT/OC8k/zgvJP84LyT/OC8k/zgv + JP84LyT/OC8k/zgvJP84LyT/OC8k/zgvJP84LyT/OC8k/zgvJP84LyT/OC8k/zgvJP8/Ni//RT00/0U9 + NP9FPTT/SkI5/4R4c//CsbL/wLCx/2RWVvwuJSLtLCEhFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCIgnT81 + M/m+ra7/wa6u/0M5Lv9NRR3/jIoI/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/4+N + Bv9PTSX/mrZQ/6C+Uv+gvlL/oL5S/4ecSP9LSjD/RDw0/8Gurv+9rK3/PjMx+S0jIJkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAMxoaCiwjIfmNf37/wrGy/1RKPv9mYRT/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/4+NBv9PTSX/mbZP/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/2NrOv9WTUP/wrGy/4x9 + ff8tIyH4ORwcCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAACsjH0IsIiD+uqqr/7ysrf87MiT/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/5COBv9QTiX/mbZP/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+ + Uv+gvlL/OzMp/72urv+6qar/KyEf/y0gID8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsIR5dNSsp+cKxsv+Zi4f/T0kf/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5COBv9PTiX/mbZP/6C+Uv+gvlL/oL5S/6C+ + Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/05NMv+bjYr/wrGy/zQqKPksIR5cAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyEeZjou + LPjCsbL/koV//1RNHf+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5OSBf9OSyT/l7JO/6C+ + Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv9SVDP/koV//8Kxsv86Liz4KyEeZgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACshHmY6Liz4wrGy/5KFf/9UTR3/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5OS + Bf9OSyT/l7JO/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/UlQz/5KF + f//CsbL/Oi4s+CshHmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArIR5mOi4s+MKxsv+ShX//VE0d/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/5OSBf9OSyT/l7JO/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+ + Uv+gvlL/oL5S/01MMv+ThoH/wrGy/zouLPgrIR5mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyEeZjouLPjCsbL/koV//1RN + Hf+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/5OSBf9OSyT/l7JO/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+ + Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/3yLRf9UTUD/qZ2W/8Kxsv86Liz4KyEeZgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsh + HmY6Liz4wrGy/5KFf/9UTR3/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5OSBP9NSSP/l7JO/6C+Uv+gvlL/oL5S/6C+ + Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/32MRv90b1n/lo96/6udl//CsbL/Oi4s+Csh + HmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAArIR5mOi4s+MKxsv+ShX//VE0d/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5STBf9WTjP/V1Q8/5m0 + T/+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/32MRv90b1n/6+XC/5eQ + e/+rnZf/wrGy/zouLPgrIR5mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyEeZjouLPjCsbL/koV//1RNHf+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5ST + Bf9bUjb/3ti3/9LMrP9bWT//mrVP/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/6C+Uv+gvlL/oL5S/32N + Rv91b1n/6+XC/+3nxP+XkHv/q52X/8Kxsv86Liz4KyEeZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACshHmY6Liz4wrGy/5KF + gP9RSh7/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/5KQB/9dVTr/4tu6/+3nxP/t58T/0sys/1tZP/+atU//oL5S/6C+Uv+gvlL/oL5S/6C+ + Uv+gvlL/oL5S/36NRv92cFr/7ObD/+3nxP/t58T/l5B7/6udl//CsbL/Oi4s+CshHmYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAArIR5mOi4s+MKxsv+qnJX/UUk3/4eDDP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/5KQBv9dVDj/4tu6/+3nxP/t58T/7efE/+3nxP/SzKz/XFo//5q1 + T/+gvlL/oL5S/6C+Uv+gvlL/oL5S/36NRv92cFr/7ObD/+3nxP/t58T/7efE/5eQe/+rnZf/wrGy/zou + LPgrIR5mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKyEeZjouLPjCsbL/q52X/5WNef9rZEb/i4gL/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5STBf9bUzf/3di3/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/9LMrP9cWj//mrVP/6C+Uv+gvlL/oL5S/3+NR/93cVv/7ObD/+3nxP/t58T/7efE/+3n + xP+akXz/rZ+a/8Kxsv86Liz4KyEeZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACshHmY6Liz4wrGy/6udl/+XkHv/6ePB/2pj + R/+LiAv/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5WUBf9bUjf/3di3/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/0sys/1xaP/+atU//oL5S/4GTSP93c1z/7ObD/+3n + xP/t58T/7efE/+3nxP/t58T/6uTB/8q8tf/CsbL/Oi4s+CshHmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArIR5mOi4s+MKx + sv+rnZf/l5B7/+3nxP/n4sD/ZV5D/4uIC/+mpgD/pqYA/6amAP+mpgD/pqYA/6amAP+mpgD/pqYA/5WU + Bf9bUzf/3di3/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/X0bL/ZWFJ/2Bg + Qv+OiW7/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/721m/+5rKb/wrGy/zouLPgrIR5mAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAKyEeZjouLPjCsbL/q52X/5eQe//t58T/7efE/+fiwP9lXkP/jIkL/6amAP+mpgD/pqYA/6am + AP+mpgD/pqYA/5aVBf9dVTn/3di3/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP+XkHv/q52X/8Kx + sv86Liz4KyEeZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAACshHmY6Liz4wrGy/6udl/+XkHv/7efE/+3nxP/t58T/5+LA/2Vd + RP+MiQv/pqYA/6amAP+mpgD/pqYA/5eWBf9dVTn/3di3/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/l5B7/6udl//CsbL/Oi4s+CshHmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArIR5mOi4s+MKxsv+rnZf/l5B7/+3n + xP/t58T/7efE/+3nxP/n4b//ZVxD/4yJC/+mpgD/pqYA/5eWBf9dVTn/3di3/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/8K7oP+8rqj/wrGy/zouLPgrIR5mAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyEeZjou + LPjCsbL/q52X/5eQe//t58T/7efE/+3nxP/t58T/7efE/+njwf9qYUj/fnoT/4SADf9eVjv/4Nq5/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/m373/yLu0/8Kxsv86Liz4KyEeZgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAACshHmY6Liz4wrGy/6udl/+XkHv/7efE/+3nxP/t58T/7efE/+3nxP/t58T/6+XC/7Cp + jP+ooYT/5+G//+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/r5cL/sq6V/4yPfv+tqJH/6OPA/+3nxP/t58T/7efE/+3nxP/t58T/mZB8/6ue + mP/CsbL/Oi4s+CshHmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArIR5mOi4s+MKxsv+rnZf/l5B7/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/j3bz/WGBa/02Zov9UxdX/TqKt/1JeWf/Z0rL/7efE/+3n + xP/t58T/7efE/7Gpkf+2qKL/wrGy/zouLPgrIR5mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyEeZjouLPjCsbL/q52X/5eQ + e//t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/dXpu/1XC0P9c5vn/XOb5/1zm + +f9X0OH/ZGtk/+3nxP/t58T/7efE/+3nxP/t58T/yry1/8Kxsv86Liz4KyEeZgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsh + HmY6Liz4wrGy/6udl/+XkHv/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/1Rn + ZP9c5vn/XOb5/1zm+f9c5vn/XOb5/1Bsav/q5MH/7efE/+3nxP/t58T/7efE/8q8tf/CsbL/Oi4s+Csh + HmYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAArIR5mOi4s+MKxsv+rnZf/l5B7/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP9UaGX/XOb5/1zm+f9c5vn/XOb5/1zm+f9QbGr/6uTB/+3nxP/t58T/7efE/+3n + xP/KvLX/wrGy/zouLPgrIR5mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKyEeZjouLPjCsbL/q52X/5eQe//t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/dXpu/1XC0P9c5vn/XOb5/1zm+f9X0OH/ZGtk/+3n + xP/t58T/7efE/+3nxP/t58T/yry1/8Kxsv86Liz4KyEeZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACshHmY6Liz4wrGy/6ud + l/+XkHv/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+PdvP9YYFr/TZmi/1TF + 1f9Ooq3/Ul5Z/9nSsv/t58T/7efE/+3nxP/t58T/7efE/8q8tf/CsbL/Oi4s+CshHmYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAArIR5mOi4s+MKxsv+rnZf/l5B7/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/6+XC/7Kulf+Mj37/raiR/+jjwP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/KvLX/wrGy/zou + LPgrIR5mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAALCEeXTUrKfnCsbL/r6Cc/5GKd//t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/ybq1/8Kxsv80Kij5LCEeXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsjH0IsIiD+uqqr/7+vr/9rY1f/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/6+TD/8Sysv+6qar/KyEf/y0gID8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzGhoKLCMh+Y1/ + f//CsbL/fnJp/7Gpkf/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/9jNvP/CsbL/jH19/y0jIfg5HBwJAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAC0kIp5EODb5wK+v/8Gwr/9vZFv/jYVy/9bQsf/p48H/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3n + xP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/+3nxP/t58T/7efE/97Uvv/DsrL/v6+w/0I2 + NfouJCGbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApHx8ZLiQi72hbWv3BsLH/wrGy/6KWjv93bWT/al9X/2dd + VP9nXVT/Z11U/2ddVP9nXVT/Z11U/2ddVP9nXVT/Z11U/2ddVP9nXVT/Z11U/2ddVP9nXVT/Z11U/2dd + VP9nXVT/Z11U/2ddVP9nXVT/Z11U/2ddVP9nXVT/Z11U/2ddVP9qX1b/1cu2/9/Vvv/d077/2s+8/82/ + t//CsbL/wbCx/2ZaWf0vJSLtLCEhFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwjHzouJCL1Wk5N/K+f + oP/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kx + sv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kxsv/CsbL/wrGy/8Kx + sv/CsbL/wrGy/8Kxsv/CsbL/r56f/1lNTPwuJSL0LR8fOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAALB8fKTEmJM8sIiH9UUZF+XVoZ/+DdXT/hXd3/4V3d/+Fd3f/hXd3/4V3d/+Fd3f/hXd3/4V3 + d/+Fd3f/hXd3/4V3d/+Fd3f/hXd3/4V3d/+Fd3f/hXd3/4V3d/+Fd3f/hXd3/4V3d/+Fd3f/hXd3/4V3 + d/+Fd3f/hXd3/4V3d/+Fd3f/hXd3/4N1dP91aGf/UUVE+SsiIP4wJiTOLiEhJwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKSIfSi0gHp8vJSTJLyYj3y8mJOQvJiTkLyYk5C8m + JOQvJiTkLyYk5C8mJOQvJiTkLyYk5C8mJOQvJiTkLyYk5C8mJOQvJiTkLyYk5C8mJOQvJiTkLyYk5C8m + JOQvJiTkLyYk5C8mJOQvJiTkLyYk5C8mJOQvJiTkLyYk5C8mJOQvJiPfLyUkyS0gHp8pIh9KAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////gAAAAB////4AAAAAB////AAAAAA + D///4AAAAAAH///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///A + AAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAA + A///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///A + AAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAAA///wAAAAAAD///AAAAAAAP//8AAAAAA + A///wAAAAAAD///AAAAAAAP//8AAAAAAA///4AAAAAAH///wAAAAAA////gAAAAAH////gAAAAB///// + //////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////w== + + + \ No newline at end of file diff --git a/FormLib/FormImageWindow.cs.Designer.cs b/FormLib/FormImageWindow.cs.Designer.cs index 77cd2cb..2da60cd 100644 --- a/FormLib/FormImageWindow.cs.Designer.cs +++ b/FormLib/FormImageWindow.cs.Designer.cs @@ -65,6 +65,8 @@ namespace FormLib this.Controls.Add(this.panel1); this.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; this.Name = "FormImageWindow"; this.Text = "图像"; this.Load += new System.EventHandler(this.FormImageWindow_Load); diff --git a/FormLib/FormImageWindow.cs.cs b/FormLib/FormImageWindow.cs.cs index 9f1848f..bbc195b 100644 --- a/FormLib/FormImageWindow.cs.cs +++ b/FormLib/FormImageWindow.cs.cs @@ -14,9 +14,11 @@ using WeifenLuo.WinFormsUI.Docking; namespace FormLib { + [Serializable] public partial class FormImageWindow : DockContent { public HWindowTool_Smart myHWindow = new HWindowTool_Smart(); + public string WindowName { get; set; } public FormImageWindow() { InitializeComponent(); diff --git a/FormLib/FormLib.csproj b/FormLib/FormLib.csproj index 9dcda7f..d7f952b 100644 --- a/FormLib/FormLib.csproj +++ b/FormLib/FormLib.csproj @@ -60,6 +60,12 @@ + + Form + + + FormHalconWindow.cs + Form @@ -87,6 +93,9 @@ + + FormHalconWindow.cs + FormImageWindow.cs.cs diff --git a/HDevEngineTool/FormHDevEngineTool.cs b/HDevEngineTool/FormHDevEngineTool.cs index 7c174e7..91b2c5b 100644 --- a/HDevEngineTool/FormHDevEngineTool.cs +++ b/HDevEngineTool/FormHDevEngineTool.cs @@ -121,6 +121,7 @@ namespace HDevEngineTool if(myHDevEngine.ProgramCall != null) { myHDevEngine.ProgramCall.Execute(); + // HTuple a = myHDevEngine.ProgramCall.GetCtrlVarTuple("RunTime"); } } diff --git a/HDevEngineTool/HDevEngineCode.cs b/HDevEngineTool/HDevEngineCode.cs index 0f8dcda..0d061ae 100644 --- a/HDevEngineTool/HDevEngineCode.cs +++ b/HDevEngineTool/HDevEngineCode.cs @@ -54,8 +54,10 @@ namespace HDevEngineTool MyProgram.LoadProgram(CodeFilePath); ProgramCall = new HDevProgramCall(MyProgram); MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(FormHDevEngineTool.Instance.myHwindow.SmartWindow.HalconWindow)); + } ProgramCall.Execute(); + // HTuple a = MyEngine.GetGlobalCtrlVarTuple("RunTime"); } } } diff --git a/HDevEngineTool/HDevEngineToolRun.cs b/HDevEngineTool/HDevEngineToolRun.cs index dd9e327..7ef80f5 100644 --- a/HDevEngineTool/HDevEngineToolRun.cs +++ b/HDevEngineTool/HDevEngineToolRun.cs @@ -11,7 +11,7 @@ namespace HDevEngineTool { public class HDevEngineToolRun : IToolRun { - public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList, IVisionJob runJob, Form myHalconWindowForm) { } diff --git a/HalconTool/HalconTool.csproj b/HalconTool/HalconTool.csproj index be28bfd..9daba0d 100644 --- a/HalconTool/HalconTool.csproj +++ b/HalconTool/HalconTool.csproj @@ -50,6 +50,7 @@ + diff --git a/HalconTool/HalconToolRun.cs b/HalconTool/HalconToolRun.cs index cd3dc4a..9acfafa 100644 --- a/HalconTool/HalconToolRun.cs +++ b/HalconTool/HalconToolRun.cs @@ -27,11 +27,11 @@ namespace HalconTool { public class HalconToolRun : IToolRun { - public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList, IVisionJob runJob, Form myHalconWindowForm) { Type a = this.GetType(); HalconTool myHalconTool = (HalconTool)L_toolList[toolIndex].tool; - VisionJob myJob = VisionJobParams.pVisionProject.Project[jobName]; + VisionJob myJob = (VisionJob)runJob; myHalconTool.Run(SoftwareRunState.Release); if (myHalconTool.toolRunStatu != ToolRunStatu.Succeed) { @@ -40,9 +40,10 @@ namespace HalconTool else { myJob.FormLogDisp($"{L_toolList[toolIndex].toolName} 运行成功,{myHalconTool.runTime}", Color.Green, selectNode); - FormImageWindow.Instance.myHWindow.DispImage(myHalconTool.outputImage); + ((FormImageWindow)myHalconWindowForm).myHWindow.DispImage(myHalconTool.outputImage); L_toolList[toolIndex].toolOutput[0] = new ToolIO("OutputImage", myHalconTool.outputImage, DataType.Image); } + L_toolList[toolIndex].toolRunStatu = myHalconTool.toolRunStatu; } } } diff --git a/ImageWindow/HWindow_Final.resx b/ImageWindow/HWindow_Final.resx index 589e3e9..faac048 100644 --- a/ImageWindow/HWindow_Final.resx +++ b/ImageWindow/HWindow_Final.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADk - CAAAAk1TRnQBSQFMAgEBAgEAASABAQEgAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAASgBAQEoAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/PMAlignTool/FormPMAlignTool.cs b/PMAlignTool/FormPMAlignTool.cs index 27e3768..198c79d 100644 --- a/PMAlignTool/FormPMAlignTool.cs +++ b/PMAlignTool/FormPMAlignTool.cs @@ -24,7 +24,7 @@ namespace PMAlignTool private HDrawingObject serachRegion_drawing_object = new HDrawingObject(); public List templateModelListAdd = new List() { }; public List templateModelListSub = new List() { }; - public List templateModelList = new List() { }; + public FormPMAlignTool(ref object pmalign) { InitializeComponent(); @@ -191,7 +191,7 @@ namespace PMAlignTool { if(myPMAlign.inputImage != null) { - if(myPMAlign.CreateModelTemplate() == 0) + if(myPMAlign.CreateModelTemplate(false, null) == 0) { if (myPMAlign.matchMode == MatchMode.BasedShape) { diff --git a/PMAlignTool/PMAlign.cs b/PMAlignTool/PMAlign.cs index 68b743b..e8c81d2 100644 --- a/PMAlignTool/PMAlign.cs +++ b/PMAlignTool/PMAlign.cs @@ -276,17 +276,25 @@ namespace PMAlignTool maxScale = FormPMAlignTool.Instance.nud_ScaleRange.Value; } - public int CreateModelTemplate() + public int CreateModelTemplate(bool setInputModelRegion, HObject inputModelRegion) { HObject template; oldTrainImage = inputImage; - if (FormPMAlignTool.Instance.templateModelListAdd.Count == 0) + // 判断是否从外部输入模板 + if(setInputModelRegion) { - LoggerClass.WriteLog($"{toolName}未划定模板建立区域", MsgLevel.Exception); - isCreateModel = false; - return -1; + templateRegion = inputModelRegion; + } + else + { + if (FormPMAlignTool.Instance.templateModelListAdd.Count == 0) + { + LoggerClass.WriteLog($"{toolName}未划定模板建立区域", MsgLevel.Exception); + isCreateModel = false; + return -1; + } + CreateModelRegion(); } - CreateModelRegion(); HObject createModelImg; HOperatorSet.GenEmptyObj(out createModelImg); createModelImg = ProcessImage(inputImage); diff --git a/PMAlignTool/PMAlignTool.csproj b/PMAlignTool/PMAlignTool.csproj index f76ce52..c491556 100644 --- a/PMAlignTool/PMAlignTool.csproj +++ b/PMAlignTool/PMAlignTool.csproj @@ -55,6 +55,7 @@ + diff --git a/PMAlignTool/PMAlignToolRun.cs b/PMAlignTool/PMAlignToolRun.cs index 2e07664..1f7908e 100644 --- a/PMAlignTool/PMAlignToolRun.cs +++ b/PMAlignTool/PMAlignToolRun.cs @@ -31,11 +31,10 @@ namespace PMAlignTool { public class PMAlignToolRun : IToolRun { - public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList) + public void ToolRun(string jobName, int toolIndex, int inputItemNum, TreeNode selectNode, List L_toolList, IVisionJob runJob, Form myHalconWindowForm) { PMAlign myPMAlign = (PMAlign)L_toolList[toolIndex].tool; - - VisionJob myJob = VisionJobParams.pVisionProject.Project[jobName]; + VisionJob myJob = (VisionJob)runJob; for (int j = 0; j < inputItemNum; j++) { if (L_toolList[toolIndex].GetInput(L_toolList[toolIndex].toolInput[j].IOName).value == null) @@ -64,7 +63,7 @@ namespace PMAlignTool else { myJob.FormLogDisp($"{L_toolList[toolIndex].toolName} 运行成功,{myPMAlign.runTime}", Color.Green, selectNode); - myPMAlign.DispMainWindow(FormImageWindow.Instance.myHWindow); + myPMAlign.DispMainWindow(((FormImageWindow)myHalconWindowForm).myHWindow); // 将输出值赋值到界面输出中 if (myPMAlign.L_resultList.Count > 0) { @@ -75,6 +74,7 @@ namespace PMAlignTool L_toolList[toolIndex].toolOutput[4] = new ToolIO("GetPose.Score", myPMAlign.L_resultList[0].Socre, DataType.DoubleValue); } } + L_toolList[toolIndex].toolRunStatu = myPMAlign.toolRunStatu; } } } diff --git a/ToolLib.Log/Logger/UserLogger.cs b/ToolLib.Log/Logger/UserLogger.cs index 1ba61ca..b31aecf 100644 --- a/ToolLib.Log/Logger/UserLogger.cs +++ b/ToolLib.Log/Logger/UserLogger.cs @@ -176,14 +176,17 @@ namespace Logger { lock(myObject) { - LogInfo log = LoggerClass.logQueue.Dequeue(); - if (log.ex != null) + if(LoggerClass.logQueue.Count > 0) { - AddLog(log.logLevel, log.message, log.ex); - } - else - { - AddLog(log.logLevel, log.message); + LogInfo log = LoggerClass.logQueue.Dequeue(); + if (log.ex != null) + { + AddLog(log.logLevel, log.message, log.ex); + } + else + { + AddLog(log.logLevel, log.message); + } } } } diff --git a/ToolLib.VisionJob/FormJobManage.Designer.cs b/ToolLib.VisionJob/FormJobManage.Designer.cs index b1706cb..4b603b8 100644 --- a/ToolLib.VisionJob/FormJobManage.Designer.cs +++ b/ToolLib.VisionJob/FormJobManage.Designer.cs @@ -32,10 +32,14 @@ namespace ToolLib.VisionJob 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(); + this.picDeleteJob = new System.Windows.Forms.PictureBox(); + this.picSaveJob = new System.Windows.Forms.PictureBox(); + this.picOpenJob = new System.Windows.Forms.PictureBox(); ((System.ComponentModel.ISupportInitialize)(this.picNewJob)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picDeleteJob)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picSaveJob)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.picOpenJob)).BeginInit(); this.SuspendLayout(); // // tabJobUnion @@ -70,17 +74,6 @@ namespace ToolLib.VisionJob 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))); @@ -93,11 +86,48 @@ namespace ToolLib.VisionJob this.picNewJob.TabStop = false; this.picNewJob.Click += new System.EventHandler(this.picNewJob_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; + // + // picSaveJob + // + this.picSaveJob.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.picSaveJob.Image = ((System.Drawing.Image)(resources.GetObject("picSaveJob.Image"))); + this.picSaveJob.Location = new System.Drawing.Point(94, 595); + this.picSaveJob.Name = "picSaveJob"; + this.picSaveJob.Size = new System.Drawing.Size(35, 40); + this.picSaveJob.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.picSaveJob.TabIndex = 2; + this.picSaveJob.TabStop = false; + this.picSaveJob.Click += new System.EventHandler(this.picSaveJob_Click); + // + // picOpenJob + // + this.picOpenJob.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.picOpenJob.Image = ((System.Drawing.Image)(resources.GetObject("picOpenJob.Image"))); + this.picOpenJob.Location = new System.Drawing.Point(135, 595); + this.picOpenJob.Name = "picOpenJob"; + this.picOpenJob.Size = new System.Drawing.Size(35, 40); + this.picOpenJob.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.picOpenJob.TabIndex = 2; + this.picOpenJob.TabStop = false; + this.picOpenJob.Click += new System.EventHandler(this.picOpenJob_Click); + // // 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.picOpenJob); + this.Controls.Add(this.picSaveJob); this.Controls.Add(this.picDeleteJob); this.Controls.Add(this.picNewJob); this.Controls.Add(this.btnSignael); @@ -108,8 +138,10 @@ namespace ToolLib.VisionJob 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(); + ((System.ComponentModel.ISupportInitialize)(this.picDeleteJob)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.picSaveJob)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.picOpenJob)).EndInit(); this.ResumeLayout(false); } @@ -117,8 +149,10 @@ namespace ToolLib.VisionJob #endregion private System.Windows.Forms.Button btnCycleRun; private System.Windows.Forms.Button btnSignael; + public System.Windows.Forms.TabControl tabJobUnion; private System.Windows.Forms.PictureBox picNewJob; private System.Windows.Forms.PictureBox picDeleteJob; - public System.Windows.Forms.TabControl tabJobUnion; + private System.Windows.Forms.PictureBox picSaveJob; + private System.Windows.Forms.PictureBox picOpenJob; } } \ No newline at end of file diff --git a/ToolLib.VisionJob/FormJobManage.cs b/ToolLib.VisionJob/FormJobManage.cs index d7870d9..dd8b4ae 100644 --- a/ToolLib.VisionJob/FormJobManage.cs +++ b/ToolLib.VisionJob/FormJobManage.cs @@ -62,5 +62,35 @@ namespace ToolLib.VisionJob } } } + + private void picSaveJob_Click(object sender, EventArgs e) + { + SaveFileDialog myDia = new SaveFileDialog(); + string jobName = tabJobUnion.SelectedTab.Text; + myDia.Title = "保存job文件"; + myDia.Filter = "job文件(*.job)|*.job"; + myDia.FilterIndex = 1; + myDia.FileName = jobName;//这里是key + if (myDia.ShowDialog() == DialogResult.OK) + { + VisionJobParams.pVisionProject.SaveJob(jobName, myDia.FileName); + } + } + + private void picOpenJob_Click(object sender, EventArgs e) + { + UIInputForm myUIInputForm = new UIInputForm(); + myUIInputForm.Label.Text = "输入新建Job名称"; + if (myUIInputForm.ShowDialog() == DialogResult.OK) + { + OpenFileDialog myDia = new OpenFileDialog(); + if (myDia.ShowDialog() == DialogResult.OK) + { + string newJobName = myUIInputForm.Editor.Text; + VisionJobParams.pVisionProject.LoadJob(newJobName, myDia.FileName); + } + } + + } } } diff --git a/ToolLib.VisionJob/FormJobManage.resx b/ToolLib.VisionJob/FormJobManage.resx index bbbe73c..5236d57 100644 --- a/ToolLib.VisionJob/FormJobManage.resx +++ b/ToolLib.VisionJob/FormJobManage.resx @@ -118,6 +118,40 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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 @@ -160,38 +194,63 @@ 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 + SvoFejOUQZmsukoAAAAASUVORK5CYII= diff --git a/ToolLib.VisionJob/OperateProject.cs b/ToolLib.VisionJob/OperateProject.cs index 3ca1f71..5767d5d 100644 --- a/ToolLib.VisionJob/OperateProject.cs +++ b/ToolLib.VisionJob/OperateProject.cs @@ -12,6 +12,7 @@ * ============================================================================== */ using CommonMethods; +using FormLib; using Logger; using System; using System.Collections.Generic; @@ -25,6 +26,7 @@ using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; +using WeifenLuo.WinFormsUI.Docking; namespace ToolLib.VisionJob { @@ -67,6 +69,35 @@ namespace ToolLib.VisionJob InitJob(VisionJobParams.pVisionProject.Project[jobName]); } + public void CreateNewJob(string jobName, VisionJob 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, newJob); + FormJobManage.Instance.tabJobUnion.SelectedTab = newTab; + // newTab.Select(); + } + newJob.JobName = jobName; + InitJob(VisionJobParams.pVisionProject.Project[jobName]); + } + + public void AddDispImageindow(DockPanel myPanel, DockState myState, string windowName) + { + if(VisionJobParams.pVisionProject.Project.ContainsKey(windowName)) + { + FormImageWindow myImageWindow = VisionJobParams.pVisionProject.Project[windowName].myHalconWindow; + if(myImageWindow == null) + { + myImageWindow = new FormImageWindow(); + } + myImageWindow.Text = windowName + "-图像"; + myImageWindow.Show(myPanel, myState); + } + } + public void SaveJob() { // Serialize.BinarySerialize($"{VisionJobParams.sSysConfigPath}Vision.prj" , VisionJobParams.myProject); diff --git a/ToolLib.VisionJob/VisionJob.cs b/ToolLib.VisionJob/VisionJob.cs index 8e235cc..92d8467 100644 --- a/ToolLib.VisionJob/VisionJob.cs +++ b/ToolLib.VisionJob/VisionJob.cs @@ -11,6 +11,7 @@ using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using ViewROI; namespace ToolLib.VisionJob { @@ -257,6 +258,10 @@ namespace ToolLib.VisionJob { if (!isDrawing) { + TreeView tree = GetJobTree(); + graph = tree.CreateGraphics(); + tree.CreateGraphics().Dispose(); + isDrawing = true; Thread th = new Thread(() => { @@ -265,9 +270,7 @@ namespace ToolLib.VisionJob colValueAndColor.Clear(); startNodeAndColor.Clear(); list.Clear(); - TreeView tree = GetJobTree(); - graph = tree.CreateGraphics(); - tree.CreateGraphics().Dispose(); + foreach (KeyValuePair item in D_itemAndSource) { // 将此划线线程委托到JOB管理界面 @@ -886,14 +889,21 @@ namespace ToolLib.VisionJob 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); + myTool.ToolRun(JobName, i, inputItemNum, treeNode, L_toolList, this, myHalconWindow); } } public void FormLogDisp(string mes, Color color, TreeNode treeNode, Logger.MsgLevel msgLevel = Logger.MsgLevel.Info) { - Logger.LoggerClass.WriteLog(mes, msgLevel); - treeNode.ForeColor = color; + LoggerClass.WriteLog(mes, msgLevel); + if(treeNode != null) + { + treeNode.ForeColor = color; + } + } + [NonSerialized] + public FormImageWindow myHalconWindow = new FormImageWindow(); + } } diff --git a/ToolLib.VisionJob/VisionProject.cs b/ToolLib.VisionJob/VisionProject.cs index 4350eb1..60d3303 100644 --- a/ToolLib.VisionJob/VisionProject.cs +++ b/ToolLib.VisionJob/VisionProject.cs @@ -18,6 +18,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows.Forms; namespace ToolLib.VisionJob { @@ -50,11 +51,6 @@ namespace ToolLib.VisionJob 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; } @@ -71,5 +67,45 @@ namespace ToolLib.VisionJob { Serialize.BinarySerialize(prjFilePath, Project); } + + public bool LoadJob(string jobName,string path) + { + if (!File.Exists(path)) + { + Logger.LoggerClass.WriteLog("job路径不存在!", true); + return false; + } + else if(Project.ContainsKey(jobName)) + { + Logger.LoggerClass.WriteLog("项目中已存在该JOB名称,请更换!", true); + return false; + } + else + { + try + { + VisionJob myNewJob = Serialize.BinaryDeserialize(path); + OperateProject.Instance.CreateNewJob(jobName, myNewJob, true); // 新添加job + return true; + } + catch (Exception ex) + { + Logger.LoggerClass.WriteLog("载入项目工程时出现异常!", ex); + return false; + } + } + } + + public void SaveJob(string jobName,string filePath) + { + if(Project.ContainsKey(jobName)) + { + Serialize.BinarySerialize(filePath, Project[jobName]); + } + else + { + Logger.LoggerClass.WriteLog("保存时出现异常,未找到Job", true); + } + } } } diff --git a/ToolLib.VisionToolList/VisionToolList.cs b/ToolLib.VisionToolList/VisionToolList.cs index 909d399..ca95ca1 100644 --- a/ToolLib.VisionToolList/VisionToolList.cs +++ b/ToolLib.VisionToolList/VisionToolList.cs @@ -190,7 +190,6 @@ namespace VisionJobFactory FormTool = null; toolInput = new List() { inputImage }; toolOutput = new List() { outPose, outPoseX, outPoseY, outPoseR, outPoseScore }; - } /// /// 只获取选择工具的描述信息 diff --git a/VisionEdit/FormMain.cs b/VisionEdit/FormMain.cs index cf42d49..51530c9 100644 --- a/VisionEdit/FormMain.cs +++ b/VisionEdit/FormMain.cs @@ -45,7 +45,7 @@ namespace VisionEdit InitDockPanel(); _instance = this; } - + bool configLoadFlag = false; private void InitDockPanel() { try @@ -66,33 +66,38 @@ namespace VisionEdit { return myFormLog; } - if (persistString == typeof(FormImageWindow).ToString()) - { - return myFormImageWindow; - } + //if (persistString == typeof(FormImageWindow).ToString()) + //{ + // return new FormImageWindow(); + //} //主框架之外的窗体不显示 return null; }); + configLoadFlag = true; } - catch (Exception) + catch (Exception ex) { //配置文件不存在或配置文件有问题时 按系统默认规则加载子窗体 myFormToolBox.Show(this.dockPanel1, DockState.DockLeft); myFormJobManage.Show(this.dockPanel1, DockState.DockRight); myFormLog.Show(this.dockPanel1, DockState.DockBottom); - myFormImageWindow.Show(this.dockPanel1, DockState.Document); } } private void FormMain2_Load(object sender, EventArgs e) { - // 窗体加载到主窗体 - myFormToolBox.Show(this.dockPanel1, DockState.DockLeft); - myFormJobManage.Show(this.dockPanel1, DockState.DockRight); - myFormImageWindow.Show(this.dockPanel1, DockState.Document); - myFormLog.Show(this.dockPanel1, DockState.DockBottom); // 初始化JOB VisionJobParams.pVisionProject.LoadProject(); + // 窗体加载到主窗体 + foreach (var item in VisionJobParams.pVisionProject.Project) + { + if (item.Value.myHalconWindow == null) + { + item.Value.myHalconWindow = new FormImageWindow(); + } + item.Value.myHalconWindow.Text = item.Value.JobName + "-图像"; + item.Value.myHalconWindow.Show(this.dockPanel1, DockState.Document); + } } private void timer1_Tick(object sender, EventArgs e) @@ -107,10 +112,7 @@ namespace VisionEdit /// private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { - if (File.Exists(m_DockPath)) - { - dockPanel1.SaveAsXml(this.m_DockPath); - } + dockPanel1.SaveAsXml(this.m_DockPath); DialogResult dr = MessageBox.Show("是否要进行保存?", "提示", MessageBoxButtons.YesNoCancel); if (dr == DialogResult.Yes) { diff --git a/VisionEdit/Program.cs b/VisionEdit/Program.cs index d80bb41..05b7b47 100644 --- a/VisionEdit/Program.cs +++ b/VisionEdit/Program.cs @@ -11,7 +11,7 @@ namespace VisionEdit /// /// 应用程序的主入口点。 /// - [STAThread] + [STAThreadAttribute] static void Main() { Application.EnableVisualStyles(); diff --git a/VisionEdit/bin/Debug/DockPanel.config b/VisionEdit/bin/Debug/DockPanel.config index 0c5b398..7de7575 100644 Binary files a/VisionEdit/bin/Debug/DockPanel.config and b/VisionEdit/bin/Debug/DockPanel.config differ