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:
@@ -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;
|
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();
|
||||||
|
|||||||
Reference in New Issue
Block a user