-
-thisFont=8bit_polyfont();
-x_shift=thisFont[0][0];
-y_shift=thisFont[0][1];
-
-hours=["one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve"];
-
-module clock_hour_words(word_offset=20.0,word_height=2.0) {
- for(i=[0:(len(hours)-1)]) assign( hourHandAngle=(i+1)*360/len(hours), theseIndicies=search(hours[i],thisFont[2],1,1) ) {
- rotate(90-hourHandAngle) translate([word_offset,0])
- for( j=[0:(len(theseIndicies)-1)] ) translate([j*x_shift,-y_shift/2]) {
- linear_extrude(height=word_height) polygon(points=thisFont[2][theseIndicies[j]][6][0],paths=thisFont[2][theseIndicies[j]][6][1]);
- }
- }
-}
-
-clock_hour_words(word_offset=16.0,word_height=5.0);
diff --git a/packages/scad-deserializer/tests/general.js b/packages/scad-deserializer/tests/general.js
deleted file mode 100755
index cf80dff..0000000
--- a/packages/scad-deserializer/tests/general.js
+++ /dev/null
@@ -1,147 +0,0 @@
-var assert = require("assert");
-var parser = require("../src/openscad-parser").parser;
-
-function check(test, expected) {
- assert.equal(parse(test), expected);
-}
-
-function run(test){
- var f = new Function(parse(test));
- return f();
-}
-
-exports["test variable assigments"] = function() {
- check("x = 123;", "var x;\nx = 123;");
- check("x = 123.456;", "var x;\nx = 123.456;");
- check("x = 2e-1;", "var x;\nx = 0.2;");
- check("x = \"string\";", "var x;\nx = \"string\";");
- check("x = true;", "var x;\nx = true;");
- check("x = false;", "var x;\nx = false;");
-}
-
-exports["test echo"] = function() {
- check("echo(\"string\");", "console.log(\"ECHO: \" + \"string\");");
- check("echo(123);", "console.log(\"ECHO: \" + 123);");
- check("echo(123.456);", "console.log(\"ECHO: \" + 123.456);");
- check("echo(2e-1);", "console.log(\"ECHO: \" + 0.2);");
- check("echo(true);", "console.log(\"ECHO: \" + true);");
- check("echo(false);", "console.log(\"ECHO: \" + false);");
-}
-
-exports["test comments"] = function() {
- parse("// single line comment");
- parse("myvar = 10; // The rest of the line is a comment");
- parse("/* Multi-line comments \n can span multiple lines.*/");
-}
-
-exports["test operations"] = function() {
- check("x = 5 + 4;", "var x;\nx = 9;");
- check("x = 5 - 4;", "var x;\nx = 1;");
- check("x = 2 * 2;", "var x;\nx = 4;");
- check("x = 6 / 2;", "var x;\nx = 3;");
- check("x = 5 % 2;", "var x;\nx = 1;");
-
- check("x = 5 < 6;", "var x;\nx = true;");
- check("x = 5 <= 6;", "var x;\nx = true;");
- check("x = 5 > 6;", "var x;\nx = false;");
- check("x = 5 >= 6;", "var x;\nx = false;");
- check("x = true && true;", "var x;\nx = true;");
- check("x = true || false;", "var x;\nx = true;");
-
-
- check("x = +5;","var x;\nx = 5;");
- check("x = -5;","var x;\nx = -5;");
- check("x = +5 + -5;","var x;\nx = 0;");
-}
-
-exports["test Variables are set at compile-time, not run-time"] = function() {
-
- var openscad = "// The value of 'a' reflects only the last set value\na = 0;\necho(a);\na = 5;\necho(a);";
-
- var stdout = process.stdout;
- var stdoutLog = [];
-
- install_hook_to(stdout);
-
- stdout.hook('write', function(string, encoding, fd, write) {
- stdoutLog.push(string);
- });
- try {
- run(openscad);
- assert.equal(stdoutLog.join(), "ECHO: 5\n,ECHO: 5\n");
- } finally {
- stdout.unhook('write');
- }
-
-
-}
-
-/* Useful function to temporarily override a method - used to record stdout
- via: http://stackoverflow.com/a/9624028/188624
-*/
-var install_hook_to = function(obj) {
-
- if (obj.hook || obj.unhook) {
- throw new Error('Object already has properties hook and/or unhook');
- }
-
- obj.hook = function(_meth_name, _fn, _is_async) {
- var self = this,
- meth_ref;
-
- // Make sure method exists
- if (! (Object.prototype.toString.call(self[_meth_name]) === '[object Function]')) {
- throw new Error('Invalid method: ' + _meth_name);
- }
-
- // We should not hook a hook
- if (self.unhook.methods[_meth_name]) {
- throw new Error('Method already hooked: ' + _meth_name);
- }
-
- // Reference default method
- meth_ref = (self.unhook.methods[_meth_name] = self[_meth_name]);
-
- self[_meth_name] = function() {
- var args = Array.prototype.slice.call(arguments);
-
- // Our hook should take the same number of arguments
- // as the original method so we must fill with undefined
- // optional args not provided in the call
- while (args.length < meth_ref.length) {
- args.push(undefined);
- }
-
- // Last argument is always original method call
- args.push(function() {
- var args = arguments;
-
- if (_is_async) {
- process.nextTick(function() {
- meth_ref.apply(self, args);
- });
- } else {
- meth_ref.apply(self, args);
- }
- });
-
- _fn.apply(self, args);
- };
- };
-
- obj.unhook = function(_meth_name) {
- var self = this,
- ref = self.unhook.methods[_meth_name];
-
- if (ref) {
- self[_meth_name] = self.unhook.methods[_meth_name];
- delete self.unhook.methods[_meth_name];
- } else {
- throw new Error('Method not hooked: ' + _meth_name);
- }
- };
-
- obj.unhook.methods = {};
-};
-
-if(module === require.main) require("test").run(exports);
diff --git a/packages/scad-deserializer/tests/helpers.js b/packages/scad-deserializer/tests/helpers.js
deleted file mode 100644
index 9eea24e..0000000
--- a/packages/scad-deserializer/tests/helpers.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const fs = require('fs')
-const path = require('path')
-const assert = require('assert')
-const parser = require(path.join(__dirname, '../src/parserWrapper'))
-
-function check (filedir, testFileName) {
- var test = fs.readFileSync(path.join(__dirname, `${filedir}${testFileName}.scad`), 'utf8')
- var expected = fs.readFileSync(path.join(__dirname, `${filedir}${testFileName}.jscad`), 'utf8').replace(/\n/g, '')
- var actual = parser.parse(test).replace(/\n/g, '')
- assert.equal(actual, expected)
-}
-
-module.exports = {check}
diff --git a/packages/scad-deserializer/tests/index.html b/packages/scad-deserializer/tests/index.html
deleted file mode 100755
index 30c4724..0000000
--- a/packages/scad-deserializer/tests/index.html
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
- test
-
-
-
-
- function r_from_dia(d) = d / 2;
-
- module rotcy(rot, r, h) {
- rotate(90, rot)
- cylinder(r = r, h = h, center = true);
- }
-
- difference() {
- sphere(r = r_from_dia(size));
- rotcy([0, 0, 0], cy_r, cy_h);
- rotcy([1, 0, 0], cy_r, cy_h);
- rotcy([0, 1, 0], cy_r, cy_h);
- }
-
- size = 50;
- hole = 25;
-
- cy_r = r_from_dia(hole);
- cy_h = r_from_dia(size * 2.5);
-
-
-
-
-
-
-
diff --git a/packages/scad-deserializer/tests/math_ops.scad b/packages/scad-deserializer/tests/math_ops.scad
deleted file mode 100644
index dba78ea..0000000
--- a/packages/scad-deserializer/tests/math_ops.scad
+++ /dev/null
@@ -1,42 +0,0 @@
-echo( "Random Vector: ",rands(5,15,4,42));
-echo( "abs: ",abs(-9));
-echo( "sign: ",sign(9));
-echo( "sign: ",sign(-9));
-echo( "cos: ",cos(9));
-echo( "sin: ",sin(9));
-echo( "tan: ",tan(9));
-echo( "acos: ",acos(0.1));
-echo( "asin: ",asin(0.1));
-echo( "atan: ",atan(9));
-echo( "atan2: ",atan2(1,2));
-
-echo( "min: ",min(1,2));
-echo( "max: ",max(1,2));
-echo( "pow: ",pow(1,2));
-echo( "sqrt: ",sqrt(2));
-echo( "ln: ",ln(1));
-
-echo( "ceil: ",ceil(2.5));
-echo( "ceil: ",ceil(-2.5));
-echo( "floor: ",floor(2.5));
-echo( "floor: ",floor(-2.5));
-echo( "log: ",log(10));
-echo( "log: ",log(10,2));
-echo( "exp: ",exp(2));
-
-echo("sign");
-echo(sign(-5.0));
-echo(sign(0));
-echo(sign(8.0));
-
-echo("round");
-echo(round(2.5));// = x+1.
-echo(round(2.49));// = x.
-echo(round(-(2.5)));// = -(x+1).
-echo(round(-(2.49)));// = -x.
-
-echo(round(5.4));// //-> 5
-echo(round(5.5));// //-> 6
-echo(round(5.6));// //-> 6
-
-sphere();
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/modules.js b/packages/scad-deserializer/tests/modules.js
deleted file mode 100755
index c8ac9b2..0000000
--- a/packages/scad-deserializer/tests/modules.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const check = require('./helpers').check
-
-const filedir = 'modules/'
-
-exports['test modules'] = function () {
- check(filedir, 'modulesEx1')
-}
-
-exports['test modules child'] = function () {
- check(filedir, 'modulesChildEx1')
-}
-
-exports['test modules children'] = function () {
- check(filedir, 'modulesChildrenEx1')
-}
-
-exports['test modules parameters'] = function () {
- check(filedir, 'modulesParametersEx1')
-}
-
-if (module === require.main) require('test').run(exports)
diff --git a/packages/scad-deserializer/tests/modules/modulesChildEx1.jscad b/packages/scad-deserializer/tests/modules/modulesChildEx1.jscad
deleted file mode 100755
index ba23f48..0000000
--- a/packages/scad-deserializer/tests/modules/modulesChildEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.sphere({center: [0,0,0], radius: 30, resolution: 30}).translate([0,0,0]).union([CSG.sphere({center: [0,0,0], radius: 30, resolution: 30}).translate([65,0,0])]);
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/modules/modulesChildEx1.scad b/packages/scad-deserializer/tests/modules/modulesChildEx1.scad
deleted file mode 100755
index a50434a..0000000
--- a/packages/scad-deserializer/tests/modules/modulesChildEx1.scad
+++ /dev/null
@@ -1,6 +0,0 @@
-module lineup(num, space) {
- for (i = [0 : num-1])
- translate([ space*i, 0, 0 ]) child(0);
-}
-
-lineup(2, 65) sphere(30);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/modules/modulesChildrenEx1.jscad b/packages/scad-deserializer/tests/modules/modulesChildrenEx1.jscad
deleted file mode 100755
index 80311be..0000000
--- a/packages/scad-deserializer/tests/modules/modulesChildrenEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.sphere({center: [0,0,0], radius: 30, resolution: 30}).scale([10,1,1]).union([CSG.cube({center: [5,5,5],radius: [5,5,5], resolution: 16}).scale([10,1,1])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,50],radiusStart: 10, radiusEnd: 10, resolution: 30}).scale([10,1,1])]);
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/modules/modulesChildrenEx1.scad b/packages/scad-deserializer/tests/modules/modulesChildrenEx1.scad
deleted file mode 100755
index 58e723f..0000000
--- a/packages/scad-deserializer/tests/modules/modulesChildrenEx1.scad
+++ /dev/null
@@ -1,6 +0,0 @@
-module elongate() {
- for (i = [0 : $children-1])
- scale([10 , 1, 1 ]) child(i);
-}
-
-elongate() { sphere(30); cube([10,10,10]); cylinder(r=10,h=50); }
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/modules/modulesEx1.jscad b/packages/scad-deserializer/tests/modules/modulesEx1.jscad
deleted file mode 100755
index d62c1d4..0000000
--- a/packages/scad-deserializer/tests/modules/modulesEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,-50], end: [0,0,50],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([0,0,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 90));
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/modules/modulesEx1.scad b/packages/scad-deserializer/tests/modules/modulesEx1.scad
deleted file mode 100755
index 059c8e0..0000000
--- a/packages/scad-deserializer/tests/modules/modulesEx1.scad
+++ /dev/null
@@ -1,8 +0,0 @@
-module hole(distance, rot, size) {
- rotate(a = rot, v = [1, 0, 0]) {
- translate([0, distance, 0]) {
- cylinder(r = size, h = 100, center = true);
- }
- }
-}
-hole(0, 90, 10);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/modules/modulesParametersEx1.jscad b/packages/scad-deserializer/tests/modules/modulesParametersEx1.jscad
deleted file mode 100755
index 0a56dd9..0000000
--- a/packages/scad-deserializer/tests/modules/modulesParametersEx1.jscad
+++ /dev/null
@@ -1,10 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [0.5,0.5,0.5],radius: [0.5,0.5,0.5], resolution: 16}).translate([0,-1,0]).setColor(1,0,0).union([(new CSG.Path2D([[0,0],[0,1],[0.5,1.5],[1,1],[1,0]],true)).innerToCAG().extrude({offset: [0, 0, 1], twistangle: 0,twiststeps: 2}).rotateX(90).rotateY(0).rotateZ(0).setColor(1,0,0).translate([2,0,0]),
-CSG.sphere({center: [0,0,0], radius: 0.5, resolution: 20}).translate([0.5,0.5,1]).union([CSG.cube({center: [0.5,0.5,0.5],radius: [0.5,0.5,0.5], resolution: 16})]).translate([0,-1,0]).setColor(0,1,0).translate([4,0,0]),
-(new CSG.Path2D([[0,0],[0,1],[0.5,1.5],[1,1],[1,0]],true)).innerToCAG().extrude({offset: [0, 0, 1], twistangle: 0,twiststeps: 2}).rotateX(90).rotateY(0).rotateZ(0).setColor(0,0,1).translate([6,0,0]),
-(new CSG.Path2D([[0,0],[0,1],[0.5,1.5],[1,1],[1,0]],true)).innerToCAG().extrude({offset: [0, 0, 1], twistangle: 0,twiststeps: 2}).rotateX(90).rotateY(0).rotateZ(0).setColor(0,0,0).translate([8,0,0]),
-CSG.sphere({center: [0,0,0], radius: 0.5, resolution: 20}).translate([0.5,0.5,1]).union([CSG.cube({center: [0.5,0.5,0.5],radius: [0.5,0.5,0.5], resolution: 16})]).translate([0,-1,0]).setColor(1,0,0).translate([10,0,0]),
-CSG.cube({center: [0.5,0.5,0.5],radius: [0.5,0.5,0.5], resolution: 16}).translate([0,-1,0]).setColor(0,0.5,0.5).translate([12,0,0])]);
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/modules/modulesParametersEx1.scad b/packages/scad-deserializer/tests/modules/modulesParametersEx1.scad
deleted file mode 100755
index 8365790..0000000
--- a/packages/scad-deserializer/tests/modules/modulesParametersEx1.scad
+++ /dev/null
@@ -1,27 +0,0 @@
-module house(roof="flat",paint=[1,0,0]){
- color(paint)
- if(roof=="flat"){
- translate([0,-1,0])
- cube();
- } else if(roof=="pitched"){
- rotate([90,0,0])
- linear_extrude(height=1)
- polygon(points=[[0,0],[0,1],[0.5,1.5],[1,1],[1,0]],paths=[ [0,1,2,3,4] ]);
- } else if(roof=="domical"){
- translate([0,-1,0])
- union(){
- translate([0.5,0.5,1]) sphere(r=0.5,$fn=20);
- cube();
- }
- }
-}
-
-union(){
- house();
- translate([2,0,0]) house("pitched");
- translate([4,0,0]) house("domical",[0,1,0]);
- translate([6,0,0]) house(roof="pitched",paint=[0,0,1]);
- translate([8,0,0]) house(paint=[0,0,0],roof="pitched");
- translate([10,0,0]) house(roof="domical");
- translate([12,0,0]) house(paint=[0,0.5,0.5]);
-}
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids.js b/packages/scad-deserializer/tests/primitive_solids.js
deleted file mode 100755
index 8c77582..0000000
--- a/packages/scad-deserializer/tests/primitive_solids.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const check = require('./helpers').check
-const filedir = 'primitive_solids/'
-
-exports['test cube'] = function () {
- check(filedir, 'cubeEx1')
- check(filedir, 'cubeEx2')
-}
-
-exports['test sphere'] = function () {
- check(filedir, 'sphereEx1')
- check(filedir, 'sphereEx2')
-}
-
-exports['test cylinder'] = function () {
- check(filedir, 'cylinderEx1')
- check(filedir, 'cylinderEx2')
- check(filedir, 'cylinderEx3')
- check(filedir, 'cylinderEx5')
-}
-
-exports['test cylinder additional parameters'] = function () {
- check(filedir, 'cylinderEx4')
-}
-
-exports['test polyhedron'] = function () {
- check(filedir, 'polyhedronEx1')
- check(filedir, 'polyhedronEx2')
-}
-
-if (module === require.main) require('test').run(exports)
diff --git a/packages/scad-deserializer/tests/primitive_solids/cubeEx1.jscad b/packages/scad-deserializer/tests/primitive_solids/cubeEx1.jscad
deleted file mode 100755
index 78984ed..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cubeEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [0.5,0.5,0.5],radius: [0.5,0.5,0.5], resolution: 16});
-};
diff --git a/packages/scad-deserializer/tests/primitive_solids/cubeEx1.scad b/packages/scad-deserializer/tests/primitive_solids/cubeEx1.scad
deleted file mode 100755
index 64c8602..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cubeEx1.scad
+++ /dev/null
@@ -1 +0,0 @@
-cube(size = 1, center = false);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cubeEx2.jscad b/packages/scad-deserializer/tests/primitive_solids/cubeEx2.jscad
deleted file mode 100755
index a5df000..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cubeEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [0,0,0],radius: [0.5,1,1.5], resolution: 16});
-};
diff --git a/packages/scad-deserializer/tests/primitive_solids/cubeEx2.scad b/packages/scad-deserializer/tests/primitive_solids/cubeEx2.scad
deleted file mode 100755
index e426d7c..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cubeEx2.scad
+++ /dev/null
@@ -1 +0,0 @@
-cube(size = [1,2,3], center = true);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx1.jscad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx1.jscad
deleted file mode 100755
index aa98a2d..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,0], end: [0,0,10],radiusStart: 10, radiusEnd: 20, resolution: 30});
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx1.scad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx1.scad
deleted file mode 100755
index 382c7a6..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx1.scad
+++ /dev/null
@@ -1 +0,0 @@
-cylinder(h = 10, r1 = 10, r2 = 20, center = false);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx2.jscad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx2.jscad
deleted file mode 100755
index 5868dbf..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,-5], end: [0,0,5],radiusStart: 20, radiusEnd: 10, resolution: 30});
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx2.scad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx2.scad
deleted file mode 100755
index 21dc3e9..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx2.scad
+++ /dev/null
@@ -1 +0,0 @@
-cylinder(h = 10, r1 = 20, r2 = 10, center = true);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx3.jscad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx3.jscad
deleted file mode 100755
index 352b6d1..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx3.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,0], end: [0,0,10],radiusStart: 20, radiusEnd: 20, resolution: 30});
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx3.scad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx3.scad
deleted file mode 100755
index 4cf19a8..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx3.scad
+++ /dev/null
@@ -1 +0,0 @@
-cylinder(h = 10, r=20);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx4.jscad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx4.jscad
deleted file mode 100755
index 5f6b444..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx4.jscad
+++ /dev/null
@@ -1 +0,0 @@
-function main(){return CSG.cylinder({start: [0,0,0], end: [0,0,10],radiusStart: 20, radiusEnd: 20, resolution: 21});};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx4.scad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx4.scad
deleted file mode 100755
index e8ce847..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx4.scad
+++ /dev/null
@@ -1 +0,0 @@
-cylinder(h = 10, r=20, $fs=6);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx5.jscad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx5.jscad
deleted file mode 100755
index 38a5226..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx5.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,0], end: [0,0,10],radiusStart: 20, radiusEnd: 20, resolution: 100});
-};
diff --git a/packages/scad-deserializer/tests/primitive_solids/cylinderEx5.scad b/packages/scad-deserializer/tests/primitive_solids/cylinderEx5.scad
deleted file mode 100755
index a23eefc..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/cylinderEx5.scad
+++ /dev/null
@@ -1 +0,0 @@
-cylinder(h = 10, r=20, $fn=100);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/polyhedronEx1.jscad b/packages/scad-deserializer/tests/primitive_solids/polyhedronEx1.jscad
deleted file mode 100755
index a7ee759..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/polyhedronEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.fromPolygons([new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,0,10])),new CSG.Vertex(new CSG.Vector3D([10,-10,0])),new CSG.Vertex(new CSG.Vector3D([10,10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,0,10])),new CSG.Vertex(new CSG.Vector3D([-10,-10,0])),new CSG.Vertex(new CSG.Vector3D([10,-10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,0,10])),new CSG.Vertex(new CSG.Vector3D([-10,10,0])),new CSG.Vertex(new CSG.Vector3D([-10,-10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,0,10])),new CSG.Vertex(new CSG.Vector3D([10,10,0])),new CSG.Vertex(new CSG.Vector3D([-10,10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([-10,10,0])),new CSG.Vertex(new CSG.Vector3D([10,10,0])),new CSG.Vertex(new CSG.Vector3D([10,-10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([-10,10,0])),new CSG.Vertex(new CSG.Vector3D([10,-10,0])),new CSG.Vertex(new CSG.Vector3D([-10,-10,0]))])]);
-};
diff --git a/packages/scad-deserializer/tests/primitive_solids/polyhedronEx1.scad b/packages/scad-deserializer/tests/primitive_solids/polyhedronEx1.scad
deleted file mode 100755
index ce4d271..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/polyhedronEx1.scad
+++ /dev/null
@@ -1,6 +0,0 @@
-polyhedron(
- points=[ [10,10,0],[10,-10,0],[-10,-10,0],[-10,10,0], // the four points at base
- [0,0,10] ], // the apex point
- triangles=[ [0,1,4],[1,2,4],[2,3,4],[3,0,4], // each triangle side
- [1,0,3],[2,1,3] ] // two triangles for square base
- );
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/polyhedronEx2.jscad b/packages/scad-deserializer/tests/primitive_solids/polyhedronEx2.jscad
deleted file mode 100755
index acd8735..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/polyhedronEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.fromPolygons([new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,10,0])),new CSG.Vertex(new CSG.Vector3D([0,-10,0])),new CSG.Vertex(new CSG.Vector3D([0,-10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,10,60])),new CSG.Vertex(new CSG.Vector3D([0,10,0])),new CSG.Vertex(new CSG.Vector3D([0,-10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([60,10,60])),new CSG.Vertex(new CSG.Vector3D([0,-10,60])),new CSG.Vertex(new CSG.Vector3D([60,-10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,10,60])),new CSG.Vertex(new CSG.Vector3D([0,-10,60])),new CSG.Vertex(new CSG.Vector3D([60,10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([60,-10,60])),new CSG.Vertex(new CSG.Vector3D([0,10,0])),new CSG.Vertex(new CSG.Vector3D([60,10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,-10,0])),new CSG.Vertex(new CSG.Vector3D([0,10,0])),new CSG.Vertex(new CSG.Vector3D([60,-10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([10,-10,30])),new CSG.Vertex(new CSG.Vector3D([10,10,30])),new CSG.Vertex(new CSG.Vector3D([10,-10,50]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([10,10,30])),new CSG.Vertex(new CSG.Vector3D([10,10,50])),new CSG.Vertex(new CSG.Vector3D([10,-10,50]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([30,10,50])),new CSG.Vertex(new CSG.Vector3D([30,-10,50])),new CSG.Vertex(new CSG.Vector3D([10,-10,50]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([10,10,50])),new CSG.Vertex(new CSG.Vector3D([30,10,50])),new CSG.Vertex(new CSG.Vector3D([10,-10,50]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([30,10,50])),new CSG.Vertex(new CSG.Vector3D([10,10,30])),new CSG.Vertex(new CSG.Vector3D([30,-10,50]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([10,10,30])),new CSG.Vertex(new CSG.Vector3D([10,-10,30])),new CSG.Vertex(new CSG.Vector3D([30,-10,50]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([10,-10,30])),new CSG.Vertex(new CSG.Vector3D([0,-10,60])),new CSG.Vertex(new CSG.Vector3D([0,-10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([10,-10,50])),new CSG.Vertex(new CSG.Vector3D([0,-10,60])),new CSG.Vertex(new CSG.Vector3D([10,-10,30]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,-10,60])),new CSG.Vertex(new CSG.Vector3D([10,-10,50])),new CSG.Vertex(new CSG.Vector3D([30,-10,50]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([30,-10,50])),new CSG.Vertex(new CSG.Vector3D([60,-10,60])),new CSG.Vertex(new CSG.Vector3D([0,-10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([30,-10,50])),new CSG.Vertex(new CSG.Vector3D([10,-10,30])),new CSG.Vertex(new CSG.Vector3D([0,-10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([60,-10,60])),new CSG.Vertex(new CSG.Vector3D([30,-10,50])),new CSG.Vertex(new CSG.Vector3D([0,-10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([30,10,50])),new CSG.Vertex(new CSG.Vector3D([10,10,50])),new CSG.Vertex(new CSG.Vector3D([0,10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([60,10,60])),new CSG.Vertex(new CSG.Vector3D([30,10,50])),new CSG.Vertex(new CSG.Vector3D([0,10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([10,10,50])),new CSG.Vertex(new CSG.Vector3D([10,10,30])),new CSG.Vertex(new CSG.Vector3D([0,10,60]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,10,60])),new CSG.Vertex(new CSG.Vector3D([10,10,30])),new CSG.Vertex(new CSG.Vector3D([0,10,0]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([30,10,50])),new CSG.Vertex(new CSG.Vector3D([0,10,0])),new CSG.Vertex(new CSG.Vector3D([10,10,30]))]),new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([0,10,0])),new CSG.Vertex(new CSG.Vector3D([30,10,50])),new CSG.Vertex(new CSG.Vector3D([60,10,60]))])]);
-};
diff --git a/packages/scad-deserializer/tests/primitive_solids/polyhedronEx2.scad b/packages/scad-deserializer/tests/primitive_solids/polyhedronEx2.scad
deleted file mode 100755
index 22175b4..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/polyhedronEx2.scad
+++ /dev/null
@@ -1,13 +0,0 @@
-polyhedron
- (points = [
- [0, -10, 60], [0, 10, 60], [0, 10, 0], [0, -10, 0], [60, -10, 60], [60, 10, 60],
- [10, -10, 50], [10, 10, 50], [10, 10, 30], [10, -10, 30], [30, -10, 50], [30, 10, 50]
- ],
- triangles = [
- [0,3,2], [0,2,1], [4,0,5], [5,0,1], [5,2,4], [4,2,3],
- [6,8,9], [6,7,8], [6,10,11],[6,11,7], [10,8,11],
- [10,9,8], [3,0,9], [9,0,6], [10,6, 0],[0,4,10],
- [3,9,10], [3,10,4], [1,7,11], [1,11,5], [1,8,7],
- [2,8,1], [8,2,11], [5,11,2]
- ]
- );
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/sphereEx1.jscad b/packages/scad-deserializer/tests/primitive_solids/sphereEx1.jscad
deleted file mode 100755
index 1538501..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/sphereEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.sphere({center: [0,0,0], radius: 1, resolution: 5});
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/sphereEx1.scad b/packages/scad-deserializer/tests/primitive_solids/sphereEx1.scad
deleted file mode 100755
index 51c0d33..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/sphereEx1.scad
+++ /dev/null
@@ -1 +0,0 @@
-sphere(r = 1);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/sphereEx2.jscad b/packages/scad-deserializer/tests/primitive_solids/sphereEx2.jscad
deleted file mode 100755
index 8218557..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/sphereEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.sphere({center: [0,0,0], radius: 2, resolution: 100});
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/primitive_solids/sphereEx2.scad b/packages/scad-deserializer/tests/primitive_solids/sphereEx2.scad
deleted file mode 100755
index cecda14..0000000
--- a/packages/scad-deserializer/tests/primitive_solids/sphereEx2.scad
+++ /dev/null
@@ -1,2 +0,0 @@
-// this will create a high resolution sphere with a 2mm radius
-sphere(2, $fn=100);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests.js b/packages/scad-deserializer/tests/submodule_tests.js
deleted file mode 100755
index 09a2182..0000000
--- a/packages/scad-deserializer/tests/submodule_tests.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const check = require('./helpers').check
-const filedir = 'submodule_tests/'
-
-exports['test transformed submodule'] = function () {
- check(filedir, 'transformedSubmoduleEx1')
-}
-
-exports['test transformed submodule with extra line'] = function () {
- check(filedir, 'transformedSubmoduleEx2')
-}
-
-exports['test transformed submodule with color mod'] = function () {
- check(filedir, 'transformedSubmoduleEx3')
-}
-
-exports['test nested submodules'] = function () {
- check(filedir, 'nestedSubmoduleEx1')
- check(filedir, 'nestedSubmoduleEx2')
-}
-
-if (module === require.main) require('test').run(exports)
diff --git a/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx1.jscad b/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx1.jscad
deleted file mode 100755
index 33fca58..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [0,0,0],radius: [0.5,1,0.5], resolution: 16});
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx1.scad b/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx1.scad
deleted file mode 100755
index 270203f..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx1.scad
+++ /dev/null
@@ -1,9 +0,0 @@
-module mycube2(a,b) {
- cube(size=[a, b, 1], center=true);
-}
-
-module mycube(a,b,c) {
- mycube2(a,b);
-}
-
-mycube(1,2,3);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx2.jscad b/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx2.jscad
deleted file mode 100755
index d608f35..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [0,0,0],radius: [0.5,1,1], resolution: 16});
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx2.scad b/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx2.scad
deleted file mode 100755
index c561f2d..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/nestedSubmoduleEx2.scad
+++ /dev/null
@@ -1,12 +0,0 @@
-module mycube2(a,b) {
- module innercube(q1,q2){
- cube(size=[q1, q2, 2], center=true);
- }
- innercube(a,b);
-}
-
-module mycube1(a,b,c) {
- mycube2(a,b);
-}
-
-mycube1(1,2,3);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx1.jscad b/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx1.jscad
deleted file mode 100755
index c473015..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,-50], end: [0,0,50],radiusStart: 5, radiusEnd: 5, resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [5,5,5], resolution: 16})]).translate([25,0,0]);
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx1.scad b/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx1.scad
deleted file mode 100755
index 1480a3c..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx1.scad
+++ /dev/null
@@ -1,8 +0,0 @@
-module hole(size) {
- cylinder(r = size, h = 100, center = true);
- cube(size=[10, 10, 10], center=true);
-}
-
-translate([25, 0, 0]) {
- hole(5);
-}
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx2.jscad b/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx2.jscad
deleted file mode 100755
index 8b455d7..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,-50], end: [0,0,50],radiusStart: 5, radiusEnd: 5, resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [5,5,5], resolution: 16})]).translate([25,0,0]).union([CSG.cube({center: [0,0,0],radius: [5,5,5], resolution: 16})]);
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx2.scad b/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx2.scad
deleted file mode 100755
index b009fc9..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx2.scad
+++ /dev/null
@@ -1,10 +0,0 @@
-module hole(size) {
- cylinder(r = size, h = 100, center = true);
- cube(size=[10, 10, 10], center=true);
-}
-
-translate([25, 0, 0]) {
- hole(5);
-}
-
-cube(size=[10, 10, 10], center=true);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx3.jscad b/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx3.jscad
deleted file mode 100755
index b9ada42..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx3.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,-50], end: [0,0,50],radiusStart: 5, radiusEnd: 5, resolution: 16}).translate([25,0,0]).union([CSG.cube({center: [0,0,0],radius: [5,5,5], resolution: 16}).setColor(1,0,0).translate([25,0,0])]);
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx3.scad b/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx3.scad
deleted file mode 100755
index c27d46e..0000000
--- a/packages/scad-deserializer/tests/submodule_tests/transformedSubmoduleEx3.scad
+++ /dev/null
@@ -1,9 +0,0 @@
-module hole(size) {
- cylinder(r = size, h = 100, center = true);
-}
-
-translate([25, 0, 0]) {
- hole(5);
- color("red")
- cube(size=[10, 10, 10], center=true);
-}
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/test.scad b/packages/scad-deserializer/tests/test.scad
deleted file mode 100755
index 629de38..0000000
--- a/packages/scad-deserializer/tests/test.scad
+++ /dev/null
@@ -1,2 +0,0 @@
-square([20, 10]);
-cube(10);
diff --git a/packages/scad-deserializer/tests/testharness.js b/packages/scad-deserializer/tests/testharness.js
deleted file mode 100755
index dd10913..0000000
--- a/packages/scad-deserializer/tests/testharness.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var parser = require('../src/OpenscadOpenjscadParser')
-var fs = require('fs')
-
-var openSCADText = fs.readFileSync(__dirname + '/test.scad', 'UTF8')
-var openJSCADResult = parser.parse(openSCADText)
-
-console.log(openJSCADResult)
diff --git a/packages/scad-deserializer/tests/transformations.js b/packages/scad-deserializer/tests/transformations.js
deleted file mode 100755
index c4cf240..0000000
--- a/packages/scad-deserializer/tests/transformations.js
+++ /dev/null
@@ -1,43 +0,0 @@
-const assert = require('assert')
-const check = require('./helpers').check
-const filedir = 'transformations/'
-
-exports['test scale'] = function () {
- check(filedir, 'scaleEx1')
- check(filedir, 'scaleEx2')
-}
-
-exports['test rotate'] = function () {
- check(filedir, 'rotateEx1')
- check(filedir, 'rotateEx2')
-}
-
-exports['test translate'] = function () {
- check(filedir, 'translateEx1')
-}
-
-exports['test mirror'] = function () {
- check(filedir, 'mirrorEx1')
-}
-
-exports['test multmatrix'] = function () {
- check(filedir, 'multmatrixEx1')
- check(filedir, 'multmatrixEx2')
-}
-
-exports['test color'] = function () {
- check(filedir, 'colorEx1')
- check(filedir, 'colorEx1')
-}
-
-/*exports['test minkowski'] = function () {
- // todo
- //assert.ok(false)
-}
-
-exports['test hull'] = function () {
- // todo
- //assert.ok(false)
-}*/
-
-if (module === require.main) require('test').run(exports)
diff --git a/packages/scad-deserializer/tests/transformations/colorEx1.jscad b/packages/scad-deserializer/tests/transformations/colorEx1.jscad
deleted file mode 100755
index 24cb86c..0000000
--- a/packages/scad-deserializer/tests/transformations/colorEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [5,5,5],radius: [5,5,5], resolution: 16}).setColor(0.5019607843137255,0,0);
-};
diff --git a/packages/scad-deserializer/tests/transformations/colorEx1.scad b/packages/scad-deserializer/tests/transformations/colorEx1.scad
deleted file mode 100755
index f041415..0000000
--- a/packages/scad-deserializer/tests/transformations/colorEx1.scad
+++ /dev/null
@@ -1,2 +0,0 @@
-color([ 128/255, 0/255, 0/255 ])
- cube(size=[10,10,10],center=false);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/colorEx2.jscad b/packages/scad-deserializer/tests/transformations/colorEx2.jscad
deleted file mode 100755
index 62e8029..0000000
--- a/packages/scad-deserializer/tests/transformations/colorEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.sphere({center: [0,0,0], radius: 5, resolution: 16}).setColor(1,0,0);
-};
diff --git a/packages/scad-deserializer/tests/transformations/colorEx2.scad b/packages/scad-deserializer/tests/transformations/colorEx2.scad
deleted file mode 100755
index 59e2a70..0000000
--- a/packages/scad-deserializer/tests/transformations/colorEx2.scad
+++ /dev/null
@@ -1 +0,0 @@
-color("red") sphere(5);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/mirrorEx1.jscad b/packages/scad-deserializer/tests/transformations/mirrorEx1.jscad
deleted file mode 100755
index 3727c1a..0000000
--- a/packages/scad-deserializer/tests/transformations/mirrorEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [5,5,5],radius: [5,5,5], resolution: 16}).translate([5,0,-5]).mirrored(CSG.Plane.fromNormalAndPoint([0,1,0], [0,0,0]));
-};
diff --git a/packages/scad-deserializer/tests/transformations/mirrorEx1.scad b/packages/scad-deserializer/tests/transformations/mirrorEx1.scad
deleted file mode 100755
index a3803f5..0000000
--- a/packages/scad-deserializer/tests/transformations/mirrorEx1.scad
+++ /dev/null
@@ -1,3 +0,0 @@
-mirror([ 0, 1, 0 ])
-translate([5, 0, -5])
- cube(size=[10, 10, 10], center=false);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/multmatrixEx1.jscad b/packages/scad-deserializer/tests/transformations/multmatrixEx1.jscad
deleted file mode 100755
index 1de2d79..0000000
--- a/packages/scad-deserializer/tests/transformations/multmatrixEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,0], end: [0,0,3],radiusStart: 5, radiusEnd: 5, resolution: 16}).transform(new CSG.Matrix4x4( [1,0,0,0,0,1,0,0,0,0,1,0,10,10,10,1] ));
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/multmatrixEx1.scad b/packages/scad-deserializer/tests/transformations/multmatrixEx1.scad
deleted file mode 100755
index 3383659..0000000
--- a/packages/scad-deserializer/tests/transformations/multmatrixEx1.scad
+++ /dev/null
@@ -1,5 +0,0 @@
-multmatrix(m = [ [1, 0, 0, 10],
- [0, 1, 0, 10],
- [0, 0, 1, 10],
- [0, 0, 0, 1]
- ]) cylinder(3,5,5);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/multmatrixEx2.jscad b/packages/scad-deserializer/tests/transformations/multmatrixEx2.jscad
deleted file mode 100755
index dc36ffd..0000000
--- a/packages/scad-deserializer/tests/transformations/multmatrixEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cylinder({start: [0,0,0], end: [0,0,10],radiusStart: 10, radiusEnd: 10, resolution: 30}).union([CSG.cube({center: [5,5,5],radius: [5,5,5], resolution: 16})]).transform(new CSG.Matrix4x4( [0.7071067811865476,0.7071067811865475,0,0,-0.7071067811865475,0.7071067811865476,0,0,0,0,1,0,10,20,0,1] ));
-};
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/multmatrixEx2.scad b/packages/scad-deserializer/tests/transformations/multmatrixEx2.scad
deleted file mode 100755
index 64f0002..0000000
--- a/packages/scad-deserializer/tests/transformations/multmatrixEx2.scad
+++ /dev/null
@@ -1,9 +0,0 @@
-angle=45;
-multmatrix(m = [ [cos(angle), -sin(angle), 0, 10],
- [sin(angle), cos(angle), 0, 20],
- [0, 0, 1, 0],
- [0, 0, 0, 1]
- ]) union() {
- cylinder(r=10.0,h=10,center=false);
- cube(size=[10,10,10],center=false);
-}
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/rotateEx1.jscad b/packages/scad-deserializer/tests/transformations/rotateEx1.jscad
deleted file mode 100755
index 5bb5ff4..0000000
--- a/packages/scad-deserializer/tests/transformations/rotateEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [0,0,0],radius: [5,5,5], resolution: 16}).rotateX(0).rotateY(45).rotateZ(0);
-};
diff --git a/packages/scad-deserializer/tests/transformations/rotateEx1.scad b/packages/scad-deserializer/tests/transformations/rotateEx1.scad
deleted file mode 100755
index c30d90d..0000000
--- a/packages/scad-deserializer/tests/transformations/rotateEx1.scad
+++ /dev/null
@@ -1,3 +0,0 @@
-rotate(a=[0,45,0]) {
- cube(size=[10, 10, 10], center=true);
-}
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/rotateEx2.jscad b/packages/scad-deserializer/tests/transformations/rotateEx2.jscad
deleted file mode 100755
index 9f8ae3c..0000000
--- a/packages/scad-deserializer/tests/transformations/rotateEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [5,5,5],radius: [5,5,5], resolution: 16}).transform(CSG.Matrix4x4.rotation([0,0,0], [1,1,0], 45));
-};
diff --git a/packages/scad-deserializer/tests/transformations/rotateEx2.scad b/packages/scad-deserializer/tests/transformations/rotateEx2.scad
deleted file mode 100755
index bbe9605..0000000
--- a/packages/scad-deserializer/tests/transformations/rotateEx2.scad
+++ /dev/null
@@ -1,3 +0,0 @@
-rotate(a=45, v=[1,1,0]) {
- cube(size=[10, 10, 10], center=false);
-}
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/scaleEx1.jscad b/packages/scad-deserializer/tests/transformations/scaleEx1.jscad
deleted file mode 100755
index 0108363..0000000
--- a/packages/scad-deserializer/tests/transformations/scaleEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [0,0,0],radius: [5,5,5], resolution: 16}).scale([2,2,2]);
-};
diff --git a/packages/scad-deserializer/tests/transformations/scaleEx1.scad b/packages/scad-deserializer/tests/transformations/scaleEx1.scad
deleted file mode 100755
index 3f293a4..0000000
--- a/packages/scad-deserializer/tests/transformations/scaleEx1.scad
+++ /dev/null
@@ -1,3 +0,0 @@
-scale(v = [2,2,2]) {
- cube(size=[10, 10, 10], center=true);
-}
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/scaleEx2.jscad b/packages/scad-deserializer/tests/transformations/scaleEx2.jscad
deleted file mode 100755
index 0108363..0000000
--- a/packages/scad-deserializer/tests/transformations/scaleEx2.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [0,0,0],radius: [5,5,5], resolution: 16}).scale([2,2,2]);
-};
diff --git a/packages/scad-deserializer/tests/transformations/scaleEx2.scad b/packages/scad-deserializer/tests/transformations/scaleEx2.scad
deleted file mode 100755
index d180460..0000000
--- a/packages/scad-deserializer/tests/transformations/scaleEx2.scad
+++ /dev/null
@@ -1,2 +0,0 @@
-scale(v = [2,2,2])
- cube(size=[10, 10, 10], center=true);
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/transformations/translateEx1.jscad b/packages/scad-deserializer/tests/transformations/translateEx1.jscad
deleted file mode 100755
index abc35ad..0000000
--- a/packages/scad-deserializer/tests/transformations/translateEx1.jscad
+++ /dev/null
@@ -1,5 +0,0 @@
-function main(){
-
-
-return CSG.cube({center: [5,5,5],radius: [5,5,5], resolution: 16}).translate([5,0,-5]);
-};
diff --git a/packages/scad-deserializer/tests/transformations/translateEx1.scad b/packages/scad-deserializer/tests/transformations/translateEx1.scad
deleted file mode 100755
index a35eddb..0000000
--- a/packages/scad-deserializer/tests/transformations/translateEx1.scad
+++ /dev/null
@@ -1,3 +0,0 @@
-translate(v = [5, 0, -5]) {
- cube(size=[10, 10, 10], center=false);
-}
\ No newline at end of file
diff --git a/packages/scad-deserializer/tests/undef_tests.scad b/packages/scad-deserializer/tests/undef_tests.scad
deleted file mode 100755
index f092877..0000000
--- a/packages/scad-deserializer/tests/undef_tests.scad
+++ /dev/null
@@ -1,52 +0,0 @@
-echo("*", 3*undef);
-echo("!", !undef);
-echo("/", 3/undef);
-echo("+", 3+undef);
-echo("-", 3-undef);
-echo("&&", undef&&3);
-echo("&&", 3&&undef);
-echo("||", undef||3);
-echo("||", 3||undef);
-echo("%", 3%undef);
-echo("<", 3", 3>undef);
-echo(">=", 3>=undef);
-echo("==", 3==undef);
-echo("!=", 3==undef);
-
-echo( "abs: ",abs(undef));
-echo( "sign: ",sign(undef));
-echo( "cos: ",cos(undef));
-echo( "sin: ",sin(undef));
-echo( "tan: ",tan(undef));
-echo( "acos: ",acos(undef));
-echo( "asin: ",asin(undef));
-echo( "atan: ",atan(undef));
-echo( "atan2: ",atan2(1,undef));
-echo( "atan2: ",atan2(undef,2));
-
-echo( "min: ",min(undef,2));
-echo( "max: ",max(undef,2));
-echo( "max: ",max(undef,undef));
-echo( "pow: ",pow(undef,2));
-echo( "sqrt: ",sqrt(undef));
-echo( "ln: ",ln(undef));
-
-echo( "ceil: ",ceil(undef));
-echo( "floor: ",floor(undef));
-echo( "log: ",log(undef));
-echo( "log: ",log(undef,2));
-echo( "log: ",log(10,undef));
-echo( "exp: ",exp(undef));
-
-echo("sign", sign(undef));
-echo("round", round(undef));
-
-
-echo("str", str(undef));
-echo("len", len(undef));
-
-
-sphere();
diff --git a/packages/scad-deserializer/tests/vector_matrix_math.scad b/packages/scad-deserializer/tests/vector_matrix_math.scad
deleted file mode 100755
index d8154bf..0000000
--- a/packages/scad-deserializer/tests/vector_matrix_math.scad
+++ /dev/null
@@ -1,49 +0,0 @@
-
-matrix_3x3 = [[10,20,30],[10,20,30],[10,20,30]];
-vector = [2,0,0];
-matrix_3x2 = [[1,0,0],[1,0,0]];
-
-group0 = ["3x3matrix","vector","number","3x2matrix"];
-group1 = [ matrix_3x3, vector, 2, matrix_3x2];
-
-function multiply(a,b) = a * b;
-function divide(a,b) = a / b;
-function add(a,b) = a + b;
-function minus(a,b) = a - b;
-function modulus(a,b) = a % b;
-
-function lt(a,b) = a < b;
-function lte(a,b) = a <= b;
-function eq(a,b) = a == b;
-function neq(a,b) = a != b;
-function gt(a,b) = a > b;
-function gte(a,b) = a >= b;
-
-group1_len = len(group1);
-for (i = [0:group1_len-1]){
- for (j = [0:group1_len-1]){
- echo(str(group0[i]," * ",group0[j], " = "),multiply(group1[i],group1[j]));
- echo(str(group0[i]," / ",group0[j], " = "),divide(group1[i],group1[j]));
- echo(str(group0[i]," + ",group0[j], " = "),add(group1[i],group1[j]));
- echo(str(group0[i]," - ",group0[j], " = "),minus(group1[i],group1[j]));
- echo(str(group0[i]," % ",group0[j], " = "),modulus(group1[i],group1[j]));
- echo(str(group0[i]," < ",group0[j], " = "),lt(group1[i],group1[j]));
- echo(str(group0[i]," <= ",group0[j], " = "),lte(group1[i],group1[j]));
- echo(str(group0[i]," == ",group0[j], " = "),eq(group1[i],group1[j]));
- echo(str(group0[i]," != ",group0[j], " = "),neq(group1[i],group1[j]));
- echo(str(group0[i]," > ",group0[j], " = "),gt(group1[i],group1[j]));
- echo(str(group0[i]," >= ",group0[j], " = "),gte(group1[i],group1[j]));
- }
-}
-echo("----");
-echo("!");
-echo("! matrix ", !matrix_3x3);
-echo("! vector ", !vector);
-echo("----");
-
-echo("?:");
-echo("?: matrix ", matrix_3x3?true:false);
-echo("?: vextor ", vector?true:false);
-echo("----");
-
-cube();
\ No newline at end of file
diff --git a/packages/stl-serializer/CSGToStla.js b/packages/stl-serializer/CSGToStla.js
index 415f10b..d4fb24e 100644
--- a/packages/stl-serializer/CSGToStla.js
+++ b/packages/stl-serializer/CSGToStla.js
@@ -1,62 +1,41 @@
-const { ensureManifoldness } = require('@jscad/io-utils')
-const {isCSG} = require('@jscad/csg')
-// objects must be an array of CSG objects (with polygons)
-const serializeText = (objects, options) => {
- options.statusCallback && options.statusCallback({progress: 0})
-
- let result = `solid JSCAD
-${convertToStl(objects, options)}
-endsolid JSCAD
-`
- options.statusCallback && options.statusCallback({progress: 100})
- return [result]
-}
-
-const convertToStl = (objects, options) => {
- let result = []
- objects.forEach(function (object, i) {
- result.push(convertToFacets(object, options))
- options.statusCallback && options.statusCallback({progress: 100 * i / objects.length})
+function serialize (CSG, options) {
+ options && options.statusCallback && options.statusCallback({progress: 0})
+ var result = 'solid csg.js\n'
+ CSG.polygons.map(function (p, i) {
+ result += CSGPolygontoStlString(p)
+ options && options.statusCallback && options.statusCallback({progress: 100 * i / CSG.polygons.length})
})
- return result.join('\n')
-}
-
-const convertToFacets = (object, options) => {
- let result = []
- object.polygons.forEach(function (p, i) {
- result.push(convertToFacet(p))
- })
- return result.join('\n')
+ result += 'endsolid csg.js\n'
+ options && options.statusCallback && options.statusCallback({progress: 100})
+ return [result]
}
-const vector3DtoStlString = (v) => {
- return `${v._x} ${v._y} ${v._z}`
+function CSGVector3DtoStlString (v) {
+ return v._x + ' ' + v._y + ' ' + v._z
}
-const vertextoStlString = (vertex) => {
- return `vertex ${vector3DtoStlString(vertex.pos)}`
+function CSGVertextoStlString (vertex) {
+ return 'vertex ' + CSGVector3DtoStlString(vertex.pos) + '\n'
}
-const convertToFacet = (polygon) => {
- let result = []
+function CSGPolygontoStlString (polygon) {
+ var result = ''
if (polygon.vertices.length >= 3) {
- // STL requires triangular polygons. If our polygon has more vertices, create multiple triangles:
- let firstVertexStl = vertextoStlString(polygon.vertices[0])
- for (let i = 0; i < polygon.vertices.length - 2; i++) {
- let facet = `facet normal ${vector3DtoStlString(polygon.plane.normal)}
-outer loop
-${firstVertexStl}
-${vertextoStlString(polygon.vertices[i + 1])}
-${vertextoStlString(polygon.vertices[i + 2])}
-endloop
-endfacet`
- result.push(facet)
+ // STL requires triangular polygons. If our polygon has more vertices, create
+ // multiple triangles:
+ var firstVertexStl = CSGVertextoStlString(polygon.vertices[0])
+ for (var i = 0; i < polygon.vertices.length - 2; i++) {
+ result += 'facet normal ' + CSGVector3DtoStlString(polygon.plane.normal) + '\nouter loop\n'
+ result += firstVertexStl
+ result += CSGVertextoStlString(polygon.vertices[i + 1])
+ result += CSGVertextoStlString(polygon.vertices[i + 2])
+ result += 'endloop\nendfacet\n'
}
}
- return result.join('\n')
+ return result
}
module.exports = {
- serializeText
+ serialize
}
diff --git a/packages/stl-serializer/CSGToStlb.js b/packages/stl-serializer/CSGToStlb.js
index 7e5740b..470138f 100644
--- a/packages/stl-serializer/CSGToStlb.js
+++ b/packages/stl-serializer/CSGToStlb.js
@@ -1,84 +1,70 @@
// see http://en.wikipedia.org/wiki/STL_%28file_format%29#Binary_STL
-
-// objects must be an array of CSG objects (with polygons)
-const serializeBinary = (objects, options) => {
- options.statusCallback && options.statusCallback({progress: 0})
-
+function serialize (CSG, options) {
+ options && options.statusCallback && options.statusCallback({progress: 0})
// first check if the host is little-endian:
- let buffer = new ArrayBuffer(4)
- let int32buffer = new Int32Array(buffer, 0, 1)
- let int8buffer = new Int8Array(buffer, 0, 4)
+ var buffer = new ArrayBuffer(4)
+ var int32buffer = new Int32Array(buffer, 0, 1)
+ var int8buffer = new Int8Array(buffer, 0, 4)
int32buffer[0] = 0x11223344
if (int8buffer[0] !== 0x44) {
throw new Error('Binary STL output is currently only supported on little-endian (Intel) processors')
}
- let numtriangles = 0
- let numpolygons = 0
- objects.forEach(function (object, i) {
- object.polygons.forEach(function (polygon) {
- let numvertices = polygon.vertices.length
- let thisnumtriangles = (numvertices >= 3) ? numvertices - 2 : 0
- numtriangles += thisnumtriangles
- numpolygons += 1
- })
+ var numtriangles = 0
+ CSG.polygons.map(function (p) {
+ var numvertices = p.vertices.length
+ var thisnumtriangles = (numvertices >= 3) ? numvertices - 2 : 0
+ numtriangles += thisnumtriangles
})
-
- let headerarray = new Uint8Array(80)
- for (let i = 0; i < 80; i++) {
+ var headerarray = new Uint8Array(80)
+ for (var i = 0; i < 80; i++) {
headerarray[i] = 65
}
-
- let ar1 = new Uint32Array(1)
+ var ar1 = new Uint32Array(1)
ar1[0] = numtriangles
-
// write the triangles to allTrianglesBuffer:
- let allTrianglesBuffer = new ArrayBuffer(50 * numtriangles)
- let allTrianglesBufferAsInt8 = new Int8Array(allTrianglesBuffer)
-
+ var allTrianglesBuffer = new ArrayBuffer(50 * numtriangles)
+ var allTrianglesBufferAsInt8 = new Int8Array(allTrianglesBuffer)
// a tricky problem is that a Float32Array must be aligned at 4-byte boundaries (at least in certain browsers)
// while each triangle takes 50 bytes. Therefore we write each triangle to a temporary buffer, and copy that
// into allTrianglesBuffer:
- let triangleBuffer = new ArrayBuffer(50)
- let triangleBufferAsInt8 = new Int8Array(triangleBuffer)
-
+ var triangleBuffer = new ArrayBuffer(50)
+ var triangleBufferAsInt8 = new Int8Array(triangleBuffer)
// each triangle consists of 12 floats:
- let triangleFloat32array = new Float32Array(triangleBuffer, 0, 12)
+ var triangleFloat32array = new Float32Array(triangleBuffer, 0, 12)
// and one uint16:
- let triangleUint16array = new Uint16Array(triangleBuffer, 48, 1)
-
- let byteoffset = 0
- let p = 0
- objects.forEach(function (object) {
- object.polygons.forEach(function (polygon) {
- let numvertices = polygon.vertices.length
- for (let i = 0; i < numvertices - 2; i++) {
- let normal = polygon.plane.normal
- triangleFloat32array[0] = normal._x
- triangleFloat32array[1] = normal._y
- triangleFloat32array[2] = normal._z
- let arindex = 3
- for (let v = 0; v < 3; v++) {
- let vv = v + ((v > 0) ? i : 0)
- let vertexpos = polygon.vertices[vv].pos
- triangleFloat32array[arindex++] = vertexpos._x
- triangleFloat32array[arindex++] = vertexpos._y
- triangleFloat32array[arindex++] = vertexpos._z
- }
- triangleUint16array[0] = 0
- // copy the triangle into allTrianglesBuffer:
- allTrianglesBufferAsInt8.set(triangleBufferAsInt8, byteoffset)
- byteoffset += 50
+ var triangleUint16array = new Uint16Array(triangleBuffer, 48, 1)
+ var byteoffset = 0
+ CSG.polygons.map(function (p, i) {
+ var numvertices = p.vertices.length
+ for (var i = 0; i < numvertices - 2; i++) {
+ var normal = p.plane.normal
+ triangleFloat32array[0] = normal._x
+ triangleFloat32array[1] = normal._y
+ triangleFloat32array[2] = normal._z
+ var arindex = 3
+ for (var v = 0; v < 3; v++) {
+ var vv = v + ((v > 0) ? i : 0)
+ var vertexpos = p.vertices[vv].pos
+ triangleFloat32array[arindex++] = vertexpos._x
+ triangleFloat32array[arindex++] = vertexpos._y
+ triangleFloat32array[arindex++] = vertexpos._z
}
- p += 1
- options.statusCallback && options.statusCallback({progress: 100 * p / numpolygons})
- })
+ triangleUint16array[0] = 0
+ // copy the triangle into allTrianglesBuffer:
+ allTrianglesBufferAsInt8.set(triangleBufferAsInt8, byteoffset)
+ byteoffset += 50
+ }
+ options && options.statusCallback && options.statusCallback({progress: 100 * i / CSG.polygons.length})
})
- options.statusCallback && options.statusCallback({progress: 100})
- return [headerarray.buffer, ar1.buffer, allTrianglesBuffer] // 'blobable array'
+ options && options.statusCallback && options.statusCallback({progress: 100})
+ return [headerarray.buffer, ar1.buffer, allTrianglesBuffer]// 'blobable array'
+ /* return new Blob([headerarray.buffer, ar1.buffer, allTrianglesBuffer], {
+ type: mimeType
+ }) */
}
module.exports = {
- serializeBinary
+ serialize
}
diff --git a/packages/stl-serializer/index.js b/packages/stl-serializer/index.js
index 1f26ea7..b1f060c 100644
--- a/packages/stl-serializer/index.js
+++ b/packages/stl-serializer/index.js
@@ -1,59 +1,17 @@
-/*
-JSCAD Object to STL Format Serialization
-
-## License
-
-Copyright (c) 2018 JSCAD Organization https://github.com/jscad
-
-All code released under MIT license
-
-Notes:
-1) CAG conversion to:
- none
-2) CSG conversion to:
- STL mesh
-3) Path2D conversion to:
- none
-*/
-
-const {serializeBinary} = require('./CSGToStlb')
-const {serializeText} = require('./CSGToStla')
-
-const {ensureManifoldness} = require('@jscad/io-utils')
-const {toArray} = require('@jscad/io-utils/arrays')
-const {isCSG} = require('@jscad/csg')
+const binarySerializer = require('./CSGToStlb').serialize
+const asciiSerializer = require('./CSGToStla').serialize
+const { ensureManifoldness } = require('@jscad/io-utils')
const mimeType = 'application/sla'
-const serialize = (...params) => {
- let options = {}
- let objects
- if (params.length === 0) {
- throw new Error('no arguments supplied to serialize function !')
- } else if (params.length === 1) {
- // assumed to be object(s)
- objects = Array.isArray(params[0]) ? params[0] : params
- } else if (params.length > 1) {
- options = params[0]
- objects = params[1]
- }
- // make sure we always deal with arrays of objects as inputs
- objects = toArray(objects)
-
+function serialize (data, options) {
const defaults = {
- binary: true,
- statusCallback: null
+ binary: true
}
options = Object.assign({}, defaults, options)
- // only use valid CSG objects
- let csgs = []
- objects.forEach(function (object, i) {
- if (isCSG(object) & object.polygons.length > 0) {
- csgs.push(ensureManifoldness(object))
- }
- })
- return options.binary ? serializeBinary(csgs, options) : serializeText(csgs, options)
+ data = ensureManifoldness(data)
+ return options.binary ? binarySerializer(data, options) : asciiSerializer(data, options)
}
module.exports = {
diff --git a/packages/stl-serializer/package.json b/packages/stl-serializer/package.json
index ff44ccf..c3c7b8a 100644
--- a/packages/stl-serializer/package.json
+++ b/packages/stl-serializer/package.json
@@ -32,11 +32,10 @@
"stl"
],
"license": "MIT",
+ "devDependencies": {
+ "@jscad/csg": "0.7.0"
+ },
"dependencies": {
- "@jscad/csg": "0.7.0",
"@jscad/io-utils": "^0.1.3"
- },
- "devDependencies": {
- "ava": "^0.19.1"
}
}
diff --git a/packages/stl-serializer/test.js b/packages/stl-serializer/test.js
index 4152db3..1986924 100644
--- a/packages/stl-serializer/test.js
+++ b/packages/stl-serializer/test.js
@@ -3,8 +3,8 @@ const {CSG} = require('@jscad/csg')
const serializer = require('./index.js')
test('serialize csg to stl (binary)', function (t) {
- const csg1 = new CSG.cube()
- const observed = serializer.serialize({binary: true}, csg1)
+ const input = new CSG.cube()
+ const observed = serializer.serialize(input, {binary: true})
// TODO: VERY shallow testing ... improve
t.deepEqual(observed[0].byteLength, 80)
@@ -13,13 +13,10 @@ test('serialize csg to stl (binary)', function (t) {
})
test('serialize csg to stl (ascii)', function (t) {
- const csg1 = new CSG.cube({radius: 5}).setColor([0,0,1,1])
- const observed1 = serializer.serialize({binary: false}, csg1)
- t.deepEqual(observed1, [expected1])
-
- const csg2 = csg1.translate([5,5,5]).setColor([1,0,0,1])
- const observed2 = serializer.serialize({binary: false}, [csg1, csg2])
- t.deepEqual(observed2, [expected2])
+ const input = new CSG.cube()
+ const expected = [ 'solid csg.js\nfacet normal -1 0 0\nouter loop\nvertex -1 -1 -1\nvertex -1 -1 1\nvertex -1 1 1\nendloop\nendfacet\nfacet normal -1 0 0\nouter loop\nvertex -1 -1 -1\nvertex -1 1 1\nvertex -1 1 -1\nendloop\nendfacet\nfacet normal 1 0 0\nouter loop\nvertex 1 -1 -1\nvertex 1 1 -1\nvertex 1 1 1\nendloop\nendfacet\nfacet normal 1 0 0\nouter loop\nvertex 1 -1 -1\nvertex 1 1 1\nvertex 1 -1 1\nendloop\nendfacet\nfacet normal 0 -1 0\nouter loop\nvertex -1 -1 -1\nvertex 1 -1 -1\nvertex 1 -1 1\nendloop\nendfacet\nfacet normal 0 -1 0\nouter loop\nvertex -1 -1 -1\nvertex 1 -1 1\nvertex -1 -1 1\nendloop\nendfacet\nfacet normal 0 1 0\nouter loop\nvertex -1 1 -1\nvertex -1 1 1\nvertex 1 1 1\nendloop\nendfacet\nfacet normal 0 1 0\nouter loop\nvertex -1 1 -1\nvertex 1 1 1\nvertex 1 1 -1\nendloop\nendfacet\nfacet normal 0 0 -1\nouter loop\nvertex -1 -1 -1\nvertex -1 1 -1\nvertex 1 1 -1\nendloop\nendfacet\nfacet normal 0 0 -1\nouter loop\nvertex -1 -1 -1\nvertex 1 1 -1\nvertex 1 -1 -1\nendloop\nendfacet\nfacet normal 0 0 1\nouter loop\nvertex -1 -1 1\nvertex 1 -1 1\nvertex 1 1 1\nendloop\nendfacet\nfacet normal 0 0 1\nouter loop\nvertex -1 -1 1\nvertex 1 1 1\nvertex -1 1 1\nendloop\nendfacet\nendsolid csg.js\n' ]
+ const observed = serializer.serialize(input, {binary: false})
+ t.deepEqual(observed, expected)
})
test('progress status callback', function (t) {
@@ -28,268 +25,8 @@ test('progress status callback', function (t) {
const statusCallback = function (statusObj) {
progresses.push(statusObj.progress);
};
- const observed = serializer.serialize({statusCallback: statusCallback}, input)
-
+ const observed = serializer.serialize(input, {statusCallback: statusCallback})
+
t.deepEqual(0, progresses[0]);
t.deepEqual(100, progresses[progresses.length - 1]);
})
-
-const expected1 = `solid JSCAD
-facet normal -1 0 0
-outer loop
-vertex -5 -5 -5
-vertex -5 -5 5
-vertex -5 5 5
-endloop
-endfacet
-facet normal -1 0 0
-outer loop
-vertex -5 -5 -5
-vertex -5 5 5
-vertex -5 5 -5
-endloop
-endfacet
-facet normal 1 0 0
-outer loop
-vertex 5 -5 -5
-vertex 5 5 -5
-vertex 5 5 5
-endloop
-endfacet
-facet normal 1 0 0
-outer loop
-vertex 5 -5 -5
-vertex 5 5 5
-vertex 5 -5 5
-endloop
-endfacet
-facet normal 0 -1 0
-outer loop
-vertex -5 -5 -5
-vertex 5 -5 -5
-vertex 5 -5 5
-endloop
-endfacet
-facet normal 0 -1 0
-outer loop
-vertex -5 -5 -5
-vertex 5 -5 5
-vertex -5 -5 5
-endloop
-endfacet
-facet normal 0 1 0
-outer loop
-vertex -5 5 -5
-vertex -5 5 5
-vertex 5 5 5
-endloop
-endfacet
-facet normal 0 1 0
-outer loop
-vertex -5 5 -5
-vertex 5 5 5
-vertex 5 5 -5
-endloop
-endfacet
-facet normal 0 0 -1
-outer loop
-vertex -5 -5 -5
-vertex -5 5 -5
-vertex 5 5 -5
-endloop
-endfacet
-facet normal 0 0 -1
-outer loop
-vertex -5 -5 -5
-vertex 5 5 -5
-vertex 5 -5 -5
-endloop
-endfacet
-facet normal 0 0 1
-outer loop
-vertex -5 -5 5
-vertex 5 -5 5
-vertex 5 5 5
-endloop
-endfacet
-facet normal 0 0 1
-outer loop
-vertex -5 -5 5
-vertex 5 5 5
-vertex -5 5 5
-endloop
-endfacet
-endsolid JSCAD
-`
-
-const expected2 = `solid JSCAD
-facet normal -1 0 0
-outer loop
-vertex -5 -5 -5
-vertex -5 -5 5
-vertex -5 5 5
-endloop
-endfacet
-facet normal -1 0 0
-outer loop
-vertex -5 -5 -5
-vertex -5 5 5
-vertex -5 5 -5
-endloop
-endfacet
-facet normal 1 0 0
-outer loop
-vertex 5 -5 -5
-vertex 5 5 -5
-vertex 5 5 5
-endloop
-endfacet
-facet normal 1 0 0
-outer loop
-vertex 5 -5 -5
-vertex 5 5 5
-vertex 5 -5 5
-endloop
-endfacet
-facet normal 0 -1 0
-outer loop
-vertex -5 -5 -5
-vertex 5 -5 -5
-vertex 5 -5 5
-endloop
-endfacet
-facet normal 0 -1 0
-outer loop
-vertex -5 -5 -5
-vertex 5 -5 5
-vertex -5 -5 5
-endloop
-endfacet
-facet normal 0 1 0
-outer loop
-vertex -5 5 -5
-vertex -5 5 5
-vertex 5 5 5
-endloop
-endfacet
-facet normal 0 1 0
-outer loop
-vertex -5 5 -5
-vertex 5 5 5
-vertex 5 5 -5
-endloop
-endfacet
-facet normal 0 0 -1
-outer loop
-vertex -5 -5 -5
-vertex -5 5 -5
-vertex 5 5 -5
-endloop
-endfacet
-facet normal 0 0 -1
-outer loop
-vertex -5 -5 -5
-vertex 5 5 -5
-vertex 5 -5 -5
-endloop
-endfacet
-facet normal 0 0 1
-outer loop
-vertex -5 -5 5
-vertex 5 -5 5
-vertex 5 5 5
-endloop
-endfacet
-facet normal 0 0 1
-outer loop
-vertex -5 -5 5
-vertex 5 5 5
-vertex -5 5 5
-endloop
-endfacet
-facet normal -1 0 0
-outer loop
-vertex 0 0 0
-vertex 0 0 10
-vertex 0 10 10
-endloop
-endfacet
-facet normal -1 0 0
-outer loop
-vertex 0 0 0
-vertex 0 10 10
-vertex 0 10 0
-endloop
-endfacet
-facet normal 1 0 0
-outer loop
-vertex 10 0 0
-vertex 10 10 0
-vertex 10 10 10
-endloop
-endfacet
-facet normal 1 0 0
-outer loop
-vertex 10 0 0
-vertex 10 10 10
-vertex 10 0 10
-endloop
-endfacet
-facet normal 0 -1 0
-outer loop
-vertex 0 0 0
-vertex 10 0 0
-vertex 10 0 10
-endloop
-endfacet
-facet normal 0 -1 0
-outer loop
-vertex 0 0 0
-vertex 10 0 10
-vertex 0 0 10
-endloop
-endfacet
-facet normal 0 1 0
-outer loop
-vertex 0 10 0
-vertex 0 10 10
-vertex 10 10 10
-endloop
-endfacet
-facet normal 0 1 0
-outer loop
-vertex 0 10 0
-vertex 10 10 10
-vertex 10 10 0
-endloop
-endfacet
-facet normal 0 0 -1
-outer loop
-vertex 0 0 0
-vertex 0 10 0
-vertex 10 10 0
-endloop
-endfacet
-facet normal 0 0 -1
-outer loop
-vertex 0 0 0
-vertex 10 10 0
-vertex 10 0 0
-endloop
-endfacet
-facet normal 0 0 1
-outer loop
-vertex 0 0 10
-vertex 10 0 10
-vertex 10 10 10
-endloop
-endfacet
-facet normal 0 0 1
-outer loop
-vertex 0 0 10
-vertex 10 10 10
-vertex 0 10 10
-endloop
-endfacet
-endsolid JSCAD
-`
diff --git a/packages/svg-serializer/index.js b/packages/svg-serializer/index.js
index 3f60137..8c3cde7 100644
--- a/packages/svg-serializer/index.js
+++ b/packages/svg-serializer/index.js
@@ -1,137 +1,55 @@
-/*
-JSCAD Object to SVG Format Serialization
-
-## License
-
-Copyright (c) 2018 JSCAD Organization https://github.com/jscad
-
-All code released under MIT license
-
-Notes:
-1) CAG conversion to:
- SVG GROUP containing a SVG PATH for each CAG outline path
-2) CSG conversion to:
- mesh
-3) Path2D conversion to:
- none
-
-TBD
-1) add Path2D conversion
-*/
-
-const {isCAG} = require('@jscad/csg')
-const {toArray} = require('@jscad/io-utils/arrays')
+const {CSG} = require('@jscad/csg')
const stringify = require('onml/lib/stringify')
const mimeType = 'image/svg+xml'
-/** Serialize the give objects to SVG format.
- * @param {Object} [options] - options for serialization
- * @param {Object|Array} objects - objects to serialize as SVG
- * @returns {Array} serialized contents, SVG format
- */
-const serialize = (...params) => {
- let options = {}
- let objects
- if (params.length === 0) {
- throw new Error('no arguments supplied to serialize function !')
- } else if (params.length === 1) {
- // assumed to be object(s)
- objects = Array.isArray(params[0]) ? params[0] : params
- } else if (params.length > 1) {
- options = params[0]
- objects = params[1]
- }
- // make sure we always deal with arrays of objects as inputs
- objects = toArray(objects)
- console.log('params', params)
- console.log('options', options)
- console.log('objects', objects)
- const defaults = {
- statusCallback: null,
- unit: 'mm', // em | ex | px | in | cm | mm | pt | pc
- decimals: 10000
- }
- options = Object.assign({}, defaults, options)
+const serialize = function (cagObject, options) {
+ options && options.statusCallback && options.statusCallback({progress: 0})
+ var decimals = 1000
- options.statusCallback && options.statusCallback({progress: 0})
+ // mirror the CAG about the X axis in order to generate paths into the POSITIVE direction
+ var plane = new CSG.Plane(CSG.Vector3D.Create(0, 1, 0), 0)
+ var cag = cagObject.transform(CSG.Matrix4x4.mirroring(plane))
- // get the lower and upper bounds of ALL convertable objects
- var bounds = getBounds(objects)
-
- var width = 0
- var height = 0
- if (bounds) {
- width = Math.round((bounds[1].x - bounds[0].x) * options.decimals) / options.decimals
- height = Math.round((bounds[1].y - bounds[0].y) * options.decimals) / options.decimals
- }
+ var bounds = cag.getBounds()
+ var paths = cag.getOutlinePaths()
+ var width = Math.round((bounds[1].x - bounds[0].x) * decimals) / decimals
+ var height = Math.round((bounds[1].y - bounds[0].y) * decimals) / decimals
var body = ['svg',
{
- width: width + options.unit,
- height: height + options.unit,
+ width: width + 'mm',
+ height: height + 'mm',
viewBox: ('0 0 ' + width + ' ' + height),
version: '1.1',
baseProfile: 'tiny',
xmlns: 'http://www.w3.org/2000/svg',
'xmlns:xlink': 'http://www.w3.org/1999/xlink'
- }
+ },
+ PathsToSvg(paths, bounds)
]
- if (bounds) {
- body = body.concat(convertObjects(objects, bounds, options))
- }
var svg = `
${stringify(body)}`
- options.statusCallback && options.statusCallback({progress: 100})
+ options && options.statusCallback && options.statusCallback({progress: 100})
return [svg]
}
-const getBounds = (objects) => {
- let bounds = null
- objects.forEach(function (object, i) {
- if (isCAG(object) && object.sides.length > 0) {
- let cagBounds = object.getBounds()
- if (bounds !== null) {
- bounds[0] = bounds[0].min(cagBounds[0])
- bounds[1] = bounds[1].max(cagBounds[1])
- } else {
- bounds = cagBounds
- }
- }
- })
- return bounds
-}
-
-const convertObjects = (objects, bounds, options) => {
+const PathsToSvg = function (paths, bounds, options) {
+ // calculate offsets in order to create paths orientated from the 0,0 axis
var xoffset = 0 - bounds[0].x
var yoffset = 0 - bounds[0].y
- let contents = []
- objects.forEach(function (object, i) {
- options.statusCallback && options.statusCallback({progress: 100 * i / objects.length})
- if (isCAG(object) && object.sides.length > 0) {
- contents.push(convertCAG(object, [xoffset, yoffset], options))
- }
- })
- return contents
-}
-
-const convertCAG = (object, offsets, options) => {
- var paths = object.getOutlinePaths()
- return convertPaths(paths, offsets, options)
-}
-
-const convertPaths = (paths, offsets, options) => {
return paths.reduce(function (res, path, i) {
- return res.concat([['path', {d: convertPath(path, offsets, options)}]])
+ options && options.statusCallback && options.statusCallback({progress: 100 * i / paths.length})
+ return res.concat([['path', {d: dPath(path, xoffset, yoffset)}]])
}, ['g'])
}
-const convertPath = (path, offsets, options) => {
+const dPath = function (path, xoffset, yoffset) {
var pointindex
var str = ''
var numpointsClosed = path.points.length + (path.closed ? 1 : 0)
@@ -139,12 +57,10 @@ const convertPath = (path, offsets, options) => {
var pointindexwrapped = pointindex
if (pointindexwrapped >= path.points.length) pointindexwrapped -= path.points.length
var point = path.points[pointindexwrapped]
- let x = Math.round((point.x + offsets[0]) * options.decimals) / options.decimals
- let y = Math.round((point.y + offsets[1]) * options.decimals) / options.decimals
if (pointindex > 0) {
- str += `L${x} ${y}`
+ str += `L${(point.x + xoffset)} ${(point.y + yoffset)}`
} else {
- str += `M${x} ${y}`
+ str += `M${(point.x + xoffset)} ${(point.y + yoffset)}`
}
}
return str
diff --git a/packages/svg-serializer/package.json b/packages/svg-serializer/package.json
index 802b4f0..fb20ef4 100644
--- a/packages/svg-serializer/package.json
+++ b/packages/svg-serializer/package.json
@@ -34,10 +34,6 @@
"license": "MIT",
"dependencies": {
"@jscad/csg": "0.7.0",
- "@jscad/io-utils": "^0.1.3",
"onml": "^0.4.1"
- },
- "devDependencies": {
- "ava": "^0.19.1"
}
}
diff --git a/packages/svg-serializer/test.js b/packages/svg-serializer/test.js
index 789eddb..0b1e6e2 100644
--- a/packages/svg-serializer/test.js
+++ b/packages/svg-serializer/test.js
@@ -2,72 +2,30 @@ const test = require('ava')
const {CAG, CSG} = require('@jscad/csg')
const serializer = require('./index.js')
-test('serialize CAG objects to SVG paths', function (t) {
- const cag1 = new CAG()
-
- const observed1 = serializer.serialize({}, cag1)
- t.deepEqual([expected1], observed1)
-
- const cag2 = CAG.rectangle({radius: [5, 10]})
- const observed2 = serializer.serialize({}, cag2)
- t.deepEqual([expected2], observed2)
-
- const cag3 = cag2.translate([-30, -30])
- const cag4 = cag2.translate([30, 30])
- const observed3 = serializer.serialize({}, [cag3, cag4])
- t.deepEqual([expected3], observed3)
-})
-
-const expected1 = `
-
-
-
-`
-
-const expected2 = `
-
-
-
-`
-
-const expected3 = `
-
-
-
-`
-
-test('serialize cag objects to svg (path: simple)', function (t) {
+test('serialize ag/csg objects to svg (path: simple)', function (t) {
const source = function main (params) {
+ var cag0 = new CAG()
+ var cag00 = new CAG()
var cag001 = new CSG.Path2D([[42.33333, 0]], false)
cag001 = cag001.appendPoint([21.166665, -56.44443999999999])
cag001 = cag001.appendPoint([63.49999499999999, -56.44443999999999])
cag001 = cag001.close()
cag001 = cag001.innerToCAG()
- return cag001
+ cag00 = cag00.union(cag001)
+ cag0 = cag0.union(cag00)
+ return cag0
}
- const object1 = source()
- const observed = serializer.serialize({output: 'jscad', addMetaData: false}, object1)
- t.deepEqual([expected], observed)
-})
-
-const expected = `
+ const expected = `
-