Restructure project layout to flatten directory structure
Move all projects from Source/ to repository root for simpler navigation. - Remove External/ dependency DLLs (will use NuGet packages) - Remove Installer/ NSIS script - Replace PartCollection/PlateCollection with ObservableList - Add packages.config for NuGet dependencies 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Forms;
|
||||
using OpenNest.Controls;
|
||||
|
||||
namespace OpenNest.Actions
|
||||
{
|
||||
[DisplayName("Clone Parts")]
|
||||
public class ActionClone : Action
|
||||
{
|
||||
private readonly List<LayoutPart> parts;
|
||||
|
||||
private double lastScale;
|
||||
|
||||
public ActionClone(PlateView plateView, List<Part> partsToClone)
|
||||
: base(plateView)
|
||||
{
|
||||
plateView.KeyDown += plateView_KeyDown;
|
||||
plateView.MouseMove += plateView_MouseMove;
|
||||
plateView.MouseDown += plateView_MouseDown;
|
||||
plateView.Paint += plateView_Paint;
|
||||
|
||||
parts = new List<LayoutPart>();
|
||||
lastScale = double.NaN;
|
||||
|
||||
for (int i = 0; i < partsToClone.Count; i++)
|
||||
{
|
||||
var part = LayoutPart.Create(partsToClone[i].Clone() as Part, plateView);
|
||||
part.IsSelected = true;
|
||||
parts.Add(part);
|
||||
}
|
||||
|
||||
plateView.SelectedParts.Clear();
|
||||
plateView.SelectedParts.AddRange(parts);
|
||||
}
|
||||
|
||||
private void plateView_MouseDown(object sender, MouseEventArgs e)
|
||||
{
|
||||
switch (e.Button)
|
||||
{
|
||||
case MouseButtons.Left:
|
||||
Apply();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void plateView_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
case Keys.F1:
|
||||
case Keys.Enter:
|
||||
Apply();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void plateView_Paint(object sender, PaintEventArgs e)
|
||||
{
|
||||
if (plateView.ViewScale != lastScale)
|
||||
{
|
||||
parts.ForEach(p =>
|
||||
{
|
||||
p.Update(plateView);
|
||||
p.Draw(e.Graphics);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
parts.ForEach(p =>
|
||||
{
|
||||
if (p.IsDirty)
|
||||
p.Update(plateView);
|
||||
|
||||
p.Draw(e.Graphics);
|
||||
});
|
||||
}
|
||||
|
||||
lastScale = plateView.ViewScale;
|
||||
}
|
||||
|
||||
private void plateView_MouseMove(object sender, MouseEventArgs e)
|
||||
{
|
||||
var offset = plateView.CurrentPoint - parts.GetBoundingBox().Location;
|
||||
parts.ForEach(p => p.Offset(offset));
|
||||
plateView.Invalidate();
|
||||
}
|
||||
|
||||
public override void DisconnectEvents()
|
||||
{
|
||||
plateView.KeyDown -= plateView_KeyDown;
|
||||
plateView.MouseMove -= plateView_MouseMove;
|
||||
plateView.MouseDown -= plateView_MouseDown;
|
||||
plateView.Paint -= plateView_Paint;
|
||||
|
||||
plateView.SelectedParts.Clear();
|
||||
plateView.Invalidate();
|
||||
}
|
||||
|
||||
public override void CancelAction()
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsBusy()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Apply()
|
||||
{
|
||||
if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
|
||||
{
|
||||
plateView.PushSelected(PushDirection.Left);
|
||||
plateView.PushSelected(PushDirection.Down);
|
||||
}
|
||||
|
||||
parts.ForEach(p => plateView.Plate.Parts.Add(p.BasePart.Clone() as Part));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user