summaryrefslogtreecommitdiff
path: root/testdata/scad
diff options
context:
space:
mode:
Diffstat (limited to 'testdata/scad')
-rw-r--r--testdata/scad/bugs/gridbug.scad9
-rw-r--r--testdata/scad/bugs/horn-torus.scad5
-rw-r--r--testdata/scad/bugs/minkowski-assert.scad8
-rw-r--r--testdata/scad/bugs/polygon-touch.scad5
-rw-r--r--testdata/scad/features/2d-3d.scad3
-rw-r--r--testdata/scad/features/assign-tests.scad6
-rw-r--r--testdata/scad/features/background-modifier.scad4
-rw-r--r--testdata/scad/features/child-tests.scad34
-rw-r--r--testdata/scad/features/circle-tests.scad10
-rw-r--r--testdata/scad/features/color-tests.scad15
-rw-r--r--testdata/scad/features/cube-tests.scad4
-rw-r--r--testdata/scad/features/cylinder-tests.scad15
-rw-r--r--testdata/scad/features/difference-tests.scad30
-rw-r--r--testdata/scad/features/disable-modifier.scad4
-rw-r--r--testdata/scad/features/for-nested-tests.scad3
-rw-r--r--testdata/scad/features/for-tests.scad41
-rw-r--r--testdata/scad/features/highlight-modifier.scad4
-rw-r--r--testdata/scad/features/hull2-tests.scad30
-rw-r--r--testdata/scad/features/hull3-tests.scad (renamed from testdata/scad/features/hull-tests.scad)28
-rw-r--r--testdata/scad/features/ifelse-tests.scad44
-rw-r--r--testdata/scad/features/import_dxf-tests.scad9
-rw-r--r--testdata/scad/features/include test6.scad5
-rw-r--r--testdata/scad/features/include-test5.scad2
-rw-r--r--testdata/scad/features/include-tests.scad (renamed from testdata/scad/features/include-test.scad)10
-rw-r--r--testdata/scad/features/intersection-tests.scad41
-rw-r--r--testdata/scad/features/intersection_for-tests.scad10
-rw-r--r--testdata/scad/features/linear_extrude-tests.scad16
-rw-r--r--testdata/scad/features/minkowski-tests.scad67
-rw-r--r--testdata/scad/features/minkowski2-tests.scad31
-rw-r--r--testdata/scad/features/minkowski3-tests.scad35
-rw-r--r--testdata/scad/features/polygon-tests.scad17
-rw-r--r--testdata/scad/features/projection-tests.scad7
-rw-r--r--testdata/scad/features/render-tests.scad36
-rw-r--r--testdata/scad/features/root-modifier.scad4
-rw-r--r--testdata/scad/features/rotate_extrude-tests.scad28
-rw-r--r--testdata/scad/features/sphere-tests.scad14
-rw-r--r--testdata/scad/features/square-tests.scad8
-rw-r--r--testdata/scad/features/sub1/sub2/sub3/include-test4.scad2
-rw-r--r--testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad2
-rw-r--r--testdata/scad/features/sub1/sub2/sub3/sub4/include-test3.scad2
-rw-r--r--testdata/scad/features/surface-tests.scad3
-rw-r--r--testdata/scad/features/testcolornames.scad (renamed from testdata/scad/testcolornames.scad)0
-rw-r--r--testdata/scad/features/transform-tests.scad18
-rw-r--r--testdata/scad/features/union-tests.scad29
-rw-r--r--testdata/scad/minimal/allfunctions.scad24
-rw-r--r--testdata/scad/minimal/allmodules.scad1
-rw-r--r--testdata/scad/minimal/import.scad1
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();
contact: Jan Huwald // Impressum