diff options
Diffstat (limited to 'testdata/scad')
47 files changed, 611 insertions, 113 deletions
diff --git a/testdata/scad/bugs/gridbug.scad b/testdata/scad/bugs/gridbug.scad new file mode 100644 index 0000000..678a22a --- /dev/null +++ b/testdata/scad/bugs/gridbug.scad @@ -0,0 +1,9 @@ +// This crashes OpenSCAD including 2011.06 in PolyReducer due to two vertices of +// a triangle evaluating to the same index +linear_extrude(height=2) + polygon(points=[[0, 0], + [1, 0], + [1.0014, 1], + [1, 1], + [0, 1]], + paths=[[0,1,2,3,4]]); diff --git a/testdata/scad/bugs/horn-torus.scad b/testdata/scad/bugs/horn-torus.scad new file mode 100644 index 0000000..f93a364 --- /dev/null +++ b/testdata/scad/bugs/horn-torus.scad @@ -0,0 +1,5 @@ +// This model causes a CGAL assertion in CGAL_Nef_polyhedron3(CGAL_Polyhedron) constructor. +// One cause of this error could be that the grid handling in PolySet degenerated the original +// mesh into a non-manifold one. + +rotate_extrude($fn = 24) translate ([ 1, 0, 0 ]) circle (r = 1); diff --git a/testdata/scad/bugs/minkowski-assert.scad b/testdata/scad/bugs/minkowski-assert.scad new file mode 100644 index 0000000..4ae81da --- /dev/null +++ b/testdata/scad/bugs/minkowski-assert.scad @@ -0,0 +1,8 @@ +minkowski() { + cube(20, center=true); + rotate([20, 30, 40]) + difference() { + cube(5, center=true); + cube([1, 1, 10], center=true); + } +} diff --git a/testdata/scad/bugs/polygon-touch.scad b/testdata/scad/bugs/polygon-touch.scad new file mode 100644 index 0000000..afa2938 --- /dev/null +++ b/testdata/scad/bugs/polygon-touch.scad @@ -0,0 +1,5 @@ +# Somehow the 2D union/tessellation algorithm doesn't support touching polygons +# Changing translate([-10,-10,0]) to translate([-9.99,-9.99,0]) works + +square([10,10]); +translate([-10,-10,0]) square([10,10]); diff --git a/testdata/scad/features/2d-3d.scad b/testdata/scad/features/2d-3d.scad new file mode 100644 index 0000000..ca9f966 --- /dev/null +++ b/testdata/scad/features/2d-3d.scad @@ -0,0 +1,3 @@ +// Test a mix of toplevel 2D and 3D objects +cube(); +translate([2,0,0]) square(); diff --git a/testdata/scad/features/assign-tests.scad b/testdata/scad/features/assign-tests.scad new file mode 100644 index 0000000..b86dabe --- /dev/null +++ b/testdata/scad/features/assign-tests.scad @@ -0,0 +1,6 @@ +for(i=[0:5]) { + translate([i*i/2,0,0]) { + cube(i); + translate([0,-5,0]) assign(f=1.0*i/2) cube(f); + } +} diff --git a/testdata/scad/features/background-modifier.scad b/testdata/scad/features/background-modifier.scad new file mode 100644 index 0000000..ec7b28d --- /dev/null +++ b/testdata/scad/features/background-modifier.scad @@ -0,0 +1,4 @@ +difference() { + sphere(r=10); + %cylinder(h=30, r=6, center=true); +} diff --git a/testdata/scad/features/child-tests.scad b/testdata/scad/features/child-tests.scad new file mode 100644 index 0000000..e4e3572 --- /dev/null +++ b/testdata/scad/features/child-tests.scad @@ -0,0 +1,34 @@ +$fn=16; + +module parent() { + for (i=[0:2]) { + translate([2.5*i,0,0]) child(i); + } +} + +// Normal +parent() { + sphere(); + cylinder(h=2, center=true); + cube(2, center=true); +} + +// No children +parent(); + +// Too few children +translate([0,3,0]) parent() { sphere(); } + +// No parameter to child +module parent2() { + child(); +} + +translate([2.5,3,0]) parent2() { cylinder(h=2, center=true); sphere(); } + +// Negative parameter to child +module parent3() { + child(-1); +} + +translate([5,3,0]) parent3() { cube(); sphere(); } diff --git a/testdata/scad/features/circle-tests.scad b/testdata/scad/features/circle-tests.scad new file mode 100644 index 0000000..6b54d55 --- /dev/null +++ b/testdata/scad/features/circle-tests.scad @@ -0,0 +1,10 @@ +circle(); +translate([0,3,0]) circle(1); +translate([5,1,0]) circle(r=3); +translate([0,-1,0]) circle(r=0); +translate([0,-3,0]) circle(1, $fn=4); +translate([3,-3,0]) circle(1, $fn=8); +translate([6,-3,0]) circle(1, $fn=12); +translate([0,-6,0]) circle(1, $fa=20, $fs=0.3); +translate([3,-6,0]) circle(1, $fa=30, $fs=0.3); +translate([6,-6,0]) circle(1, $fa=40, $fs=0.3); diff --git a/testdata/scad/features/color-tests.scad b/testdata/scad/features/color-tests.scad new file mode 100644 index 0000000..3ef2540 --- /dev/null +++ b/testdata/scad/features/color-tests.scad @@ -0,0 +1,15 @@ +// Empty +color(); +// No children +color() { } + +module object() cube([10,10,10]); + +translate([12,12,0]) object(); +color([1,0,0]) translate([24,12,0]) object(); +translate([0,12,0]) color("Purple") object(); +color([0,0,1,0.5]) object(); +translate([12,0,0]) color([0,0,1],0.5) object(); +translate([24,0,0]) color(c="Green",alpha=0.2) object(); +translate([-12,12,0]) color() object(); +translate([-12,0,0]) color(alpha=0.5) object(); diff --git a/testdata/scad/features/cube-tests.scad b/testdata/scad/features/cube-tests.scad new file mode 100644 index 0000000..ae2ead1 --- /dev/null +++ b/testdata/scad/features/cube-tests.scad @@ -0,0 +1,4 @@ +cube(); +cube([1,1,0]); cube([1,0,1]); cube([0,1,1]); cube([0,0,0]); +translate([2,0,0]) cube([2,3,1]); +translate([6,0,0]) cube([2,4,2], center=true); diff --git a/testdata/scad/features/cylinder-tests.scad b/testdata/scad/features/cylinder-tests.scad new file mode 100644 index 0000000..54e88cd --- /dev/null +++ b/testdata/scad/features/cylinder-tests.scad @@ -0,0 +1,15 @@ +cylinder(); +translate([1,0,0]) cylinder(r=0); +translate([2,0,0]) cylinder(r1=0, r2=0); +translate([0,-11,0]) cylinder(r=5); +translate([0,11,0]) cylinder(r=5, h=10, center=true); + +translate([11,-11,0]) cylinder(h=5, r1=5); +translate([11,0,0]) cylinder(h=5, r1=5, r2=0); +translate([11,11,0]) cylinder(h=8, r1=5, r2=5); + +translate([22,-11,0]) cylinder(h=5, r=5, r1=0, center=true); +translate([22,0,0]) cylinder(h=5, r=5, r2=0); +translate([22,11,0]) cylinder(h=15, r=5, r2=5); + +// FIXME: We could test $fs, $fa, $fn as well diff --git a/testdata/scad/features/difference-tests.scad b/testdata/scad/features/difference-tests.scad index f945246..4d82676 100644 --- a/testdata/scad/features/difference-tests.scad +++ b/testdata/scad/features/difference-tests.scad @@ -1,4 +1,30 @@ +// Empty +difference(); +// No children +difference() { } + difference() { - sphere(3); - cube([3,3,8], center=true); + cube([10,10,10], center=true); + cylinder(r=4, h=20, center=true); +} + +translate([12,0,0]) difference() { + cube([10,10,10], center=true); + cylinder(r=4, h=10, center=true); +} + +translate([0,12,0]) difference() { + cube([10,10,10], center=true); + cylinder(r=4, h=11, center=true); + rotate([0,90,0]) cylinder(r=4, h=11, center=true); +} + +translate([12,12,0]) difference() { + cube([10,10,10], center=true); + translate([0,0,7]) cylinder(r=4, h=4, center=true); +} + +translate([24,0,0]) difference() { + cube([10,10,10], center=true); + translate([0,0,6.99]) cylinder(r=4, h=4, center=true); } diff --git a/testdata/scad/features/disable-modifier.scad b/testdata/scad/features/disable-modifier.scad new file mode 100644 index 0000000..b47e074 --- /dev/null +++ b/testdata/scad/features/disable-modifier.scad @@ -0,0 +1,4 @@ +difference() { + *sphere(r=10); + cylinder(h=30, r=6, center=true); +} diff --git a/testdata/scad/features/for-nested-tests.scad b/testdata/scad/features/for-nested-tests.scad new file mode 100644 index 0000000..e3b5877 --- /dev/null +++ b/testdata/scad/features/for-nested-tests.scad @@ -0,0 +1,3 @@ +for(x=[0:3], y=[0:0.5:1], z=[0,2,3]) { + translate(10*[x,y,z]) sphere(r=3); +} diff --git a/testdata/scad/features/for-tests.scad b/testdata/scad/features/for-tests.scad new file mode 100644 index 0000000..fe36789 --- /dev/null +++ b/testdata/scad/features/for-tests.scad @@ -0,0 +1,41 @@ +// Empty +for(); +// No children +for(i=2) { } + +// Null +translate([-10,0,0]) for() cylinder(r=4); + +// Scalar +translate([10,0,0]) for(i=3) cylinder(r=i); + +// Range +for(r=[1:5]) translate([r*10-30,10,0]) cylinder(r=r); + +// Reverse +for(r=[5:1]) translate([r*10-30,20,0]) cylinder(r=r); + +// Step +for(r=[1:2:6]) translate([r*10-30,30,0]) difference() {cylinder(r=r, center=true); cylinder(r=r/2, h=2, center=true);} + +// Fractional step +for(r=[1.5:0.2:2.5]) translate([r*10-30,30,0]) cube([1, 4*r, 2], center=true); + +// Negative range, negative step +for(r=[5:-1:1]) translate([r*10-60,40,0]) cylinder(r=r); + +// Negative range, positive step +for(r=[5:1:1]) translate([r*10-30,40,0]) cylinder(r=r); + +// Zero step + +for(r=[1:0:5]) translate([r*10+60,40,0]) cylinder(r=r); + +// Negative step +for(r=[1:-1:5]) translate([r*10-30,50,0]) cylinder(r=r); + +// Illegal step value +for(r=[1:true:5]) translate([r*10-60,50,0]) cylinder(r=r); + +// Vector +for(r=[1,2,5]) translate([r*10-30,0,0]) cylinder(r=r); diff --git a/testdata/scad/features/highlight-modifier.scad b/testdata/scad/features/highlight-modifier.scad new file mode 100644 index 0000000..1156a88 --- /dev/null +++ b/testdata/scad/features/highlight-modifier.scad @@ -0,0 +1,4 @@ +difference() { + sphere(r=10); + #cylinder(h=30, r=6, center=true); +} diff --git a/testdata/scad/features/hull2-tests.scad b/testdata/scad/features/hull2-tests.scad new file mode 100644 index 0000000..3bea3c5 --- /dev/null +++ b/testdata/scad/features/hull2-tests.scad @@ -0,0 +1,30 @@ +module convex2dSimple() { + hull() { + translate([15,10]) circle(10); + circle(10); + } +} + +module concave2dSimple() { + hull() { + translate([15,10]) square(2); + translate([15,0]) square(2); + square(2); + } +} + +// Works correctly +module convex2dHole() { + hull() { + translate([15,10,0]) circle(10); + difference() { + circle(10); + circle(5); + } + } +} + + +convex2dHole(); +translate([40,0,0]) convex2dSimple(); +translate([0,-20,0]) concave2dSimple(); diff --git a/testdata/scad/features/hull-tests.scad b/testdata/scad/features/hull3-tests.scad index 3114ac5..2bd7d73 100644 --- a/testdata/scad/features/hull-tests.scad +++ b/testdata/scad/features/hull3-tests.scad @@ -1,22 +1,3 @@ -// Works correctly -module convex2dSimple() { - hull() { - translate([15,10]) circle(10); - circle(10); - } -} - -// Works correctly -module convex2dHole() { - hull() { - translate([15,10,0]) circle(10); - difference() { - circle(10); - circle(5); - } - } -} - // 3d not currently implemented module convex3dSimple() { hull() { @@ -36,8 +17,11 @@ module convex3dHole() { } } - -convex2dHole(); -translate([40,0,0]) convex2dSimple(); translate([0,40,0]) convex3dHole(); translate([40,40,0]) convex3dSimple(); + +// Empty +hull(); +// No children +hull() { } + diff --git a/testdata/scad/features/ifelse-tests.scad b/testdata/scad/features/ifelse-tests.scad new file mode 100644 index 0000000..d8c777b --- /dev/null +++ b/testdata/scad/features/ifelse-tests.scad @@ -0,0 +1,44 @@ +if (true) cube(2, true); +else cylinder(r=1,h=2); + +translate([3,0,0]) + if (false) cylinder(r=1,h=2); + else cube(2, true); + +translate([0,3,0]) + if (false) cylinder(r=1,h=2); + else if (true) cube(2, true); + else sphere(); + +translate([3,3,0]) + if (false) cylinder(r=1,h=2); + else if (false) sphere(); + else cube(2, true); + +translate([6,0,0]) + if (0) cylinder(r=1,h=2); + else cube(2, true); + +translate([6,3,0]) + if (1) cube(2, true); + else cylinder(r=1,h=2); + +translate([9,0,0]) + if ("") cylinder(r=1,h=2); + else cube(2, true); + +translate([9,3,0]) + if ("hello") cube(2, true); + else cylinder(r=1,h=2); + +translate([12,0,0]) + if ([]) cylinder(r=1,h=2); + else cube(2, true); + +translate([12,3,0]) + if ([1,2,3]) cube(2, true); + else cylinder(r=1,h=2); + +translate([15,0,0]) + if (ILLEGAL) cylinder(r=1,h=2); + else cube(2, true); diff --git a/testdata/scad/features/import_dxf-tests.scad b/testdata/scad/features/import_dxf-tests.scad new file mode 100644 index 0000000..814a46c --- /dev/null +++ b/testdata/scad/features/import_dxf-tests.scad @@ -0,0 +1,9 @@ +import_dxf(); +translate([-210,0,0]) import_dxf(file="../../dxf/polygons.dxf"); +translate([-210,0,0]) import_dxf(file="../../dxf/polygons.dxf", origin=[0,110]); +translate([-210,0,0]) import_dxf(file="../../dxf/polygons.dxf", origin=[110,110], scale=0.5); +import_dxf(file="../../dxf/multiple-layers.dxf"); +translate([-200,200,0]) import_dxf(file="../../dxf/multiple-layers.dxf", layer="0"); +translate([0,200,0]) import_dxf(file="../../dxf/multiple-layers.dxf", layer="0"); +translate([200,200,0]) import_dxf(file="../../dxf/multiple-layers.dxf", layer="noname"); +translate([0,200,0]) import_dxf(file="../../dxf/multiple-layers.dxf", layer="Layer with a pretty long name including \\ \"special\" /'\\\\ characters"); diff --git a/testdata/scad/features/include test6.scad b/testdata/scad/features/include test6.scad index 7a79456..0d96b26 100644 --- a/testdata/scad/features/include test6.scad +++ b/testdata/scad/features/include test6.scad @@ -1,4 +1,7 @@ module test6() { - echo("included from include test6.scad"); + difference() { + cube(center=true); + cylinder(r=0.4, h=2, center=true); + } } diff --git a/testdata/scad/features/include-test5.scad b/testdata/scad/features/include-test5.scad index 4f6e656..e4393cb 100644 --- a/testdata/scad/features/include-test5.scad +++ b/testdata/scad/features/include-test5.scad @@ -1,4 +1,4 @@ module test5() { - echo("included from include-test5.scad"); + sphere(r=0.5, $fn=8); } diff --git a/testdata/scad/features/include-test.scad b/testdata/scad/features/include-tests.scad index 5db02d7..36c04ca 100644 --- a/testdata/scad/features/include-test.scad +++ b/testdata/scad/features/include-tests.scad @@ -28,13 +28,13 @@ include <> module test1() { test2(); - test3(); - test4(); - test5(); - test6(); + translate([2,0,0]) test3(); + translate([2,-2,0]) test4(); + translate([-2,0,0]) test5(); + translate([-2,-2,0]) test6(); //Just to give a top level object - sphere(1); + translate([0,-2,0]) sphere(0.7, $fn=16); } test1(); diff --git a/testdata/scad/features/intersection-tests.scad b/testdata/scad/features/intersection-tests.scad index 4101b03..e53f3c9 100644 --- a/testdata/scad/features/intersection-tests.scad +++ b/testdata/scad/features/intersection-tests.scad @@ -1,4 +1,41 @@ +// Empty +intersection(); + +// No children +intersection() { } + intersection() { - sphere(3); - cube([3,3,8], center=true); + sphere(r=5); + translate([0,0,3]) cube([4,4,6], center=true); +} + +translate([0,12,0]) intersection() { + cube([10,10,10], center=true); + cylinder(r=4, h=12, center=true); +} + +translate([12,0,0]) intersection() { + cube([10,10,10], center=true); + cylinder(r=4, h=12, center=true); + rotate([0,90,0]) cylinder(r=4, h=12, center=true); +} + +translate([12,12,0]) intersection() { + cube([10,10,10], center=true); + translate([0,0,7]) cylinder(r=4, h=4, center=true); +} + +translate([24,0,0]) intersection() { + cube([10,10,10], center=true); + translate([0,0,6.99]) cylinder(r=4, h=4, center=true); +} + +translate([-12,0,0]) intersection() { + cube([10,10,10], center=true); + translate([0,-10,-10]) cube([10,10,10], center=true); +} + +translate([-12,12,0]) intersection() { + cube([10,10,10], center=true); + translate([0,-9.99,-9.99]) cube([10,10,10], center=true); } diff --git a/testdata/scad/features/intersection_for-tests.scad b/testdata/scad/features/intersection_for-tests.scad new file mode 100644 index 0000000..6ab1a89 --- /dev/null +++ b/testdata/scad/features/intersection_for-tests.scad @@ -0,0 +1,10 @@ +// Empty +intersection_for(); +// No children +intersection_for(i=1) { } + +intersection_for(i = [[0, 0, 0], + [10, 20, 300], + [200, 40, 57], + [20, 88, 57]]) + rotate(i) cube([100, 20, 20], center = true); diff --git a/testdata/scad/features/linear_extrude-tests.scad b/testdata/scad/features/linear_extrude-tests.scad index af050fb..67de8e6 100644 --- a/testdata/scad/features/linear_extrude-tests.scad +++ b/testdata/scad/features/linear_extrude-tests.scad @@ -1,7 +1,13 @@ +// Empty +rotate_extrude(); +// No children +rotate_extrude() { } +// 3D child +rotate_extrude() { cube(); } + linear_extrude(height=10) square([10,10]); -translate([19,5,0]) linear_extrude(height=10) circle(5); -translate([31.5,2.5,0]) linear_extrude(height=10) polygon(points = [[-5,-2.5], [5,-2.5], [0,2.5]]); +translate([19,5,0]) linear_extrude(height=10, center=true) difference() {circle(5); circle(3);} +translate([31.5,2.5,0]) linear_extrude(height=10, twist=-45) polygon(points = [[-5,-2.5], [5,-2.5], [0,2.5]]); -translate([0,-12,0]) linear_extrude(height=20, twist=45) square([10,10]); -translate([19,-7,0]) linear_extrude(height=20, twist=90) circle(5); -translate([31.5,-9.5,0]) linear_extrude(height=20, twist=180) polygon(points = [[-5,-2.5], [5,-2.5], [0,2.5]]); +translate([0,20,0]) linear_extrude(height=20, twist=45, slices=2) square([10,10]); +translate([19,20,0]) linear_extrude(height=20, twist=45, slices=10) square([10,10]); diff --git a/testdata/scad/features/minkowski-tests.scad b/testdata/scad/features/minkowski-tests.scad deleted file mode 100644 index 6d0dade..0000000 --- a/testdata/scad/features/minkowski-tests.scad +++ /dev/null @@ -1,67 +0,0 @@ - -// Rounded box using 3d minkowski -module roundedBox3dSimple() { - minkowski() { - cube([10,10,5]); - cylinder(r=5, h=5); - } -} - -// Currently segfaults -module roundedBox3dCut() { - minkowski() { - difference() { - cube([10,10,5]); - cube([5,5,5]); - } - cylinder(r=5, h=5); - } -} - -// Currently segfaults -module roundedBox3dHole() { - minkowski() { - difference() { - cube([10,10,5]); - translate([2,2,-2]) cube([6,6,10]); - } - cylinder(r=2); - } -} - -// Works correctly -module roundedBox2dSimple() { - minkowski() { - square([10,10]); - circle(r=5); - } -} - -// Works correctly -module roundedBox2dCut() { - minkowski() { - difference() { - square([10,10]); - square([5,5]); - } - circle(r=5); - } -} - -// Not quite correct, result does not contain a hole, since the impl currently returns the outer boundary of the polygon_with_holes. -module roundedBox2dHole() { - minkowski() { - difference() { - square([10,10]); - translate([2,2]) square([6,6]); - } - circle(r=2); - } -} - -translate([-25,0,0]) roundedBox2dHole(); -translate([0,0,0]) roundedBox2dCut(); -translate([25,0,0]) roundedBox2dSimple(); -translate([-25,25,0]) roundedBox3dHole(); -translate([0,25,0]) roundedBox3dCut(); -translate([25,25,0]) roundedBox3dSimple(); diff --git a/testdata/scad/features/minkowski2-tests.scad b/testdata/scad/features/minkowski2-tests.scad new file mode 100644 index 0000000..08f3d98 --- /dev/null +++ b/testdata/scad/features/minkowski2-tests.scad @@ -0,0 +1,31 @@ +module roundedBox2dSimple() { + minkowski() { + square([10,10]); + circle(r=5); + } +} + +module roundedBox2dCut() { + minkowski() { + difference() { + square([10,10]); + square([5,5]); + } + circle(r=5); + } +} + +// Not quite correct, result does not contain a hole, since the impl currently returns the outer boundary of the polygon_with_holes. +module roundedBox2dHole() { + minkowski() { + difference() { + square([10,10], center=true); + square([8,8], center=true); + } + circle(r=2); + } +} + +translate([-20,5,0]) roundedBox2dHole(); +translate([0,0,0]) roundedBox2dCut(); +translate([25,0,0]) roundedBox2dSimple(); diff --git a/testdata/scad/features/minkowski3-tests.scad b/testdata/scad/features/minkowski3-tests.scad new file mode 100644 index 0000000..0451b57 --- /dev/null +++ b/testdata/scad/features/minkowski3-tests.scad @@ -0,0 +1,35 @@ +module roundedBox3dSimple() { + minkowski() { + cube([10,10,5]); + cylinder(r=5, h=5); + } +} + +module roundedBox3dCut() { + minkowski() { + difference() { + cube([10,10,5]); + cube([5,5,5]); + } + cylinder(r=5, h=5); + } +} + +module roundedBox3dHole() { + minkowski() { + difference() { + cube([10,10,5], center=true); + cube([8,8,10], center=true); + } + cylinder(r=2); + } +} + +translate([-20,30,0]) roundedBox3dHole(); +translate([0,25,0]) roundedBox3dCut(); +translate([25,25,0]) roundedBox3dSimple(); + +// Empty +minkowski(); +// No children +minkowski() { } diff --git a/testdata/scad/features/polygon-tests.scad b/testdata/scad/features/polygon-tests.scad new file mode 100644 index 0000000..ab3a345 --- /dev/null +++ b/testdata/scad/features/polygon-tests.scad @@ -0,0 +1,17 @@ +polygon(); +polygon([]); +polygon([[],[]]); +polygon([[[]]]); +translate([2,0,0]) polygon([[0,0], [1,0], [1,1]]); +translate([0,2,0]) polygon([[0,0]]); +translate([2,2,0]) polygon([[0,0],[1,1]]); +translate([2,2,0]) polygon([[0,0],[1,1],[2,2]]); +translate([0,-2,0]) polygon(points=[[0,0], [1,0], [1,1], [0,1]]); +translate([0,-4,0]) polygon(points=[[0,0], [1,0], [1,1], [0,1]], paths=[]); +translate([2,-2,0]) polygon([[0,0], [1,0], [0.8,0.5], [1,1], [0,1]]); + +points = [[0,0], [0.5,-0.2], [1,0], [1.2,0.5], [1,1], [0.5,1.2], [0,1], [-0.2,0.5]]; +translate([-2,0,0]) polygon(points); +translate([-2,-2,0]) polygon(points=points, paths=[[0,1,2,3], [4,5,6,7]]); + +// FIXME: convexity diff --git a/testdata/scad/features/projection-tests.scad b/testdata/scad/features/projection-tests.scad index 619aa01..e1b05c7 100644 --- a/testdata/scad/features/projection-tests.scad +++ b/testdata/scad/features/projection-tests.scad @@ -1,3 +1,10 @@ +// Empty +projection(); +// No children +projection() { } +// 2D child +projection(cut=true) { square(); } + linear_extrude(height=20) projection(cut=false) sphere(r=10); translate([22,0,0]) linear_extrude(height=20) projection(cut=true) translate([0,0,9]) sphere(r=10); translate([44,0,0]) linear_extrude(height=20) projection(cut=true) translate([0,0,7]) sphere(r=10); diff --git a/testdata/scad/features/render-tests.scad b/testdata/scad/features/render-tests.scad new file mode 100644 index 0000000..5fcb026 --- /dev/null +++ b/testdata/scad/features/render-tests.scad @@ -0,0 +1,36 @@ +module edgeprofile() +{ + difference() { + cube([20, 20, 150], center = true); + translate([-10, -10, 0]) cylinder(h = 80, r = 10, center = true); + } +} + +module rendered_edgeprofile() +{ + render(convexity = 2) edgeprofile(); +} + +module mycube() { + difference() { + cube(100, center = true); + translate([ -50, -50, 0 ]) rotate(180, [0, 0, 1]) edgeprofile(); + translate([ 50, -50, 0 ]) rotate(270, [0, 0, 1]) edgeprofile(); + } +} + +module rendered_mycube() { + difference() { + cube(100, center = true); + translate([ -50, -50, 0 ]) rotate(180, [0, 0, 1]) rendered_edgeprofile(); + translate([ 50, -50, 0 ]) rotate(270, [0, 0, 1]) rendered_edgeprofile(); + } +} + +// Empty +render(); +// No children +render() { } + +mycube(); +translate([110,0,0]) rendered_mycube(); diff --git a/testdata/scad/features/root-modifier.scad b/testdata/scad/features/root-modifier.scad new file mode 100644 index 0000000..6c36433 --- /dev/null +++ b/testdata/scad/features/root-modifier.scad @@ -0,0 +1,4 @@ +difference() { + sphere(r=10); + !cylinder(h=30, r=6, center=true); +} diff --git a/testdata/scad/features/rotate_extrude-tests.scad b/testdata/scad/features/rotate_extrude-tests.scad index 7bbcef0..347bc78 100644 --- a/testdata/scad/features/rotate_extrude-tests.scad +++ b/testdata/scad/features/rotate_extrude-tests.scad @@ -1,2 +1,30 @@ +// Empty +rotate_extrude(); +// No children +rotate_extrude() { } +// 3D child +rotate_extrude() { cube(); } + +// Normal rotate_extrude() translate([20,0,0]) circle(r=10); +// Sweep of polygon with hole +translate([50,-20,0]) { + difference() { + rotate_extrude() translate([20,0,0]) difference() { + circle(r=10); circle(r=8); + } + translate([-50,0,0]) cube([100,100,100], center=true); + } +} + +// Alternative, difference between two solid sweeps +translate([50,50,0]) { + difference() { + difference() { + rotate_extrude() translate([20,0,0]) circle(r=10); + rotate_extrude() translate([20,0,0]) circle(r=8); + } + translate([-50,0,0]) cube([100,100,100], center=true); + } +} diff --git a/testdata/scad/features/sphere-tests.scad b/testdata/scad/features/sphere-tests.scad index f87aa26..e666c1b 100644 --- a/testdata/scad/features/sphere-tests.scad +++ b/testdata/scad/features/sphere-tests.scad @@ -1,4 +1,10 @@ -sphere(5); -translate([0,12,0]) sphere(5, $fa=5, $fs=0.5); -translate([12,0,0]) sphere(r=6); -translate([12,12,0]) sphere(r=6, $fn=5); +sphere(); +translate([2,0,0]) sphere(r=0); +translate([0,11,0]) sphere(5); +translate([0,-11,0]) sphere(r=5); +translate([11,-11,0]) sphere(5, $fn=5); +translate([11,0,0]) sphere(5, $fn=10); +translate([11,11,0]) sphere(5, $fn=15); +translate([22,-11, 0]) sphere(5, $fa=20, $fs=0.3); +translate([22, 0, 0]) sphere(5, $fa=30, $fs=0.3); +translate([22, 11, 0]) sphere(5, $fa=40, $fs=0.3); diff --git a/testdata/scad/features/square-tests.scad b/testdata/scad/features/square-tests.scad new file mode 100644 index 0000000..57ec1c4 --- /dev/null +++ b/testdata/scad/features/square-tests.scad @@ -0,0 +1,8 @@ +square(); +translate([2,0,0]) square([1,1], true); +translate([4,0,0]) square(size=[1,1], center=true); +translate([6,0,0]) square([0,0], true); +translate([0,2,0]) square([1,0], true); +translate([2,2,0]) square([0,1], true); +translate([4,2,0]) square([1,2], true); +translate([6,2,0]) square([2,1], true); diff --git a/testdata/scad/features/sub1/sub2/sub3/include-test4.scad b/testdata/scad/features/sub1/sub2/sub3/include-test4.scad index 1cb7eab..c13368c 100644 --- a/testdata/scad/features/sub1/sub2/sub3/include-test4.scad +++ b/testdata/scad/features/sub1/sub2/sub3/include-test4.scad @@ -1,4 +1,4 @@ module test4() { - echo("included from include-test4.scad"); + cylinder(r=0.5, $fn=10, center=true); } diff --git a/testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad b/testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad index 9f4c963..140c4ed 100644 --- a/testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad +++ b/testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad @@ -6,5 +6,5 @@ include <../include-test4.scad> module test2 () { - echo("included from include-test2.scad"); + cube(center=true); } diff --git a/testdata/scad/features/sub1/sub2/sub3/sub4/include-test3.scad b/testdata/scad/features/sub1/sub2/sub3/sub4/include-test3.scad index 2f67e93..6e3537e 100644 --- a/testdata/scad/features/sub1/sub2/sub3/sub4/include-test3.scad +++ b/testdata/scad/features/sub1/sub2/sub3/sub4/include-test3.scad @@ -1,4 +1,4 @@ module test3() { - echo("included from include-test3.scad"); + cylinder(r1=0.7, r2=0.2, center=true); } diff --git a/testdata/scad/features/surface-tests.scad b/testdata/scad/features/surface-tests.scad index 32072fa..5a67293 100644 --- a/testdata/scad/features/surface-tests.scad +++ b/testdata/scad/features/surface-tests.scad @@ -1 +1,2 @@ -surface("surface.dat"); +surface(); +surface("surface.dat", center=true); diff --git a/testdata/scad/testcolornames.scad b/testdata/scad/features/testcolornames.scad index b9ad334..b9ad334 100644 --- a/testdata/scad/testcolornames.scad +++ b/testdata/scad/features/testcolornames.scad diff --git a/testdata/scad/features/transform-tests.scad b/testdata/scad/features/transform-tests.scad new file mode 100644 index 0000000..a591695 --- /dev/null +++ b/testdata/scad/features/transform-tests.scad @@ -0,0 +1,18 @@ +module mycyl() { + cylinder(r1=10, r2=0, h=20); +} + +translate([25,0,0]) scale([1,2,0.5]) mycyl(); +translate([20,-30,0]) scale(0.5) mycyl(); +translate([0,-20,0]) rotate([90,0,0]) mycyl(); +rotate(v=[-1,0,0], a=45) mycyl(); +multmatrix([[1,0,0,-25], + [0,1,0,0], + [0,0,1,0], + [0,0,0,1]]) mycyl(); +multmatrix([[1,0.4,0.1,-25], + [0.4,0.8,0,-25], + [0.2,0.2,0.5,0], + [0,0,0,1]]) mycyl(); + +//FIXME: mirror()
\ No newline at end of file diff --git a/testdata/scad/features/union-tests.scad b/testdata/scad/features/union-tests.scad new file mode 100644 index 0000000..718aa8c --- /dev/null +++ b/testdata/scad/features/union-tests.scad @@ -0,0 +1,29 @@ +translate([-12,0,0]) union() { + cube([10,10,10]); + translate([4,4,8]) cube([2,2,10]); +} + +union() { + cube([10,10,10]); + translate([0,0,10]) cube([2,2,10]); +} + +translate([12,0,0]) union() { + cube([10,10,10]); + translate([0,0,11]) cube([2,2,10]); +} + +translate([24,0,0]) union() { + cube([10,10,10]); + translate([4,4,10]) cube([2,2,10]); +} + +translate([-12,12,0]) union() { + cube([10,10,10]); + translate([-2,10,10]) cube([2,2,10]); +} + +translate([0,12,0]) union() { + cube([10,10,10]); + translate([0,10,10]) cube([2,2,10]); +} diff --git a/testdata/scad/minimal/allfunctions.scad b/testdata/scad/minimal/allfunctions.scad new file mode 100644 index 0000000..e58bd07 --- /dev/null +++ b/testdata/scad/minimal/allfunctions.scad @@ -0,0 +1,24 @@ +a = abs(); +a = sign(); +a = rands(); +a = min(); +a = max(); +a = sin(); +a = cos(); +a = asin(); +a = acos(); +a = tan(); +a = atan(); +a = atan2(); +a = round(); +a = ceil(); +a = floor(); +a = pow(); +a = sqrt(); +a = exp(); +a = log(); +a = ln(); +a = str(); +a = lookup(); +a = dxf_dim(); +a = dxf_cross(); diff --git a/testdata/scad/minimal/allmodules.scad b/testdata/scad/minimal/allmodules.scad index a940947..4395fd7 100644 --- a/testdata/scad/minimal/allmodules.scad +++ b/testdata/scad/minimal/allmodules.scad @@ -15,6 +15,7 @@ dxf_linear_extrude(); linear_extrude(); dxf_rotate_extrude(); rotate_extrude(); +import(); import_stl(); import_off(); import_dxf(); diff --git a/testdata/scad/minimal/import.scad b/testdata/scad/minimal/import.scad new file mode 100644 index 0000000..6f375fe --- /dev/null +++ b/testdata/scad/minimal/import.scad @@ -0,0 +1 @@ +import(); |