fix: show cutting parameters dialog before assigning lead-ins

Auto-assign lead-ins silently reused existing plate parameters with no
way to change them after the first assignment. Now a dialog with the
full CuttingPanel is shown every time, pre-populated with the current
settings, so the user can review and modify before confirming.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-08 14:32:41 -04:00
parent ba89967448
commit 786b6e2e88
2 changed files with 112 additions and 37 deletions
+68
View File
@@ -0,0 +1,68 @@
using OpenNest.CNC.CuttingStrategy;
using OpenNest.Controls;
using System.Drawing;
using System.Windows.Forms;
namespace OpenNest.Forms
{
public class CuttingParametersDialog : Form
{
private readonly CuttingPanel cuttingPanel;
public CuttingParametersDialog()
{
Text = "Cutting Parameters";
Size = new Size(400, 560);
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
StartPosition = FormStartPosition.CenterParent;
cuttingPanel = new CuttingPanel
{
Dock = DockStyle.Fill
};
var buttonPanel = new Panel
{
Dock = DockStyle.Bottom,
Height = 40
};
var btnOk = new Button
{
Text = "OK",
DialogResult = DialogResult.OK,
Size = new Size(80, 28),
Location = new Point(220, 6)
};
var btnCancel = new Button
{
Text = "Cancel",
DialogResult = DialogResult.Cancel,
Size = new Size(80, 28),
Location = new Point(305, 6)
};
buttonPanel.Controls.Add(btnOk);
buttonPanel.Controls.Add(btnCancel);
Controls.Add(cuttingPanel);
Controls.Add(buttonPanel);
AcceptButton = btnOk;
CancelButton = btnCancel;
}
public void LoadParameters(CuttingParameters parameters)
{
cuttingPanel.LoadFromParameters(parameters);
}
public CuttingParameters GetParameters()
{
return cuttingPanel.BuildParameters();
}
}
}
+44 -37
View File
@@ -719,19 +719,17 @@ namespace OpenNest.Forms
var plate = PlateView.Plate; var plate = PlateView.Plate;
if (plate.CuttingParameters == null) var parameters = LoadOrDefaultParameters(plate.CuttingParameters);
{
var json = Properties.Settings.Default.CuttingParametersJson; using var dlg = new CuttingParametersDialog();
if (!string.IsNullOrEmpty(json)) dlg.LoadParameters(parameters);
{
try { plate.CuttingParameters = CuttingParametersSerializer.Deserialize(json); } if (dlg.ShowDialog() != DialogResult.OK)
catch { plate.CuttingParameters = new CuttingParameters(); } return;
}
else parameters = dlg.GetParameters();
{ plate.CuttingParameters = parameters;
plate.CuttingParameters = new CuttingParameters(); SaveCuttingParameters(parameters);
}
}
var assigner = new LeadInAssigner var assigner = new LeadInAssigner
{ {
@@ -782,17 +780,16 @@ namespace OpenNest.Forms
if (Nest == null) if (Nest == null)
return; return;
CuttingParameters parameters; var parameters = LoadOrDefaultParameters(PlateView?.Plate?.CuttingParameters);
var json = Properties.Settings.Default.CuttingParametersJson;
if (!string.IsNullOrEmpty(json)) using var dlg = new CuttingParametersDialog();
{ dlg.LoadParameters(parameters);
try { parameters = CuttingParametersSerializer.Deserialize(json); }
catch { parameters = new CuttingParameters(); } if (dlg.ShowDialog() != DialogResult.OK)
} return;
else
{ parameters = dlg.GetParameters();
parameters = new CuttingParameters(); SaveCuttingParameters(parameters);
}
var assigner = new LeadInAssigner var assigner = new LeadInAssigner
{ {
@@ -840,24 +837,34 @@ namespace OpenNest.Forms
var plate = PlateView.Plate; var plate = PlateView.Plate;
// If no cutting parameters exist, initialize from saved settings or defaults
if (plate.CuttingParameters == null) if (plate.CuttingParameters == null)
{ plate.CuttingParameters = LoadOrDefaultParameters(null);
var json = Properties.Settings.Default.CuttingParametersJson;
if (!string.IsNullOrEmpty(json))
{
try { plate.CuttingParameters = CuttingParametersSerializer.Deserialize(json); }
catch { plate.CuttingParameters = new CuttingParameters(); }
}
else
{
plate.CuttingParameters = new CuttingParameters();
}
}
PlateView.SetAction(typeof(Actions.ActionLeadIn)); PlateView.SetAction(typeof(Actions.ActionLeadIn));
} }
private static CuttingParameters LoadOrDefaultParameters(CuttingParameters existing)
{
if (existing != null)
return existing;
var json = Properties.Settings.Default.CuttingParametersJson;
if (!string.IsNullOrEmpty(json))
{
try { return CuttingParametersSerializer.Deserialize(json); }
catch { /* fall through */ }
}
return new CuttingParameters();
}
private static void SaveCuttingParameters(CuttingParameters parameters)
{
var json = CuttingParametersSerializer.Serialize(parameters);
Properties.Settings.Default.CuttingParametersJson = json;
Properties.Settings.Default.Save();
}
private void ImportDrawings_Click(object sender, EventArgs e) private void ImportDrawings_Click(object sender, EventArgs e)
{ {
Import(); Import();