Capture extra bits from certain stitches for debug output

Branch_2.1.x
Nathan Crawford 2016-02-24 01:46:00 -05:00
rodzic d0c2eb485a
commit 97cc2d8935
2 zmienionych plików z 49 dodań i 3 usunięć

Wyświetl plik

@ -222,6 +222,16 @@ namespace PesFile
}
else
{
int extraBits1 = 0x00;
if ((val1 & 0x80) == 0x80)
{
// Save the top 4 bits to output with debug info
// The top bit means this is a 12 bit value, but I don't know what the next 3 bits mean.
// The only combinations I've observed in real files are 0x80, 0x90 and 0xa0. 0x80 is
// used for the bulk of stitches, with a few 0x80 and/or 0x90 in most files.
extraBits1 = val1 & 0xf0;
}
int deltaX = 0;
int deltaY = 0;
if ((val1 & 0x80) == 0x80)
@ -245,6 +255,15 @@ namespace PesFile
val1 = val2;
}
int extraBits2 = 0x00;
if ((val1 & 0x80) == 0x80)
{
// Save the top 4 bits to output with debug info
// The top bit means this is a 12 bit value, but I don't know what the next 3 bits mean.
// In all the files I've checked, extraBits2 is the same as extraBits1.
extraBits2 = val1 & 0xf0;
}
if ((val1 & 0x80) == 0x80)
{
// This is a 12-bit int. Allows for needle movement
@ -261,14 +280,21 @@ namespace PesFile
// Finished reading data for this stitch, no more
// bytes needed.
}
// Add stitch to list
tempStitches.Add(
new Stitch(
new Point(prevX, prevY),
new Point(prevX + deltaX, prevY + deltaY)
new Point(prevX + deltaX, prevY + deltaY),
extraBits1,
extraBits2
)
);
// Calculate new "previous" position
prevX = prevX + deltaX;
prevY = prevY + deltaY;
// Update maximum distances
if (prevX > maxX)
{
maxX = prevX;
@ -354,11 +380,20 @@ namespace PesFile
outfile.WriteLine("Extended stitch debug info");
for (int blocky = 0; blocky < blocks.Count; blocky++)
{
outfile.WriteLine("block " + (blocky + 1).ToString() + " start");
outfile.WriteLine("block " + (blocky + 1).ToString() + " start (color index " + blocks[blocky].colorIndex + ")");
outfile.WriteLine("unknown start byte: " + blocks[blocky].unknownStartByte.ToString("X2"));
for (int stitchy = 0; stitchy < blocks[blocky].stitches.Length; stitchy++)
{
outfile.WriteLine(blocks[blocky].stitches[stitchy].a.ToString() + " - " + blocks[blocky].stitches[stitchy].b.ToString());
string tempLine = blocks[blocky].stitches[stitchy].a.ToString() + " - " + blocks[blocky].stitches[stitchy].b.ToString();
if(blocks[blocky].stitches[stitchy].extraBits1 != 0x00)
{
tempLine += " (extra bits 1: " + blocks[blocky].stitches[stitchy].extraBits1.ToString("X2") + ")";
}
if (blocks[blocky].stitches[stitchy].extraBits2 != 0x00)
{
tempLine += " (extra bits 2: " + blocks[blocky].stitches[stitchy].extraBits2.ToString("X2") + ")";
}
outfile.WriteLine(tempLine);
}
}
}

Wyświetl plik

@ -31,6 +31,9 @@ namespace PesFile
{
public Point a;
public Point b;
// Extra bits to output with debug info
public int extraBits1;
public int extraBits2;
public Stitch(Point pointA, Point pointB)
{
@ -38,6 +41,14 @@ namespace PesFile
this.b = pointB;
}
public Stitch(Point pointA, Point pointB, int extraBits1, int extraBits2)
{
this.a = pointA;
this.b = pointB;
this.extraBits1 = extraBits1;
this.extraBits2 = extraBits2;
}
public double calcLength()
{
double diffx = Math.Abs(a.X - b.X);