BinFileSaver

This commit is contained in:
AJ
2024-12-09 11:15:08 -05:00
parent 791eb23fc0
commit 90ae89802a
3 changed files with 78 additions and 46 deletions

View File

@@ -86,6 +86,7 @@
<Compile Include="Controls\BinLayoutView.cs"> <Compile Include="Controls\BinLayoutView.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>
<Compile Include="Forms\BinFileSaver.cs" />
<Compile Include="Forms\DataGridViewExtensions.cs" /> <Compile Include="Forms\DataGridViewExtensions.cs" />
<Compile Include="Forms\MainForm.cs"> <Compile Include="Forms\MainForm.cs">
<SubType>Form</SubType> <SubType>Form</SubType>

View File

@@ -0,0 +1,63 @@
using SawCut;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
namespace CutList.Forms
{
public class BinFileSaver
{
private IEnumerable<Bin> _bins;
public BinFileSaver(IEnumerable<Bin> bins)
{
_bins = bins ?? throw new ArgumentNullException(nameof(bins));
}
public void SaveBinsToFile(string file)
{
using (var writer = new StreamWriter(file))
{
writer.AutoFlush = true;
var max = _bins.Max(b => b.Items.Max(i => SawCut.Helper.ConvertToMixedFraction(i.Length).Length));
var id = 1;
foreach (var bin in _bins)
{
WriteBinSummary(writer, bin, id++, max);
}
}
Process.Start(file);
}
private void WriteBinSummary(StreamWriter writer, Bin bin, int id, int max)
{
var totalLength = SawCut.Helper.ConvertToMixedFraction(bin.Length);
var remainingLength = SawCut.Helper.ConvertToMixedFraction(bin.RemainingLength);
var utilization = Math.Round(bin.Utilization * 100, 2);
writer.WriteLine($"{id}. Length: {totalLength}, {remainingLength} remaining, {bin.Items.Count} items, {utilization}% utilization");
WriteBinItems(writer, bin, max);
writer.WriteLine("---------------------------------------------------------------------");
}
private void WriteBinItems(StreamWriter writer, Bin bin, int max)
{
var groups = bin.Items.GroupBy(i => $"{i.Name} {i.Length}");
foreach (var group in groups)
{
var first = group.First();
var count = group.Count();
var length = SawCut.Helper.ConvertToMixedFraction(first.Length).PadLeft(max);
var name = first.Name;
var pcsSingularOrPlural = count == 1 ? "pc " : "pcs";
writer.WriteLine($" {count}{pcsSingularOrPlural} @ {length} LG Tag: {name}");
}
}
}
}

View File

@@ -11,6 +11,7 @@ namespace CutList.Forms
public partial class ResultsForm : Form public partial class ResultsForm : Form
{ {
private string filename; private string filename;
public ResultsForm(string filename) public ResultsForm(string filename)
{ {
InitializeComponent(); InitializeComponent();
@@ -40,58 +41,25 @@ namespace CutList.Forms
} }
private void saveToolStripMenuItem_Click(object sender, EventArgs e) private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
Save();
}
public void Save(string filepath)
{
var writer = new BinFileSaver(Bins);
writer.SaveBinsToFile(filepath);
}
public void Save()
{ {
var s = new SaveFileDialog(); var s = new SaveFileDialog();
s.FileName = filename; s.FileName = filename;
s.Filter = "Text File|*.txt"; s.Filter = "Text File|*.txt";
if (s.ShowDialog() != DialogResult.OK) if (s.ShowDialog() == DialogResult.OK)
{ Save(s.FileName);
return;
}
SaveBins(s.FileName);
}
private void SaveBins(string file)
{
var writer = new StreamWriter(file);
writer.AutoFlush = true;
var max = Bins.Max(b => b.Items.Max(i => SawCut.Helper.ConvertToMixedFraction(i.Length).Length));
var id = 1;
foreach (var bin in Bins)
{
var totalLength = SawCut.Helper.ConvertToMixedFraction(bin.Length);
var remainingLength = SawCut.Helper.ConvertToMixedFraction(bin.RemainingLength);
var utilitation = Math.Round(bin.Utilization * 100, 2);
var binDescription = $"{id++}. Length: {{totalLength}}, {remainingLength} remaining, {bin.Items.Count} items, {utilitation}% utilization";
writer.WriteLine(binDescription);
var groups = bin.Items.GroupBy(i => $"{i.Name} {i.Length}");
foreach (var group in groups)
{
var first = group.First();
var count = group.Count();
var length = SawCut.Helper.ConvertToMixedFraction(first.Length).PadLeft(max);
var name = first.Name;
var pcsSingularOrPlural = count == 1 ? "pc " : "pcs";
writer.WriteLine($" {count}{pcsSingularOrPlural} @ {length} LG Tag: {name}");
}
writer.WriteLine("---------------------------------------------------------------------");
//writer.WriteLine();
}
writer.Close();
Process.Start(file);
} }
} }
} }