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 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 deltaX = 0;
int deltaY = 0; int deltaY = 0;
if ((val1 & 0x80) == 0x80) if ((val1 & 0x80) == 0x80)
@ -245,6 +255,15 @@ namespace PesFile
val1 = val2; 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) if ((val1 & 0x80) == 0x80)
{ {
// This is a 12-bit int. Allows for needle movement // This is a 12-bit int. Allows for needle movement
@ -261,14 +280,21 @@ namespace PesFile
// Finished reading data for this stitch, no more // Finished reading data for this stitch, no more
// bytes needed. // bytes needed.
} }
// Add stitch to list
tempStitches.Add( tempStitches.Add(
new Stitch( new Stitch(
new Point(prevX, prevY), 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; prevX = prevX + deltaX;
prevY = prevY + deltaY; prevY = prevY + deltaY;
// Update maximum distances
if (prevX > maxX) if (prevX > maxX)
{ {
maxX = prevX; maxX = prevX;
@ -354,11 +380,20 @@ namespace PesFile
outfile.WriteLine("Extended stitch debug info"); outfile.WriteLine("Extended stitch debug info");
for (int blocky = 0; blocky < blocks.Count; blocky++) 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")); outfile.WriteLine("unknown start byte: " + blocks[blocky].unknownStartByte.ToString("X2"));
for (int stitchy = 0; stitchy < blocks[blocky].stitches.Length; stitchy++) 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 a;
public Point b; public Point b;
// Extra bits to output with debug info
public int extraBits1;
public int extraBits2;
public Stitch(Point pointA, Point pointB) public Stitch(Point pointA, Point pointB)
{ {
@ -38,6 +41,14 @@ namespace PesFile
this.b = pointB; 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() public double calcLength()
{ {
double diffx = Math.Abs(a.X - b.X); double diffx = Math.Abs(a.X - b.X);