From a886d001ba848eaa26675807790005f9267e9eba Mon Sep 17 00:00:00 2001 From: Oskar Linde Date: Sat, 17 May 2014 14:20:23 +0200 Subject: [PATCH 1/2] Offset bug regression test --- testdata/scad/features/offset-tests.scad | 6 +++++- .../cgalpngtest/offset-tests-expected.png | Bin 5291 -> 10754 bytes .../dumptest/offset-tests-expected.csg | 9 ++++++++- .../opencsgtest/offset-tests-expected.png | Bin 6177 -> 11081 bytes .../offset-tests-expected.png | Bin 6195 -> 11094 bytes 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/testdata/scad/features/offset-tests.scad b/testdata/scad/features/offset-tests.scad index 9e55d584..b121b6d0 100644 --- a/testdata/scad/features/offset-tests.scad +++ b/testdata/scad/features/offset-tests.scad @@ -34,6 +34,10 @@ offset(-4) shape1(-1, 0); shape1(0, 0); offset(4) shape1(1, 0); -offset(delta = -5) shape1(-1, -1); +offset(delta = -5) shape1(2, 1); shape1(0, -1); offset(delta = 5) shape1(1, -1); + +// Bug with fragment calculateion with delta < 1 due to abs() instead of std::abs() +translate([-50,-50]) scale([25,25,1]) + offset(delta = 0.9, join_type="round") square(.1); diff --git a/tests/regression/cgalpngtest/offset-tests-expected.png b/tests/regression/cgalpngtest/offset-tests-expected.png index f8db6b7729212f8bca8d5850e05cb586196ad46c..7064b5d7b1c436290c158e99aeb138b11b360fc4 100644 GIT binary patch literal 10754 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 literal 6177 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 z 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 Date: Sat, 17 May 2014 14:23:46 +0200 Subject: [PATCH 2/2] Bugfix: Offset with rounded join_type calculated fragments incorrectly for delta < 1 --- src/GeometryEvaluator.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GeometryEvaluator.cc b/src/GeometryEvaluator.cc index 65a1f510..ed82c607 100644 --- a/src/GeometryEvaluator.cc +++ b/src/GeometryEvaluator.cc @@ -413,7 +413,7 @@ Response GeometryEvaluator::visit(State &state, const OffsetNode &node) // ClipperLib documentation: The formula for the number of steps in a full // circular arc is ... Pi / acos(1 - arc_tolerance / abs(delta)) double n = Calc::get_fragments_from_r(10, node.fn, node.fs, node.fa); - double arc_tolerance = abs(node.delta) * (1 - cos(M_PI / n)); + double arc_tolerance = std::abs(node.delta) * (1 - cos(M_PI / n)); const Polygon2d *result = ClipperUtils::applyOffset(*polygon, node.delta, node.join_type, node.miter_limit, arc_tolerance); assert(result); geom.reset(result);