feat(ui): add temporary parts list to PlateView with preview drawing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,7 @@ namespace OpenNest.Controls
|
|||||||
private Action currentAction;
|
private Action currentAction;
|
||||||
private Action previousAction;
|
private Action previousAction;
|
||||||
private List<LayoutPart> parts;
|
private List<LayoutPart> parts;
|
||||||
|
private List<LayoutPart> temporaryParts = new List<LayoutPart>();
|
||||||
private Point middleMouseDownPoint;
|
private Point middleMouseDownPoint;
|
||||||
|
|
||||||
public List<LayoutPart> SelectedParts;
|
public List<LayoutPart> SelectedParts;
|
||||||
@@ -120,6 +121,7 @@ namespace OpenNest.Controls
|
|||||||
plate.PartAdded -= plate_PartAdded;
|
plate.PartAdded -= plate_PartAdded;
|
||||||
plate.PartRemoved -= plate_PartRemoved;
|
plate.PartRemoved -= plate_PartRemoved;
|
||||||
parts.Clear();
|
parts.Clear();
|
||||||
|
temporaryParts.Clear();
|
||||||
SelectedParts.Clear();
|
SelectedParts.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,6 +378,7 @@ namespace OpenNest.Controls
|
|||||||
public override void Refresh()
|
public override void Refresh()
|
||||||
{
|
{
|
||||||
parts.ForEach(p => p.Update(this));
|
parts.ForEach(p => p.Update(this));
|
||||||
|
temporaryParts.ForEach(p => p.Update(this));
|
||||||
Invalidate();
|
Invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -470,6 +473,24 @@ namespace OpenNest.Controls
|
|||||||
part.Draw(g, (i + 1).ToString());
|
part.Draw(g, (i + 1).ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Draw temporary (preview) parts
|
||||||
|
for (var i = 0; i < temporaryParts.Count; i++)
|
||||||
|
{
|
||||||
|
var temp = temporaryParts[i];
|
||||||
|
|
||||||
|
if (temp.IsDirty)
|
||||||
|
temp.Update(this);
|
||||||
|
|
||||||
|
var path = temp.Path;
|
||||||
|
var pathBounds = path.GetBounds();
|
||||||
|
|
||||||
|
if (!pathBounds.IntersectsWith(viewBounds))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
g.FillPath(ColorScheme.PreviewPartBrush, path);
|
||||||
|
g.DrawPath(ColorScheme.PreviewPartPen, path);
|
||||||
|
}
|
||||||
|
|
||||||
if (DrawOffset && Plate.PartSpacing > 0)
|
if (DrawOffset && Plate.PartSpacing > 0)
|
||||||
DrawOffsetGeometry(g);
|
DrawOffsetGeometry(g);
|
||||||
|
|
||||||
@@ -783,6 +804,36 @@ namespace OpenNest.Controls
|
|||||||
Plate.Parts.Add(part);
|
Plate.Parts.Add(part);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetTemporaryParts(List<Part> parts)
|
||||||
|
{
|
||||||
|
temporaryParts.Clear();
|
||||||
|
|
||||||
|
if (parts != null)
|
||||||
|
{
|
||||||
|
foreach (var part in parts)
|
||||||
|
temporaryParts.Add(LayoutPart.Create(part, this));
|
||||||
|
}
|
||||||
|
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearTemporaryParts()
|
||||||
|
{
|
||||||
|
temporaryParts.Clear();
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int AcceptTemporaryParts()
|
||||||
|
{
|
||||||
|
var count = temporaryParts.Count;
|
||||||
|
|
||||||
|
foreach (var layoutPart in temporaryParts)
|
||||||
|
Plate.Parts.Add(layoutPart.BasePart);
|
||||||
|
|
||||||
|
temporaryParts.Clear();
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
public void RemoveSelectedParts()
|
public void RemoveSelectedParts()
|
||||||
{
|
{
|
||||||
foreach (var part in SelectedParts)
|
foreach (var part in SelectedParts)
|
||||||
|
|||||||
Reference in New Issue
Block a user