diff options
| author | Marius Kintel <marius@kintel.net> | 2013-06-15 16:48:09 (GMT) | 
|---|---|---|
| committer | Marius Kintel <marius@kintel.net> | 2013-06-15 16:48:09 (GMT) | 
| commit | 3f936099faa34ff47f5226b21b640828532637dc (patch) | |
| tree | 99df28024caf98797a68726afa3629f7245a73b3 | |
| parent | 75a5dad6b7f65c52568d2cd82f556caa538439c6 (diff) | |
Clamp linear_extrude height to 0. Fixes #405
| -rw-r--r-- | src/PolySetCGALEvaluator.cc | 1 | ||||
| -rw-r--r-- | src/linearextrude.cc | 6 | ||||
| -rw-r--r-- | testdata/scad/features/cylinder-tests.scad | 3 | ||||
| -rw-r--r-- | testdata/scad/features/linear_extrude-tests.scad | 3 | ||||
| -rw-r--r-- | tests/regression/dumptest/linear_extrude-tests-expected.txt | 5 | 
5 files changed, 14 insertions, 4 deletions
| diff --git a/src/PolySetCGALEvaluator.cc b/src/PolySetCGALEvaluator.cc index f0c274f..bc9206f 100644 --- a/src/PolySetCGALEvaluator.cc +++ b/src/PolySetCGALEvaluator.cc @@ -324,6 +324,7 @@ PolySet *PolySetCGALEvaluator::extrudeDxfData(const LinearExtrudeNode &node, Dxf  {  	PolySet *ps = new PolySet();  	ps->convexity = node.convexity; +	if (node.height <= 0) return ps;  	double h1, h2; diff --git a/src/linearextrude.cc b/src/linearextrude.cc index 9a7365b..c5d4529 100644 --- a/src/linearextrude.cc +++ b/src/linearextrude.cc @@ -88,7 +88,8 @@ AbstractNode *LinearExtrudeModule::instantiate(const Context *ctx, const ModuleI  	}  	node->layername = layer.isUndefined() ? "" : layer.toString(); -	node->height = height.toDouble(); +	node->height = 100; +	height.getDouble(node->height);  	node->convexity = (int)convexity.toDouble();  	origin.getVec2(node->origin_x, node->origin_y);  	node->scale_x = node->scale_y = 1; @@ -99,8 +100,7 @@ AbstractNode *LinearExtrudeModule::instantiate(const Context *ctx, const ModuleI  	if (center.type() == Value::BOOL)  		node->center = center.toBool(); -	if (node->height <= 0) -		node->height = 100; +	if (node->height <= 0) node->height = 0;  	if (node->convexity <= 0)  		node->convexity = 1; diff --git a/testdata/scad/features/cylinder-tests.scad b/testdata/scad/features/cylinder-tests.scad index 3174bc4..75b06f2 100644 --- a/testdata/scad/features/cylinder-tests.scad +++ b/testdata/scad/features/cylinder-tests.scad @@ -16,4 +16,5 @@ translate([22,11,0]) cylinder(h=15, r=5, r2=5);  // tend to "abuse" this for captured nut slots  translate([-10,0,0]) cylinder(h=2, r=3, $fn=6); -translate([-10, -10, 0]) sphere(5, $fn=0.1); +// Test that we clamp number of sections to a minimum of 3 +translate([-10, -10, 0]) cylinder(r=3.5356, h=7.0711, $fn=0.1, center=true); diff --git a/testdata/scad/features/linear_extrude-tests.scad b/testdata/scad/features/linear_extrude-tests.scad index 528eea2..680bf53 100644 --- a/testdata/scad/features/linear_extrude-tests.scad +++ b/testdata/scad/features/linear_extrude-tests.scad @@ -22,3 +22,6 @@ translate([-15,20,0]) linear_extrude(height=20, scale=[4,5,6]) square(10);  translate([-10,5,0]) linear_extrude(height=15, scale=-2) square(10, center=true);  // scale given as undefined  translate([-15,-15,0]) linear_extrude(height=10, scale=var_undef) square(10); + +// height is negative +translate([0,-25,0]) linear_extrude(-1) square(10, center=true); diff --git a/tests/regression/dumptest/linear_extrude-tests-expected.txt b/tests/regression/dumptest/linear_extrude-tests-expected.txt index c867388..face5e2 100644 --- a/tests/regression/dumptest/linear_extrude-tests-expected.txt +++ b/tests/regression/dumptest/linear_extrude-tests-expected.txt @@ -54,4 +54,9 @@  			square(size = [10, 10], center = false);  		}  	} +	multmatrix([[1, 0, 0, 0], [0, 1, 0, -25], [0, 0, 1, 0], [0, 0, 0, 1]]) { +		linear_extrude(height = 0, center = false, convexity = 1, scale = [1, 1], $fn = 0, $fa = 12, $fs = 2) { +			square(size = [10, 10], center = true); +		} +	} | 
