Fix scale of drill mapping test

This commit is contained in:
jaseg 2023-03-30 15:05:09 +02:00
parent bc63166a40
commit 0d4172901b
3 changed files with 445 additions and 305 deletions

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 188 KiB

Before After
Before After

View file

@ -82,6 +82,6 @@ def test_convert_layers():
assert set(round(ap.diameter, 4) for ap in stack[layer].apertures) == {dia, 0.05}
# Note: svg-flatten rounds these diameters to the geometric tolerance given on the command line (0.01mm by
# default). Thus, these values are different from the more precise values in the SVG.
assert set(stack.drill_layers[0].drill_sizes()) == {0.67, 0.51}
# default).
assert set(stack.drill_layers[0].drill_sizes()) == {0.7, 0.5}

View file

@ -298,10 +298,12 @@ void gerbolyze::SVGDocument::export_svg_path(RenderContext &ctx, const pugi::xml
d2p centroid = nopencv::polygon_centroid(geom_poly);
centroid[0] /= clipper_scale;
centroid[1] /= clipper_scale;
/* area of n-gon with circumradius 1 relative to circle with radius 1 */
double ngon_area_relative = p.size()/(2*std::numbers::pi) * sin(2*std::numbers::pi / p.size());
double diameter = sqrt(4*fabs(area)/std::numbers::pi) / clipper_scale / ngon_area_relative;
double tolerance = ctx.settings().geometric_tolerance_mm / 2;
//double ngon_area_relative = p.size()/(2*std::numbers::pi) * sin(2*std::numbers::pi / p.size());
// ^- correction not necessary, we already do a very good job.
double diameter = sqrt(4*fabs(area)/std::numbers::pi) / clipper_scale;
double tolerance = ctx.settings().geometric_tolerance_mm;
diameter = round(diameter/tolerance) * tolerance;
ctx.sink() << ApertureToken(diameter) << FlashToken(centroid);
}