Fixed EndOfStreamException thrown when trying to read LensType in older files.

This commit is contained in:
AJ
2019-03-11 09:10:42 -04:00
parent 056cb1fc8a
commit 9092c3385a

View File

@@ -112,6 +112,7 @@ namespace CincyLib.Laser
length = length * third + second + third; length = length * third + second + third;
} }
MaterialLib.Notes = Encoding.ASCII.GetString(reader.ReadBytes(length)); MaterialLib.Notes = Encoding.ASCII.GetString(reader.ReadBytes(length));
reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes reader.BaseStream.Seek(4, SeekOrigin.Current); // Unknown 4 bytes
@@ -124,44 +125,48 @@ namespace CincyLib.Laser
MaterialLib.PierceFocusNearField = Math.Round(reader.ReadSingle(), 4); MaterialLib.PierceFocusNearField = Math.Round(reader.ReadSingle(), 4);
MaterialLib.PierceFocusFarField = Math.Round(reader.ReadSingle(), 4); MaterialLib.PierceFocusFarField = Math.Round(reader.ReadSingle(), 4);
// older files wont go this far... long p;
const int seek = 18;
var hasExtendedInfo = reader.BaseStream.Length > reader.BaseStream.Position + seek; p = reader.BaseStream.Position + 18;
if (hasExtendedInfo) if (p >= reader.BaseStream.Length)
return;
reader.BaseStream.Seek(p, SeekOrigin.Begin);
MaterialLib.PierceNozzleStandoffRampTo = Math.Round(reader.ReadSingle(), 4);
p = reader.BaseStream.Position + 54;
if (p >= reader.BaseStream.Length)
return;
reader.BaseStream.Seek(p, SeekOrigin.Begin);
var lensType = reader.ReadByte();
switch (lensType)
{ {
reader.BaseStream.Seek(seek, SeekOrigin.Current); case 0:
MaterialLib.PierceNozzleStandoffRampTo = Math.Round(reader.ReadSingle(), 4); MaterialLib.Lens = "5\"";
break;
reader.BaseStream.Seek(54, SeekOrigin.Current); case 1:
var lensType = reader.ReadByte(); MaterialLib.Lens = "7.5\"";
break;
switch (lensType) case 2:
{ MaterialLib.Lens = "10\"";
case 0: break;
MaterialLib.Lens = "5\"";
break;
case 1: case 3:
MaterialLib.Lens = "7.5\""; MaterialLib.Lens = "Any";
break; break;
case 2:
MaterialLib.Lens = "10\"";
break;
case 3:
MaterialLib.Lens = "Any";
break;
}
reader.BaseStream.Seek(1, SeekOrigin.Current);
MaterialLib.Nozzle = reader.ReadString();
reader.BaseStream.Seek(4, SeekOrigin.Current);
MaterialLib.PierceType = (PierceType)reader.ReadByte();
} }
reader.BaseStream.Seek(1, SeekOrigin.Current);
MaterialLib.Nozzle = reader.ReadString();
reader.BaseStream.Seek(4, SeekOrigin.Current);
MaterialLib.PierceType = (PierceType)reader.ReadByte();
} }
} }