summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2013-12-14 22:44:05 (GMT)
committerMarius Kintel <marius@kintel.net>2013-12-14 22:44:05 (GMT)
commitcca80a15590c24de9bfd4654b19a64bf1426cf54 (patch)
tree04de01e802cbac57148d5baa7ee2e302f2babc0e
parenta3aa61bab2c88fce649a9515dec0ddb7d15be085 (diff)
bugfix: #562 didn't take into account that it's allowed with all X coordinates being negative
-rw-r--r--src/PolySetCGALEvaluator.cc12
-rw-r--r--testdata/scad/features/rotate_extrude-tests.scad3
-rw-r--r--tests/regression/cgalpngtest/rotate_extrude-tests-expected.pngbin17684 -> 18494 bytes
-rw-r--r--tests/regression/dumptest/rotate_extrude-tests-expected.csg7
-rw-r--r--tests/regression/opencsgtest/rotate_extrude-tests-expected.pngbin18320 -> 19174 bytes
-rw-r--r--tests/regression/throwntogethertest/rotate_extrude-tests-expected.pngbin8198 -> 8132 bytes
6 files changed, 17 insertions, 5 deletions
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
--- a/tests/regression/cgalpngtest/rotate_extrude-tests-expected.png
+++ b/tests/regression/cgalpngtest/rotate_extrude-tests-expected.png
Binary files 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
--- a/tests/regression/opencsgtest/rotate_extrude-tests-expected.png
+++ b/tests/regression/opencsgtest/rotate_extrude-tests-expected.png
Binary files 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
--- a/tests/regression/throwntogethertest/rotate_extrude-tests-expected.png
+++ b/tests/regression/throwntogethertest/rotate_extrude-tests-expected.png
Binary files differ
contact: Jan Huwald // Impressum