From cca80a15590c24de9bfd4654b19a64bf1426cf54 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sat, 14 Dec 2013 17:44:05 -0500 Subject: bugfix: #562 didn't take into account that it's allowed with all X coordinates being negative diff --git a/src/PolySetCGALEvaluator.cc b/src/PolySetCGALEvaluator.cc index 599fd7f..a2d896d 100644 --- a/src/PolySetCGALEvaluator.cc +++ b/src/PolySetCGALEvaluator.cc @@ -455,19 +455,21 @@ PolySet *PolySetCGALEvaluator::rotateDxfData(const RotateExtrudeNode &node, DxfD for (size_t i = 0; i < dxf.paths.size(); i++) { + double min_x = 0; double max_x = 0; for (size_t j = 0; j < dxf.paths[i].indices.size(); j++) { double point_x = dxf.points[dxf.paths[i].indices[j]][0]; - if (point_x < 0) { - PRINT("ERROR: all points for rotate_extrude() must have non-negative X coordinates"); - PRINTB("[Point %d on path %d has X coordinate %f]", j % i % point_x); + min_x = fmin(min_x, point_x); + max_x = fmax(max_x, point_x); + + if ((max_x - min_x) > max_x && (max_x - min_x) > fabs(min_x)) { + PRINTB("ERROR: all points for rotate_extrude() must have the same X coordinate sign (range is %.2f -> %.2f)", min_x % max_x); delete ps; return NULL; } - max_x = fmax(max_x, point_x); } - int fragments = get_fragments_from_r(max_x, node.fn, node.fs, node.fa); + int fragments = get_fragments_from_r(max_x-min_x, node.fn, node.fs, node.fa); double ***points; points = new double**[fragments]; diff --git a/testdata/scad/features/rotate_extrude-tests.scad b/testdata/scad/features/rotate_extrude-tests.scad index 010b7d2..ec8d1cc 100644 --- a/testdata/scad/features/rotate_extrude-tests.scad +++ b/testdata/scad/features/rotate_extrude-tests.scad @@ -32,3 +32,6 @@ translate([50,50,0]) { // Minimal $fn translate([0,-60,0]) rotate_extrude($fn=1) translate([20,0,0]) circle(r=10,$fn=1); +// Object in negative X +translate([0,60,0]) rotate_extrude() translate([-20,0]) square(10); + diff --git a/tests/regression/cgalpngtest/rotate_extrude-tests-expected.png b/tests/regression/cgalpngtest/rotate_extrude-tests-expected.png index 1488c85..d198344 100644 Binary files a/tests/regression/cgalpngtest/rotate_extrude-tests-expected.png and b/tests/regression/cgalpngtest/rotate_extrude-tests-expected.png differ diff --git a/tests/regression/dumptest/rotate_extrude-tests-expected.csg b/tests/regression/dumptest/rotate_extrude-tests-expected.csg index a86dd8f..d010bfd 100644 --- a/tests/regression/dumptest/rotate_extrude-tests-expected.csg +++ b/tests/regression/dumptest/rotate_extrude-tests-expected.csg @@ -50,4 +50,11 @@ group() { } } } + multmatrix([[1, 0, 0, 0], [0, 1, 0, 60], [0, 0, 1, 0], [0, 0, 0, 1]]) { + rotate_extrude(convexity = 1, $fn = 0, $fa = 12, $fs = 2) { + multmatrix([[1, 0, 0, -20], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + square(size = [10, 10], center = false); + } + } + } } diff --git a/tests/regression/opencsgtest/rotate_extrude-tests-expected.png b/tests/regression/opencsgtest/rotate_extrude-tests-expected.png index 861f6ab..0be247e 100644 Binary files a/tests/regression/opencsgtest/rotate_extrude-tests-expected.png and b/tests/regression/opencsgtest/rotate_extrude-tests-expected.png differ diff --git a/tests/regression/throwntogethertest/rotate_extrude-tests-expected.png b/tests/regression/throwntogethertest/rotate_extrude-tests-expected.png index 8956be2..1da4873 100644 Binary files a/tests/regression/throwntogethertest/rotate_extrude-tests-expected.png and b/tests/regression/throwntogethertest/rotate_extrude-tests-expected.png differ -- cgit v0.10.1