refactor(ui): drop duplicate plate preview from nesting progress dialog
The dialog rendered the same best-parts layout as transparent ghost parts already shown live on the main plate view, and its embedded view reset zoom on every improvement while lacking placed parts, work-area and cut-off context. The progress dialog is now a compact stats strip (266px wide) with the plate counter preserved for multi-plate runs. Removes the never-called SetStationaryParts stationary-preview path along with PreviewPlate/UpdatePreview/CreatePreviewPlate.
This commit is contained in:
@@ -10,13 +10,13 @@ using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using OpenNest.Actions;
|
||||
using OpenNest.Collections;
|
||||
using OpenNest.Engine;
|
||||
using OpenNest.Engine.Fill;
|
||||
using OpenNest.Engine.Jobs.Placement;
|
||||
using OpenNest.Forms;
|
||||
using OpenNest.Geometry;
|
||||
using OpenNest.Math;
|
||||
using Timer = System.Timers.Timer;
|
||||
using OpenNest.Engine;
|
||||
using OpenNest.Engine.Jobs.Placement;
|
||||
|
||||
namespace OpenNest.Controls
|
||||
{
|
||||
@@ -562,9 +562,6 @@ namespace OpenNest.Controls
|
||||
Plate.Parts.Add(part);
|
||||
}
|
||||
|
||||
public void SetStationaryParts(List<Part> parts) =>
|
||||
previewManager.SetStationaryParts(parts);
|
||||
|
||||
public void SetActiveParts(List<Part> parts) => previewManager.SetActiveParts(parts);
|
||||
|
||||
public void ClearPreviewParts() => previewManager.ClearPreviewParts();
|
||||
@@ -578,23 +575,12 @@ namespace OpenNest.Controls
|
||||
var cts = new CancellationTokenSource();
|
||||
var progressForm = new NestProgressForm(cts, showPlateRow: false);
|
||||
|
||||
var previewPlate = new Plate(Plate.Size)
|
||||
{
|
||||
Quadrant = Plate.Quadrant,
|
||||
PartSpacing = Plate.PartSpacing,
|
||||
};
|
||||
previewPlate.EdgeSpacing = Plate.EdgeSpacing;
|
||||
progressForm.PreviewPlate = previewPlate;
|
||||
|
||||
var progress = new Progress<NestProgress>(p =>
|
||||
{
|
||||
progressForm.UpdateProgress(p);
|
||||
|
||||
if (p.IsOverallBest)
|
||||
{
|
||||
progressForm.UpdatePreview(p.BestParts);
|
||||
SetActiveParts(p.BestParts);
|
||||
}
|
||||
|
||||
ActiveWorkArea = p.ActiveWorkArea;
|
||||
});
|
||||
|
||||
@@ -6,7 +6,6 @@ namespace OpenNest.Controls
|
||||
internal class PreviewManager
|
||||
{
|
||||
private readonly PlateView view;
|
||||
private readonly List<LayoutPart> stationaryParts = new List<LayoutPart>();
|
||||
private readonly List<LayoutPart> activeParts = new List<LayoutPart>();
|
||||
|
||||
public PreviewManager(PlateView view)
|
||||
@@ -14,32 +13,11 @@ namespace OpenNest.Controls
|
||||
this.view = view;
|
||||
}
|
||||
|
||||
public IReadOnlyList<LayoutPart> PreviewParts =>
|
||||
activeParts.Count > 0 ? activeParts : stationaryParts;
|
||||
public IReadOnlyList<LayoutPart> PreviewParts => activeParts;
|
||||
|
||||
public Brush PreviewBrush =>
|
||||
activeParts.Count > 0
|
||||
? view.ColorScheme.ActivePreviewPartBrush
|
||||
: view.ColorScheme.PreviewPartBrush;
|
||||
public Brush PreviewBrush => view.ColorScheme.ActivePreviewPartBrush;
|
||||
|
||||
public Pen PreviewPen =>
|
||||
activeParts.Count > 0
|
||||
? view.ColorScheme.ActivePreviewPartPen
|
||||
: view.ColorScheme.PreviewPartPen;
|
||||
|
||||
public void SetStationaryParts(List<Part> parts)
|
||||
{
|
||||
stationaryParts.Clear();
|
||||
activeParts.Clear();
|
||||
|
||||
if (parts != null)
|
||||
{
|
||||
foreach (var part in parts)
|
||||
stationaryParts.Add(LayoutPart.Create(part, view));
|
||||
}
|
||||
|
||||
view.Invalidate();
|
||||
}
|
||||
public Pen PreviewPen => view.ColorScheme.ActivePreviewPartPen;
|
||||
|
||||
public void SetActiveParts(List<Part> parts)
|
||||
{
|
||||
@@ -56,7 +34,6 @@ namespace OpenNest.Controls
|
||||
|
||||
public void ClearPreviewParts()
|
||||
{
|
||||
stationaryParts.Clear();
|
||||
activeParts.Clear();
|
||||
view.Invalidate();
|
||||
}
|
||||
@@ -69,19 +46,16 @@ namespace OpenNest.Controls
|
||||
view.Plate.Parts.Add(part);
|
||||
}
|
||||
|
||||
stationaryParts.Clear();
|
||||
activeParts.Clear();
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
stationaryParts.ForEach(p => p.Update(view));
|
||||
activeParts.ForEach(p => p.Update(view));
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
stationaryParts.Clear();
|
||||
activeParts.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,16 +10,16 @@ using System.Windows.Forms;
|
||||
using OpenNest.Actions;
|
||||
using OpenNest.Collections;
|
||||
using OpenNest.Data;
|
||||
using OpenNest.Engine;
|
||||
using OpenNest.Engine.BestFit;
|
||||
using OpenNest.Engine.Fill;
|
||||
using OpenNest.Engine.Jobs;
|
||||
using OpenNest.Engine.Jobs.Adapters;
|
||||
using OpenNest.Engine.Jobs.Placement;
|
||||
using OpenNest.Geometry;
|
||||
using OpenNest.Gpu;
|
||||
using OpenNest.IO;
|
||||
using OpenNest.Properties;
|
||||
using OpenNest.Engine;
|
||||
using OpenNest.Engine.Jobs;
|
||||
using OpenNest.Engine.Jobs.Adapters;
|
||||
using OpenNest.Engine.Jobs.Placement;
|
||||
|
||||
namespace OpenNest.Forms
|
||||
{
|
||||
@@ -1040,7 +1040,6 @@ namespace OpenNest.Forms
|
||||
|
||||
nestingCts = new CancellationTokenSource();
|
||||
var progressForm = new NestProgressForm(nestingCts, showPlateRow: true);
|
||||
progressForm.PreviewPlate = CreatePreviewPlate(activeForm.PlateView.Plate);
|
||||
|
||||
var jobEngineName = EngineSelection.IsFillStrategy(EngineSelection.EngineName)
|
||||
? null
|
||||
@@ -1052,9 +1051,7 @@ namespace OpenNest.Forms
|
||||
progressForm.UpdateProgress(p);
|
||||
|
||||
if (p.IsOverallBest)
|
||||
progressForm.UpdatePreview(p.BestParts);
|
||||
|
||||
activeForm.PlateView.SetActiveParts(p.BestParts);
|
||||
activeForm.PlateView.SetActiveParts(p.BestParts);
|
||||
activeForm.PlateView.ActiveWorkArea = p.ActiveWorkArea;
|
||||
});
|
||||
|
||||
@@ -1152,7 +1149,7 @@ namespace OpenNest.Forms
|
||||
{
|
||||
if (pr.IsNew)
|
||||
{
|
||||
var plate = GetOrCreatePlate(progressForm);
|
||||
var plate = GetOrCreatePlate();
|
||||
plate.Size = pr.Plate.Size;
|
||||
plate.Parts.AddRange(pr.Parts);
|
||||
}
|
||||
@@ -1172,7 +1169,7 @@ namespace OpenNest.Forms
|
||||
if (remaining.Count == 0 || token.IsCancellationRequested)
|
||||
break;
|
||||
|
||||
var plate = GetOrCreatePlate(progressForm);
|
||||
var plate = GetOrCreatePlate();
|
||||
|
||||
var placed = await NestSinglePlateAsync(
|
||||
plate,
|
||||
@@ -1242,7 +1239,7 @@ namespace OpenNest.Forms
|
||||
if (parts.Count == 0)
|
||||
continue;
|
||||
|
||||
var plate = GetOrCreatePlate(progressForm);
|
||||
var plate = GetOrCreatePlate();
|
||||
plate.Size = sheet.Stock.Size;
|
||||
plate.Parts.AddRange(parts);
|
||||
}
|
||||
@@ -1260,11 +1257,10 @@ namespace OpenNest.Forms
|
||||
);
|
||||
}
|
||||
|
||||
private Plate GetOrCreatePlate(NestProgressForm progressForm)
|
||||
private Plate GetOrCreatePlate()
|
||||
{
|
||||
var plate = activeForm.PlateManager.GetOrCreateEmpty();
|
||||
activeForm.PlateManager.LoadLast();
|
||||
progressForm.PreviewPlate = CreatePreviewPlate(plate);
|
||||
return plate;
|
||||
}
|
||||
|
||||
@@ -1340,17 +1336,6 @@ namespace OpenNest.Forms
|
||||
return true;
|
||||
}
|
||||
|
||||
private static Plate CreatePreviewPlate(Plate source)
|
||||
{
|
||||
var plate = new Plate(source.Size)
|
||||
{
|
||||
Quadrant = source.Quadrant,
|
||||
PartSpacing = source.PartSpacing,
|
||||
};
|
||||
plate.EdgeSpacing = source.EdgeSpacing;
|
||||
return plate;
|
||||
}
|
||||
|
||||
private void SequenceAllPlates_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (activeForm == null)
|
||||
|
||||
+3
-88
@@ -17,11 +17,6 @@ namespace OpenNest.Forms
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
ColorScheme colorScheme1 = new ColorScheme();
|
||||
CutOffSettings cutOffSettings1 = new CutOffSettings();
|
||||
Plate plate1 = new Plate();
|
||||
Collections.ObservableList<CutOff> observableList_11 = new Collections.ObservableList<CutOff>();
|
||||
Collections.ObservableList<Part> observableList_12 = new Collections.ObservableList<Part>();
|
||||
phaseStepper = new OpenNest.Controls.PhaseStepperControl();
|
||||
resultsPanel = new System.Windows.Forms.Panel();
|
||||
resultsTable = new System.Windows.Forms.TableLayoutPanel();
|
||||
@@ -46,8 +41,6 @@ namespace OpenNest.Forms
|
||||
buttonPanel = new System.Windows.Forms.FlowLayoutPanel();
|
||||
stopButton = new System.Windows.Forms.Button();
|
||||
acceptButton = new System.Windows.Forms.Button();
|
||||
splitContainer = new System.Windows.Forms.SplitContainer();
|
||||
previewPlateView = new OpenNest.Controls.PlateView();
|
||||
statsPanel = new System.Windows.Forms.Panel();
|
||||
resultsPanel.SuspendLayout();
|
||||
resultsTable.SuspendLayout();
|
||||
@@ -55,10 +48,6 @@ namespace OpenNest.Forms
|
||||
statusPanel.SuspendLayout();
|
||||
statusTable.SuspendLayout();
|
||||
buttonPanel.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)splitContainer).BeginInit();
|
||||
splitContainer.Panel1.SuspendLayout();
|
||||
splitContainer.Panel2.SuspendLayout();
|
||||
splitContainer.SuspendLayout();
|
||||
statsPanel.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
@@ -365,74 +354,6 @@ namespace OpenNest.Forms
|
||||
acceptButton.UseVisualStyleBackColor = true;
|
||||
acceptButton.Click += AcceptButton_Click;
|
||||
//
|
||||
// splitContainer
|
||||
//
|
||||
splitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;
|
||||
splitContainer.Location = new System.Drawing.Point(0, 0);
|
||||
splitContainer.Name = "splitContainer";
|
||||
//
|
||||
// splitContainer.Panel1
|
||||
//
|
||||
splitContainer.Panel1.Controls.Add(previewPlateView);
|
||||
//
|
||||
// splitContainer.Panel2
|
||||
//
|
||||
splitContainer.Panel2.Controls.Add(statsPanel);
|
||||
splitContainer.Size = new System.Drawing.Size(626, 341);
|
||||
splitContainer.SplitterDistance = 356;
|
||||
splitContainer.TabIndex = 0;
|
||||
//
|
||||
// previewPlateView
|
||||
//
|
||||
previewPlateView.ActiveWorkArea = null;
|
||||
previewPlateView.AllowPan = true;
|
||||
previewPlateView.AllowSelect = true;
|
||||
previewPlateView.AllowZoom = true;
|
||||
previewPlateView.BackColor = System.Drawing.Color.DarkGray;
|
||||
colorScheme1.BackgroundColor = System.Drawing.Color.DarkGray;
|
||||
colorScheme1.BoundingBoxColor = System.Drawing.Color.FromArgb(128, 128, 255);
|
||||
colorScheme1.EdgeSpacingColor = System.Drawing.Color.FromArgb(180, 180, 180);
|
||||
colorScheme1.LayoutFillColor = System.Drawing.Color.WhiteSmoke;
|
||||
colorScheme1.LayoutOutlineColor = System.Drawing.Color.Gray;
|
||||
colorScheme1.OriginColor = System.Drawing.Color.Gray;
|
||||
colorScheme1.PreviewPartColor = System.Drawing.Color.FromArgb(255, 140, 0);
|
||||
colorScheme1.RapidColor = System.Drawing.Color.DodgerBlue;
|
||||
previewPlateView.ColorScheme = colorScheme1;
|
||||
cutOffSettings1.CutDirection = CutDirection.AwayFromOrigin;
|
||||
cutOffSettings1.MinSegmentLength = 0.05D;
|
||||
cutOffSettings1.Overtravel = 0D;
|
||||
cutOffSettings1.PartClearance = 0.02D;
|
||||
previewPlateView.CutOffSettings = cutOffSettings1;
|
||||
previewPlateView.DebugRemnantPriorities = null;
|
||||
previewPlateView.DebugRemnants = null;
|
||||
previewPlateView.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
previewPlateView.DrawBounds = true;
|
||||
previewPlateView.DrawCutDirection = false;
|
||||
previewPlateView.DrawOffset = false;
|
||||
previewPlateView.DrawOrigin = true;
|
||||
previewPlateView.DrawPiercePoints = false;
|
||||
previewPlateView.DrawRapid = false;
|
||||
previewPlateView.FillParts = true;
|
||||
previewPlateView.Location = new System.Drawing.Point(0, 0);
|
||||
previewPlateView.Name = "previewPlateView";
|
||||
previewPlateView.OffsetIncrementDistance = 10D;
|
||||
previewPlateView.OffsetTolerance = 0.001D;
|
||||
plate1.CutOffs = observableList_11;
|
||||
plate1.CuttingParameters = null;
|
||||
plate1.GrainAngle = 0D;
|
||||
plate1.Parts = observableList_12;
|
||||
plate1.PartSpacing = 0D;
|
||||
plate1.Quadrant = 1;
|
||||
plate1.Quantity = 0;
|
||||
previewPlateView.Plate = plate1;
|
||||
previewPlateView.RotateIncrementAngle = 10D;
|
||||
|
||||
previewPlateView.ShowBendLines = false;
|
||||
previewPlateView.Size = new System.Drawing.Size(356, 341);
|
||||
previewPlateView.Status = "Select";
|
||||
previewPlateView.TabIndex = 0;
|
||||
//
|
||||
// statsPanel
|
||||
//
|
||||
statsPanel.AutoScroll = true;
|
||||
@@ -450,12 +371,12 @@ namespace OpenNest.Forms
|
||||
//
|
||||
AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
ClientSize = new System.Drawing.Size(626, 341);
|
||||
Controls.Add(splitContainer);
|
||||
ClientSize = new System.Drawing.Size(266, 341);
|
||||
Controls.Add(statsPanel);
|
||||
FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
|
||||
MaximizeBox = false;
|
||||
MinimizeBox = false;
|
||||
MinimumSize = new System.Drawing.Size(550, 380);
|
||||
MinimumSize = new System.Drawing.Size(320, 380);
|
||||
Name = "NestProgressForm";
|
||||
ShowInTaskbar = false;
|
||||
StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
@@ -471,10 +392,6 @@ namespace OpenNest.Forms
|
||||
statusTable.ResumeLayout(false);
|
||||
statusTable.PerformLayout();
|
||||
buttonPanel.ResumeLayout(false);
|
||||
splitContainer.Panel1.ResumeLayout(false);
|
||||
splitContainer.Panel2.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)splitContainer).EndInit();
|
||||
splitContainer.ResumeLayout(false);
|
||||
statsPanel.ResumeLayout(false);
|
||||
statsPanel.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
@@ -506,8 +423,6 @@ namespace OpenNest.Forms
|
||||
private System.Windows.Forms.FlowLayoutPanel buttonPanel;
|
||||
private System.Windows.Forms.Button acceptButton;
|
||||
private System.Windows.Forms.Button stopButton;
|
||||
private System.Windows.Forms.SplitContainer splitContainer;
|
||||
private System.Windows.Forms.Panel statsPanel;
|
||||
private Controls.PlateView previewPlateView;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,23 +38,11 @@ namespace OpenNest.Forms
|
||||
set => acceptButton.Visible = value;
|
||||
}
|
||||
|
||||
public Plate PreviewPlate
|
||||
{
|
||||
get => previewPlateView.Plate;
|
||||
set
|
||||
{
|
||||
previewPlateView.Plate = value;
|
||||
previewPlateView.ZoomToFit();
|
||||
}
|
||||
}
|
||||
|
||||
public NestProgressForm(CancellationTokenSource cts, bool showPlateRow = true)
|
||||
{
|
||||
this.cts = cts;
|
||||
InitializeComponent();
|
||||
|
||||
previewPlateView.AllowSelect = false;
|
||||
|
||||
if (!showPlateRow)
|
||||
{
|
||||
plateLabel.Visible = false;
|
||||
@@ -104,20 +92,6 @@ namespace OpenNest.Forms
|
||||
: progress.Phase.DisplayName();
|
||||
}
|
||||
|
||||
public void UpdatePreview(List<Part> bestParts)
|
||||
{
|
||||
if (IsDisposed || !IsHandleCreated)
|
||||
return;
|
||||
|
||||
var plate = previewPlateView.Plate;
|
||||
plate.Parts.Clear();
|
||||
|
||||
foreach (var part in bestParts)
|
||||
plate.Parts.Add((Part)part.Clone());
|
||||
|
||||
previewPlateView.ZoomToFit();
|
||||
}
|
||||
|
||||
public void ShowCompleted()
|
||||
{
|
||||
if (IsDisposed || !IsHandleCreated)
|
||||
@@ -178,8 +152,6 @@ namespace OpenNest.Forms
|
||||
if (!cts.IsCancellationRequested)
|
||||
cts.Cancel();
|
||||
|
||||
previewPlateView.Dispose();
|
||||
|
||||
base.OnFormClosing(e);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user