From a1139efecbdb10ec45dd855b2b783f1de5c4139c Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Wed, 18 Mar 2026 09:58:24 -0400 Subject: [PATCH] feat(ui): wire Pattern Tile menu item and apply logic in MainForm --- OpenNest/Forms/MainForm.Designer.cs | 15 ++++++++-- OpenNest/Forms/MainForm.cs | 43 +++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/OpenNest/Forms/MainForm.Designer.cs b/OpenNest/Forms/MainForm.Designer.cs index 0070065..3238757 100644 --- a/OpenNest/Forms/MainForm.Designer.cs +++ b/OpenNest/Forms/MainForm.Designer.cs @@ -61,6 +61,7 @@ mnuTools = new System.Windows.Forms.ToolStripMenuItem(); mnuToolsMeasureArea = new System.Windows.Forms.ToolStripMenuItem(); mnuToolsBestFitViewer = new System.Windows.Forms.ToolStripMenuItem(); + mnuToolsPatternTile = new System.Windows.Forms.ToolStripMenuItem(); mnuToolsAlign = new System.Windows.Forms.ToolStripMenuItem(); mnuToolsAlignLeft = new System.Windows.Forms.ToolStripMenuItem(); mnuToolsAlignRight = new System.Windows.Forms.ToolStripMenuItem(); @@ -380,7 +381,7 @@ // // mnuTools // - mnuTools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { mnuToolsMeasureArea, mnuToolsBestFitViewer, mnuToolsAlign, toolStripMenuItem14, mnuSetOffsetIncrement, mnuSetRotationIncrement, toolStripMenuItem15, mnuToolsOptions }); + mnuTools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { mnuToolsMeasureArea, mnuToolsBestFitViewer, mnuToolsPatternTile, mnuToolsAlign, toolStripMenuItem14, mnuSetOffsetIncrement, mnuSetRotationIncrement, toolStripMenuItem15, mnuToolsOptions }); mnuTools.Name = "mnuTools"; mnuTools.Size = new System.Drawing.Size(47, 20); mnuTools.Text = "&Tools"; @@ -398,9 +399,16 @@ mnuToolsBestFitViewer.Size = new System.Drawing.Size(214, 22); mnuToolsBestFitViewer.Text = "Best-Fit Viewer"; mnuToolsBestFitViewer.Click += BestFitViewer_Click; - // + // + // mnuToolsPatternTile + // + this.mnuToolsPatternTile.Name = "mnuToolsPatternTile"; + this.mnuToolsPatternTile.Size = new System.Drawing.Size(214, 22); + this.mnuToolsPatternTile.Text = "Pattern Tile"; + this.mnuToolsPatternTile.Click += PatternTile_Click; + // // mnuToolsAlign - // + // mnuToolsAlign.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { mnuToolsAlignLeft, mnuToolsAlignRight, mnuToolsAlignTop, mnuToolsAlignBottom, toolStripMenuItem11, mnuToolsAlignHorizontal, mnuToolsAlignVertically, toolStripMenuItem8, mnuToolsEvenlySpaceHorizontal, mnuToolsEvenlySpaceVertical }); mnuToolsAlign.Name = "mnuToolsAlign"; mnuToolsAlign.Size = new System.Drawing.Size(214, 22); @@ -1169,6 +1177,7 @@ private System.Windows.Forms.ToolStripMenuItem autoSequenceAllPlatesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem mnuToolsMeasureArea; private System.Windows.Forms.ToolStripMenuItem mnuToolsBestFitViewer; + private System.Windows.Forms.ToolStripMenuItem mnuToolsPatternTile; private System.Windows.Forms.ToolStripButton btnSaveAs; private System.Windows.Forms.ToolStripMenuItem centerPartsToolStripMenuItem; private System.Windows.Forms.ToolStripStatusLabel gpuStatusLabel; diff --git a/OpenNest/Forms/MainForm.cs b/OpenNest/Forms/MainForm.cs index fa2f936..1086763 100644 --- a/OpenNest/Forms/MainForm.cs +++ b/OpenNest/Forms/MainForm.cs @@ -596,6 +596,49 @@ namespace OpenNest.Forms } } + private void PatternTile_Click(object sender, EventArgs e) + { + if (activeForm == null) + return; + + if (activeForm.Nest.Drawings.Count == 0) + { + MessageBox.Show("No drawings available.", "Pattern Tile", + MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + + using (var form = new PatternTileForm(activeForm.Nest)) + { + if (form.ShowDialog(this) != DialogResult.OK || form.Result == null) + return; + + var result = form.Result; + + if (result.Target == PatternTileTarget.CurrentPlate) + { + activeForm.PlateView.Plate.Parts.Clear(); + + foreach (var part in result.Parts) + activeForm.PlateView.Plate.Parts.Add(part); + + activeForm.PlateView.ZoomToFit(); + } + else + { + var plate = activeForm.Nest.CreatePlate(); + plate.Size = result.PlateSize; + + foreach (var part in result.Parts) + plate.Parts.Add(part); + + activeForm.LoadLastPlate(); + } + + activeForm.Nest.UpdateDrawingQuantities(); + } + } + private void SetOffsetIncrement_Click(object sender, EventArgs e) { if (activeForm == null) return;