Add a 'density' argument for thread thickness I like the default thin thread effect, but using a density of 2.5 or so seems to be a bit more realistic on my test-case. Which may be more about the test-case than anything else, but whatever. So with this, you can do something like pesconvert -d 2.5 -s 512 Jan_heartsdelight.pes s512.png to generate a 512-pixel sized version of the Brother example file. Making the "thread" thicker also meant that the line join matters a lot more. A miter join (the cairo default) is not how thread works and makes it all look very jagged. So make it use a round join instead. The line cap could probably be a butt cap, but I set it to round too. I doubt anybody will see any difference, since thread ends aren't common. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
diff --git a/cairo.c b/cairo.c index bd4d3d3..c7d6565 100644 --- a/cairo.c +++ b/cairo.c
@@ -5,7 +5,7 @@ #define X(stitch) (((stitch)->x - pes->min_x) * scale) #define Y(stitch) (((stitch)->y - pes->min_y) * scale) -void output_cairo(struct pes *pes, const char *filename, int size) +void output_cairo(struct pes *pes, const char *filename, int size, double density) { int width = pes->max_x - pes->min_x, outw; int height = pes->max_y - pes->min_y, outh; @@ -37,7 +37,9 @@ ++stitch; cairo_line_to(cr, X(stitch), Y(stitch)); } - cairo_set_line_width(cr, scale); + cairo_set_line_width(cr, scale * density); + cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); + cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); cairo_stroke(cr); block = block->next;
diff --git a/main.c b/main.c index e9731da..57cddf7 100644 --- a/main.c +++ b/main.c
@@ -23,6 +23,7 @@ int main(int argc, char **argv) { + double density = 1.0; int i, outputsize = -1; const char *output = NULL; struct region region; @@ -43,6 +44,10 @@ outputsize = atoi(argv[i+1]); i++; continue; + case 'd': + density = atof(argv[i+1]); + i++; + continue; } die("Unknown argument '%s'\n", arg); } @@ -70,7 +75,7 @@ if (!output) die("Need a png output file name\n"); - output_cairo(&pes, output, outputsize); + output_cairo(&pes, output, outputsize, density); return 0; }
diff --git a/pes.h b/pes.h index 1030475..322cd7e 100644 --- a/pes.h +++ b/pes.h
@@ -36,6 +36,6 @@ /* Output */ void output_svg(struct pes *pes); void output_png(struct pes *pes); -void output_cairo(struct pes *pes, const char *filename, int size); +void output_cairo(struct pes *pes, const char *filename, int size, double density); #endif /* PES_H */