diff --git a/CincyLib/Laser/MaterialLib.cs b/CincyLib/Laser/MaterialLib.cs
index 25272dd..6e78fea 100644
--- a/CincyLib/Laser/MaterialLib.cs
+++ b/CincyLib/Laser/MaterialLib.cs
@@ -10,7 +10,7 @@ namespace CincyLib.Laser
RampedPierceSteps = new RampedPierceStep[MaxSteps];
}
- public string Name { get; set; }
+ public string Path { get; set; }
public string Machine { get; set; }
@@ -18,7 +18,7 @@ namespace CincyLib.Laser
public PierceType PierceType { get; set; }
- public float PierceDwell { get; set; }
+ public double PierceDwell { get; set; }
public int PiercePower { get; set; }
@@ -26,9 +26,9 @@ namespace CincyLib.Laser
public int PierceDutyCycle { get; set; }
- public float PierceZHoldDistance { get; set; }
+ public double PierceZHoldDistance { get; set; }
- public float PierceNozzleStandoffRampFrom { get; set; }
+ public double PierceNozzleStandoffRampFrom { get; set; }
//public float PierceNozzleStandoffRampTo { get; set; }
@@ -40,11 +40,11 @@ namespace CincyLib.Laser
public int RampedPierceStartPower { get; set; }
- public float RampedPierceCoolingTime { get; set; }
+ public double RampedPierceCoolingTime { get; set; }
public RampedPierceStep[] RampedPierceSteps;
- public float PierceTime()
+ public double PierceTime()
{
switch (PierceType)
{
@@ -73,9 +73,9 @@ namespace CincyLib.Laser
public int Feedrate { get; set; }
- //public float PreCutDwell { get; set; } // seconds
+ public double PreCutDwellSeconds { get; set; } // seconds
- public float KerfWidth { get; set; } // inches
+ public double KerfWidth { get; set; } // inches
//public float PowerBurstTime { get; set; } // seconds
@@ -85,12 +85,12 @@ namespace CincyLib.Laser
public bool UsePartCoolantOnCut { get; set; }
- public float NozzleStandoff1 { get; set; }
+ public double NozzleStandoff1 { get; set; }
///
/// Optional standoff (M45)
///
- public float NozzleStandoff2 { get; set; }
+ public double NozzleStandoff2 { get; set; }
public AssistGasType AssistGas { get; set; }
@@ -103,6 +103,12 @@ namespace CincyLib.Laser
#endregion
+ public double CutFocusNearField { get; set; }
+ public double CutFocusFarField { get; set; }
+
+ public double PierceFocusNearField { get; set; }
+ public double PierceFocusFarField { get; set; }
+
///
/// Dynamic power control feedrate.
///
@@ -122,7 +128,8 @@ namespace CincyLib.Laser
public static MaterialLib Load(string libfile)
{
var reader = new MaterialLibReader();
- return reader.Read(libfile) ? reader.MaterialLib : null;
+ reader.Read(libfile);
+ return reader.MaterialLib;
}
}
}
diff --git a/CincyLib/Laser/MaterialLibReader.cs b/CincyLib/Laser/MaterialLibReader.cs
index 548cabc..154966a 100644
--- a/CincyLib/Laser/MaterialLibReader.cs
+++ b/CincyLib/Laser/MaterialLibReader.cs
@@ -19,134 +19,120 @@ namespace CincyLib.Laser
MaterialLib = materiallib;
}
- public bool Read(string file)
+ public void Read(string file)
{
- Stream stream = null;
- MaterialLib.Name = Path.GetFileNameWithoutExtension(file);
-
- var success = false;
-
- try
+ using (var stream = File.OpenRead(file))
{
- stream = File.OpenRead(file);
- success = Read(stream);
+ MaterialLib.Path = file;
+ Read(stream);
}
- catch (SystemException ex)
- {
- Debug.WriteLine(ex.Message);
- }
- finally
- {
- if (stream != null)
- stream.Close();
- }
-
- return success;
}
- public bool Read(Stream stream)
+ public void Read(Stream stream)
{
- var success = false;
+ var reader = new BinaryReader(stream);
- try
+ MaterialLib.Machine = reader.ReadString();
+ MaterialLib.PierceDwell = reader.ReadSingle();
+
+ reader.BaseStream.Seek(2, SeekOrigin.Current); // Unknown 2 bytes
+ MaterialLib.PiercePower = reader.ReadInt16();
+ MaterialLib.PierceFrequency = reader.ReadInt16();
+ MaterialLib.PierceDutyCycle = reader.ReadInt16();
+
+ var pierceType = reader.ReadByte();
+
+ switch (pierceType)
{
- var reader = new BinaryReader(stream);
+ case 0:
+ MaterialLib.PierceType = PierceType.NoPierce;
+ break;
- MaterialLib.Machine = reader.ReadString();
- MaterialLib.PierceDwell = reader.ReadSingle();
-
- reader.BaseStream.Seek(2, SeekOrigin.Current);
- MaterialLib.PiercePower = reader.ReadInt16();
- MaterialLib.PierceFrequency = reader.ReadInt16();
- MaterialLib.PierceDutyCycle = reader.ReadInt16();
-
- if (reader.ReadInt16() == 1)
+ case 1:
MaterialLib.PierceType = PierceType.RampedPower;
-
- MaterialLib.PierceNozzleStandoffRampFrom = reader.ReadSingle();
-
- MaterialLib.RampedPierceCoolingTime = reader.ReadSingle();
- MaterialLib.UsePartCoolantOnPierce = Convert.ToBoolean(reader.ReadInt16());
-
- MaterialLib.PierceAssistGas = (AssistGasType)reader.ReadInt16();
- MaterialLib.PierceAssistGasPressure = reader.ReadInt16();
-
- reader.BaseStream.Seek(6, SeekOrigin.Current);
- MaterialLib.Power = reader.ReadInt16();
- MaterialLib.Frequency = reader.ReadInt16();
- MaterialLib.DutyCycle = reader.ReadInt16();
- MaterialLib.DynamicPowerControl = Convert.ToBoolean(reader.ReadInt16());
- MaterialLib.DPCFeedrate = reader.ReadInt16();
- MaterialLib.DPCMinPower = reader.ReadInt16();
-
- reader.BaseStream.Seek(4, SeekOrigin.Current);
- MaterialLib.NozzleStandoff1 = reader.ReadSingle();
- MaterialLib.KerfWidth = reader.ReadSingle();
-
- reader.BaseStream.Seek(2, SeekOrigin.Current);
- MaterialLib.AssistGas = (AssistGasType)reader.ReadInt16();
- MaterialLib.AssistGasPressure1 = reader.ReadInt16();
- MaterialLib.AssistGasPressure2 = reader.ReadInt16();
- MaterialLib.DynamicAssistGas = Convert.ToBoolean(reader.ReadInt16());
-
- reader.BaseStream.Seek(4, SeekOrigin.Current);
- var steps = reader.ReadInt16();
-
- reader.BaseStream.Seek(4, SeekOrigin.Current);
- MaterialLib.RampedPierceStartPower = reader.ReadInt16();
-
- MaterialLib.RampedPierceSteps = new RampedPierceStep[steps];
-
-
- for (int i = 0; i < steps; ++i)
- {
- MaterialLib.RampedPierceSteps[i] = new RampedPierceStep();
- MaterialLib.RampedPierceSteps[i].Time = reader.ReadSingle();
- MaterialLib.RampedPierceSteps[i].Power = reader.ReadInt16();
- }
-
- const int MAX_STEPS = 20;
-
- var remaining = MAX_STEPS - steps;
- reader.BaseStream.Seek(6 * remaining, SeekOrigin.Current);
-
- int length = reader.ReadByte();
-
- if (length == 0xFF)
- {
- var second = reader.ReadByte();
- var third = reader.ReadByte();
-
- length = length * third + second + third;
- }
- MaterialLib.Notes = Encoding.ASCII.GetString(reader.ReadBytes(length));
-
- reader.BaseStream.Seek(4, SeekOrigin.Current);
- MaterialLib.Feedrate = reader.ReadInt16();
-
- if (MaterialLib.PierceType != PierceType.RampedPower)
- {
- if (reader.BaseStream.Length < reader.BaseStream.Position + 527)
- {
- MaterialLib.PierceType = MaterialLib.PierceDwell == 0
- ? PierceType.NoPierce
- : PierceType.FixedDwellTime;
- }
- else
- {
- reader.BaseStream.Seek(527, SeekOrigin.Current);
- MaterialLib.PierceType = (PierceType)reader.ReadInt16();
- }
- }
-
- success = true;
+ break;
}
- catch (Exception ex)
+
+ reader.BaseStream.Seek(1, SeekOrigin.Current); // Unknown 1 byte
+
+ MaterialLib.PierceNozzleStandoffRampFrom = reader.ReadSingle();
+
+ MaterialLib.RampedPierceCoolingTime = reader.ReadSingle();
+ MaterialLib.UsePartCoolantOnPierce = Convert.ToBoolean(reader.ReadInt16());
+
+ MaterialLib.PierceAssistGas = (AssistGasType)reader.ReadInt16();
+ MaterialLib.PierceAssistGasPressure = reader.ReadInt16();
+ MaterialLib.PreCutDwellSeconds = Math.Round(reader.ReadSingle(), 4);
+
+ reader.BaseStream.Seek(2, SeekOrigin.Current); // Unknown 2 bytes
+ MaterialLib.Power = reader.ReadInt16();
+ MaterialLib.Frequency = reader.ReadInt16();
+ MaterialLib.DutyCycle = reader.ReadInt16();
+ MaterialLib.DynamicPowerControl = Convert.ToBoolean(reader.ReadInt16());
+ MaterialLib.DPCFeedrate = reader.ReadInt16();
+ MaterialLib.DPCMinPower = reader.ReadInt16();
+
+ reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes
+ MaterialLib.NozzleStandoff1 = reader.ReadSingle();
+ MaterialLib.KerfWidth = reader.ReadSingle();
+
+ reader.BaseStream.Seek(2, SeekOrigin.Current); // Unknown 2 bytes
+ MaterialLib.AssistGas = (AssistGasType)reader.ReadInt16();
+ MaterialLib.AssistGasPressure1 = reader.ReadInt16();
+ MaterialLib.AssistGasPressure2 = reader.ReadInt16();
+ MaterialLib.DynamicAssistGas = Convert.ToBoolean(reader.ReadInt16());
+
+ reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes
+ var steps = reader.ReadInt16();
+
+ reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes
+ MaterialLib.RampedPierceStartPower = reader.ReadInt16();
+
+ MaterialLib.RampedPierceSteps = new RampedPierceStep[steps];
+
+
+ for (int i = 0; i < steps; ++i)
{
- Debug.WriteLine(ex.Message);
+ MaterialLib.RampedPierceSteps[i] = new RampedPierceStep();
+ MaterialLib.RampedPierceSteps[i].Time = reader.ReadSingle();
+ MaterialLib.RampedPierceSteps[i].Power = reader.ReadInt16();
}
- return success;
+ const int MAX_STEPS = 20;
+
+ var remaining = MAX_STEPS - steps;
+ reader.BaseStream.Seek(6 * remaining, SeekOrigin.Current);
+
+ int length = reader.ReadByte();
+
+ if (length == 0xFF)
+ {
+ var second = reader.ReadByte();
+ var third = reader.ReadByte();
+
+ length = length * third + second + third;
+ }
+ MaterialLib.Notes = Encoding.ASCII.GetString(reader.ReadBytes(length));
+
+ reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes
+ MaterialLib.Feedrate = reader.ReadInt16();
+
+ reader.BaseStream.Seek(428, SeekOrigin.Current);
+ MaterialLib.CutFocusNearField = Math.Round(reader.ReadSingle(), 4);
+ MaterialLib.CutFocusFarField = Math.Round(reader.ReadSingle(), 4);
+ MaterialLib.PierceFocusNearField = Math.Round(reader.ReadSingle(), 4);
+ MaterialLib.PierceFocusFarField = Math.Round(reader.ReadSingle(), 4);
+
+ // older files wont go this far...
+ const int seek = 88;
+
+ var hasExtendedInfo = reader.BaseStream.Length > reader.BaseStream.Position + seek;
+ reader.BaseStream.Seek(seek, SeekOrigin.Current);
+
+ if (hasExtendedInfo)
+ {
+ MaterialLib.PierceType = (PierceType)reader.ReadByte();
+ }
}
}
}
diff --git a/CincyLib/PressBrake/ProgramReader.cs b/CincyLib/PressBrake/ProgramReader.cs
index 48145a0..2b2f66e 100644
--- a/CincyLib/PressBrake/ProgramReader.cs
+++ b/CincyLib/PressBrake/ProgramReader.cs
@@ -101,6 +101,7 @@ namespace CincyLib.PressBrake
step.LowerID = x.Attribute("LowerID").ToInt();
step.SpdChgDwn = x.Attribute("SpdChgDwn").ToDouble();
step.SpdChgUp = x.Attribute("SpdChgUp").ToDouble();
+ step.Tilt = x.Attribute("Tilt").ToDouble();
step.FormSpeed = x.Attribute("FormSpeed").ToDouble();
step.XLeft = x.Attribute("XLeft").ToDouble();
step.XRight = x.Attribute("XRight").ToDouble();
diff --git a/CincyLib/PressBrake/Step.cs b/CincyLib/PressBrake/Step.cs
index ee3ee64..639d18e 100644
--- a/CincyLib/PressBrake/Step.cs
+++ b/CincyLib/PressBrake/Step.cs
@@ -10,6 +10,7 @@
public double AngleAdj { get; set; }
public double BendLen { get; set; }
public double StrokeLen { get; set; }
+ public double Tilt { get; set; }
public int UpperID { get; set; }
public int LowerID { get; set; }
public double SpdChgDwn { get; set; }