diff --git a/OpenNest/Controls/DrawingListBox.cs b/OpenNest/Controls/DrawingListBox.cs
index 2f5bdf63..1c8834dd 100644
--- a/OpenNest/Controls/DrawingListBox.cs
+++ b/OpenNest/Controls/DrawingListBox.cs
@@ -36,6 +36,13 @@ namespace OpenNest.Controls
SaveToLibraryRequested?.Invoke(this, drawing);
};
var saveToLibrarySeparator = new ToolStripSeparator();
+ var openInConverterItem = new ToolStripMenuItem("Open in CAD Converter...");
+ openInConverterItem.Click += (s, e) =>
+ {
+ if (SelectedItem is Drawing drawing)
+ OpenInConverterRequested?.Invoke(this, drawing);
+ };
+ var openInConverterSeparator = new ToolStripSeparator();
menu.ShowItemToolTips = true;
menu.Opening += (s, e) =>
{
@@ -49,9 +56,12 @@ namespace OpenNest.Controls
saveToLibraryItem.Visible = saveToLibrarySeparator.Visible = SaveToLibraryRequested != null;
saveToLibraryItem.Enabled = SaveToLibraryUnavailableReason == null;
saveToLibraryItem.ToolTipText = SaveToLibraryUnavailableReason ?? "";
+ openInConverterItem.Visible = openInConverterSeparator.Visible = OpenInConverterRequested != null;
};
menu.Items.Add(saveToLibraryItem);
menu.Items.Add(saveToLibrarySeparator);
+ menu.Items.Add(openInConverterItem);
+ menu.Items.Add(openInConverterSeparator);
menu.Items.Add(deleteItem);
ContextMenuStrip = menu;
}
@@ -64,6 +74,9 @@ namespace OpenNest.Controls
/// Why Save to Drawing Library is disabled, shown as its tooltip; null enables it.
public string SaveToLibraryUnavailableReason { get; set; }
+ /// Raised when Open in CAD Converter is chosen for the selected drawing.
+ public event EventHandler OpenInConverterRequested;
+
///
/// Raised when the left button is pressed on a drawing's row.
///
diff --git a/OpenNest/Forms/EditNestForm.cs b/OpenNest/Forms/EditNestForm.cs
index e372ac5d..d22084a0 100644
--- a/OpenNest/Forms/EditNestForm.cs
+++ b/OpenNest/Forms/EditNestForm.cs
@@ -440,6 +440,7 @@ namespace OpenNest.Forms
drawingListBox1.Units = Nest.Units;
drawingListBox1.DeleteRequested += drawingListBox1_DeleteRequested;
drawingListBox1.SaveToLibraryRequested += drawingListBox1_SaveToLibraryRequested;
+ drawingListBox1.OpenInConverterRequested += drawingListBox1_OpenInConverterRequested;
drawingListBox1.DrawingPickedUp += drawingListBox1_DrawingPickedUp;
drawingListBox1.DrawingDropped += drawingListBox1_DrawingDropped;
Activated += (_, _) => UpdateDrawingLibraryCommand();
@@ -1285,15 +1286,27 @@ namespace OpenNest.Forms
if (Nest.Drawings.Count == 0)
return;
+ EditDrawingsInConverter(Nest.Drawings);
+ }
+
+ private void drawingListBox1_OpenInConverterRequested(object sender, Drawing drawing)
+ {
+ EditDrawingsInConverter(new[] { drawing });
+ }
+
+ private void EditDrawingsInConverter(IEnumerable drawings)
+ {
+ var editedDrawings = drawings.ToList();
+
// Capture before loading the editor: its conversion can mutate programs in place.
var snapshot = DrawingProgramSnapshot.Capture(
- Nest.Drawings,
+ editedDrawings,
program => NestWriter.GetProgramText(program) + "\0" + NestWriter.GetSubProgramsText(program)
);
var converter = new CadConverterForm();
// LoadDrawings can edit live programs even when the dialog is canceled.
PlateView.InvalidateOverlapCheck();
- converter.LoadDrawings(Nest.Drawings);
+ converter.LoadDrawings(editedDrawings);
if (converter.ShowDialog() != DialogResult.OK)
return;
@@ -1302,7 +1315,7 @@ namespace OpenNest.Forms
var newByName = newDrawings.ToDictionary(d => d.Name);
// Update existing drawings in-place so parts keep their BaseDrawing references
- foreach (var existing in Nest.Drawings.ToList())
+ foreach (var existing in editedDrawings)
{
if (newByName.TryGetValue(existing.Name, out var updated))
{