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:
68
OpenNest/Forms/CuttingParametersDialog.cs
Normal file
68
OpenNest/Forms/CuttingParametersDialog.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -719,19 +719,17 @@ namespace OpenNest.Forms
|
||||
|
||||
var plate = PlateView.Plate;
|
||||
|
||||
if (plate.CuttingParameters == 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();
|
||||
}
|
||||
}
|
||||
var parameters = LoadOrDefaultParameters(plate.CuttingParameters);
|
||||
|
||||
using var dlg = new CuttingParametersDialog();
|
||||
dlg.LoadParameters(parameters);
|
||||
|
||||
if (dlg.ShowDialog() != DialogResult.OK)
|
||||
return;
|
||||
|
||||
parameters = dlg.GetParameters();
|
||||
plate.CuttingParameters = parameters;
|
||||
SaveCuttingParameters(parameters);
|
||||
|
||||
var assigner = new LeadInAssigner
|
||||
{
|
||||
@@ -782,17 +780,16 @@ namespace OpenNest.Forms
|
||||
if (Nest == null)
|
||||
return;
|
||||
|
||||
CuttingParameters parameters;
|
||||
var json = Properties.Settings.Default.CuttingParametersJson;
|
||||
if (!string.IsNullOrEmpty(json))
|
||||
{
|
||||
try { parameters = CuttingParametersSerializer.Deserialize(json); }
|
||||
catch { parameters = new CuttingParameters(); }
|
||||
}
|
||||
else
|
||||
{
|
||||
parameters = new CuttingParameters();
|
||||
}
|
||||
var parameters = LoadOrDefaultParameters(PlateView?.Plate?.CuttingParameters);
|
||||
|
||||
using var dlg = new CuttingParametersDialog();
|
||||
dlg.LoadParameters(parameters);
|
||||
|
||||
if (dlg.ShowDialog() != DialogResult.OK)
|
||||
return;
|
||||
|
||||
parameters = dlg.GetParameters();
|
||||
SaveCuttingParameters(parameters);
|
||||
|
||||
var assigner = new LeadInAssigner
|
||||
{
|
||||
@@ -840,24 +837,34 @@ namespace OpenNest.Forms
|
||||
|
||||
var plate = PlateView.Plate;
|
||||
|
||||
// If no cutting parameters exist, initialize from saved settings or defaults
|
||||
if (plate.CuttingParameters == 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();
|
||||
}
|
||||
}
|
||||
plate.CuttingParameters = LoadOrDefaultParameters(null);
|
||||
|
||||
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)
|
||||
{
|
||||
Import();
|
||||
|
||||
Reference in New Issue
Block a user