Remove unnecessary System, System.Collections.Generic, System.IO, and System.Linq using directives that were flagged by IDE analyzers. Also includes minor whitespace and code style normalization. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
337 lines
9.1 KiB
C#
337 lines
9.1 KiB
C#
using PepLib.Codes;
|
|
|
|
namespace PepLib.IO
|
|
{
|
|
internal sealed class PlateReader
|
|
{
|
|
public Plate Plate { get; private set; }
|
|
|
|
public PlateReader()
|
|
{
|
|
Plate = new Plate();
|
|
Plate.Duplicates = 1;
|
|
}
|
|
|
|
public PlateReader(Plate plate)
|
|
{
|
|
Plate = plate;
|
|
}
|
|
|
|
public void Read(string name, Stream stream, Nest nest)
|
|
{
|
|
var pos = new Vector(0, 0);
|
|
var pgm = Program.Load(stream);
|
|
|
|
Plate.Name = name;
|
|
|
|
for (int i = 0; i < pgm.Count; i++)
|
|
{
|
|
var block = pgm[i];
|
|
|
|
switch (block.CodeType())
|
|
{
|
|
case CodeType.CircularMove:
|
|
{
|
|
var arc = (CircularMove)block;
|
|
pos = arc.EndPoint;
|
|
break;
|
|
}
|
|
|
|
case CodeType.LinearMove:
|
|
{
|
|
var line = (LinearMove)block;
|
|
pos = line.EndPoint;
|
|
break;
|
|
}
|
|
|
|
case CodeType.RapidMove:
|
|
{
|
|
var rapid = (RapidMove)block;
|
|
pos = rapid.EndPoint;
|
|
break;
|
|
}
|
|
|
|
case CodeType.Comment:
|
|
{
|
|
var comment = (Comment)block;
|
|
LoadInfo(comment.Value);
|
|
break;
|
|
}
|
|
|
|
case CodeType.SubProgramCall:
|
|
{
|
|
var subpgm = (SubProgramCall)block;
|
|
var loop = nest.GetLoop(subpgm.LoopId);
|
|
var part = Part.Create(loop, pos, AngleConverter.ToRadians(subpgm.Rotation));
|
|
|
|
var nextBlock = pgm[i + 1];
|
|
|
|
if (nextBlock.CodeType() == CodeType.Comment)
|
|
{
|
|
var comment = nextBlock as Comment;
|
|
|
|
if (comment.Value == "DISPLAY ONLY")
|
|
{
|
|
part.IsDisplayOnly = true;
|
|
i++;
|
|
}
|
|
}
|
|
|
|
Plate.Parts.Add(part);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void LoadInfo(string value)
|
|
{
|
|
if (value.StartsWith("POSTED FILES"))
|
|
ParsePostedFiles(value);
|
|
|
|
else if (value.StartsWith("HEAT LOT"))
|
|
ParseHeatLot(value);
|
|
|
|
else if (value.StartsWith("SPACING"))
|
|
ParseSpacing(value);
|
|
|
|
else if (value.StartsWith("CUT A TOTAL OF "))
|
|
ParseNumberOfDuplicates(value);
|
|
|
|
else if (value.StartsWith("EDGES,"))
|
|
ParseEdgeSpacing(value);
|
|
|
|
else if (value.StartsWith("PLATE SCALING"))
|
|
ParsePlateSize(value);
|
|
|
|
else if (value.StartsWith("MACHINE"))
|
|
ParseMachine(value);
|
|
|
|
else if (value.StartsWith("MATERIAL"))
|
|
ParseMaterial(value);
|
|
|
|
else if (value.StartsWith("GRADE"))
|
|
ParseGrade(value);
|
|
|
|
else if (value.StartsWith("DESCRIPTION"))
|
|
ParseDescription(value);
|
|
|
|
else if (value.StartsWith("PLATE THICKNESS"))
|
|
ParseThickness(value);
|
|
|
|
else if (value.StartsWith("DENSITY"))
|
|
ParseDensity(value);
|
|
|
|
else if (value.StartsWith("TORCHES"))
|
|
ParseTorchCount(value);
|
|
}
|
|
|
|
private void ParseNumberOfDuplicates(string data)
|
|
{
|
|
var parts = data.Split(' ');
|
|
|
|
if (parts.Length != 7)
|
|
return;
|
|
|
|
int dup;
|
|
int.TryParse(parts[4], out dup);
|
|
|
|
Plate.Duplicates = dup;
|
|
}
|
|
|
|
private void ParsePostedFiles(string data)
|
|
{
|
|
if (data.Length < 14)
|
|
return;
|
|
|
|
Plate.PostedFiles = data.Remove(0, 14).Trim();
|
|
}
|
|
|
|
private void ParseHeatLot(string data)
|
|
{
|
|
if (data.Length < 9)
|
|
return;
|
|
|
|
Plate.HeatLot = data.Remove(0, 9).Trim();
|
|
}
|
|
|
|
private void ParseSpacing(string data)
|
|
{
|
|
var parts = data.Split('=');
|
|
|
|
if (parts.Length != 2)
|
|
return;
|
|
|
|
double spacing;
|
|
double.TryParse(parts[1], out spacing);
|
|
|
|
Plate.PartSpacing = spacing;
|
|
}
|
|
|
|
private void ParseEdgeSpacing(string data)
|
|
{
|
|
var parts = data.Split(',');
|
|
|
|
if (parts.Length != 5)
|
|
return;
|
|
|
|
var leftSplit = parts[1].Split('=');
|
|
if (leftSplit.Length == 2)
|
|
{
|
|
double x;
|
|
double.TryParse(leftSplit[1], out x);
|
|
Plate.EdgeSpacing.Left = x;
|
|
}
|
|
|
|
var bottomSplit = parts[2].Split('=');
|
|
if (bottomSplit.Length == 2)
|
|
{
|
|
double x;
|
|
double.TryParse(bottomSplit[1], out x);
|
|
Plate.EdgeSpacing.Bottom = x;
|
|
}
|
|
|
|
var rightSplit = parts[3].Split('=');
|
|
if (rightSplit.Length == 2)
|
|
{
|
|
double x;
|
|
double.TryParse(rightSplit[1], out x);
|
|
Plate.EdgeSpacing.Right = x;
|
|
}
|
|
|
|
var topSplit = parts[4].Split('=');
|
|
if (topSplit.Length == 2)
|
|
{
|
|
double x;
|
|
double.TryParse(topSplit[1], out x);
|
|
Plate.EdgeSpacing.Top = x;
|
|
}
|
|
}
|
|
|
|
private void ParsePlateSize(string data)
|
|
{
|
|
var quadrantIndex = data.IndexOf("QUADRANT");
|
|
|
|
if (quadrantIndex != -1)
|
|
{
|
|
var plateData = data.Remove(quadrantIndex);
|
|
var plateDataSplit = plateData.Split('=');
|
|
if (plateDataSplit.Length == 2)
|
|
{
|
|
Size plateSize;
|
|
Size.TryParse(plateDataSplit[1], out plateSize);
|
|
Plate.Size = plateSize;
|
|
}
|
|
|
|
var quadrantData = data.Remove(0, quadrantIndex);
|
|
var quadrantDataSplit = quadrantData.Split('=');
|
|
if (quadrantDataSplit.Length == 2)
|
|
{
|
|
int quadrant;
|
|
int.TryParse(quadrantDataSplit[1], out quadrant);
|
|
Plate.Quadrant = quadrant;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var plateDataSplit = data.Split('=');
|
|
if (plateDataSplit.Length == 2)
|
|
{
|
|
Size plateSize;
|
|
Size.TryParse(plateDataSplit[1], out plateSize);
|
|
Plate.Size = plateSize;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ParseMachine(string data)
|
|
{
|
|
var parts = data.Split(',');
|
|
|
|
if (parts.Length != 2)
|
|
return;
|
|
|
|
var machineSplit = parts[0].Split('=');
|
|
if (machineSplit.Length == 2)
|
|
{
|
|
int num;
|
|
int.TryParse(machineSplit[1], out num);
|
|
Plate.Machine.Id = num;
|
|
}
|
|
|
|
Plate.Machine.Name = parts[1].Trim();
|
|
}
|
|
|
|
private void ParseMaterial(string data)
|
|
{
|
|
var parts = data.Split('=');
|
|
|
|
if (parts.Length != 2)
|
|
return;
|
|
|
|
int material;
|
|
int.TryParse(parts[1], out material);
|
|
|
|
Plate.Material.Id = material;
|
|
}
|
|
|
|
private void ParseGrade(string data)
|
|
{
|
|
var parts = data.Split('=');
|
|
|
|
if (parts.Length != 2)
|
|
return;
|
|
|
|
Plate.Material.Grade = parts[1].Trim();
|
|
}
|
|
|
|
private void ParseDescription(string data)
|
|
{
|
|
var parts = data.Split('=');
|
|
|
|
if (parts.Length != 2)
|
|
return;
|
|
|
|
Plate.Description = parts[1].Trim();
|
|
}
|
|
|
|
private void ParseThickness(string data)
|
|
{
|
|
var parts = data.Split('=');
|
|
|
|
if (parts.Length != 2)
|
|
return;
|
|
|
|
double thickness;
|
|
double.TryParse(parts[1], out thickness);
|
|
|
|
Plate.Thickness = thickness;
|
|
}
|
|
|
|
private void ParseDensity(string data)
|
|
{
|
|
var parts = data.Split('=');
|
|
|
|
if (parts.Length != 2)
|
|
return;
|
|
|
|
double density;
|
|
double.TryParse(parts[1], out density);
|
|
|
|
Plate.Material.Density = density;
|
|
}
|
|
|
|
private void ParseTorchCount(string data)
|
|
{
|
|
var parts = data.Split('=');
|
|
|
|
if (parts.Length != 2)
|
|
return;
|
|
|
|
int torchCount;
|
|
int.TryParse(parts[1], out torchCount);
|
|
|
|
Plate.TorchCount = torchCount;
|
|
}
|
|
}
|
|
} |