diff options
author | jaseg <git@jaseg.de> | 2021-08-18 17:29:57 +0200 |
---|---|---|
committer | jaseg <git@jaseg.de> | 2021-08-18 17:29:57 +0200 |
commit | aaade1b168b3780a9c2ed1387165086ede33bc54 (patch) | |
tree | f379dc1568a6c08e4ccfa68c2572773183dfe5d1 /svg-flatten/src/svg_pattern.cpp | |
parent | aad0ae0215719faaf74445d5833921cb07982012 (diff) | |
download | gerbolyze-aaade1b168b3780a9c2ed1387165086ede33bc54.tar.gz gerbolyze-aaade1b168b3780a9c2ed1387165086ede33bc54.tar.bz2 gerbolyze-aaade1b168b3780a9c2ed1387165086ede33bc54.zip |
Collect various rendering params into new RenderContext object
Diffstat (limited to 'svg-flatten/src/svg_pattern.cpp')
-rw-r--r-- | svg-flatten/src/svg_pattern.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/svg-flatten/src/svg_pattern.cpp b/svg-flatten/src/svg_pattern.cpp index cbdf4dd..b68bf3a 100644 --- a/svg-flatten/src/svg_pattern.cpp +++ b/svg-flatten/src/svg_pattern.cpp @@ -54,17 +54,17 @@ gerbolyze::Pattern::Pattern(const pugi::xml_node &node, SVGDocument &doc) : _nod /* Tile pattern into gerber. Note that this function may be called several times in case the pattern is * referenced from multiple places, so we must not clobber any of the object's state. */ -void gerbolyze::Pattern::tile (xform2d &mat, const gerbolyze::RenderSettings &rset, ClipperLib::Paths &clip) { +void gerbolyze::Pattern::tile (gerbolyze::RenderContext &ctx) { assert(doc); /* Transform x, y, w, h from pattern coordinate space into parent coordinates by applying the inverse * patternTransform. This is necessary so we iterate over the correct bounds when tiling below */ - d2p pos_xf = mat.doc2phys(d2p{x, y}); + d2p pos_xf = ctx.mat().doc2phys(d2p{x, y}); double inst_x = pos_xf[0], inst_y = pos_xf[1]; - double inst_w = mat.doc2phys_dist(w); - double inst_h = mat.doc2phys_dist(h); + double inst_w = ctx.mat().doc2phys_dist(w); + double inst_h = ctx.mat().doc2phys_dist(h); - ClipperLib::IntRect clip_bounds = get_paths_bounds(clip); + ClipperLib::IntRect clip_bounds = get_paths_bounds(ctx.clip()); double bx = clip_bounds.left / clipper_scale; double by = clip_bounds.top / clipper_scale; double bw = (clip_bounds.right - clip_bounds.left) / clipper_scale; @@ -86,8 +86,7 @@ void gerbolyze::Pattern::tile (xform2d &mat, const gerbolyze::RenderSettings &rs } /* Switch to pattern coordinates */ - xform2d local_xf(mat); - local_xf.transform(patternTransform); + RenderContext pat_ctx(ctx, patternTransform); /* Iterate over all pattern tiles in pattern coordinates */ for (double inst_off_x = fmod(inst_x, inst_w) - 2*inst_w; @@ -98,7 +97,7 @@ void gerbolyze::Pattern::tile (xform2d &mat, const gerbolyze::RenderSettings &rs inst_off_y < bh + 2*inst_h; inst_off_y += inst_h) { - xform2d elem_xf(local_xf); + xform2d elem_xf; /* Change into this individual tile's coordinate system */ elem_xf.translate(inst_off_x, inst_off_y); if (has_vb) { @@ -109,7 +108,8 @@ void gerbolyze::Pattern::tile (xform2d &mat, const gerbolyze::RenderSettings &rs } /* Export the pattern tile's content like a group */ - doc->export_svg_group(elem_xf, rset, _node, clip); + RenderContext elem_ctx(pat_ctx, elem_xf); + doc->export_svg_group(elem_ctx, _node); } } } |