svg-flatten: fix patterns with offset clip path

This commit is contained in:
jaseg 2022-06-19 21:25:10 +02:00
parent 5f33356f33
commit 446c5e5901
2 changed files with 13 additions and 2 deletions

View file

@ -315,6 +315,14 @@ void gerbolyze::SVGDocument::export_svg_path(RenderContext &ctx, const pugi::xml
} else {
PolyTreeToPaths(ptree_fill, fill_paths);
cerr << "clip paths" << endl;
for (auto &p : fill_paths) {
cerr << " ";
for (auto &pt : p) {
cerr << "<" << pt.X << "," << pt.Y << "> ";
}
cerr << endl;
}
RenderContext local_ctx(ctx, xform2d(), fill_paths, true);
pattern->tile(local_ctx);
}

View file

@ -69,6 +69,7 @@ void gerbolyze::Pattern::tile (gerbolyze::RenderContext &ctx) {
double by = clip_bounds.top / clipper_scale;
double bw = (clip_bounds.right - clip_bounds.left) / clipper_scale;
double bh = (clip_bounds.bottom - clip_bounds.top) / clipper_scale;
cerr << "clip bounds " << bx << ", " << by << "w=" << bw <<" h=" << bh << endl;
d2p clip_p0 = patternTransform_inv.doc2phys(d2p{bx, by});
d2p clip_p1 = patternTransform_inv.doc2phys(d2p{bx+bw, by+bh});
@ -90,12 +91,14 @@ void gerbolyze::Pattern::tile (gerbolyze::RenderContext &ctx) {
/* Iterate over all pattern tiles in pattern coordinates */
for (double inst_off_x = fmod(inst_x, inst_w) - 2*inst_w;
inst_off_x < bw + 2*inst_w;
inst_off_x < bx + bw + 2*inst_w;
inst_off_x += inst_w) {
cerr << "inst_off_x " << inst_off_x << endl;
for (double inst_off_y = fmod(inst_y, inst_h) - 2*inst_h;
inst_off_y < bh + 2*inst_h;
inst_off_y < by + bh + 2*inst_h;
inst_off_y += inst_h) {
cerr << " inst_off_y " << inst_off_y << endl;
xform2d elem_xf;
/* Change into this individual tile's coordinate system */