2.0.9
This commit is contained in:
@@ -20,6 +20,8 @@ public class YoloDetectionOperation:BaseOperation
|
|||||||
private FilePath _modelFilePath = new FilePath(){ Format = "Onnx format(*.onnx)|*.onnx" };
|
private FilePath _modelFilePath = new FilePath(){ Format = "Onnx format(*.onnx)|*.onnx" };
|
||||||
|
|
||||||
|
|
||||||
|
public int IgnoreType { get; set; } = -1;
|
||||||
|
|
||||||
public FilePath ModelFilePath
|
public FilePath ModelFilePath
|
||||||
{
|
{
|
||||||
get => _modelFilePath;
|
get => _modelFilePath;
|
||||||
@@ -101,9 +103,9 @@ public class YoloDetectionOperation:BaseOperation
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (box.Class.Id + 1 == 10)
|
if (box.Class.Id + 1 == IgnoreType)
|
||||||
{
|
{
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
classes[box.Class.Id + 1] = box.Class.Name;
|
classes[box.Class.Id + 1] = box.Class.Name;
|
||||||
var rect = box.Bounds;
|
var rect = box.Bounds;
|
||||||
|
|||||||
325
Plugins/CandyboxPlugin/Forms/MapEditor.Designer.cs
generated
325
Plugins/CandyboxPlugin/Forms/MapEditor.Designer.cs
generated
@@ -1,4 +1,6 @@
|
|||||||
namespace Lindt.Candybox.Demo
|
using System.Resources;
|
||||||
|
|
||||||
|
namespace Lindt.Candybox.Demo
|
||||||
{
|
{
|
||||||
partial class MapEditor
|
partial class MapEditor
|
||||||
{
|
{
|
||||||
@@ -28,200 +30,216 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MapEditor));
|
materialRaisedButton1 = new MaterialSkin.Controls.MaterialRaisedButton();
|
||||||
|
materialRaisedButton3 = new MaterialSkin.Controls.MaterialRaisedButton();
|
||||||
this.maskControl1 = new Lindt.Candybox.Demo.MaskControl();
|
this.maskControl1 = new Lindt.Candybox.Demo.MaskControl();
|
||||||
this.materialRaisedButton1 = new MaterialSkin.Controls.MaterialRaisedButton();
|
label1 = new Label();
|
||||||
this.materialRaisedButton3 = new MaterialSkin.Controls.MaterialRaisedButton();
|
udMemoryBuffer = new NumericUpDown();
|
||||||
this.label1 = new System.Windows.Forms.Label();
|
btnBrush = new MaterialSkin.Controls.MaterialRaisedButton();
|
||||||
this.udMemoryBuffer = new System.Windows.Forms.NumericUpDown();
|
btnDrawLine = new MaterialSkin.Controls.MaterialRaisedButton();
|
||||||
this.btnBrush = new MaterialSkin.Controls.MaterialRaisedButton();
|
btnRemoveLine = new MaterialSkin.Controls.MaterialRaisedButton();
|
||||||
this.btnDrawLine = new MaterialSkin.Controls.MaterialRaisedButton();
|
btnMoveLine = new MaterialSkin.Controls.MaterialRaisedButton();
|
||||||
this.btnRemoveLine = new MaterialSkin.Controls.MaterialRaisedButton();
|
btnMoveVertices = new MaterialSkin.Controls.MaterialRaisedButton();
|
||||||
this.btnMoveLine = new MaterialSkin.Controls.MaterialRaisedButton();
|
label2 = new Label();
|
||||||
this.btnMoveVertices = new MaterialSkin.Controls.MaterialRaisedButton();
|
btnRelearnPositions = new MaterialSkin.Controls.MaterialRaisedButton();
|
||||||
this.label2 = new System.Windows.Forms.Label();
|
((System.ComponentModel.ISupportInitialize)udMemoryBuffer).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.udMemoryBuffer)).BeginInit();
|
SuspendLayout();
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
//
|
||||||
// maskControl1
|
// maskControl1
|
||||||
//
|
//
|
||||||
this.maskControl1.Location = new System.Drawing.Point(8, 32);
|
this.maskControl1.Location = new System.Drawing.Point(8, 32);
|
||||||
this.maskControl1.Mask = ((System.Drawing.Bitmap)(resources.GetObject("maskControl1.Mask")));
|
|
||||||
this.maskControl1.Name = "maskControl1";
|
this.maskControl1.Name = "maskControl1";
|
||||||
this.maskControl1.Original = ((System.Drawing.Bitmap)(resources.GetObject("maskControl1.Original")));
|
|
||||||
this.maskControl1.Size = new System.Drawing.Size(900, 704);
|
this.maskControl1.Size = new System.Drawing.Size(900, 704);
|
||||||
this.maskControl1.TabIndex = 0;
|
this.maskControl1.TabIndex = 0;
|
||||||
//
|
//
|
||||||
// materialRaisedButton1
|
// materialRaisedButton1
|
||||||
//
|
//
|
||||||
this.materialRaisedButton1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
materialRaisedButton1.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
this.materialRaisedButton1.Cursor = System.Windows.Forms.Cursors.Hand;
|
materialRaisedButton1.Cursor = Cursors.Hand;
|
||||||
this.materialRaisedButton1.Depth = 0;
|
materialRaisedButton1.Depth = 0;
|
||||||
this.materialRaisedButton1.DrawBorder = true;
|
materialRaisedButton1.DrawBorder = true;
|
||||||
this.materialRaisedButton1.Icon = null;
|
materialRaisedButton1.Icon = null;
|
||||||
this.materialRaisedButton1.Location = new System.Drawing.Point(928, 424);
|
materialRaisedButton1.Location = new Point(928, 496);
|
||||||
this.materialRaisedButton1.MouseState = MaterialSkin.MouseState.HOVER;
|
materialRaisedButton1.MouseState = MaterialSkin.MouseState.HOVER;
|
||||||
this.materialRaisedButton1.Name = "materialRaisedButton1";
|
materialRaisedButton1.Name = "materialRaisedButton1";
|
||||||
this.materialRaisedButton1.Primary = false;
|
materialRaisedButton1.Primary = false;
|
||||||
this.materialRaisedButton1.Size = new System.Drawing.Size(128, 64);
|
materialRaisedButton1.Size = new Size(128, 64);
|
||||||
this.materialRaisedButton1.TabIndex = 1;
|
materialRaisedButton1.TabIndex = 1;
|
||||||
this.materialRaisedButton1.Text = "Cancel";
|
materialRaisedButton1.Text = "Cancel";
|
||||||
this.materialRaisedButton1.UseVisualStyleBackColor = true;
|
materialRaisedButton1.UseVisualStyleBackColor = true;
|
||||||
this.materialRaisedButton1.Click += new System.EventHandler(this.materialRaisedButton1_Click);
|
materialRaisedButton1.Click += materialRaisedButton1_Click;
|
||||||
//
|
//
|
||||||
// materialRaisedButton3
|
// materialRaisedButton3
|
||||||
//
|
//
|
||||||
this.materialRaisedButton3.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
materialRaisedButton3.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
this.materialRaisedButton3.Cursor = System.Windows.Forms.Cursors.Hand;
|
materialRaisedButton3.Cursor = Cursors.Hand;
|
||||||
this.materialRaisedButton3.Depth = 0;
|
materialRaisedButton3.Depth = 0;
|
||||||
this.materialRaisedButton3.DrawBorder = true;
|
materialRaisedButton3.DrawBorder = true;
|
||||||
this.materialRaisedButton3.Icon = null;
|
materialRaisedButton3.Icon = null;
|
||||||
this.materialRaisedButton3.Location = new System.Drawing.Point(928, 352);
|
materialRaisedButton3.Location = new Point(928, 352);
|
||||||
this.materialRaisedButton3.MouseState = MaterialSkin.MouseState.HOVER;
|
materialRaisedButton3.MouseState = MaterialSkin.MouseState.HOVER;
|
||||||
this.materialRaisedButton3.Name = "materialRaisedButton3";
|
materialRaisedButton3.Name = "materialRaisedButton3";
|
||||||
this.materialRaisedButton3.Primary = true;
|
materialRaisedButton3.Primary = true;
|
||||||
this.materialRaisedButton3.Size = new System.Drawing.Size(128, 64);
|
materialRaisedButton3.Size = new Size(128, 64);
|
||||||
this.materialRaisedButton3.TabIndex = 3;
|
materialRaisedButton3.TabIndex = 3;
|
||||||
this.materialRaisedButton3.Text = "Learn";
|
materialRaisedButton3.Text = "Learn";
|
||||||
this.materialRaisedButton3.UseVisualStyleBackColor = true;
|
materialRaisedButton3.UseVisualStyleBackColor = true;
|
||||||
this.materialRaisedButton3.Click += new System.EventHandler(this.materialRaisedButton3_Click);
|
materialRaisedButton3.Click += materialRaisedButton3_Click;
|
||||||
//
|
//
|
||||||
// label1
|
// label1
|
||||||
//
|
//
|
||||||
this.label1.AutoSize = true;
|
label1.AutoSize = true;
|
||||||
this.label1.BackColor = System.Drawing.Color.White;
|
label1.BackColor = Color.White;
|
||||||
this.label1.Location = new System.Drawing.Point(928, 504);
|
label1.Location = new Point(928, 576);
|
||||||
this.label1.Name = "label1";
|
label1.Name = "label1";
|
||||||
this.label1.Size = new System.Drawing.Size(90, 15);
|
label1.Size = new Size(90, 15);
|
||||||
this.label1.TabIndex = 4;
|
label1.TabIndex = 4;
|
||||||
this.label1.Text = "Memory buffer:";
|
label1.Text = "Memory buffer:";
|
||||||
//
|
//
|
||||||
// udMemoryBuffer
|
// udMemoryBuffer
|
||||||
//
|
//
|
||||||
this.udMemoryBuffer.Location = new System.Drawing.Point(928, 528);
|
udMemoryBuffer.Location = new Point(928, 600);
|
||||||
this.udMemoryBuffer.Name = "udMemoryBuffer";
|
udMemoryBuffer.Name = "udMemoryBuffer";
|
||||||
this.udMemoryBuffer.Size = new System.Drawing.Size(120, 23);
|
udMemoryBuffer.Size = new Size(120, 23);
|
||||||
this.udMemoryBuffer.TabIndex = 5;
|
udMemoryBuffer.TabIndex = 5;
|
||||||
//
|
//
|
||||||
// btnBrush
|
// btnBrush
|
||||||
//
|
//
|
||||||
this.btnBrush.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
btnBrush.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
this.btnBrush.Cursor = System.Windows.Forms.Cursors.Hand;
|
btnBrush.Cursor = Cursors.Hand;
|
||||||
this.btnBrush.Depth = 0;
|
btnBrush.Depth = 0;
|
||||||
this.btnBrush.DrawBorder = true;
|
btnBrush.DrawBorder = true;
|
||||||
this.btnBrush.Icon = null;
|
btnBrush.Icon = null;
|
||||||
this.btnBrush.Location = new System.Drawing.Point(928, 64);
|
btnBrush.Location = new Point(928, 64);
|
||||||
this.btnBrush.MouseState = MaterialSkin.MouseState.HOVER;
|
btnBrush.MouseState = MaterialSkin.MouseState.HOVER;
|
||||||
this.btnBrush.Name = "btnBrush";
|
btnBrush.Name = "btnBrush";
|
||||||
this.btnBrush.Primary = false;
|
btnBrush.Primary = false;
|
||||||
this.btnBrush.Size = new System.Drawing.Size(128, 32);
|
btnBrush.Size = new Size(128, 32);
|
||||||
this.btnBrush.TabIndex = 6;
|
btnBrush.TabIndex = 6;
|
||||||
this.btnBrush.Text = "Brush";
|
btnBrush.Text = "Brush";
|
||||||
this.btnBrush.UseVisualStyleBackColor = true;
|
btnBrush.UseVisualStyleBackColor = true;
|
||||||
this.btnBrush.Click += new System.EventHandler(this.btnBrush_Click);
|
btnBrush.Click += btnBrush_Click;
|
||||||
//
|
//
|
||||||
// btnDrawLine
|
// btnDrawLine
|
||||||
//
|
//
|
||||||
this.btnDrawLine.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
btnDrawLine.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
this.btnDrawLine.Cursor = System.Windows.Forms.Cursors.Hand;
|
btnDrawLine.Cursor = Cursors.Hand;
|
||||||
this.btnDrawLine.Depth = 0;
|
btnDrawLine.Depth = 0;
|
||||||
this.btnDrawLine.DrawBorder = true;
|
btnDrawLine.DrawBorder = true;
|
||||||
this.btnDrawLine.Icon = null;
|
btnDrawLine.Icon = null;
|
||||||
this.btnDrawLine.Location = new System.Drawing.Point(928, 104);
|
btnDrawLine.Location = new Point(928, 104);
|
||||||
this.btnDrawLine.MouseState = MaterialSkin.MouseState.HOVER;
|
btnDrawLine.MouseState = MaterialSkin.MouseState.HOVER;
|
||||||
this.btnDrawLine.Name = "btnDrawLine";
|
btnDrawLine.Name = "btnDrawLine";
|
||||||
this.btnDrawLine.Primary = false;
|
btnDrawLine.Primary = false;
|
||||||
this.btnDrawLine.Size = new System.Drawing.Size(128, 32);
|
btnDrawLine.Size = new Size(128, 32);
|
||||||
this.btnDrawLine.TabIndex = 7;
|
btnDrawLine.TabIndex = 7;
|
||||||
this.btnDrawLine.Text = "Draw Line";
|
btnDrawLine.Text = "Draw Line";
|
||||||
this.btnDrawLine.UseVisualStyleBackColor = true;
|
btnDrawLine.UseVisualStyleBackColor = true;
|
||||||
this.btnDrawLine.Click += new System.EventHandler(this.btnDrawLine_Click);
|
btnDrawLine.Click += btnDrawLine_Click;
|
||||||
//
|
//
|
||||||
// btnRemoveLine
|
// btnRemoveLine
|
||||||
//
|
//
|
||||||
this.btnRemoveLine.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
btnRemoveLine.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
this.btnRemoveLine.Cursor = System.Windows.Forms.Cursors.Hand;
|
btnRemoveLine.Cursor = Cursors.Hand;
|
||||||
this.btnRemoveLine.Depth = 0;
|
btnRemoveLine.Depth = 0;
|
||||||
this.btnRemoveLine.DrawBorder = true;
|
btnRemoveLine.DrawBorder = true;
|
||||||
this.btnRemoveLine.Icon = null;
|
btnRemoveLine.Icon = null;
|
||||||
this.btnRemoveLine.Location = new System.Drawing.Point(928, 144);
|
btnRemoveLine.Location = new Point(928, 144);
|
||||||
this.btnRemoveLine.MouseState = MaterialSkin.MouseState.HOVER;
|
btnRemoveLine.MouseState = MaterialSkin.MouseState.HOVER;
|
||||||
this.btnRemoveLine.Name = "btnRemoveLine";
|
btnRemoveLine.Name = "btnRemoveLine";
|
||||||
this.btnRemoveLine.Primary = false;
|
btnRemoveLine.Primary = false;
|
||||||
this.btnRemoveLine.Size = new System.Drawing.Size(128, 32);
|
btnRemoveLine.Size = new Size(128, 32);
|
||||||
this.btnRemoveLine.TabIndex = 8;
|
btnRemoveLine.TabIndex = 8;
|
||||||
this.btnRemoveLine.Text = "Remove Line";
|
btnRemoveLine.Text = "Remove Line";
|
||||||
this.btnRemoveLine.UseVisualStyleBackColor = true;
|
btnRemoveLine.UseVisualStyleBackColor = true;
|
||||||
this.btnRemoveLine.Click += new System.EventHandler(this.btnRemoveLine_Click);
|
btnRemoveLine.Click += btnRemoveLine_Click;
|
||||||
//
|
//
|
||||||
// btnMoveLine
|
// btnMoveLine
|
||||||
//
|
//
|
||||||
this.btnMoveLine.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
btnMoveLine.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
this.btnMoveLine.Cursor = System.Windows.Forms.Cursors.Hand;
|
btnMoveLine.Cursor = Cursors.Hand;
|
||||||
this.btnMoveLine.Depth = 0;
|
btnMoveLine.Depth = 0;
|
||||||
this.btnMoveLine.DrawBorder = true;
|
btnMoveLine.DrawBorder = true;
|
||||||
this.btnMoveLine.Icon = null;
|
btnMoveLine.Icon = null;
|
||||||
this.btnMoveLine.Location = new System.Drawing.Point(928, 184);
|
btnMoveLine.Location = new Point(928, 184);
|
||||||
this.btnMoveLine.MouseState = MaterialSkin.MouseState.HOVER;
|
btnMoveLine.MouseState = MaterialSkin.MouseState.HOVER;
|
||||||
this.btnMoveLine.Name = "btnMoveLine";
|
btnMoveLine.Name = "btnMoveLine";
|
||||||
this.btnMoveLine.Primary = false;
|
btnMoveLine.Primary = false;
|
||||||
this.btnMoveLine.Size = new System.Drawing.Size(128, 32);
|
btnMoveLine.Size = new Size(128, 32);
|
||||||
this.btnMoveLine.TabIndex = 9;
|
btnMoveLine.TabIndex = 9;
|
||||||
this.btnMoveLine.Text = "Move Line";
|
btnMoveLine.Text = "Move Line";
|
||||||
this.btnMoveLine.UseVisualStyleBackColor = true;
|
btnMoveLine.UseVisualStyleBackColor = true;
|
||||||
this.btnMoveLine.Click += new System.EventHandler(this.btnMoveLine_Click);
|
btnMoveLine.Click += btnMoveLine_Click;
|
||||||
//
|
//
|
||||||
// btnMoveVertices
|
// btnMoveVertices
|
||||||
//
|
//
|
||||||
this.btnMoveVertices.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
btnMoveVertices.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
this.btnMoveVertices.Cursor = System.Windows.Forms.Cursors.Hand;
|
btnMoveVertices.Cursor = Cursors.Hand;
|
||||||
this.btnMoveVertices.Depth = 0;
|
btnMoveVertices.Depth = 0;
|
||||||
this.btnMoveVertices.DrawBorder = true;
|
btnMoveVertices.DrawBorder = true;
|
||||||
this.btnMoveVertices.Icon = null;
|
btnMoveVertices.Icon = null;
|
||||||
this.btnMoveVertices.Location = new System.Drawing.Point(928, 224);
|
btnMoveVertices.Location = new Point(928, 224);
|
||||||
this.btnMoveVertices.MouseState = MaterialSkin.MouseState.HOVER;
|
btnMoveVertices.MouseState = MaterialSkin.MouseState.HOVER;
|
||||||
this.btnMoveVertices.Name = "btnMoveVertices";
|
btnMoveVertices.Name = "btnMoveVertices";
|
||||||
this.btnMoveVertices.Primary = false;
|
btnMoveVertices.Primary = false;
|
||||||
this.btnMoveVertices.Size = new System.Drawing.Size(128, 32);
|
btnMoveVertices.Size = new Size(128, 32);
|
||||||
this.btnMoveVertices.TabIndex = 10;
|
btnMoveVertices.TabIndex = 10;
|
||||||
this.btnMoveVertices.Text = "Move Vertices";
|
btnMoveVertices.Text = "Move Vertices";
|
||||||
this.btnMoveVertices.UseVisualStyleBackColor = true;
|
btnMoveVertices.UseVisualStyleBackColor = true;
|
||||||
this.btnMoveVertices.Click += new System.EventHandler(this.btnMoveVertices_Click);
|
btnMoveVertices.Click += btnMoveVertices_Click;
|
||||||
//
|
//
|
||||||
// label2
|
// label2
|
||||||
//
|
//
|
||||||
this.label2.AutoSize = true;
|
label2.AutoSize = true;
|
||||||
this.label2.BackColor = System.Drawing.Color.White;
|
label2.BackColor = Color.White;
|
||||||
this.label2.Location = new System.Drawing.Point(928, 32);
|
label2.Location = new Point(928, 32);
|
||||||
this.label2.Name = "label2";
|
label2.Name = "label2";
|
||||||
this.label2.Size = new System.Drawing.Size(68, 15);
|
label2.Size = new Size(69, 15);
|
||||||
this.label2.TabIndex = 11;
|
label2.TabIndex = 11;
|
||||||
this.label2.Text = "Edit Modes:";
|
label2.Text = "Edit Modes:";
|
||||||
|
//
|
||||||
|
// btnRelearnPositions
|
||||||
|
//
|
||||||
|
btnRelearnPositions.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
|
btnRelearnPositions.Cursor = Cursors.Hand;
|
||||||
|
btnRelearnPositions.Depth = 0;
|
||||||
|
btnRelearnPositions.DrawBorder = true;
|
||||||
|
btnRelearnPositions.Icon = null;
|
||||||
|
btnRelearnPositions.Location = new Point(928, 424);
|
||||||
|
btnRelearnPositions.MouseState = MaterialSkin.MouseState.HOVER;
|
||||||
|
btnRelearnPositions.Name = "btnRelearnPositions";
|
||||||
|
btnRelearnPositions.Primary = false;
|
||||||
|
btnRelearnPositions.Size = new Size(128, 64);
|
||||||
|
btnRelearnPositions.TabIndex = 13;
|
||||||
|
btnRelearnPositions.Text = "Relearn positions";
|
||||||
|
btnRelearnPositions.UseVisualStyleBackColor = true;
|
||||||
|
btnRelearnPositions.Click += btnRelearnPositions_Click;
|
||||||
//
|
//
|
||||||
// MapEditor
|
// MapEditor
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
AutoScaleDimensions = new SizeF(7F, 15F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
AutoScaleMode = AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(1066, 824);
|
ClientSize = new Size(1059, 817);
|
||||||
this.Controls.Add(this.label2);
|
Controls.Add(btnRelearnPositions);
|
||||||
this.Controls.Add(this.btnMoveVertices);
|
Controls.Add(label2);
|
||||||
this.Controls.Add(this.btnMoveLine);
|
Controls.Add(btnMoveVertices);
|
||||||
this.Controls.Add(this.btnRemoveLine);
|
Controls.Add(btnMoveLine);
|
||||||
this.Controls.Add(this.btnDrawLine);
|
Controls.Add(btnRemoveLine);
|
||||||
this.Controls.Add(this.btnBrush);
|
Controls.Add(btnDrawLine);
|
||||||
this.Controls.Add(this.udMemoryBuffer);
|
Controls.Add(btnBrush);
|
||||||
this.Controls.Add(this.label1);
|
Controls.Add(udMemoryBuffer);
|
||||||
this.Controls.Add(this.materialRaisedButton3);
|
Controls.Add(label1);
|
||||||
this.Controls.Add(this.materialRaisedButton1);
|
Controls.Add(materialRaisedButton3);
|
||||||
|
Controls.Add(materialRaisedButton1);
|
||||||
this.Controls.Add(this.maskControl1);
|
this.Controls.Add(this.maskControl1);
|
||||||
this.MaximizeBox = false;
|
MaximizeBox = false;
|
||||||
this.MinimizeBox = false;
|
MinimizeBox = false;
|
||||||
this.Name = "MapEditor";
|
Name = "MapEditor";
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
StartPosition = FormStartPosition.CenterScreen;
|
||||||
this.Text = "MapEditor";
|
Text = "MapEditor";
|
||||||
((System.ComponentModel.ISupportInitialize)(this.udMemoryBuffer)).EndInit();
|
((System.ComponentModel.ISupportInitialize)udMemoryBuffer).EndInit();
|
||||||
this.ResumeLayout(false);
|
ResumeLayout(false);
|
||||||
this.PerformLayout();
|
PerformLayout();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,5 +256,6 @@
|
|||||||
private MaterialSkin.Controls.MaterialRaisedButton btnMoveLine;
|
private MaterialSkin.Controls.MaterialRaisedButton btnMoveLine;
|
||||||
private MaterialSkin.Controls.MaterialRaisedButton btnMoveVertices;
|
private MaterialSkin.Controls.MaterialRaisedButton btnMoveVertices;
|
||||||
private System.Windows.Forms.Label label2;
|
private System.Windows.Forms.Label label2;
|
||||||
|
private MaterialSkin.Controls.MaterialRaisedButton btnRelearnPositions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -30,29 +30,29 @@ namespace Lindt.Candybox.Demo
|
|||||||
_recipe.ProcessImage(original);
|
_recipe.ProcessImage(original);
|
||||||
|
|
||||||
Mat matContours2;
|
Mat matContours2;
|
||||||
if (_recipe.LearnedParameters.CandyParameters.Count==0)
|
if (_recipe.LearnedParameters.CandyParameters.Count == 0)
|
||||||
{
|
{
|
||||||
Mat matContours = new Mat(new OpenCvSharp.Size(512, 512), MatType.CV_8UC3, Scalar.Black);
|
Mat matContours = new Mat(new OpenCvSharp.Size(512, 512), MatType.CV_8UC3, Scalar.Black);
|
||||||
Cv2.DrawContours(matContours, _recipe.LastContours, -1, Scalar.White, -1);
|
Cv2.DrawContours(matContours, _recipe.LastContours, -1, Scalar.White, -1);
|
||||||
|
|
||||||
matContours2 = matContours.Resize(new OpenCvSharp.Size(1800, 1408));
|
matContours2 = matContours.Resize(new OpenCvSharp.Size(1800, 1408));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
Mat matContours = new Mat(new OpenCvSharp.Size(512, 512), MatType.CV_8UC3, Scalar.Black);
|
Mat matContours = new Mat(new OpenCvSharp.Size(512, 512), MatType.CV_8UC3, Scalar.Black);
|
||||||
Cv2.DrawContours(matContours, _recipe.LastContours, -1, Scalar.White, -1);
|
Cv2.DrawContours(matContours, _recipe.LastContours, -1, Scalar.White, -1);
|
||||||
|
|
||||||
matContours2 = matContours.Resize(new OpenCvSharp.Size(1800, 1408));
|
matContours2 = matContours.Resize(new OpenCvSharp.Size(1800, 1408));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
udMemoryBuffer.Value = _recipe.LearnedParameters.Configuration.MemoryBuffer;
|
udMemoryBuffer.Value = _recipe.LearnedParameters.Configuration.MemoryBuffer;
|
||||||
|
|
||||||
|
|
||||||
maskControl1.Mask = matContours2.ToBitmap();
|
maskControl1.Mask = matContours2.ToBitmap();
|
||||||
maskControl1.Original = original.Clone().ToBitmap();
|
maskControl1.Original = original.Clone().ToBitmap();
|
||||||
maskControl1.VectorLines = _recipe.LearnedParameters.Cuts.Select(x=>x.Scale(1800f/512f, 1408f/512f)).ToList();
|
maskControl1.VectorLines = _recipe.LearnedParameters.Cuts.Select(x => x.Translate(_recipe.BlisterCenter).Scale(1800f / 512f, 1408f / 512f)).ToList();
|
||||||
// Set default mode to Brush
|
// Set default mode to Brush
|
||||||
SetMode(EditMode.Brush);
|
SetMode(EditMode.Brush);
|
||||||
}
|
}
|
||||||
@@ -62,11 +62,11 @@ namespace Lindt.Candybox.Demo
|
|||||||
maskControl1.CurrentMode = mode;
|
maskControl1.CurrentMode = mode;
|
||||||
|
|
||||||
// Reset button colors
|
// Reset button colors
|
||||||
btnBrush.Primary = mode==EditMode.Brush;
|
btnBrush.Primary = mode == EditMode.Brush;
|
||||||
btnDrawLine.Primary = mode==EditMode.DrawLine;
|
btnDrawLine.Primary = mode == EditMode.DrawLine;
|
||||||
btnRemoveLine.Primary = mode==EditMode.RemoveLine;
|
btnRemoveLine.Primary = mode == EditMode.RemoveLine;
|
||||||
btnMoveLine.Primary = mode==EditMode.MoveLine;
|
btnMoveLine.Primary = mode == EditMode.MoveLine;
|
||||||
btnMoveVertices.Primary = mode==EditMode.MoveVertices;
|
btnMoveVertices.Primary = mode == EditMode.MoveVertices;
|
||||||
btnBrush.Invalidate();
|
btnBrush.Invalidate();
|
||||||
btnDrawLine.Invalidate();
|
btnDrawLine.Invalidate();
|
||||||
btnRemoveLine.Invalidate();
|
btnRemoveLine.Invalidate();
|
||||||
@@ -106,18 +106,32 @@ namespace Lindt.Candybox.Demo
|
|||||||
List<Point[]> contours = new List<Point[]>();
|
List<Point[]> contours = new List<Point[]>();
|
||||||
foreach (Point[] contour in maskControl1.LastContours)
|
foreach (Point[] contour in maskControl1.LastContours)
|
||||||
{
|
{
|
||||||
contours.Add(contour.Select(x => new Point(x.X/1800f*512f, x.Y / 1408f * 512f)).ToArray());
|
contours.Add(contour.Select(x => new Point(x.X / 1800f * 512f, x.Y / 1408f * 512f)).ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
_recipe.LearnedParameters.Configuration.MemoryBuffer = (int)udMemoryBuffer.Value;
|
_recipe.LearnedParameters.Configuration.MemoryBuffer = (int)udMemoryBuffer.Value;
|
||||||
_recipe.LearnContours(contours.ToArray(), _original,maskControl1.VectorLines.Select(x=>x.Scale(512f/1800f, 512f/1408f)).ToList());
|
_recipe.LearnContours(contours.ToArray(), _original, maskControl1.VectorLines.Select(x => x.Scale(512f / 1800f, 512f / 1408f).Sub(_recipe.BlisterCenter)).ToList(), relearn: false);
|
||||||
|
|
||||||
DialogResult = DialogResult.OK;
|
DialogResult = DialogResult.OK;
|
||||||
}
|
}
|
||||||
|
private void btnRelearnPositions_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
List<Point[]> contours = new List<Point[]>();
|
||||||
|
foreach (Point[] contour in maskControl1.LastContours)
|
||||||
|
{
|
||||||
|
contours.Add(contour.Select(x => new Point(x.X / 1800f * 512f, x.Y / 1408f * 512f)).ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
_recipe.LearnedParameters.Configuration.MemoryBuffer = (int)udMemoryBuffer.Value;
|
||||||
|
_recipe.LearnContours(contours.ToArray(), _original, maskControl1.VectorLines.Select(x => x.Scale(512f / 1800f, 512f / 1408f).Sub(_recipe.BlisterCenter)).ToList(),relearn:true);
|
||||||
|
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
}
|
||||||
private void materialRaisedButton1_Click(object sender, EventArgs e)
|
private void materialRaisedButton1_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
DialogResult = DialogResult.Cancel;
|
DialogResult = DialogResult.Cancel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,64 @@
|
|||||||
<root>
|
<?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: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:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
@@ -57,345 +117,4 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
<data name="maskControl1.Mask" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAABwgAAAWACAYAAABN7xIaAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
|
||||||
wQAADsEBuJFr7QAAJoVJREFUeF7swQEBAAAAgJD+r+4IAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
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
|
|
||||||
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
|
|
||||||
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
|
|
||||||
AAAAAABuD44JAAAAEAatf2pj+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
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
|
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADATQ2+hgAB2UBGuQAAAABJRU5ErkJggg==
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
<data name="maskControl1.Original" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAABwgAAAWACAYAAABN7xIaAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
|
||||||
wQAADsEBuJFr7QAAJoVJREFUeF7swQEBAAAAgJD+r+4IAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
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
|
|
||||||
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
|
|
||||||
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
|
|
||||||
AAAAAABuD44JAAAAEAatf2pj+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
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
|
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADATQ2+hgAB2UBGuQAAAABJRU5ErkJggg==
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
</root>
|
||||||
@@ -15,95 +15,6 @@ using Point = System.Drawing.Point;
|
|||||||
|
|
||||||
namespace Lindt.Candybox.Demo
|
namespace Lindt.Candybox.Demo
|
||||||
{
|
{
|
||||||
public enum EditMode
|
|
||||||
{
|
|
||||||
Brush,
|
|
||||||
DrawLine,
|
|
||||||
RemoveLine,
|
|
||||||
MoveLine,
|
|
||||||
MoveVertices
|
|
||||||
}
|
|
||||||
|
|
||||||
public class VectorLine
|
|
||||||
{
|
|
||||||
public Point StartPoint { get; set; }
|
|
||||||
public Point EndPoint { get; set; }
|
|
||||||
public bool Selected { get; set; }
|
|
||||||
|
|
||||||
public VectorLine()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public VectorLine Scale(float sX, float sY)
|
|
||||||
{
|
|
||||||
return new VectorLine(new Point((int)(StartPoint.X * sX), (int)(StartPoint.Y * sY)),
|
|
||||||
new Point((int)(EndPoint.X * sX), (int)(EndPoint.Y * sY)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public VectorLine(Point start, Point end)
|
|
||||||
{
|
|
||||||
StartPoint = start;
|
|
||||||
EndPoint = end;
|
|
||||||
Selected = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsPointOnLine(Point point, int tolerance = 10)
|
|
||||||
{
|
|
||||||
// Calculate distance from point to line segment
|
|
||||||
double A = point.X - StartPoint.X;
|
|
||||||
double B = point.Y - StartPoint.Y;
|
|
||||||
double C = EndPoint.X - StartPoint.X;
|
|
||||||
double D = EndPoint.Y - StartPoint.Y;
|
|
||||||
|
|
||||||
double dot = A * C + B * D;
|
|
||||||
double lenSq = C * C + D * D;
|
|
||||||
|
|
||||||
if (lenSq == 0) return Math.Sqrt(A * A + B * B) <= tolerance;
|
|
||||||
|
|
||||||
double param = dot / lenSq;
|
|
||||||
|
|
||||||
double xx, yy;
|
|
||||||
if (param < 0)
|
|
||||||
{
|
|
||||||
xx = StartPoint.X;
|
|
||||||
yy = StartPoint.Y;
|
|
||||||
}
|
|
||||||
else if (param > 1)
|
|
||||||
{
|
|
||||||
xx = EndPoint.X;
|
|
||||||
yy = EndPoint.Y;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
xx = StartPoint.X + param * C;
|
|
||||||
yy = StartPoint.Y + param * D;
|
|
||||||
}
|
|
||||||
|
|
||||||
double dx = point.X - xx;
|
|
||||||
double dy = point.Y - yy;
|
|
||||||
return Math.Sqrt(dx * dx + dy * dy) <= tolerance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsPointNearVertex(Point point, out bool isStartVertex, int tolerance = 15)
|
|
||||||
{
|
|
||||||
isStartVertex = false;
|
|
||||||
double distToStart = Math.Sqrt(Math.Pow(point.X - StartPoint.X, 2) + Math.Pow(point.Y - StartPoint.Y, 2));
|
|
||||||
double distToEnd = Math.Sqrt(Math.Pow(point.X - EndPoint.X, 2) + Math.Pow(point.Y - EndPoint.Y, 2));
|
|
||||||
|
|
||||||
if (distToStart <= tolerance)
|
|
||||||
{
|
|
||||||
isStartVertex = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (distToEnd <= tolerance)
|
|
||||||
{
|
|
||||||
isStartVertex = false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public partial class MaskControl : UserControl
|
public partial class MaskControl : UserControl
|
||||||
{
|
{
|
||||||
private Bitmap _backBuffer;
|
private Bitmap _backBuffer;
|
||||||
@@ -282,12 +193,21 @@ namespace Lindt.Candybox.Demo
|
|||||||
private Pen _vectorLinePen = new Pen(Color.DeepPink, 12);
|
private Pen _vectorLinePen = new Pen(Color.DeepPink, 12);
|
||||||
private Brush _vertexBrush = new SolidBrush(Color.Orange);
|
private Brush _vertexBrush = new SolidBrush(Color.Orange);
|
||||||
|
|
||||||
|
|
||||||
protected override void OnPaint(PaintEventArgs e)
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OnPaintInternal(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnPaintInternal(PaintEventArgs e)
|
||||||
|
{
|
||||||
var mat = Mask.ToMat().CvtColor(ColorConversionCodes.BGR2GRAY);
|
var mat = Mask.ToMat().CvtColor(ColorConversionCodes.BGR2GRAY);
|
||||||
var contours = mat.FindContoursAsArray(RetrievalModes.External, ContourApproximationModes.ApproxNone);
|
var contours = mat.FindContoursAsArray(RetrievalModes.External, ContourApproximationModes.ApproxNone);
|
||||||
LastContours = contours;
|
LastContours = contours;
|
||||||
|
|
||||||
using (Graphics g = Graphics.FromImage(_backBuffer))
|
using (Graphics g = Graphics.FromImage(_backBuffer))
|
||||||
{
|
{
|
||||||
g.Clear(Color.Transparent);
|
g.Clear(Color.Transparent);
|
||||||
@@ -307,11 +227,11 @@ namespace Lindt.Candybox.Demo
|
|||||||
foreach (var line in _vectorLines)
|
foreach (var line in _vectorLines)
|
||||||
{
|
{
|
||||||
// Convert coordinates back to display coordinates
|
// Convert coordinates back to display coordinates
|
||||||
var startDisplay = new Point(line.StartPoint.X , line.StartPoint.Y );
|
var startDisplay = new Point(line.StartPoint.X, line.StartPoint.Y);
|
||||||
var endDisplay = new Point(line.EndPoint.X , line.EndPoint.Y );
|
var endDisplay = new Point(line.EndPoint.X, line.EndPoint.Y);
|
||||||
|
|
||||||
g.DrawLine(_vectorLinePen, startDisplay, endDisplay);
|
g.DrawLine(_vectorLinePen, startDisplay, endDisplay);
|
||||||
|
|
||||||
// Draw vertices when in move vertices mode
|
// Draw vertices when in move vertices mode
|
||||||
if (_currentMode == EditMode.MoveVertices)
|
if (_currentMode == EditMode.MoveVertices)
|
||||||
{
|
{
|
||||||
@@ -323,8 +243,8 @@ namespace Lindt.Candybox.Demo
|
|||||||
// Draw temporary line when drawing
|
// Draw temporary line when drawing
|
||||||
if (_currentMode == EditMode.DrawLine && _isDrawingLine)
|
if (_currentMode == EditMode.DrawLine && _isDrawingLine)
|
||||||
{
|
{
|
||||||
var startDisplay = new Point(_lineStartPoint.X , _lineStartPoint.Y );
|
var startDisplay = new Point(_lineStartPoint.X, _lineStartPoint.Y);
|
||||||
var endDisplay = new Point(_lastMouse.X , _lastMouse.Y );
|
var endDisplay = new Point(_lastMouse.X, _lastMouse.Y);
|
||||||
using (var tempPen = new Pen(Color.DeepPink, 12) { DashStyle = System.Drawing.Drawing2D.DashStyle.Dash })
|
using (var tempPen = new Pen(Color.DeepPink, 12) { DashStyle = System.Drawing.Drawing2D.DashStyle.Dash })
|
||||||
{
|
{
|
||||||
g.DrawLine(tempPen, startDisplay, endDisplay);
|
g.DrawLine(tempPen, startDisplay, endDisplay);
|
||||||
@@ -334,11 +254,11 @@ namespace Lindt.Candybox.Demo
|
|||||||
// Draw mouse cursor indicator for brush mode
|
// Draw mouse cursor indicator for brush mode
|
||||||
if (_currentMode == EditMode.Brush)
|
if (_currentMode == EditMode.Brush)
|
||||||
{
|
{
|
||||||
var cursorDisplay = new Point(_lastMouse.X , _lastMouse.Y );
|
var cursorDisplay = new Point(_lastMouse.X, _lastMouse.Y);
|
||||||
g.DrawEllipse(Pens.Gray, cursorDisplay.X - 15, cursorDisplay.Y - 15, 30, 30);
|
g.DrawEllipse(Pens.Gray, cursorDisplay.X - 15, cursorDisplay.Y - 15, 30, 30);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Graphics.DrawImage(_backBuffer, 0, 0, Width, Height);
|
e.Graphics.DrawImage(_backBuffer, 0, 0, Width, Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,4 +275,115 @@ namespace Lindt.Candybox.Demo
|
|||||||
base.OnResize(e);
|
base.OnResize(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public enum EditMode
|
||||||
|
{
|
||||||
|
Brush,
|
||||||
|
DrawLine,
|
||||||
|
RemoveLine,
|
||||||
|
MoveLine,
|
||||||
|
MoveVertices
|
||||||
|
}
|
||||||
|
|
||||||
|
public class VectorLine
|
||||||
|
{
|
||||||
|
public Point StartPoint { get; set; }
|
||||||
|
public Point EndPoint { get; set; }
|
||||||
|
public bool Selected { get; set; }
|
||||||
|
|
||||||
|
public VectorLine()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public VectorLine Scale(float sX, float sY)
|
||||||
|
{
|
||||||
|
return new VectorLine(new Point((int)(StartPoint.X * sX), (int)(StartPoint.Y * sY)),
|
||||||
|
new Point((int)(EndPoint.X * sX), (int)(EndPoint.Y * sY)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public VectorLine Translate(int tX, int tY)
|
||||||
|
{
|
||||||
|
return new VectorLine(new Point(StartPoint.X + tX, StartPoint.Y + tY),
|
||||||
|
new Point(EndPoint.X + tX, EndPoint.Y + tY));
|
||||||
|
}
|
||||||
|
|
||||||
|
public VectorLine Translate(Point point)
|
||||||
|
{
|
||||||
|
return Translate(point.X, point.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
public VectorLine Sub(int tX, int tY)
|
||||||
|
{
|
||||||
|
return new VectorLine(new Point(StartPoint.X - tX, StartPoint.Y - tY),
|
||||||
|
new Point(EndPoint.X - tX, EndPoint.Y - tY));
|
||||||
|
}
|
||||||
|
|
||||||
|
public VectorLine Sub(Point point)
|
||||||
|
{
|
||||||
|
return Sub(point.X, point.Y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public VectorLine(Point start, Point end)
|
||||||
|
{
|
||||||
|
StartPoint = start;
|
||||||
|
EndPoint = end;
|
||||||
|
Selected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPointOnLine(Point point, int tolerance = 10)
|
||||||
|
{
|
||||||
|
// Calculate distance from point to line segment
|
||||||
|
double A = point.X - StartPoint.X;
|
||||||
|
double B = point.Y - StartPoint.Y;
|
||||||
|
double C = EndPoint.X - StartPoint.X;
|
||||||
|
double D = EndPoint.Y - StartPoint.Y;
|
||||||
|
|
||||||
|
double dot = A * C + B * D;
|
||||||
|
double lenSq = C * C + D * D;
|
||||||
|
|
||||||
|
if (lenSq == 0) return Math.Sqrt(A * A + B * B) <= tolerance;
|
||||||
|
|
||||||
|
double param = dot / lenSq;
|
||||||
|
|
||||||
|
double xx, yy;
|
||||||
|
if (param < 0)
|
||||||
|
{
|
||||||
|
xx = StartPoint.X;
|
||||||
|
yy = StartPoint.Y;
|
||||||
|
}
|
||||||
|
else if (param > 1)
|
||||||
|
{
|
||||||
|
xx = EndPoint.X;
|
||||||
|
yy = EndPoint.Y;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xx = StartPoint.X + param * C;
|
||||||
|
yy = StartPoint.Y + param * D;
|
||||||
|
}
|
||||||
|
|
||||||
|
double dx = point.X - xx;
|
||||||
|
double dy = point.Y - yy;
|
||||||
|
return Math.Sqrt(dx * dx + dy * dy) <= tolerance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsPointNearVertex(Point point, out bool isStartVertex, int tolerance = 15)
|
||||||
|
{
|
||||||
|
isStartVertex = false;
|
||||||
|
double distToStart = Math.Sqrt(Math.Pow(point.X - StartPoint.X, 2) + Math.Pow(point.Y - StartPoint.Y, 2));
|
||||||
|
double distToEnd = Math.Sqrt(Math.Pow(point.X - EndPoint.X, 2) + Math.Pow(point.Y - EndPoint.Y, 2));
|
||||||
|
|
||||||
|
if (distToStart <= tolerance)
|
||||||
|
{
|
||||||
|
isStartVertex = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (distToEnd <= tolerance)
|
||||||
|
{
|
||||||
|
isStartVertex = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,11 +10,13 @@ namespace CandyboxPlugin.Module;
|
|||||||
|
|
||||||
public class CandyboxImageProcessingControl : BaseRecognitionControl
|
public class CandyboxImageProcessingControl : BaseRecognitionControl
|
||||||
{
|
{
|
||||||
|
private readonly CandyboxRecognitionControlSettings _settings;
|
||||||
private readonly IImageSource _imageSource;
|
private readonly IImageSource _imageSource;
|
||||||
private HistoRecipe _histoRecipe;
|
private HistoRecipe _histoRecipe;
|
||||||
|
|
||||||
public CandyboxImageProcessingControl(CandyboxRecognitionControlSettings settings, IImageSource imageSource, ILoadingService loadingService) : base(settings, loadingService)
|
public CandyboxImageProcessingControl(CandyboxRecognitionControlSettings settings, IImageSource imageSource, ILoadingService loadingService) : base(settings, loadingService)
|
||||||
{
|
{
|
||||||
|
_settings = settings;
|
||||||
_imageSource = imageSource;
|
_imageSource = imageSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,7 +26,7 @@ public class CandyboxImageProcessingControl : BaseRecognitionControl
|
|||||||
public override List<RecipeData> GetRecipesData()
|
public override List<RecipeData> GetRecipesData()
|
||||||
{
|
{
|
||||||
var recipes = new List<RecipeData>();
|
var recipes = new List<RecipeData>();
|
||||||
var recipeFiles = Directory.GetFiles(RECIPES_DIR, "*.json");
|
var recipeFiles = Directory.GetFiles(RECIPES_DIR, _settings.RecipeNameFilter+".json");
|
||||||
foreach (var file in recipeFiles)
|
foreach (var file in recipeFiles)
|
||||||
{
|
{
|
||||||
var name = Path.GetFileNameWithoutExtension(file);
|
var name = Path.GetFileNameWithoutExtension(file);
|
||||||
@@ -99,6 +101,11 @@ public class CandyboxImageProcessingControl : BaseRecognitionControl
|
|||||||
res.ErrorReason.Where(x=>x != EErrorReason.Good).Select(x=>x.ToString())
|
res.ErrorReason.Where(x=>x != EErrorReason.Good).Select(x=>x.ToString())
|
||||||
).ToArray();
|
).ToArray();
|
||||||
|
|
||||||
|
if (_settings.AlwaysError)
|
||||||
|
{
|
||||||
|
allErrors = allErrors.Concat(new[] { "Always Error" }).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
return (image, res.ProcessedImage, swTotal.Elapsed, swAcquision.Elapsed, allErrors);
|
return (image, res.ProcessedImage, swTotal.Elapsed, swAcquision.Elapsed, allErrors);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,23 @@
|
|||||||
using VisionBuilder.UI.Common.Processing;
|
using Inspectron.Settings;
|
||||||
|
using Inspectron.Settings.Attributes;
|
||||||
|
using VisionBuilder.UI.Common.Processing;
|
||||||
|
|
||||||
namespace CandyboxPlugin.Module;
|
namespace CandyboxPlugin.Module;
|
||||||
|
|
||||||
public class CandyboxRecognitionControlSettings : BaseRecognitionControlSettings
|
public class CandyboxRecognitionControlSettings : BaseRecognitionControlSettings
|
||||||
{
|
{
|
||||||
|
|
||||||
|
[SettingDescription("Usefull to learn on good images")]
|
||||||
|
public bool AlwaysError { get; set; }
|
||||||
|
|
||||||
public CandyboxRecognitionControlSettings(string cameraName) : base(cameraName)
|
public CandyboxRecognitionControlSettings(string cameraName) : base(cameraName)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void RegisterSettings(InspectronSettings settings)
|
||||||
|
{
|
||||||
|
base.RegisterSettings(settings);
|
||||||
|
settings.RegisterSimple(this, () => AlwaysError, CameraName + "/" + "Recognition", nameof(AlwaysError));
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -54,12 +54,17 @@ namespace CandyboxPlugin.Recipe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LearnContours(OpenCvSharp.Point[][] contours, Mat image, List<VectorLine> cuts)
|
public void LearnContours(OpenCvSharp.Point[][] contours, Mat image, List<VectorLine> cuts, bool relearn)
|
||||||
{
|
{
|
||||||
lock (_lockObject)
|
lock (_lockObject)
|
||||||
{
|
{
|
||||||
|
_learnedParameters = relearn ? new LearningParameters() : _learnedParameters;
|
||||||
|
|
||||||
|
// Convert cuts to be relative to blister center
|
||||||
|
|
||||||
|
|
||||||
_learnedParameters.Cuts = cuts;
|
_learnedParameters.Cuts = cuts;
|
||||||
|
|
||||||
if (_learnedParameters.CandyParameters.Count == 0)//initial learning
|
if (_learnedParameters.CandyParameters.Count == 0)//initial learning
|
||||||
{
|
{
|
||||||
_learnedParameters.BlisterAngle = _blisterAngle;
|
_learnedParameters.BlisterAngle = _blisterAngle;
|
||||||
@@ -131,6 +136,8 @@ namespace CandyboxPlugin.Recipe
|
|||||||
return clone;
|
return clone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Point BlisterCenter => _blisterCenter;
|
||||||
|
|
||||||
public ProcessingResult ProcessImage(Mat image)
|
public ProcessingResult ProcessImage(Mat image)
|
||||||
{
|
{
|
||||||
lock (_lockObject)
|
lock (_lockObject)
|
||||||
@@ -166,7 +173,7 @@ namespace CandyboxPlugin.Recipe
|
|||||||
|
|
||||||
resBlister.Dispose();
|
resBlister.Dispose();
|
||||||
resBlister = blisterOpened;
|
resBlister = blisterOpened;
|
||||||
Cv2.WaitKey(1);
|
|
||||||
|
|
||||||
sw1.Stop();
|
sw1.Stop();
|
||||||
Console.WriteLine("AI Time:" + sw1.ElapsedMilliseconds);
|
Console.WriteLine("AI Time:" + sw1.ElapsedMilliseconds);
|
||||||
@@ -207,44 +214,6 @@ namespace CandyboxPlugin.Recipe
|
|||||||
))
|
))
|
||||||
.ToList());
|
.ToList());
|
||||||
|
|
||||||
//var dbg=triangles.Where(x => x.IsInside(points[15])).ToList();
|
|
||||||
//var dbgEdges = Voronoi.Voronoi.GenerateEdgesFromDelaunay(dbg);
|
|
||||||
//foreach (var triangle in dbg)
|
|
||||||
//{
|
|
||||||
// Cv2.Line(
|
|
||||||
// numbersOverlay,
|
|
||||||
// new OpenCvSharp.Point(triangle.Vertices[0].X, triangle.Vertices[0].Y),
|
|
||||||
// new OpenCvSharp.Point(triangle.Vertices[1].X, triangle.Vertices[1].Y),
|
|
||||||
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
|
|
||||||
// 1 // Thickness
|
|
||||||
// );
|
|
||||||
// Cv2.Line(
|
|
||||||
// numbersOverlay,
|
|
||||||
// new OpenCvSharp.Point(triangle.Vertices[1].X, triangle.Vertices[1].Y),
|
|
||||||
// new OpenCvSharp.Point(triangle.Vertices[2].X, triangle.Vertices[2].Y),
|
|
||||||
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
|
|
||||||
// 1 // Thickness
|
|
||||||
// );
|
|
||||||
// Cv2.Line(
|
|
||||||
// numbersOverlay,
|
|
||||||
// new OpenCvSharp.Point(triangle.Vertices[2].X, triangle.Vertices[2].Y),
|
|
||||||
// new OpenCvSharp.Point(triangle.Vertices[0].X, triangle.Vertices[0].Y),
|
|
||||||
// new Scalar(255, 255, 0, 255), // Aqua color in BGR
|
|
||||||
// 1 // Thickness
|
|
||||||
// );
|
|
||||||
//}
|
|
||||||
|
|
||||||
//foreach (Edge edge in dbgEdges)
|
|
||||||
//{
|
|
||||||
// Cv2.Line(
|
|
||||||
// numbersOverlay,
|
|
||||||
// new OpenCvSharp.Point(edge.Point1.X, edge.Point1.Y),
|
|
||||||
// new OpenCvSharp.Point(edge.Point2.X, edge.Point2.Y),
|
|
||||||
// new Scalar(255, 255, 255, 255),
|
|
||||||
// 3 // Thickness
|
|
||||||
// );
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
var edges = Voronoi.Voronoi.GenerateEdgesFromDelaunay(triangles);
|
var edges = Voronoi.Voronoi.GenerateEdgesFromDelaunay(triangles);
|
||||||
foreach (Edge edge in edges)
|
foreach (Edge edge in edges)
|
||||||
@@ -258,31 +227,22 @@ namespace CandyboxPlugin.Recipe
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//foreach (Edge edge in edges)
|
|
||||||
//{
|
|
||||||
// Cv2.Line(
|
|
||||||
// numbersOverlay,
|
|
||||||
// new OpenCvSharp.Point(edge.Point1.X, edge.Point1.Y),
|
|
||||||
// new OpenCvSharp.Point(edge.Point2.X, edge.Point2.Y),
|
|
||||||
// new Scalar(255, 255, 255, 255),
|
|
||||||
// 3 // Thickness
|
|
||||||
// );
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
foreach (VectorLine cut in _learnedParameters.Cuts)
|
foreach (VectorLine cut in _learnedParameters.Cuts)
|
||||||
{
|
{
|
||||||
Cv2.Line(res, new OpenCvSharp.Point(cut.StartPoint.X, cut.StartPoint.Y),
|
// Convert from relative to absolute coordinates
|
||||||
new OpenCvSharp.Point(cut.EndPoint.X, cut.EndPoint.Y), new Scalar(0, 0, 0), 3);
|
var absoluteStart = new OpenCvSharp.Point(
|
||||||
|
cut.StartPoint.X + _blisterCenter.X,
|
||||||
|
cut.StartPoint.Y + _blisterCenter.Y
|
||||||
|
);
|
||||||
|
var absoluteEnd = new OpenCvSharp.Point(
|
||||||
|
cut.EndPoint.X + _blisterCenter.X,
|
||||||
|
cut.EndPoint.Y + _blisterCenter.Y
|
||||||
|
);
|
||||||
|
|
||||||
|
Cv2.Line(res, absoluteStart, absoluteEnd, new Scalar(0, 0, 0), 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
//foreach (VectorLine cut in _learnedParameters.Cuts)
|
|
||||||
//{
|
|
||||||
// Cv2.Line(numbersOverlay, new OpenCvSharp.Point(cut.StartPoint.X, cut.StartPoint.Y),
|
|
||||||
// new OpenCvSharp.Point(cut.EndPoint.X, cut.EndPoint.Y), new Scalar(255, 0, 255,255), 3);
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
var mat = res;
|
var mat = res;
|
||||||
Cv2.Threshold(mat, mat, 128, 255, ThresholdTypes.Binary);
|
Cv2.Threshold(mat, mat, 128, 255, ThresholdTypes.Binary);
|
||||||
|
|||||||
35
VisionBuilder.UI.Common/CommandLineParser.cs
Normal file
35
VisionBuilder.UI.Common/CommandLineParser.cs
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
namespace VisionBuilder.UI.Common;
|
||||||
|
|
||||||
|
public class CommandLineParser
|
||||||
|
{
|
||||||
|
private readonly List<string> _args;
|
||||||
|
|
||||||
|
public CommandLineParser(string[] args)
|
||||||
|
{
|
||||||
|
_args = args.ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string? GetStringArgument(string key, char shortKey)
|
||||||
|
{
|
||||||
|
var index = _args.IndexOf("--" + key);
|
||||||
|
|
||||||
|
if (index >= 0 && _args.Count > index)
|
||||||
|
{
|
||||||
|
return _args[index + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
index = _args.IndexOf("-" + shortKey);
|
||||||
|
|
||||||
|
if (index >= 0 && _args.Count > index)
|
||||||
|
{
|
||||||
|
return _args[index + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GetSwitchArgument(bool value, char shortKey)
|
||||||
|
{
|
||||||
|
return _args.Contains("--" + value) || _args.Contains("-" + shortKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -64,10 +64,10 @@ public static class Extensions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IKernel UsePlugins(this IKernel self)
|
public static IKernel UsePlugins(this IKernel self, string pluginsProfile)
|
||||||
{
|
{
|
||||||
self.RegisterModule<PluginLoader>();
|
self.RegisterModule<PluginLoader>();
|
||||||
self.Get<PluginLoader>().InitializeModule();
|
self.Get<PluginLoader>().InitializeModule(pluginsProfile);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,18 @@ public class PluginLoader:IVisionBuilderModule
|
|||||||
public List<IPlugin> Plugins { get; } = new List<IPlugin>();
|
public List<IPlugin> Plugins { get; } = new List<IPlugin>();
|
||||||
|
|
||||||
private bool _isInitialized;
|
private bool _isInitialized;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private string _pluginsProfile = "enabled_plugins.txt";
|
||||||
|
|
||||||
|
public void InitializeModule(string? pluginsProfile)
|
||||||
|
{
|
||||||
|
if (pluginsProfile != null)
|
||||||
|
_pluginsProfile = pluginsProfile + ".txt";
|
||||||
|
InitializeModule();
|
||||||
|
}
|
||||||
|
|
||||||
public void InitializeModule()
|
public void InitializeModule()
|
||||||
{
|
{
|
||||||
if (_isInitialized)
|
if (_isInitialized)
|
||||||
@@ -27,7 +39,7 @@ public class PluginLoader:IVisionBuilderModule
|
|||||||
Log.Information("Loading plugins...");
|
Log.Information("Loading plugins...");
|
||||||
var pluginsPath = Path.Combine("..", "Data", PLUGINS_DIRECTORY);
|
var pluginsPath = Path.Combine("..", "Data", PLUGINS_DIRECTORY);
|
||||||
|
|
||||||
var enabledPluginsPath = Path.Combine(pluginsPath, "enabled_plugins.txt");
|
var enabledPluginsPath = Path.Combine(pluginsPath, _pluginsProfile);
|
||||||
if (!File.Exists(enabledPluginsPath))
|
if (!File.Exists(enabledPluginsPath))
|
||||||
{
|
{
|
||||||
Log.Warning("Enabled plugins file not found: {EnabledPluginsPath}. All discovered plugins will be disabled by default.", enabledPluginsPath);
|
Log.Warning("Enabled plugins file not found: {EnabledPluginsPath}. All discovered plugins will be disabled by default.", enabledPluginsPath);
|
||||||
|
|||||||
26
VisionBuilder.UI.Windows.Duo/Installer/uno.bat
Normal file
26
VisionBuilder.UI.Windows.Duo/Installer/uno.bat
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
@echo off
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
rem --- resolve absolute path of DLL ---
|
||||||
|
set "dll=..\bin\Debug\net8.0-windows\VisionBuilder.UI.Windows.Duo.dll"
|
||||||
|
for %%I in ("%dll%") do set "dll=%%~fI"
|
||||||
|
|
||||||
|
rem --- get version from DLL ---
|
||||||
|
for /f "tokens=2 delims==" %%v in ('wmic datafile where "name='%dll:\=\\%'" get Version /value ^| find "="') do set "ver=%%v"
|
||||||
|
|
||||||
|
rem --- cut off last part (keep only major.minor.build) ---
|
||||||
|
for /f "tokens=1-3 delims=." %%a in ("%ver%") do set "ver=%%a.%%b.%%c"
|
||||||
|
|
||||||
|
echo Found version: %ver%
|
||||||
|
|
||||||
|
rem --- make sure output dir exists ---
|
||||||
|
if not exist Output mkdir Output
|
||||||
|
|
||||||
|
rem --- build 7z-SFX ---
|
||||||
|
set "src=..\bin\Debug\net8.0-windows"
|
||||||
|
set "out=Output\UNO%ver%.exe"
|
||||||
|
|
||||||
|
7z a -sfx "%out%" "%src%\*"
|
||||||
|
|
||||||
|
echo Done: %out%
|
||||||
|
endlocal
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ApplicationIcon>Inspectron icon-512.ico</ApplicationIcon>
|
<ApplicationIcon>Inspectron icon-512.ico</ApplicationIcon>
|
||||||
<Deterministic>false</Deterministic>
|
<Deterministic>false</Deterministic>
|
||||||
<Version>2.0.8</Version>
|
<Version>2.0.9</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -39,5 +39,8 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="Installer\" />
|
<Folder Include="Installer\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
|
||||||
|
<Exec Command=" echo "$(ProjectDir)Output\DUO$(Version).exe"
if exist "$(ProjectDir)\Installer\Output\DUO$(Version).exe" (
 echo ERROR: Output\DUO$(Version).exe already exists.
 exit /b 1
)" />
|
||||||
|
</Target>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -31,19 +31,23 @@ namespace VisionBuilder.UI.Windows.Test
|
|||||||
/// The main entry point for the application.
|
/// The main entry point for the application.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[STAThread]
|
[STAThread]
|
||||||
static void Main()
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
// To customize application configuration such as set high DPI settings or default font,
|
// To customize application configuration such as set high DPI settings or default font,
|
||||||
// see https://aka.ms/applicationconfiguration.
|
// see https://aka.ms/applicationconfiguration.
|
||||||
ApplicationConfiguration.Initialize();
|
ApplicationConfiguration.Initialize();
|
||||||
// In your application startup code
|
// In your application startup code
|
||||||
MaterialSkin.MaterialSkinManager.ConfigureForInspectron();
|
MaterialSkin.MaterialSkinManager.ConfigureForInspectron();
|
||||||
|
CommandLineParser commandLineParser = new CommandLineParser(args);
|
||||||
|
|
||||||
|
|
||||||
InspectronSettings settings = new InspectronSettings("..\\Data\\Config");
|
InspectronSettings settings = new InspectronSettings("..\\Data\\Config");
|
||||||
|
|
||||||
var mainKernel = Common.VisionBuilder.CreateMainKernel(settings);
|
var mainKernel = Common.VisionBuilder.CreateMainKernel(settings);
|
||||||
|
|
||||||
mainKernel.UsePlugins();
|
var profile = commandLineParser.GetStringArgument("profile", 'p');
|
||||||
|
|
||||||
|
mainKernel.UsePlugins(profile);
|
||||||
|
|
||||||
|
|
||||||
mainKernel
|
mainKernel
|
||||||
|
|||||||
11
VisionBuilder.UI.Windows.Test/Properties/launchSettings.json
Normal file
11
VisionBuilder.UI.Windows.Test/Properties/launchSettings.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"profiles": {
|
||||||
|
"VisionBuilder.UI.Windows.Uno": {
|
||||||
|
"commandName": "Project"
|
||||||
|
},
|
||||||
|
"Candybox": {
|
||||||
|
"commandName": "Project",
|
||||||
|
"commandLineArgs": "--profile candybox"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<ApplicationIcon>Inspectron icon-512.ico</ApplicationIcon>
|
<ApplicationIcon>Inspectron icon-512.ico</ApplicationIcon>
|
||||||
<Deterministic>false</Deterministic>
|
<Deterministic>false</Deterministic>
|
||||||
<Version>2.0.8</Version>
|
<Version>2.0.9</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user