Mask to toolwindow

This commit is contained in:
Tiago Conceição
2020-09-09 17:31:04 +01:00
parent 2bd8f9587a
commit de2059fb5b
12 changed files with 456 additions and 741 deletions
+1
View File
@@ -30,6 +30,7 @@ Less frequently used settings for gap and noise removal iterations have been mov
* (Fix) Tool - Change resolution: Confirmation text was set to remove layers
* (Fix) Fade iteration now working as expected on some mutators
* (Fix) Pattern: When select big margins and cols/rows it triggers an error because value hits the maximum variable size
* (Fix) Mask: A crash when check "Invert" when mask is not loaded
* (Fix) Some text and phrases
## 04/08/2020 - v0.7.0.0
+3 -1
View File
@@ -571,7 +571,9 @@ namespace UVtools.Core
}
}
public void MutateMask(Mat mask)
public void Mask(OperationMask mask) => Mask(mask.Mask);
public void Mask(Mat mask)
{
using (var mat = LayerMat)
{
+4 -4
View File
@@ -401,15 +401,15 @@ namespace UVtools.Core
progress.Token.ThrowIfCancellationRequested();
}
public void MutateMask(uint startLayerIndex, uint endLayerIndex, Mat mask, OperationProgress progress = null)
public void Mask(OperationMask operation, OperationProgress progress = null)
{
if (ReferenceEquals(progress, null)) progress = new OperationProgress();
progress.Reset("Masking pixels", endLayerIndex - startLayerIndex + 1);
progress.Reset(operation.ProgressAction, operation.LayerRangeCount);
Parallel.For(startLayerIndex, endLayerIndex + 1, layerIndex =>
Parallel.For(operation.LayerIndexStart, operation.LayerIndexEnd + 1, layerIndex =>
{
if (progress.Token.IsCancellationRequested) return;
this[layerIndex].MutateMask(mask);
this[layerIndex].Mask(operation);
lock (progress.Mutex)
{
progress++;
+46
View File
@@ -0,0 +1,46 @@
/*
* GNU AFFERO GENERAL PUBLIC LICENSE
* Version 3, 19 November 2007
* Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
* Everyone is permitted to copy and distribute verbatim copies
* of this license document, but changing it is not allowed.
*/
using System.Text;
using Emgu.CV;
using Emgu.CV.CvEnum;
using UVtools.Core.Objects;
namespace UVtools.Core.Operations
{
public class OperationMask : Operation
{
public override string Title => "Mask";
public override string Description =>
"Masks the LCD output image given a greyscale (0-255) pixel input image.\n" +
"Useful to correct light uniformity, but a proper mask must be created first based on real measurements per printer.\n" +
"NOTE 1: Masks should respect printer resolution or they will be resized to fit.\n" +
"NOTE 2: Run only this tool after all repairs and other transformations.";
public override string ConfirmationText =>
$"mask layers from {LayerIndexStart} to {LayerIndexEnd}";
public override string ProgressTitle =>
$"Masking layers from {LayerIndexStart} to {LayerIndexEnd}";
public override string ProgressAction => "Masked layers";
public override StringTag Validate(params object[] parameters)
{
var sb = new StringBuilder();
if (Mask is null)
{
sb.AppendLine("The mask can't be empty.");
}
return new StringTag(sb.ToString());
}
public Mat Mask { get; set; }
}
}
+270
View File
@@ -0,0 +1,270 @@
namespace UVtools.GUI.Controls.Tools
{
partial class CtrlToolMask
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.btnMaskGenerate = new System.Windows.Forms.Button();
this.label4 = new System.Windows.Forms.Label();
this.nmGeneratorDiameter = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.nmGeneratorMaxBrightness = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.nmGeneratorMinBrightness = new System.Windows.Forms.NumericUpDown();
this.cbInvertMask = new System.Windows.Forms.CheckBox();
this.lbMaskResolution = new System.Windows.Forms.Label();
this.lbPrinterResolution = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.pbMask = new System.Windows.Forms.PictureBox();
this.btnImportImageMask = new System.Windows.Forms.Button();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorDiameter)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorMaxBrightness)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorMinBrightness)).BeginInit();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbMask)).BeginInit();
this.SuspendLayout();
//
// groupBox2
//
this.groupBox2.Controls.Add(this.btnMaskGenerate);
this.groupBox2.Controls.Add(this.label4);
this.groupBox2.Controls.Add(this.nmGeneratorDiameter);
this.groupBox2.Controls.Add(this.label3);
this.groupBox2.Controls.Add(this.label2);
this.groupBox2.Controls.Add(this.nmGeneratorMaxBrightness);
this.groupBox2.Controls.Add(this.label1);
this.groupBox2.Controls.Add(this.nmGeneratorMinBrightness);
this.groupBox2.Location = new System.Drawing.Point(3, 41);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(564, 96);
this.groupBox2.TabIndex = 42;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Mask Generator (Round from center)";
//
// btnMaskGenerate
//
this.btnMaskGenerate.Location = new System.Drawing.Point(259, 57);
this.btnMaskGenerate.Name = "btnMaskGenerate";
this.btnMaskGenerate.Size = new System.Drawing.Size(299, 26);
this.btnMaskGenerate.TabIndex = 41;
this.btnMaskGenerate.Text = "Generate";
this.btnMaskGenerate.UseVisualStyleBackColor = true;
this.btnMaskGenerate.Click += new System.EventHandler(this.EventClick);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(6, 60);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(137, 20);
this.label4.TabIndex = 40;
this.label4.Text = "Diameter in pixels:";
//
// nmGeneratorDiameter
//
this.nmGeneratorDiameter.Location = new System.Drawing.Point(166, 57);
this.nmGeneratorDiameter.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.nmGeneratorDiameter.Name = "nmGeneratorDiameter";
this.nmGeneratorDiameter.Size = new System.Drawing.Size(78, 26);
this.nmGeneratorDiameter.TabIndex = 39;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(255, 28);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(60, 20);
this.label3.TabIndex = 38;
this.label3.Text = "(0-255)";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(320, 28);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(158, 20);
this.label2.TabIndex = 37;
this.label2.Text = "Maximum brightness:";
//
// nmGeneratorMaxBrightness
//
this.nmGeneratorMaxBrightness.Location = new System.Drawing.Point(480, 25);
this.nmGeneratorMaxBrightness.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.nmGeneratorMaxBrightness.Name = "nmGeneratorMaxBrightness";
this.nmGeneratorMaxBrightness.Size = new System.Drawing.Size(78, 26);
this.nmGeneratorMaxBrightness.TabIndex = 36;
this.nmGeneratorMaxBrightness.Value = new decimal(new int[] {
255,
0,
0,
0});
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(6, 28);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(154, 20);
this.label1.TabIndex = 35;
this.label1.Text = "Minimum brightness:";
//
// nmGeneratorMinBrightness
//
this.nmGeneratorMinBrightness.Location = new System.Drawing.Point(166, 25);
this.nmGeneratorMinBrightness.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.nmGeneratorMinBrightness.Name = "nmGeneratorMinBrightness";
this.nmGeneratorMinBrightness.Size = new System.Drawing.Size(78, 26);
this.nmGeneratorMinBrightness.TabIndex = 0;
this.nmGeneratorMinBrightness.Value = new decimal(new int[] {
200,
0,
0,
0});
//
// cbInvertMask
//
this.cbInvertMask.AutoSize = true;
this.cbInvertMask.Enabled = false;
this.cbInvertMask.Location = new System.Drawing.Point(432, 8);
this.cbInvertMask.Name = "cbInvertMask";
this.cbInvertMask.Size = new System.Drawing.Size(110, 24);
this.cbInvertMask.TabIndex = 41;
this.cbInvertMask.Text = "Invert Mask";
this.cbInvertMask.UseVisualStyleBackColor = true;
this.cbInvertMask.CheckedChanged += new System.EventHandler(this.EventClick);
//
// lbMaskResolution
//
this.lbMaskResolution.AutoSize = true;
this.lbMaskResolution.Location = new System.Drawing.Point(-1, 174);
this.lbMaskResolution.Name = "lbMaskResolution";
this.lbMaskResolution.Size = new System.Drawing.Size(207, 20);
this.lbMaskResolution.TabIndex = 40;
this.lbMaskResolution.Text = "Mask resolution: (Unloaded)";
//
// lbPrinterResolution
//
this.lbPrinterResolution.AutoSize = true;
this.lbPrinterResolution.Location = new System.Drawing.Point(-1, 144);
this.lbPrinterResolution.Name = "lbPrinterResolution";
this.lbPrinterResolution.Size = new System.Drawing.Size(136, 20);
this.lbPrinterResolution.TabIndex = 39;
this.lbPrinterResolution.Text = "Printer resolution: ";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.pbMask);
this.groupBox1.Location = new System.Drawing.Point(0, 209);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(567, 335);
this.groupBox1.TabIndex = 38;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Mask image";
//
// pbMask
//
this.pbMask.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbMask.Location = new System.Drawing.Point(3, 22);
this.pbMask.Name = "pbMask";
this.pbMask.Size = new System.Drawing.Size(561, 310);
this.pbMask.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pbMask.TabIndex = 0;
this.pbMask.TabStop = false;
//
// btnImportImageMask
//
this.btnImportImageMask.Location = new System.Drawing.Point(3, 3);
this.btnImportImageMask.Name = "btnImportImageMask";
this.btnImportImageMask.Size = new System.Drawing.Size(417, 32);
this.btnImportImageMask.TabIndex = 37;
this.btnImportImageMask.Text = "Import grayscale mask image from file";
this.btnImportImageMask.UseVisualStyleBackColor = true;
this.btnImportImageMask.Click += new System.EventHandler(this.EventClick);
//
// CtrlToolMask
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.ButtonOkEnabled = false;
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.cbInvertMask);
this.Controls.Add(this.lbMaskResolution);
this.Controls.Add(this.lbPrinterResolution);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.btnImportImageMask);
this.Description = "";
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Name = "CtrlToolMask";
this.Size = new System.Drawing.Size(570, 547);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorDiameter)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorMaxBrightness)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorMinBrightness)).EndInit();
this.groupBox1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pbMask)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Button btnMaskGenerate;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.NumericUpDown nmGeneratorDiameter;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown nmGeneratorMaxBrightness;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown nmGeneratorMinBrightness;
private System.Windows.Forms.CheckBox cbInvertMask;
private System.Windows.Forms.Label lbMaskResolution;
private System.Windows.Forms.Label lbPrinterResolution;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.PictureBox pbMask;
private System.Windows.Forms.Button btnImportImageMask;
}
}
+110
View File
@@ -0,0 +1,110 @@
/*
* GNU AFFERO GENERAL PUBLIC LICENSE
* Version 3, 19 November 2007
* Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
* Everyone is permitted to copy and distribute verbatim copies
* of this license document, but changing it is not allowed.
*/
using System;
using System.Drawing;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using UVtools.Core.Extensions;
using UVtools.Core.Operations;
using UVtools.GUI.Extensions;
namespace UVtools.GUI.Controls.Tools
{
public partial class CtrlToolMask : CtrlToolWindowContent
{
public OperationMask Operation { get; }
public CtrlToolMask()
{
InitializeComponent();
Operation = new OperationMask();
SetOperation(Operation);
lbPrinterResolution.Text = $"Printer Resolution: {Program.FrmMain.ActualLayerImage.Size}";
}
private void EventClick(object sender, EventArgs e)
{
if (ReferenceEquals(sender, btnImportImageMask))
{
using (var fileOpen = new OpenFileDialog
{
CheckFileExists = true,
Filter = "Image Files(*.PNG;*.BMP;*.JPEG;*.JPG;*.GIF)|*.PNG;*.BMP;*.JPEG;*.JPG;*.GIF"
})
{
if (fileOpen.ShowDialog() != DialogResult.OK) return;
Operation.Mask = CvInvoke.Imread(fileOpen.FileName, ImreadModes.Grayscale);
if (Operation.Mask.Size != Program.FrmMain.ActualLayerImage.Size)
{
CvInvoke.Resize(Operation.Mask, Operation.Mask, Program.FrmMain.ActualLayerImage.Size);
}
if (cbInvertMask.Checked)
{
CvInvoke.BitwiseNot(Operation.Mask, Operation.Mask);
}
lbMaskResolution.Text = $"Mask Resolution: {Operation.Mask.Size}";
pbMask.Image = Operation.Mask.ToBitmap();
cbInvertMask.Enabled =
ButtonOkEnabled = true;
}
return;
}
if (ReferenceEquals(sender, cbInvertMask))
{
CvInvoke.BitwiseNot(Operation.Mask, Operation.Mask);
pbMask.Image = Operation.Mask.ToBitmap();
return;
}
if (ReferenceEquals(sender, btnMaskGenerate))
{
Operation.Mask = Program.FrmMain.ActualLayerImage.CloneBlank();
lbMaskResolution.Text = $"Mask Resolution: {Operation.Mask.Size}";
int radius = (int)nmGeneratorDiameter.Value;
if (radius == 0)
{
radius = Math.Min(Operation.Mask.Width, Operation.Mask.Height) / 2;
}
else
{
radius = radius.Clamp(2, Math.Min(Operation.Mask.Width, Operation.Mask.Height)) / 2;
}
var maxScalar = new MCvScalar((double)nmGeneratorMaxBrightness.Value);
Operation.Mask.SetTo(maxScalar);
var center = new Point(Operation.Mask.Width / 2, Operation.Mask.Height / 2);
var colorDifference = nmGeneratorMinBrightness.Value - nmGeneratorMaxBrightness.Value;
//CvInvoke.Circle(Mask, center, radius, minScalar, -1);
for (decimal i = 1; i < radius; i++)
{
int color = (int)(nmGeneratorMinBrightness.Value - i / radius * colorDifference); //or some another color calculation
CvInvoke.Circle(Operation.Mask, center, (int)i, new MCvScalar(color), 2);
}
if (cbInvertMask.Checked)
CvInvoke.BitwiseNot(Operation.Mask, Operation.Mask);
pbMask.Image = Operation.Mask.ToBitmap();
cbInvertMask.Enabled =
ButtonOkEnabled = true;
return;
}
}
}
}
@@ -118,14 +118,6 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>148, 17</value>
</metadata>
<data name="lbLayerRange.ToolTip" xml:space="preserve">
<value>Selects the layers range within start layer and end layer where mutator will operate.
Select same layer start as end to operate only within that layer.
Note: "Layer Start" start can't be higher than "Layer End".</value>
</data>
<metadata name="cmLayerRange.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>
-475
View File
@@ -1,475 +0,0 @@
using UVtools.GUI.Controls;
namespace UVtools.GUI.Forms
{
partial class FrmMutationMask
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMutationMask));
this.lbDescription = new System.Windows.Forms.Label();
this.lbLayerRange = new System.Windows.Forms.Label();
this.nmLayerRangeStart = new System.Windows.Forms.NumericUpDown();
this.nmLayerRangeEnd = new System.Windows.Forms.NumericUpDown();
this.lbLayerRangeTo = new System.Windows.Forms.Label();
this.cmLayerRange = new System.Windows.Forms.ContextMenuStrip(this.components);
this.btnLayerRangeAllLayers = new System.Windows.Forms.ToolStripMenuItem();
this.btnLayerRangeCurrentLayer = new System.Windows.Forms.ToolStripMenuItem();
this.btnLayerRangeBottomLayers = new System.Windows.Forms.ToolStripMenuItem();
this.btnLayerRangeNormalLayers = new System.Windows.Forms.ToolStripMenuItem();
this.btnCancel = new System.Windows.Forms.Button();
this.btnMutate = new System.Windows.Forms.Button();
this.toolTip = new System.Windows.Forms.ToolTip(this.components);
this.btnLayerRangeSelect = new UVtools.GUI.Controls.SplitButton();
this.btnImportImageMask = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.pbMask = new System.Windows.Forms.PictureBox();
this.lbPrinterResolution = new System.Windows.Forms.Label();
this.lbMaskResolution = new System.Windows.Forms.Label();
this.cbInvertMask = new System.Windows.Forms.CheckBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.nmGeneratorMinBrightness = new System.Windows.Forms.NumericUpDown();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.nmGeneratorMaxBrightness = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.nmGeneratorDiameter = new System.Windows.Forms.NumericUpDown();
this.btnMaskGenerate = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.nmLayerRangeStart)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nmLayerRangeEnd)).BeginInit();
this.cmLayerRange.SuspendLayout();
this.groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbMask)).BeginInit();
this.groupBox2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorMinBrightness)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorMaxBrightness)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorDiameter)).BeginInit();
this.SuspendLayout();
//
// lbDescription
//
this.lbDescription.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbDescription.Location = new System.Drawing.Point(13, 14);
this.lbDescription.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lbDescription.Name = "lbDescription";
this.lbDescription.Size = new System.Drawing.Size(584, 128);
this.lbDescription.TabIndex = 0;
this.lbDescription.Text = "Description";
//
// lbLayerRange
//
this.lbLayerRange.AutoSize = true;
this.lbLayerRange.Location = new System.Drawing.Point(13, 150);
this.lbLayerRange.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lbLayerRange.Name = "lbLayerRange";
this.lbLayerRange.Size = new System.Drawing.Size(97, 20);
this.lbLayerRange.TabIndex = 9;
this.lbLayerRange.Text = "Layer range:";
this.toolTip.SetToolTip(this.lbLayerRange, resources.GetString("lbLayerRange.ToolTip"));
//
// nmLayerRangeStart
//
this.nmLayerRangeStart.Location = new System.Drawing.Point(118, 147);
this.nmLayerRangeStart.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.nmLayerRangeStart.Maximum = new decimal(new int[] {
100000,
0,
0,
0});
this.nmLayerRangeStart.Name = "nmLayerRangeStart";
this.nmLayerRangeStart.Size = new System.Drawing.Size(120, 26);
this.nmLayerRangeStart.TabIndex = 0;
//
// nmLayerRangeEnd
//
this.nmLayerRangeEnd.Location = new System.Drawing.Point(314, 147);
this.nmLayerRangeEnd.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.nmLayerRangeEnd.Maximum = new decimal(new int[] {
100000,
0,
0,
0});
this.nmLayerRangeEnd.Name = "nmLayerRangeEnd";
this.nmLayerRangeEnd.Size = new System.Drawing.Size(120, 26);
this.nmLayerRangeEnd.TabIndex = 1;
//
// lbLayerRangeTo
//
this.lbLayerRangeTo.AutoSize = true;
this.lbLayerRangeTo.Location = new System.Drawing.Point(275, 150);
this.lbLayerRangeTo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lbLayerRangeTo.Name = "lbLayerRangeTo";
this.lbLayerRangeTo.Size = new System.Drawing.Size(31, 20);
this.lbLayerRangeTo.TabIndex = 12;
this.lbLayerRangeTo.Text = "To:";
//
// cmLayerRange
//
this.cmLayerRange.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btnLayerRangeAllLayers,
this.btnLayerRangeCurrentLayer,
this.btnLayerRangeBottomLayers,
this.btnLayerRangeNormalLayers});
this.cmLayerRange.Name = "cmLayerRange";
this.cmLayerRange.Size = new System.Drawing.Size(226, 92);
//
// btnLayerRangeAllLayers
//
this.btnLayerRangeAllLayers.Name = "btnLayerRangeAllLayers";
this.btnLayerRangeAllLayers.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.A)));
this.btnLayerRangeAllLayers.Size = new System.Drawing.Size(225, 22);
this.btnLayerRangeAllLayers.Text = "&All Layers";
this.btnLayerRangeAllLayers.Click += new System.EventHandler(this.ItemClicked);
//
// btnLayerRangeCurrentLayer
//
this.btnLayerRangeCurrentLayer.Name = "btnLayerRangeCurrentLayer";
this.btnLayerRangeCurrentLayer.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.C)));
this.btnLayerRangeCurrentLayer.Size = new System.Drawing.Size(225, 22);
this.btnLayerRangeCurrentLayer.Text = "&Current Layer";
this.btnLayerRangeCurrentLayer.Click += new System.EventHandler(this.ItemClicked);
//
// btnLayerRangeBottomLayers
//
this.btnLayerRangeBottomLayers.Name = "btnLayerRangeBottomLayers";
this.btnLayerRangeBottomLayers.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.B)));
this.btnLayerRangeBottomLayers.Size = new System.Drawing.Size(225, 22);
this.btnLayerRangeBottomLayers.Text = "&Bottom Layers";
this.btnLayerRangeBottomLayers.Click += new System.EventHandler(this.ItemClicked);
//
// btnLayerRangeNormalLayers
//
this.btnLayerRangeNormalLayers.Name = "btnLayerRangeNormalLayers";
this.btnLayerRangeNormalLayers.ShortcutKeys = ((System.Windows.Forms.Keys)(((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)
| System.Windows.Forms.Keys.N)));
this.btnLayerRangeNormalLayers.Size = new System.Drawing.Size(225, 22);
this.btnLayerRangeNormalLayers.Text = "&Normal Layers";
this.btnLayerRangeNormalLayers.Click += new System.EventHandler(this.ItemClicked);
//
// btnCancel
//
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Image = global::UVtools.GUI.Properties.Resources.Cancel_24x24;
this.btnCancel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnCancel.Location = new System.Drawing.Point(434, 733);
this.btnCancel.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(150, 48);
this.btnCancel.TabIndex = 6;
this.btnCancel.Text = "&Cancel";
this.btnCancel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.ItemClicked);
//
// btnMutate
//
this.btnMutate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.btnMutate.Enabled = false;
this.btnMutate.Image = global::UVtools.GUI.Properties.Resources.Ok_24x24;
this.btnMutate.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnMutate.Location = new System.Drawing.Point(276, 733);
this.btnMutate.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.btnMutate.Name = "btnMutate";
this.btnMutate.Size = new System.Drawing.Size(150, 48);
this.btnMutate.TabIndex = 5;
this.btnMutate.Text = "&Mutate";
this.btnMutate.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.btnMutate.UseVisualStyleBackColor = true;
this.btnMutate.Click += new System.EventHandler(this.ItemClicked);
//
// toolTip
//
this.toolTip.AutoPopDelay = 32767;
this.toolTip.InitialDelay = 500;
this.toolTip.IsBalloon = true;
this.toolTip.ReshowDelay = 100;
this.toolTip.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
this.toolTip.ToolTipTitle = "Information";
//
// btnLayerRangeSelect
//
this.btnLayerRangeSelect.Location = new System.Drawing.Point(446, 146);
this.btnLayerRangeSelect.Menu = this.cmLayerRange;
this.btnLayerRangeSelect.Name = "btnLayerRangeSelect";
this.btnLayerRangeSelect.Size = new System.Drawing.Size(138, 26);
this.btnLayerRangeSelect.TabIndex = 2;
this.btnLayerRangeSelect.Text = "Select";
this.btnLayerRangeSelect.UseVisualStyleBackColor = true;
//
// btnImportImageMask
//
this.btnImportImageMask.Location = new System.Drawing.Point(17, 181);
this.btnImportImageMask.Name = "btnImportImageMask";
this.btnImportImageMask.Size = new System.Drawing.Size(417, 32);
this.btnImportImageMask.TabIndex = 31;
this.btnImportImageMask.Text = "Import grayscale mask image from file";
this.btnImportImageMask.UseVisualStyleBackColor = true;
this.btnImportImageMask.Click += new System.EventHandler(this.ItemClicked);
//
// groupBox1
//
this.groupBox1.Controls.Add(this.pbMask);
this.groupBox1.Location = new System.Drawing.Point(14, 387);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(567, 335);
this.groupBox1.TabIndex = 32;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Mask image";
//
// pbMask
//
this.pbMask.Dock = System.Windows.Forms.DockStyle.Fill;
this.pbMask.Location = new System.Drawing.Point(3, 22);
this.pbMask.Name = "pbMask";
this.pbMask.Size = new System.Drawing.Size(561, 310);
this.pbMask.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pbMask.TabIndex = 0;
this.pbMask.TabStop = false;
//
// lbPrinterResolution
//
this.lbPrinterResolution.AutoSize = true;
this.lbPrinterResolution.Location = new System.Drawing.Point(13, 322);
this.lbPrinterResolution.Name = "lbPrinterResolution";
this.lbPrinterResolution.Size = new System.Drawing.Size(136, 20);
this.lbPrinterResolution.TabIndex = 33;
this.lbPrinterResolution.Text = "Printer resolution: ";
//
// lbMaskResolution
//
this.lbMaskResolution.AutoSize = true;
this.lbMaskResolution.Location = new System.Drawing.Point(13, 352);
this.lbMaskResolution.Name = "lbMaskResolution";
this.lbMaskResolution.Size = new System.Drawing.Size(207, 20);
this.lbMaskResolution.TabIndex = 34;
this.lbMaskResolution.Text = "Mask resolution: (Unloaded)";
//
// cbInvertMask
//
this.cbInvertMask.AutoSize = true;
this.cbInvertMask.Location = new System.Drawing.Point(446, 186);
this.cbInvertMask.Name = "cbInvertMask";
this.cbInvertMask.Size = new System.Drawing.Size(110, 24);
this.cbInvertMask.TabIndex = 35;
this.cbInvertMask.Text = "Invert Mask";
this.cbInvertMask.UseVisualStyleBackColor = true;
this.cbInvertMask.CheckedChanged += new System.EventHandler(this.ItemClicked);
//
// groupBox2
//
this.groupBox2.Controls.Add(this.btnMaskGenerate);
this.groupBox2.Controls.Add(this.label4);
this.groupBox2.Controls.Add(this.nmGeneratorDiameter);
this.groupBox2.Controls.Add(this.label3);
this.groupBox2.Controls.Add(this.label2);
this.groupBox2.Controls.Add(this.nmGeneratorMaxBrightness);
this.groupBox2.Controls.Add(this.label1);
this.groupBox2.Controls.Add(this.nmGeneratorMinBrightness);
this.groupBox2.Location = new System.Drawing.Point(17, 219);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(564, 96);
this.groupBox2.TabIndex = 36;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Mask Generator (Round from center)";
//
// nmGeneratorMinBrightness
//
this.nmGeneratorMinBrightness.Location = new System.Drawing.Point(166, 25);
this.nmGeneratorMinBrightness.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.nmGeneratorMinBrightness.Name = "nmGeneratorMinBrightness";
this.nmGeneratorMinBrightness.Size = new System.Drawing.Size(78, 26);
this.nmGeneratorMinBrightness.TabIndex = 0;
this.nmGeneratorMinBrightness.Value = new decimal(new int[] {
200,
0,
0,
0});
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(6, 28);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(154, 20);
this.label1.TabIndex = 35;
this.label1.Text = "Minimum brightness:";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(320, 28);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(158, 20);
this.label2.TabIndex = 37;
this.label2.Text = "Maximum brightness:";
//
// nmGeneratorMaxBrightness
//
this.nmGeneratorMaxBrightness.Location = new System.Drawing.Point(480, 25);
this.nmGeneratorMaxBrightness.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.nmGeneratorMaxBrightness.Name = "nmGeneratorMaxBrightness";
this.nmGeneratorMaxBrightness.Size = new System.Drawing.Size(78, 26);
this.nmGeneratorMaxBrightness.TabIndex = 36;
this.nmGeneratorMaxBrightness.Value = new decimal(new int[] {
255,
0,
0,
0});
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(255, 28);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(60, 20);
this.label3.TabIndex = 38;
this.label3.Text = "(0-255)";
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(6, 60);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(137, 20);
this.label4.TabIndex = 40;
this.label4.Text = "Diameter in pixels:";
//
// nmGeneratorDiameter
//
this.nmGeneratorDiameter.Location = new System.Drawing.Point(166, 57);
this.nmGeneratorDiameter.Maximum = new decimal(new int[] {
10000,
0,
0,
0});
this.nmGeneratorDiameter.Name = "nmGeneratorDiameter";
this.nmGeneratorDiameter.Size = new System.Drawing.Size(78, 26);
this.nmGeneratorDiameter.TabIndex = 39;
//
// btnMaskGenerate
//
this.btnMaskGenerate.Location = new System.Drawing.Point(259, 57);
this.btnMaskGenerate.Name = "btnMaskGenerate";
this.btnMaskGenerate.Size = new System.Drawing.Size(299, 26);
this.btnMaskGenerate.TabIndex = 41;
this.btnMaskGenerate.Text = "Generate";
this.btnMaskGenerate.UseVisualStyleBackColor = true;
this.btnMaskGenerate.Click += new System.EventHandler(this.ItemClicked);
//
// FrmMutationMask
//
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(599, 795);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.cbInvertMask);
this.Controls.Add(this.lbMaskResolution);
this.Controls.Add(this.lbPrinterResolution);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.btnImportImageMask);
this.Controls.Add(this.btnLayerRangeSelect);
this.Controls.Add(this.lbLayerRangeTo);
this.Controls.Add(this.nmLayerRangeEnd);
this.Controls.Add(this.nmLayerRangeStart);
this.Controls.Add(this.lbLayerRange);
this.Controls.Add(this.btnMutate);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.lbDescription);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.KeyPreview = true;
this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FrmMutationMask";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Form1";
this.TopMost = true;
((System.ComponentModel.ISupportInitialize)(this.nmLayerRangeStart)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nmLayerRangeEnd)).EndInit();
this.cmLayerRange.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pbMask)).EndInit();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorMinBrightness)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorMaxBrightness)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nmGeneratorDiameter)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lbDescription;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnMutate;
private System.Windows.Forms.Label lbLayerRange;
private System.Windows.Forms.NumericUpDown nmLayerRangeStart;
private System.Windows.Forms.NumericUpDown nmLayerRangeEnd;
private System.Windows.Forms.Label lbLayerRangeTo;
private Controls.SplitButton btnLayerRangeSelect;
private System.Windows.Forms.ContextMenuStrip cmLayerRange;
private System.Windows.Forms.ToolStripMenuItem btnLayerRangeAllLayers;
private System.Windows.Forms.ToolStripMenuItem btnLayerRangeCurrentLayer;
private System.Windows.Forms.ToolStripMenuItem btnLayerRangeBottomLayers;
private System.Windows.Forms.ToolStripMenuItem btnLayerRangeNormalLayers;
private System.Windows.Forms.ToolTip toolTip;
private System.Windows.Forms.Button btnImportImageMask;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.PictureBox pbMask;
private System.Windows.Forms.Label lbPrinterResolution;
private System.Windows.Forms.Label lbMaskResolution;
private System.Windows.Forms.CheckBox cbInvertMask;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown nmGeneratorMaxBrightness;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.NumericUpDown nmGeneratorMinBrightness;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.NumericUpDown nmGeneratorDiameter;
private System.Windows.Forms.Button btnMaskGenerate;
}
}
-233
View File
@@ -1,233 +0,0 @@
/*
* GNU AFFERO GENERAL PUBLIC LICENSE
* Version 3, 19 November 2007
* Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
* Everyone is permitted to copy and distribute verbatim copies
* of this license document, but changing it is not allowed.
*/
using System;
using System.Drawing;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using UVtools.Core.Extensions;
using UVtools.GUI.Extensions;
namespace UVtools.GUI.Forms
{
public partial class FrmMutationMask : Form
{
#region Properties
private Mutation Mutation { get; }
public uint LayerRangeStart
{
get => (uint) nmLayerRangeStart.Value;
set => nmLayerRangeStart.Value = value;
}
public uint LayerRangeEnd
{
get => (uint)Math.Min(nmLayerRangeEnd.Value, Program.SlicerFile.LayerCount-1);
set => nmLayerRangeEnd.Value = value;
}
public Mat Mask { get; private set; }
#endregion
#region Constructors
public FrmMutationMask(Mutation mutation)
{
InitializeComponent();
Mutation = mutation;
Text = $"Mutate: {mutation.MenuName}";
lbDescription.Text = Mutation.Description;
nmLayerRangeEnd.Value = Program.SlicerFile.LayerCount-1;
lbPrinterResolution.Text = $"Printer Resolution: {Program.FrmMain.ActualLayerImage.Size}";
}
#endregion
#region Overrides
protected override void OnKeyUp(KeyEventArgs e)
{
base.OnKeyUp(e);
if (e.KeyCode == Keys.Enter)
{
btnMutate.PerformClick();
e.Handled = true;
return;
}
if ((ModifierKeys & Keys.Shift) == Keys.Shift && (ModifierKeys & Keys.Control) == Keys.Control)
{
if (e.KeyCode == Keys.A)
{
btnLayerRangeAllLayers.PerformClick();
e.Handled = true;
return;
}
if (e.KeyCode == Keys.C)
{
btnLayerRangeCurrentLayer.PerformClick();
e.Handled = true;
return;
}
if (e.KeyCode == Keys.B)
{
btnLayerRangeBottomLayers.PerformClick();
e.Handled = true;
return;
}
if (e.KeyCode == Keys.N)
{
btnLayerRangeNormalLayers.PerformClick();
e.Handled = true;
return;
}
}
}
#endregion
#region Events
private void ItemClicked(object sender, EventArgs e)
{
if (ReferenceEquals(sender, btnLayerRangeAllLayers))
{
nmLayerRangeStart.Value = 0;
nmLayerRangeEnd.Value = Program.SlicerFile.LayerCount-1;
return;
}
if (ReferenceEquals(sender, btnLayerRangeCurrentLayer))
{
nmLayerRangeStart.Value = Program.FrmMain.ActualLayer;
nmLayerRangeEnd.Value = Program.FrmMain.ActualLayer;
return;
}
if (ReferenceEquals(sender, btnLayerRangeBottomLayers))
{
nmLayerRangeStart.Value = 0;
nmLayerRangeEnd.Value = Program.SlicerFile.InitialLayerCount-1;
return;
}
if (ReferenceEquals(sender, btnLayerRangeNormalLayers))
{
nmLayerRangeStart.Value = Program.SlicerFile.InitialLayerCount - 1;
nmLayerRangeEnd.Value = Program.SlicerFile.LayerCount - 1;
return;
}
if (ReferenceEquals(sender, btnImportImageMask))
{
using (var fileOpen = new OpenFileDialog
{
CheckFileExists = true,
Filter = "Image Files(*.PNG;*.BMP;*.JPEG;*.JPG;*.GIF)|*.PNG;*.BMP;*.JPEG;*.JPG;*.GIF"
})
{
if (fileOpen.ShowDialog() != DialogResult.OK) return;
Mask = CvInvoke.Imread(fileOpen.FileName, ImreadModes.Grayscale);
if (Mask.Size != Program.FrmMain.ActualLayerImage.Size)
{
CvInvoke.Resize(Mask, Mask, Program.FrmMain.ActualLayerImage.Size);
}
if (cbInvertMask.Checked)
{
CvInvoke.BitwiseNot(Mask, Mask);
}
lbMaskResolution.Text = $"Mask Resolution: {Mask.Size}";
pbMask.Image = Mask.ToBitmap();
btnMutate.Enabled = true;
}
return;
}
if (ReferenceEquals(sender, cbInvertMask))
{
CvInvoke.BitwiseNot(Mask, Mask);
pbMask.Image = Mask.ToBitmap();
return;
}
if (ReferenceEquals(sender, btnMaskGenerate))
{
Mask = Program.FrmMain.ActualLayerImage.CloneBlank();
lbMaskResolution.Text = $"Mask Resolution: {Mask.Size}";
int radius = (int) nmGeneratorDiameter.Value;
if (radius == 0)
{
radius = Math.Min(Mask.Width, Mask.Height) / 2;
}
else
{
radius = radius.Clamp(2, Math.Min(Mask.Width, Mask.Height)) / 2;
}
var maxScalar = new MCvScalar((double)nmGeneratorMaxBrightness.Value);
Mask.SetTo(maxScalar);
var center = new Point(Mask.Width / 2, Mask.Height / 2);
var colorDifference = nmGeneratorMinBrightness.Value - nmGeneratorMaxBrightness.Value;
//CvInvoke.Circle(Mask, center, radius, minScalar, -1);
for (decimal i = 1; i < radius; i++)
{
int color = (int) (nmGeneratorMinBrightness.Value - i / radius * colorDifference); //or some another color calculation
CvInvoke.Circle(Mask, center, (int) i, new MCvScalar(color), 2);
}
if (cbInvertMask.Checked)
CvInvoke.BitwiseNot(Mask, Mask);
pbMask.Image = Mask.ToBitmap();
btnMutate.Enabled = true;
return;
}
if (ReferenceEquals(sender, btnMutate))
{
if (!btnMutate.Enabled) return;
if (LayerRangeStart > LayerRangeEnd)
{
MessageBox.Show("Layer range start can't be higher than layer end.\nPlease fix and try again.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
nmLayerRangeStart.Select();
return;
}
if (MessageBox.Show($"Are you sure you want to {Mutation.Mutate}?", Text, MessageBoxButtons.YesNo,
MessageBoxIcon.Question) != DialogResult.Yes) return;
DialogResult = DialogResult.OK;
Close();
return;
}
if (ReferenceEquals(sender, btnCancel))
{
Mask?.Dispose();
DialogResult = DialogResult.Cancel;
return;
}
}
#endregion
}
}
+1
View File
@@ -140,6 +140,7 @@ namespace UVtools.GUI.Forms
//content.Dock = DockStyle.Fill;
btnResetDefaults.Visible = content.ButtonResetDefaultsVisible;
btnOk.Enabled = content.ButtonOkEnabled;
//content.AutoSize = true;
Content = content;
content.PropertyChanged += ContentOnPropertyChanged;
+12 -11
View File
@@ -51,6 +51,7 @@ namespace UVtools.GUI
new OperationMenuItem(new OperationRotate(), Resources.Rotate_16x16),
new OperationMenuItem(new OperationSolidify(), Resources.square_solid_16x16),
new OperationMenuItem(new OperationMorph(), Resources.Geometry_16x16),
new OperationMenuItem(new OperationMask(), Resources.mask_16x16),
new OperationMenuItem(new OperationChangeResolution(), Resources.resize_16x16),
new OperationMenuItem(new OperationLayerReHeight(), Resources.ladder_16x16),
new OperationMenuItem(new OperationPattern(), Resources.pattern_16x16)
@@ -101,7 +102,7 @@ namespace UVtools.GUI
Resources.mutation_solidify
)
},*/
{
/*{
LayerManager.Mutate.Mask, new Mutation(LayerManager.Mutate.Mask, "Mask", Resources.mask_16x16,
"Masks the LCD output image given a greyscale (0-255) pixel input image.\n" +
"Useful to correct light uniformity, but a proper mask must be created first based on real measurements per printer.\n" +
@@ -109,7 +110,7 @@ namespace UVtools.GUI
"NOTE 2: Run only this tool after all repairs and other transformations.",
"Mask"
)
},
},*/
{
LayerManager.Mutate.PixelDimming, new Mutation(LayerManager.Mutate.PixelDimming, "Pixel Dimming",
Resources.chessboard_16x16,
@@ -3652,10 +3653,6 @@ namespace UVtools.GUI
ThresholdType thresholdType = ThresholdType.Binary;
double x = 0;
Mat mat = null;
Matrix<byte> evenPattern = null;
Matrix<byte> oddPattern = null;
@@ -3693,7 +3690,7 @@ namespace UVtools.GUI
}
break;*/
case LayerManager.Mutate.Mask:
/*case LayerManager.Mutate.Mask:
using (FrmMutationMask inputBox = new FrmMutationMask(Mutations[mutator]))
{
if (inputBox.ShowDialog() != DialogResult.OK) return;
@@ -3702,7 +3699,7 @@ namespace UVtools.GUI
mat = inputBox.Mask;
}
break;
break;*/
case LayerManager.Mutate.PixelDimming:
using (FrmMutationPixelDimming inputBox = new FrmMutationPixelDimming(Mutations[mutator]))
{
@@ -3782,10 +3779,10 @@ namespace UVtools.GUI
/*case LayerManager.Mutate.Solidify:
SlicerFile.LayerManager.Solidify(layerStart, layerEnd, progress);
break;*/
case LayerManager.Mutate.Mask:
SlicerFile.LayerManager.MutateMask(layerStart, layerEnd, mat, progress);
/*case LayerManager.Mutate.Mask:
SlicerFile.LayerManager.Mask(layerStart, layerEnd, mat, progress);
mat?.Dispose();
break;
break;*/
case LayerManager.Mutate.PixelDimming:
SlicerFile.LayerManager.MutatePixelDimming(layerStart, layerEnd, evenPattern, oddPattern,
(ushort) iterationsStart, fade, progress);
@@ -4519,6 +4516,10 @@ namespace UVtools.GUI
case OperationMorph operation:
SlicerFile.LayerManager.Morph(operation, BorderType.Default, new MCvScalar(), FrmLoading.RestartProgress());
break;
case OperationMask operation:
SlicerFile.LayerManager.Mask(operation, FrmLoading.RestartProgress());
break;
case OperationChangeResolution operation:
SlicerFile.LayerManager.ChangeResolution(operation, FrmLoading.RestartProgress(false));
break;
+9 -9
View File
@@ -170,6 +170,12 @@
<Compile Include="Controls\SplitButton.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\Tools\CtrlToolMask.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Controls\Tools\CtrlToolMask.Designer.cs">
<DependentUpon>CtrlToolMask.cs</DependentUpon>
</Compile>
<Compile Include="Controls\Tools\CtrlToolRotate.cs">
<SubType>UserControl</SubType>
</Compile>
@@ -259,12 +265,6 @@
<Compile Include="Forms\FrmMutationBlur.Designer.cs">
<DependentUpon>FrmMutationBlur.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FrmMutationMask.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\FrmMutationMask.Designer.cs">
<DependentUpon>FrmMutationMask.cs</DependentUpon>
</Compile>
<Compile Include="Forms\FrmMutationThreshold.cs">
<SubType>Form</SubType>
</Compile>
@@ -330,6 +330,9 @@
<EmbeddedResource Include="Controls\CtrlToolWindowContent.resx">
<DependentUpon>CtrlToolWindowContent.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Controls\Tools\CtrlToolMask.resx">
<DependentUpon>CtrlToolMask.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Controls\Tools\CtrlToolRotate.resx">
<DependentUpon>CtrlToolRotate.cs</DependentUpon>
</EmbeddedResource>
@@ -375,9 +378,6 @@
<EmbeddedResource Include="Forms\FrmMutationBlur.resx">
<DependentUpon>FrmMutationBlur.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FrmMutationMask.resx">
<DependentUpon>FrmMutationMask.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\FrmMutationThreshold.resx">
<DependentUpon>FrmMutationThreshold.cs</DependentUpon>
</EmbeddedResource>