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 CandyboxPlugin.Recipe; using MaterialSkin.Controls; using OpenCvSharp; using OpenCvSharp.Extensions; using Point = OpenCvSharp.Point; namespace Lindt.Candybox.Demo { public partial class MapEditor : MaterialForm { private readonly Mat _original; private HistoRecipe _recipe; public MapEditor(Mat original, HistoRecipe currentRecipe) { _original = original; InitializeComponent(); _recipe = currentRecipe.Clone(); _recipe.ProcessImage(original); Mat matContours2; if (_recipe.LearnedParameters.CandyParameters.Count==0) { Mat matContours = new Mat(new OpenCvSharp.Size(512, 512), MatType.CV_8UC3, Scalar.Black); Cv2.DrawContours(matContours, _recipe.LastContours, -1, Scalar.White, -1); matContours2 = matContours.Resize(new OpenCvSharp.Size(1800, 1408)); } else { Mat matContours = new Mat(new OpenCvSharp.Size(512, 512), MatType.CV_8UC3, Scalar.Black); Cv2.DrawContours(matContours, _recipe.LastContours, -1, Scalar.White, -1); matContours2 = matContours.Resize(new OpenCvSharp.Size(1800, 1408)); } udMemoryBuffer.Value = _recipe.LearnedParameters.Configuration.MemoryBuffer; maskControl1.Mask = matContours2.ToBitmap(); maskControl1.Original = original.Clone().ToBitmap(); maskControl1.VectorLines = _recipe.LearnedParameters.Cuts.Select(x=>x.Scale(1800f/512f, 1408f/512f)).ToList(); // Set default mode to Brush SetMode(EditMode.Brush); } private void SetMode(EditMode mode) { maskControl1.CurrentMode = mode; // Reset button colors btnBrush.Primary = mode==EditMode.Brush; btnDrawLine.Primary = mode==EditMode.DrawLine; btnRemoveLine.Primary = mode==EditMode.RemoveLine; btnMoveLine.Primary = mode==EditMode.MoveLine; btnMoveVertices.Primary = mode==EditMode.MoveVertices; btnBrush.Invalidate(); btnDrawLine.Invalidate(); btnRemoveLine.Invalidate(); btnMoveLine.Invalidate(); btnMoveVertices.Invalidate(); } private void btnBrush_Click(object sender, EventArgs e) { SetMode(EditMode.Brush); } private void btnDrawLine_Click(object sender, EventArgs e) { SetMode(EditMode.DrawLine); } private void btnRemoveLine_Click(object sender, EventArgs e) { SetMode(EditMode.RemoveLine); } private void btnMoveLine_Click(object sender, EventArgs e) { SetMode(EditMode.MoveLine); } private void btnMoveVertices_Click(object sender, EventArgs e) { SetMode(EditMode.MoveVertices); } private void materialRaisedButton3_Click(object sender, EventArgs e) { List contours = new List(); 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)).ToList()); DialogResult = DialogResult.OK; } private void materialRaisedButton1_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; } } }