diff --git a/packages/amf-serializer/index.js b/packages/amf-serializer/index.js index c3ddc4b..50ed867 100644 --- a/packages/amf-serializer/index.js +++ b/packages/amf-serializer/index.js @@ -1,183 +1,73 @@ -/* -JSCAD Object to AMF (XML) 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: - mesh -3) Path2D conversion to: - none - -TBD -1) support zip output -*/ - -const {isCSG} = require('@jscad/csg') -const {ensureManifoldness} = require('@jscad/io-utils') -const {toArray} = require('@jscad/io-utils/arrays') -const stringify = require('onml/lib/stringify') - +const { ensureManifoldness } = require('@jscad/io-utils') const mimeType = 'application/amf+xml' -/** Serialize the give objects to AMF (xml) format. - * @param {Object} [options] - options for serialization - * @param {Object|Array} objects - objects to serialize as AMF - * @returns {Array} serialized contents, AMF 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) - - const defaults = { - statusCallback: null, - unit: 'millimeter', // millimeter, inch, feet, meter or micrometer - metadata: null +function serialize (CSG, m, options) { + options && options.statusCallback && options.statusCallback({progress: 0}) + CSG = ensureManifoldness(CSG) + var result = '\n\n' + for (var k in m) { + result += '' + m[k] + '\n' } - options = Object.assign({}, defaults, options) - - options.statusCallback && options.statusCallback({progress: 0}) - - // construct the contents of the XML - var body = ['amf', - { - unit: options.unit, - version: '1.1' - }, - ['metadata', {type: 'author'}, 'Created using JSCAD'] - ] - body = body.concat(translateObjects(objects, options)) + result += '\n\n\n' - // convert the contents to AMF (XML) format - var amf = ` -${stringify(body)}` - - options && options.statusCallback && options.statusCallback({progress: 100}) - - return [amf] -} - -const translateObjects = (objects, options) => { - let contents = [] - objects.forEach(function (object, i) { - if (isCSG(object) && object.polygons.length > 0) { - object = ensureManifoldness(object) - options.id = i - contents.push(convertCSG(object, options)) + CSG.polygons.map(function (p) { // first we dump all vertices of all polygons + for (var i = 0; i < p.vertices.length; i++) { + result += CSGVertextoAMFString(p.vertices[i]) } }) - return contents -} - -const convertCSG = (object, options) => { - var contents = ['object', {id: options.id}, convertToMesh(object, options)] - return contents -} - -const convertToMesh = (object, options) => { - var contents = ['mesh', {}, convertToVertices(object, options)] - contents = contents.concat(convertToVolumes(object, options)) - return contents -} - -/* - * This section converts each CSG object to a list of vertex / coordinates - */ + result += '\n' -const convertToVertices = (object, options) => { - var contents = ['vertices', {}] + var n = 0 + CSG.polygons.map(function (p, i) { // then we dump all polygons + result += '\n' + if (p.vertices.length < 3) { + return + } + var color = null + if (p.shared && p.shared.color) { + color = p.shared.color + } else if (p.color) { + color = p.color + } + if (color != null) { + if (color.length < 4) color.push(1.0) + result += '' + color[0] + '' + color[1] + '' + color[2] + '' + color[3] + '' + } - let vertices = [] - object.polygons.forEach(function (polygon) { - for (let i = 0; i < polygon.vertices.length; i++) { - vertices.push(convertToVertex(polygon.vertices[i], options)) + for (var i = 0; i < p.vertices.length - 2; i++) { // making sure they are all triangles (triangular polygons) + result += '' + result += '' + (n) + '' + result += '' + (n + i + 1) + '' + result += '' + (n + i + 2) + '' + result += '\n' } + n += p.vertices.length + result += '\n' + options && options.statusCallback && options.statusCallback({progress: 100 * i / CSG.polygons.length}) }) + result += '\n\n' + result += '\n' - return contents.concat(vertices) -} + options && options.statusCallback && options.statusCallback({progress: 100}) -const convertToVertex = (vertex, options) => { - let contents = ['vertex', {}, convertToCoordinates(vertex, options)] - return contents + return [result] } -const convertToCoordinates = (vertex, options) => { - let position = vertex.pos - let contents = ['coordinates', {}, ['x', {}, position._x], ['y', {}, position._y], ['z', {}, position._z]] - return contents +function CSGVectortoAMFString (v) { + return '' + v._x + '' + v._y + '' + v._z + '' } -/* - * This section converts each CSG object to a list of volumes consisting of indexes into the list of vertices - */ - -const convertToVolumes = (object, options) => { - let contents = [] - - let n = 0 - object.polygons.forEach(function (polygon) { - if (polygon.vertices.length < 3) { - return - } - - let volume = ['volume', {}] - let color = convertToColor(polygon, options) - let triangles = convertToTriangles(polygon, n) - - if (color) { - volume.push(color) - } - volume = volume.concat(triangles) - - contents.push(volume) - - n += polygon.vertices.length - }) - return contents +function CSGVertextoAMFString (vertex) { + return '' + CSGVectortoAMFString(vertex.pos) + '\n' } - -const convertToColor = (polygon, options) => { - let color = null - if (polygon.shared && polygon.shared.color) { - color = polygon.shared.color - } else if (polygon.color) { - color = polygon.color - } - if (color != null) { - if (color.length < 4) color.push(1.0) - return ['color', {}, ['r', {}, color[0]], ['g', {}, color[1]], ['b', {}, color[2]], ['a', {}, color[3]]] - } - return null +/* +CSG.Vector3D.prototype.toAMFString = function () { + return '' + this._x + '' + this._y + '' + this._z + '' } -const convertToTriangles = (polygon, index) => { - let contents = [] - - // making sure they are all triangles (triangular polygons) - for (var i = 0; i < polygon.vertices.length - 2; i++) { - let triangle = ['triangle', {}, ['v1', {}, index], ['v2', {}, (index + i + 1)], ['v3', {}, (index + i + 2)]] - contents.push(triangle) - } - return contents -} +CSG.Vertex.prototype.toAMFString = function () { + return '' + this.pos.toAMFString() + '\n' +} */ module.exports = { serialize, diff --git a/packages/amf-serializer/package.json b/packages/amf-serializer/package.json index 67ad27c..681d30b 100644 --- a/packages/amf-serializer/package.json +++ b/packages/amf-serializer/package.json @@ -5,7 +5,7 @@ "repository": "https://github.com/jscad/io", "main": "index.js", "scripts": { - "test": "ava './test.js' --verbose --timeout 20000", + "test": "ava './test.js' --verbose --timeout 10000", "release-patch": "git checkout master && npm version patch && git commit -a -m 'chore(dist): built dist/'; git push origin master --tags ", "release-minor": "git checkout master && npm version minor && git commit -a -m 'chore(dist): built dist/'; git push origin master --tags ", "release-major": "git checkout master && npm version major && git commit -a -m 'chore(dist): built dist/'; git push origin master --tags " @@ -33,11 +33,11 @@ ], "license": "MIT", "dependencies": { - "@jscad/csg": "0.7.0", "@jscad/io-utils": "^0.1.3", - "onml": "^0.4.1" + "sax": "^1.2.1", + "xmldom": "^0.1.27" }, "devDependencies": { - "ava": "^0.19.1" + "@jscad/csg": "0.7.0" } } diff --git a/packages/amf-serializer/test.js b/packages/amf-serializer/test.js index 21edb24..e2eb9bd 100644 --- a/packages/amf-serializer/test.js +++ b/packages/amf-serializer/test.js @@ -3,567 +3,9 @@ const {CSG} = require('@jscad/csg') const serializer = require('./index.js') test('serialize csg to amf', function (t) { - const emptyShape = new CSG() - const observed1 = serializer.serialize({}, emptyShape) - t.deepEqual(observed1, expected1) + const input = new CSG.cube() + const expected = [ '\n\n\n\n\n-1-1-1\n-1-11\n-111\n-11-1\n1-1-1\n11-1\n111\n1-11\n-1-1-1\n1-1-1\n1-11\n-1-11\n-11-1\n-111\n111\n11-1\n-1-1-1\n-11-1\n11-1\n1-1-1\n-1-11\n1-11\n111\n-111\n\n\n012\n023\n\n\n456\n467\n\n\n8910\n81011\n\n\n121314\n121415\n\n\n161718\n161819\n\n\n202122\n202223\n\n\n\n\n' ] + const observed = serializer.serialize(input) - const testCube = new CSG.cube() - const observed2 = serializer.serialize(testCube) - t.deepEqual(observed2, expected2) - - const coloredCube = testCube.setColor([1.0, 0.0, 0.5, 0.8]) - const observed3 = serializer.serialize({unit: 'inch'}, coloredCube) - t.deepEqual(observed3, expected3) + t.deepEqual(observed, expected) }) - -const expected1 = [ - ` - - Created using JSCAD - -` -] - -const expected2 = [ - ` - - Created using JSCAD - - - - - - -1 - -1 - -1 - - - - - -1 - -1 - 1 - - - - - -1 - 1 - 1 - - - - - -1 - 1 - -1 - - - - - 1 - -1 - -1 - - - - - 1 - 1 - -1 - - - - - 1 - 1 - 1 - - - - - 1 - -1 - 1 - - - - - -1 - -1 - -1 - - - - - 1 - -1 - -1 - - - - - 1 - -1 - 1 - - - - - -1 - -1 - 1 - - - - - -1 - 1 - -1 - - - - - -1 - 1 - 1 - - - - - 1 - 1 - 1 - - - - - 1 - 1 - -1 - - - - - -1 - -1 - -1 - - - - - -1 - 1 - -1 - - - - - 1 - 1 - -1 - - - - - 1 - -1 - -1 - - - - - -1 - -1 - 1 - - - - - 1 - -1 - 1 - - - - - 1 - 1 - 1 - - - - - -1 - 1 - 1 - - - - - - 0 - 1 - 2 - - - 0 - 2 - 3 - - - - - 4 - 5 - 6 - - - 4 - 6 - 7 - - - - - 8 - 9 - 10 - - - 8 - 10 - 11 - - - - - 12 - 13 - 14 - - - 12 - 14 - 15 - - - - - 16 - 17 - 18 - - - 16 - 18 - 19 - - - - - 20 - 21 - 22 - - - 20 - 22 - 23 - - - - - -` -] - -const expected3 = [ - ` - - Created using JSCAD - - - - - - -1 - -1 - -1 - - - - - -1 - -1 - 1 - - - - - -1 - 1 - 1 - - - - - -1 - 1 - -1 - - - - - 1 - -1 - -1 - - - - - 1 - 1 - -1 - - - - - 1 - 1 - 1 - - - - - 1 - -1 - 1 - - - - - -1 - -1 - -1 - - - - - 1 - -1 - -1 - - - - - 1 - -1 - 1 - - - - - -1 - -1 - 1 - - - - - -1 - 1 - -1 - - - - - -1 - 1 - 1 - - - - - 1 - 1 - 1 - - - - - 1 - 1 - -1 - - - - - -1 - -1 - -1 - - - - - -1 - 1 - -1 - - - - - 1 - 1 - -1 - - - - - 1 - -1 - -1 - - - - - -1 - -1 - 1 - - - - - 1 - -1 - 1 - - - - - 1 - 1 - 1 - - - - - -1 - 1 - 1 - - - - - - 1 - 0 - 0.5 - 0.8 - - - 0 - 1 - 2 - - - 0 - 2 - 3 - - - - - 1 - 0 - 0.5 - 0.8 - - - 4 - 5 - 6 - - - 4 - 6 - 7 - - - - - 1 - 0 - 0.5 - 0.8 - - - 8 - 9 - 10 - - - 8 - 10 - 11 - - - - - 1 - 0 - 0.5 - 0.8 - - - 12 - 13 - 14 - - - 12 - 14 - 15 - - - - - 1 - 0 - 0.5 - 0.8 - - - 16 - 17 - 18 - - - 16 - 18 - 19 - - - - - 1 - 0 - 0.5 - 0.8 - - - 20 - 21 - 22 - - - 20 - 22 - 23 - - - - - -` -] diff --git a/packages/dxf-serializer/index.js b/packages/dxf-serializer/index.js index 47669e4..bc758b0 100644 --- a/packages/dxf-serializer/index.js +++ b/packages/dxf-serializer/index.js @@ -18,38 +18,22 @@ Notes: LWPOLYLINE TBD 1) support binary output -2) add color conversion -3) translation for CSG +2) add color conversion, and translation for CSG */ const {isCAG, isCSG} = require('@jscad/csg') const {ensureManifoldness} = require('@jscad/io-utils') -const {toArray} = require('@jscad/io-utils/arrays') const {dxfHeaders, dxfClasses, dxfTables, dxfBlocks, dxfObjects} = require('./autocad_AC2017') const mimeType = 'application/dxf' /** Serialize the give objects to AutoCad DXF format. - * @param {Object} [options] - options for serialization * @param {Object|Array} objects - objects to serialize as DXF + * @param {Object} [options] - options for serialization * @returns {Array} serialized contents, DXF 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) - +const serialize = function (objects, options) { const defaults = { cagTo: 'lwpolyline', // or polyline csgTo: '3dface', // or polyline @@ -77,7 +61,7 @@ EOF * @param {Object} options - options for serialization * @returns {Object} serialized contents, DXF format */ -const dxfEntities = (objects, options) => { +const dxfEntities = function (objects, options) { objects = toArray(objects) let entityContents = objects.map(function (object, i) { if (isCAG(object)) { @@ -128,7 +112,7 @@ ENDSEC` // 67 (0 - model space, 1 - paper space) // 100 - // -const PathsToLwpolyine = (paths, options) => { +const PathsToLwpolyine = function (paths, options) { options.statusCallback && options.statusCallback({progress: 0}) let str = '' paths.map(function (path, i) { @@ -171,7 +155,7 @@ ${point.y} // convert the given paths (from CAG outlines) to DXF polyline (2D line) entities // @return array of strings // -const PathsToPolyine = (paths, options) => { +const PathsToPolyine = function (paths, options) { options.statusCallback && options.statusCallback({progress: 0}) let str = '' paths.map(function (path, i) { @@ -226,7 +210,7 @@ AcDbEntity // convert the given CSG to DXF 3D face entities // @return array of strings // -const PolygonsTo3DFaces = (csg, options) => { +const PolygonsTo3DFaces = function (csg, options) { options.statusCallback && options.statusCallback({progress: 0}) let str = '' csg.polygons.map(function (polygon, i) { @@ -306,7 +290,7 @@ ${corner13.z} // convert the given CSG to DXF POLYLINE (polyface mesh) // FIXME The entity types are wrong, resulting in imterpretation as a 3D lines, not faces // @return array of strings -const PolygonsToPolyline = (csg, options) => { +const PolygonsToPolyline = function (csg, options) { options.statusCallback && options.statusCallback({progress: 100}) options.statusCallback && options.statusCallback({progress: 0}) let str = '' @@ -389,7 +373,7 @@ ${face[3]} // convert the given polygons (CSG) to polyfaces (DXF) // @return array of faces, array of vertices -const polygons2polyfaces = (polygons) => { +const polygons2polyfaces = function (polygons) { var faces = [] var vertices = [] for (var i = 0; i < polygons.length; ++i) { @@ -410,17 +394,24 @@ const polygons2polyfaces = (polygons) => { // @return unique id string var entityId = 0 -const getEntityId = () => { +function getEntityId () { entityId++ // add more zeros if the id needs to be larger let padded = '00000' + entityId.toString(16).toUpperCase() return 'CAD' + padded.substr(padded.length - 5) } +// convert the given data to array if not already +// @return array of data +function toArray (data) { + if (Array.isArray(data)) return data + return [data] +} + // determin if the given object is a Path2D object // NOTE: Can be removed once CSG provides this functionality // @return true or false -const isPath = (object) => { +function isPath (object) { if (object && 'points' in object && Array.isArray(object.points)) { return true } diff --git a/packages/dxf-serializer/tests/testCagToDxf.js b/packages/dxf-serializer/tests/testCagToDxf.js index 35540c8..781eb49 100644 --- a/packages/dxf-serializer/tests/testCagToDxf.js +++ b/packages/dxf-serializer/tests/testCagToDxf.js @@ -7,44 +7,45 @@ const {dxfHeaders, dxfClasses, dxfTables, dxfBlocks, dxfObjects} = require('../a test('CAG to DXF LWPOLYLINE', t => { const cag1 = new CAG() - t.is(cag1.sides.length, 0) + t.is(cag1.sides.length,0) const obs1 = serialize(cag1) const exp1 = [empty] - t.deepEqual(obs1, exp1) + t.deepEqual(obs1,exp1) const cag2 = CAG.rectangle() - t.is(cag2.sides.length, 4) + t.is(cag2.sides.length,4) const obs2 = serialize(cag2) const exp2 = [lwpolyline0] - t.deepEqual(obs2, exp2) + t.deepEqual(obs2,exp2) - const obs3 = serialize({cagTo: 'lwpolyline'}, [cag1, cag2]) + const obs3 = serialize([cag1,cag2], {cagTo: 'lwpolyline'}) const exp3 = [lwpolyline1] - t.deepEqual(obs3, exp3) + t.deepEqual(obs3,exp3) - const obs4 = serialize({}, [cag2, cag2]) + const obs4 = serialize([cag2,cag2]) const exp4 = [lwpolylineByTwo] - t.deepEqual(obs4, exp4) + t.deepEqual(obs4,exp4) }) test('CAG to DXF POLYLINE', t => { const cag1 = new CAG() - t.is(cag1.sides.length, 0) + t.is(cag1.sides.length,0) - const obs1 = serialize({cagTo: 'polyline'}, cag1) + const obs1 = serialize(cag1, {cagTo: 'polyline'}) const exp1 = [empty] - t.deepEqual(obs1, exp1) + t.deepEqual(obs1,exp1) const cag2 = CAG.rectangle() - t.is(cag2.sides.length, 4) + t.is(cag2.sides.length,4) - const obs2 = serialize({cagTo: 'polyline'}, cag2) + const obs2 = serialize(cag2,{cagTo: 'polyline'}) const exp2 = [polyline1] - t.deepEqual(obs2, exp2) + t.deepEqual(obs2,exp2) }) + const empty = `999 DXF generated by JSCAD ${dxfHeaders({})} @@ -369,3 +370,4 @@ ${dxfObjects({})} 0 EOF ` + diff --git a/packages/dxf-serializer/tests/testCsgToDxf.js b/packages/dxf-serializer/tests/testCsgToDxf.js index 9f7cf62..c5fc525 100644 --- a/packages/dxf-serializer/tests/testCsgToDxf.js +++ b/packages/dxf-serializer/tests/testCsgToDxf.js @@ -7,34 +7,34 @@ const {dxfHeaders, dxfClasses, dxfTables, dxfBlocks, dxfObjects} = require('../a test('CSG to DXF 3DFACE', t => { const csg1 = new CSG() - t.is(csg1.polygons.length, 0) + t.is(csg1.polygons.length,0) - const obs1 = serialize({}, csg1) + const obs1 = serialize(csg1) const exp1 = [empty] - t.deepEqual(obs1, exp1) + t.deepEqual(obs1,exp1) const csg2 = CSG.cube() - t.is(csg2.polygons.length, 6) + t.is(csg2.polygons.length,6) const obs2 = serialize(csg2) const exp2 = [threeface1] - t.deepEqual(obs2, exp2) + t.deepEqual(obs2,exp2) }) test('CSG to DXF POLYLINE FACES', t => { const csg1 = new CSG() - t.is(csg1.polygons.length, 0) + t.is(csg1.polygons.length,0) - const obs1 = serialize({csgTo: 'polyline'}, csg1) + const obs1 = serialize(csg1, {csgTo: 'polyline'}) const exp1 = [empty] - t.deepEqual(obs1, exp1) + t.deepEqual(obs1,exp1) const csg2 = CSG.cube() - t.is(csg2.polygons.length, 6) + t.is(csg2.polygons.length,6) - const obs2 = serialize({csgTo: 'polyline'}, csg2) + const obs2 = serialize(csg2, {csgTo: 'polyline'}) const exp2 = [polyline1] - t.deepEqual(obs2, exp2) + t.deepEqual(obs2,exp2) }) const empty = `999 @@ -1183,3 +1183,4 @@ ${dxfObjects({})} 0 EOF ` + diff --git a/packages/dxf-serializer/tests/testPathToDxf.js b/packages/dxf-serializer/tests/testPathToDxf.js index 16def83..c419a59 100644 --- a/packages/dxf-serializer/tests/testPathToDxf.js +++ b/packages/dxf-serializer/tests/testPathToDxf.js @@ -7,28 +7,29 @@ const {dxfHeaders, dxfClasses, dxfTables, dxfBlocks, dxfObjects} = require('../a test('Path2 to DXF LWPOLYLINE', t => { const path1 = new CSG.Path2D() - t.is(path1.points.length, 0) + t.is(path1.points.length,0) - const obs1 = serialize({}, path1) + const obs1 = serialize(path1) const exp1 = [empty] - t.deepEqual(obs1, exp1) + t.deepEqual(obs1,exp1) - let path2 = CSG.Path2D.arc({center: [5, 5], endangle: 45}) - t.is(path2.points.length, 6) + let path2 = CSG.Path2D.arc({center: [5,5],endangle: 45}) + t.is(path2.points.length,6) - const obs2 = serialize({}, path2) + const obs2 = serialize(path2) const exp2 = [lwpolyline0] - t.deepEqual(obs2, exp2) + t.deepEqual(obs2,exp2) - let path3 = new CSG.Path2D([[10, -20]], false) - path3 = path3.appendBezier([[10, -10], [25, -10], [25, -20]], {resolution: 8}) - t.is(path3.points.length, 6) + let path3 = new CSG.Path2D([[10,-20]],false); + path3 = path3.appendBezier([[10,-10],[25,-10],[25,-20]],{resolution: 8}); + t.is(path3.points.length,6) - const obs3 = serialize({}, [path2, path3]) + const obs3 = serialize([path2,path3]) const exp3 = [lwpolyline1] - t.deepEqual(obs3, exp3) + t.deepEqual(obs3,exp3) }) + const empty = `999 DXF generated by JSCAD ${dxfHeaders({})} @@ -199,3 +200,4 @@ ${dxfObjects({})} 0 EOF ` + diff --git a/packages/io-utils/arrays.js b/packages/io-utils/arrays.js deleted file mode 100644 index 9682f06..0000000 --- a/packages/io-utils/arrays.js +++ /dev/null @@ -1,34 +0,0 @@ -// TODO !! same as in @jscad/core/arrays, dedupe !! -/* converts input data to array if it is not already an array */ -const toArray = data => { - if (!data) return [] - if (data.constructor !== Array) return [data] - return data -} - -const head = (array) => { - if (array === undefined || null) { - return undefined - } - if (array.length === 0) { - return undefined - } - return array[0] -} - -const flatten = list => list.reduce( - (a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), [] -) - -// helper function to retrieve the nth element of an array -const nth = (index, data) => { - if (!data) { - return undefined - } - if (data.length < index) { - return undefined - } - return data[index] -} - -module.exports = {toArray, head, flatten, nth} diff --git a/packages/io/index.js b/packages/io/index.js index 533d646..8ca15f2 100644 --- a/packages/io/index.js +++ b/packages/io/index.js @@ -1,4 +1,4 @@ -const { makeBlob } = require('@jscad/io-utils') +const {makeBlob} = require('@jscad/io-utils') const amfSerializer = require('@jscad/amf-serializer') const dxfSerializer = require('@jscad/dxf-serializer') @@ -12,7 +12,6 @@ const dxfDeSerializer = require('@jscad/dxf-deserializer') const gcodeDeSerializer = require('@jscad/gcode-deserializer') const jsonDeSerializer = require('@jscad/json-deserializer') const objDeSerializer = require('@jscad/obj-deserializer') -// const scadDeSerializer = require('@jscad/scad-deserializer') //FIXME: upgrade, fix before re-enabling const stlDeSerializer = require('@jscad/stl-deserializer') const svgDeSerializer = require('@jscad/svg-deserializer') @@ -30,7 +29,6 @@ module.exports = { gcodeDeSerializer, jsonDeSerializer, objDeSerializer, - // scadDeSerializer, //FIXME: upgrade, fix before re-enabling stlDeSerializer, svgDeSerializer } diff --git a/packages/json-serializer/index.js b/packages/json-serializer/index.js index a94f5f4..ec10da5 100644 --- a/packages/json-serializer/index.js +++ b/packages/json-serializer/index.js @@ -1,24 +1,4 @@ -/* -JSCAD Object to JSON 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: - JSON -3) Path2D conversion to: - none -*/ - const { ensureManifoldness } = require('@jscad/io-utils') -const {toArray} = require('@jscad/io-utils/arrays') -const { isCSG, isCAG } = require('@jscad/csg') const mimeType = 'application/json' @@ -30,10 +10,11 @@ function fromCAG (CAG, options) { str += comma str += JSON.stringify(side) comma = ',' + options && options.statusCallback && options.statusCallback({progress: 100 * i / CAG.sides.length}) } ) str += '] }' - return str + return [str] } function fromCSG (CSG, options) { @@ -44,51 +25,21 @@ function fromCSG (CSG, options) { str += comma str += JSON.stringify(polygon) comma = ',' + options && options.statusCallback && options.statusCallback({progress: 100 * i / CSG.polygons.length}) } ) str += '],' str += '"isCanonicalized": ' + JSON.stringify(CSG.isCanonicalized) + ',' str += '"isRetesselated": ' + JSON.stringify(CSG.isRetesselated) str += '}' - return str + return [str] } -function 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) - - const defaults = { - statusCallback: null - } - options = Object.assign({}, defaults, options) - - options.statusCallback && options.statusCallback({progress: 0}) - - let contents = [] - objects.forEach(function (object, i) { - if (isCSG(object) && object.polygons.length > 0) { - let data = ensureManifoldness(object) - contents.push(fromCSG(data, options)) - } - if (isCAG(object) && object.sides.length > 0) { - contents.push(fromCAG(object, options)) - } - options.statusCallback && options.statusCallback({progress: 100 * i / objects.length}) - }) - - options.statusCallback && options.statusCallback({progress: 100}) - return contents +function serialize (data, options) { + options && options.statusCallback && options.statusCallback({progress: 0}) + const result = 'sides' in data ? fromCAG(data, options) : fromCSG(ensureManifoldness(data), options) + options && options.statusCallback && options.statusCallback({progress: 100}) + return result } module.exports = { diff --git a/packages/json-serializer/package.json b/packages/json-serializer/package.json index 723e05d..1167d79 100644 --- a/packages/json-serializer/package.json +++ b/packages/json-serializer/package.json @@ -35,8 +35,5 @@ "dependencies": { "@jscad/csg": "0.7.0", "@jscad/io-utils": "^0.1.3" - }, - "devDependencies": { - "ava": "^0.19.1" } } diff --git a/packages/json-serializer/test.js b/packages/json-serializer/test.js index f347daa..30d1893 100644 --- a/packages/json-serializer/test.js +++ b/packages/json-serializer/test.js @@ -1,49 +1,11 @@ const test = require('ava') -const {CSG, CAG} = require('@jscad/csg') +const {CSG} = require('@jscad/csg') const serializer = require('./index.js') -test('serialize csg to json', function (t) { - const emptyShape = new CSG() - const observed1 = serializer.serialize(emptyShape) +test('serialize csg to stl', function (t) { + const input = new CSG.cube() + const expected = [ '{ "type": "csg","polygons": [{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11},{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":-1,"_y":0,"_z":0},"w":1,"tag":1}},{"vertices":[{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":1,"_y":0,"_z":0},"w":1,"tag":3}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12},{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":-1,"_z":0},"w":1,"tag":4}},{"vertices":[{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":1,"_z":0},"w":1,"tag":5}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14},{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":0,"_z":-1},"w":1,"tag":6}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":0,"_z":1},"w":1,"tag":7}}],"isCanonicalized": true,"isRetesselated": true}' ] + const observed = serializer.serialize(input, {binary: true}) - t.deepEqual(observed1, expected1) - - const aCube = CSG.cube() - const observed2 = serializer.serialize(aCube) - - t.deepEqual(observed2, expected2) - - const aRoundedCube = CSG.cube({radius: 5}) - const observed3 = serializer.serialize([aCube, aRoundedCube]) - - t.deepEqual(observed3, expected3) + t.deepEqual(observed, expected) }) - -test('serialize cag to json', function (t) { - const emptyShape = new CAG() - const observed10 = serializer.serialize(emptyShape) - - t.deepEqual(observed10, expected10) - - const aRectangle = CAG.rectangle() - const observed12 = serializer.serialize(aRectangle) - - t.deepEqual(observed12, expected12) - - const aRoundedRectangle = CAG.rectangle({radius: 5}) - const observed13 = serializer.serialize([aRectangle, aRoundedRectangle]) - - t.deepEqual(observed13, expected13) -}) - -const expected1 = [] - -const expected2 = [ '{ "type": "csg","polygons": [{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11},{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":-1,"_y":0,"_z":0},"w":1,"tag":1}},{"vertices":[{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":1,"_y":0,"_z":0},"w":1,"tag":3}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12},{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":-1,"_z":0},"w":1,"tag":4}},{"vertices":[{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":1,"_z":0},"w":1,"tag":5}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14},{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":0,"_z":-1},"w":1,"tag":6}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":0,"_z":1},"w":1,"tag":7}}],"isCanonicalized": true,"isRetesselated": true}' ] - -const expected3 = [ '{ "type": "csg","polygons": [{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11},{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":-1,"_y":0,"_z":0},"w":1,"tag":1}},{"vertices":[{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":1,"_y":0,"_z":0},"w":1,"tag":3}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12},{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":-1,"_z":0},"w":1,"tag":4}},{"vertices":[{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":1,"_z":0},"w":1,"tag":5}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":-1},"tag":9},{"pos":{"_x":-1,"_y":1,"_z":-1},"tag":8},{"pos":{"_x":1,"_y":1,"_z":-1},"tag":14},{"pos":{"_x":1,"_y":-1,"_z":-1},"tag":13}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":0,"_z":-1},"w":1,"tag":6}},{"vertices":[{"pos":{"_x":-1,"_y":-1,"_z":1},"tag":10},{"pos":{"_x":1,"_y":-1,"_z":1},"tag":12},{"pos":{"_x":1,"_y":1,"_z":1},"tag":15},{"pos":{"_x":-1,"_y":1,"_z":1},"tag":11}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":0,"_z":1},"w":1,"tag":7}}],"isCanonicalized": true,"isRetesselated": true}', '{ "type": "csg","polygons": [{"vertices":[{"pos":{"_x":-5,"_y":-5,"_z":-5},"tag":23},{"pos":{"_x":-5,"_y":-5,"_z":5},"tag":24},{"pos":{"_x":-5,"_y":5,"_z":5},"tag":25},{"pos":{"_x":-5,"_y":5,"_z":-5},"tag":22}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":-1,"_y":0,"_z":0},"w":5,"tag":16}},{"vertices":[{"pos":{"_x":5,"_y":-5,"_z":-5},"tag":27},{"pos":{"_x":5,"_y":5,"_z":-5},"tag":28},{"pos":{"_x":5,"_y":5,"_z":5},"tag":29},{"pos":{"_x":5,"_y":-5,"_z":5},"tag":26}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":1,"_y":0,"_z":0},"w":5,"tag":17}},{"vertices":[{"pos":{"_x":-5,"_y":-5,"_z":-5},"tag":23},{"pos":{"_x":5,"_y":-5,"_z":-5},"tag":27},{"pos":{"_x":5,"_y":-5,"_z":5},"tag":26},{"pos":{"_x":-5,"_y":-5,"_z":5},"tag":24}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":-1,"_z":0},"w":5,"tag":18}},{"vertices":[{"pos":{"_x":-5,"_y":5,"_z":-5},"tag":22},{"pos":{"_x":-5,"_y":5,"_z":5},"tag":25},{"pos":{"_x":5,"_y":5,"_z":5},"tag":29},{"pos":{"_x":5,"_y":5,"_z":-5},"tag":28}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":1,"_z":0},"w":5,"tag":19}},{"vertices":[{"pos":{"_x":-5,"_y":-5,"_z":-5},"tag":23},{"pos":{"_x":-5,"_y":5,"_z":-5},"tag":22},{"pos":{"_x":5,"_y":5,"_z":-5},"tag":28},{"pos":{"_x":5,"_y":-5,"_z":-5},"tag":27}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":0,"_z":-1},"w":5,"tag":20}},{"vertices":[{"pos":{"_x":-5,"_y":-5,"_z":5},"tag":24},{"pos":{"_x":5,"_y":-5,"_z":5},"tag":26},{"pos":{"_x":5,"_y":5,"_z":5},"tag":29},{"pos":{"_x":-5,"_y":5,"_z":5},"tag":25}],"shared":{"color":null,"tag":2},"plane":{"normal":{"_x":0,"_y":0,"_z":1},"w":5,"tag":21}}],"isCanonicalized": true,"isRetesselated": true}' ] - -const expected10 = [] - -const expected12 = ['{ "type": "cag","sides": [{"vertex0":{"pos":{"_x":-1,"_y":1}},"vertex1":{"pos":{"_x":-1,"_y":-1}}},{"vertex0":{"pos":{"_x":-1,"_y":-1}},"vertex1":{"pos":{"_x":1,"_y":-1}}},{"vertex0":{"pos":{"_x":1,"_y":-1}},"vertex1":{"pos":{"_x":1,"_y":1}}},{"vertex0":{"pos":{"_x":1,"_y":1}},"vertex1":{"pos":{"_x":-1,"_y":1}}}] }'] - -const expected13 = ['{ "type": "cag","sides": [{"vertex0":{"pos":{"_x":-1,"_y":1}},"vertex1":{"pos":{"_x":-1,"_y":-1}}},{"vertex0":{"pos":{"_x":-1,"_y":-1}},"vertex1":{"pos":{"_x":1,"_y":-1}}},{"vertex0":{"pos":{"_x":1,"_y":-1}},"vertex1":{"pos":{"_x":1,"_y":1}}},{"vertex0":{"pos":{"_x":1,"_y":1}},"vertex1":{"pos":{"_x":-1,"_y":1}}}] }', '{ "type": "cag","sides": [{"vertex0":{"pos":{"_x":-5,"_y":5}},"vertex1":{"pos":{"_x":-5,"_y":-5}}},{"vertex0":{"pos":{"_x":-5,"_y":-5}},"vertex1":{"pos":{"_x":5,"_y":-5}}},{"vertex0":{"pos":{"_x":5,"_y":-5}},"vertex1":{"pos":{"_x":5,"_y":5}}},{"vertex0":{"pos":{"_x":5,"_y":5}},"vertex1":{"pos":{"_x":-5,"_y":5}}}] }'] diff --git a/packages/scad-deserializer/LICENSE b/packages/scad-deserializer/LICENSE deleted file mode 100644 index b05ccaa..0000000 --- a/packages/scad-deserializer/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2017 @jscad - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/packages/scad-deserializer/README.md b/packages/scad-deserializer/README.md deleted file mode 100644 index 1948553..0000000 --- a/packages/scad-deserializer/README.md +++ /dev/null @@ -1,116 +0,0 @@ -## openscad-openjscad-translator - -[![GitHub version](https://badge.fury.io/gh/jscad%2Fopenscad-openjscad-translator.svg)](https://badge.fury.io/gh/jscad%2Fopenscad-openjscad-translator) -[![experimental](http://badges.github.io/stability-badges/dist/stable.svg)](http://github.com/badges/stability-badges) -[![Build Status](https://travis-ci.org/jscad/openscad-openjscad-translator.svg)](https://travis-ci.org/jscad/openscad-openjscad-translator) -[![Dependency Status](https://david-dm.org/jscad/openscad-openjscad-translator.svg)](https://david-dm.org/jscad/openscad-openjscad-translator) -[![devDependency Status](https://david-dm.org/jscad/openscad-openjscad-translator/dev-status.svg)](https://david-dm.org/jscad/openscad-openjscad-translator#info=devDependencies) - -## OpenSCAD to OpenJSCAD Translator - -> Translates OpenSCAD syntax into OpenJsCAD syntax - -## Overview - -Node module that translates [OpenSCAD syntax](http://www.openscad.org/) into [OpenJSCAD syntax](https://github.com/jscad/OpenJSCAD.org/). - -**_IMPORTANT NOTE:_ This project is written against an older version of OpenSCAD (v 2011.06) which has now been superseded.** - -The following functions are not implemented (neither in csg.js nor in OpenJSCAD), -and contributions are welcome ! -- [ ] [assign statement](https://github.com/jscad/openscad-openjscad-translator/issues/12) -- [ ] [minkowski](https://github.com/jscad/openscad-openjscad-translator/issues/11) -- [ ] [hull](https://github.com/jscad/openscad-openjscad-translator/issues/13) - -## Table of Contents - -- [Installation](#install) -- [Usage](#usage) -- [Build](#build) -- [Contribute](#contribute) -- [License](#license) - -## Install - -``` -npm install @jscad/openscad-openjscad-translator -``` - ->NOTE: for now we need to use a temporary build of the sylvester (node-sylvester) -library since the one on NPM has a missing flag which makes use with browserify impossible: -see : [here](https://github.com/NaturalNode/node-sylvester/issues/9) and [here](https://github.com/NaturalNode/node-sylvester/issues/4) - -## Usage - -### Node - -```javascript - var parser = require('@jscad/openscad-openjscad-translator') - var fs = require('fs') - - var openSCADText = fs.readFileSync("test.scad", "UTF8") - var openJSCADResult = parser.parse(openSCADText) - - console.log(openJSCADResult) -``` - -### Web - -```html - - - -``` - -Include ```lib/underscore.js``` and ```dist/web-built.js``` and the **openscadOpenJscadParser** object will be available. This has two attributes: -* **parse** - a function which accepts OpenSCAD text and returns OpenJsCAD text. -* **parser** - a Jison parser object which can be used for more advanced parsing (e.g. the **parse** method returns the text and the context object, allowing for processing of *use* statements.) - -## Build - -### Web - -not minified : -``` -npm run build -``` -minified: -``` -npm run build-min -``` -Creates scripts in the ```dist``` folder. - -## Develop - -### Jison - -``` -npm run build-parser -``` -Compiles the Jison lexer/parser to an AMD module in the ```src``` folder called ```openscad-parser.js```. - -## Contribute - -This library is part of the JSCAD Organization, and is maintained by a group of volunteers. We welcome and encourage anyone to pitch in but please take a moment to read the following guidelines. - -* If you want to submit a bug report please make sure to follow the [Reporting Issues](https://github.com/jscad/openscad-openjscad-translator/wiki/Reporting-Issues) guide. Bug reports are accepted as [Issues](https://github.com/jscad/openscad-openjscad-translator/issues/) via GitHub. - -* If you want to submit a change or a patch, please see the [Contributing guide](https://github.com/z3dev/openscad-openjscad-translator/blob/master/CONTRIBUTING.md). New contributions are accepted as [Pull Requests](https://github.com/jscad/openscad-openjscad-translator/pulls/) via GithHub. - -* We only accept bug reports and pull requests on **GitHub**. - -* If you have a question about how to use OpenJSCAD, then please start a conversation at the [OpenJSCAD.org User Group](https://plus.google.com/communities/114958480887231067224). You might find the answer in the [OpenJSCAD.org User Guide](https://en.wikibooks.org/wiki/OpenJSCAD_User_Guide). - -* If you have a change or new feature in mind, please start a conversation with the [Core Developers](https://plus.google.com/communities/114958480887231067224) and start contributing changes. - -Small Note: If editing this README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. - -## License - -[The MIT License (MIT)](https://github.com/jscad/openscad-openjscad-translator/blob/master/LICENSE) -(unless specified otherwise) - -_NOTE: OpenSCAD and OpenSCAD API are released under the General Public License version 2._ diff --git a/packages/scad-deserializer/openscad-parser.jison b/packages/scad-deserializer/openscad-parser.jison deleted file mode 100755 index 92b0c96..0000000 --- a/packages/scad-deserializer/openscad-parser.jison +++ /dev/null @@ -1,571 +0,0 @@ - -/* description: Parses openscad to openjscad. */ - -/* lexical grammar */ - -%lex - -%options flex - - -%s cond_include cond_use cond_comment cond_string cond_import - -D [0-9] -E [Ee][+-]?{D}+ - -%% - -/* Note: use and include statements here are ignored. Instead they are preprocessed. */ -include[ \t\r\n>]*"<" %{ this.begin('cond_include'); %} -[^\t\r\n>]*"/" %{ yy.filepath = yytext; %} -[^\t\r\n>/]+ %{ yy.filename = yytext; %} -">" %{ this.popState(); %} - -use[ \t\r\n>]*"<" %{ this.begin('cond_use');%} -[^\t\r\n>]+ %{ yy.filename = yytext; %} -">" %{ this.popState(); %} - -"module" return 'TOK_MODULE' -"function" return 'TOK_FUNCTION' -"if" return 'TOK_IF' -"else" return 'TOK_ELSE' -"true" return 'TOK_TRUE' -"false" return 'TOK_FALSE' -"undef" return 'TOK_UNDEF' - -"\\t" %{ stringcontents += ' '; %} -"\\n" %{ stringcontents += '\n'; %} -"\\\"" %{ stringcontents += '\"'; %} -"\\r" %{ stringcontents += '\r'; %} -"\\\\" %{ stringcontents += '\\'; %} - -"\\0" %{ stringcontents += '\0'; %} -"\\a" %{ stringcontents += '\a'; %} -"\\b" %{ stringcontents += '\b'; %} -"\\t" %{ stringcontents += '\t'; %} -"\\n" %{ stringcontents += '\n'; %} -"\\v" %{ stringcontents += '\v'; %} -"\\f" %{ stringcontents += '\f'; %} -"\\e" %{ stringcontents += '\e'; %} -[^\\\n\"]+ %{ /*"*/ - stringcontents += yytext; - %} -"\"" %{ - this.popState(); - yytext = stringcontents; - return 'TOK_STRING'; - %} -[\"] %{ /*"*/ - this.begin('cond_string'); - stringcontents = ""; - %} - -[\n] /* Ignore */ -[\r\t ] /* Ignore */ -\/\/[^\n]*\n? /* Ignore */ -\/\*.+\*\/ /* Ignore Note: multi-line comments are removed via a preparse regex. */ - -{D}*\.{D}+{E}? return 'TOK_NUMBER' -{D}+\.{D}*{E}? return 'TOK_NUMBER' -{D}+{E}? return 'TOK_NUMBER' -"$"?[a-zA-Z0-9_]+ return 'TOK_ID' - -"<=" return 'LE' -">=" return 'GE' -"==" return 'EQ' -"!=" return 'NE' -"&&" return 'AND' -"||" return 'OR' - -. return yytext; - -/lex - -/* operator associations and precedence */ - -%right '?' ':' -%left OR -%left AND -%left '<' LE GE '>' -%left EQ NE -%left '!' '+' '-' -%left '*' '/' '%' -%left '[' ']' -%left '.' - -%start program - -%% /* language grammar */ - -program: - input - { - return ext.processModule(yy); - } - ; - - -input: - /* empty */ - | input statement - ; - -inner_input: - /* empty */ - | inner_input statement - ; - -statement: - statement_begin statement_end - ; - -statement_begin: - /*empty*/ - | TOK_MODULE TOK_ID '(' arguments_decl optional_commas ')' - { - ext.stashModule($2, $4.argnames, $4.argexpr); - delete $4; - } - ; - -statement_end: - ';' - { - } - | '{' inner_input '}' - { - ext.popModule(); - } - | module_instantiation - { - ext.addModuleChild($1); - } - | TOK_ID '=' expr ';' - { - ext.addModuleAssignmentVar($1, $3); - } - | TOK_FUNCTION TOK_ID '(' arguments_decl optional_commas ')' '=' expr ';' - { - ext.addModuleFunction($2, $8, $4.argnames, $4.argexpr); - delete $4; - } - | BR - ; - -children_instantiation: - module_instantiation - { - $$ = new ModuleInstantiation(); - if ($1) { - $$.children.push($1); - } - } - | '{' module_instantiation_list '}' - { - $$ = $2; - } - ; - - -if_statement: - TOK_IF '(' expr ')' children_instantiation - { - $$ = new IfElseModuleInstantiation(); - $$.argnames.push(""); - $$.argexpr.push($3); - - if ($$) { - $$.children = $5.children; - } else { - for (var i = 0; i < $5.children.size(); i++) - delete $5.children[i]; - } - delete $5; - } - ; - -ifelse_statement: - if_statement - { - $$ = $1; - } - | if_statement TOK_ELSE children_instantiation - { - $$ = $1; - if ($$) { - $$.else_children = $3.children; - } else { - for (var i = 0; i < $3.children.size(); i++) - delete $3.children[i]; - } - delete $3; - } - ; - -module_instantiation: - single_module_instantiation ';' - { - $$ = $1; - } - | single_module_instantiation children_instantiation - { - $$ = $1; - if ($$) { - $$.children = $2.children; - } else { - for (var i = 0; i < $2.children.length; i++) - delete $2.children[i]; - } - delete $2; - } - | - ifelse_statement - { - $$ = $1; - } - ; - -module_instantiation_list: - /* empty */ - { - $$ = new ModuleInstantiation(); - } - | module_instantiation_list module_instantiation - { - $$ = $1; - if ($$) { - if ($2) { - $$.children.push($2); - } - } else { - delete $2; - } - } - ; - -single_module_instantiation: - TOK_ID '(' arguments_call ')' - { - $$ = new ModuleInstantiation(); - $$.name = $1; - $$.argnames = $3.argnames; - $$.argexpr = $3.argexpr; - delete $3; - } - | '!' single_module_instantiation - { - $$ = $2; - if ($$) { - $$.tag_root = true; - } - } - | '#' single_module_instantiation - { - $$ = $2; - if ($$) { - $$.tag_highlight = true; - } - } - | '%' single_module_instantiation - { - /* - NOTE: Currently unimplemented, therefore not displaying parts marked with % - $$ = $2; - if ($$) { - $$.tag_background = true; - } - */ - delete $2; - $$ = undefined; - } - | '*' single_module_instantiation - { - delete $2; - $$ = undefined; - } - ; - -expr: - TOK_TRUE - { - $$ = new Expression(true); - } - | TOK_FALSE - { - $$ = new Expression(false); - } - | TOK_UNDEF - { - $$ = new Expression(undefined); - } - | TOK_ID - { - $$ = new Expression(); - $$.type = "L"; - $$.var_name = $1; - } - | expr '.' TOK_ID - { - $$ = new Expression(); - $$.type = "N"; - $$.children.push($1); - $$.var_name = $3; - } - | TOK_STRING - { - $$ = new Expression(String($1)); - } - | TOK_NUMBER - { - $$ = new Expression(Number($1)); - } - | '[' expr ':' expr ']' - { - var e_one = new Expression(1.0); - $$ = new Expression(); - $$.type = "R"; - $$.children.push($2); - $$.children.push(e_one); - $$.children.push($4); - } - | '[' expr ':' expr ':' expr ']' - { - $$ = new Expression(); - $$.type = "R"; - $$.children.push($2); - $$.children.push($4); - $$.children.push($6); - } - | '[' optional_commas ']' - { - $$ = new Expression([]); - } - | '[' vector_expr optional_commas ']' - { - $$ = $2; - } - | expr '*' expr - { - $$ = new Expression(); - $$.type = '*'; - $$.children.push($1); - $$.children.push($3); - } - | expr '/' expr - { - $$ = new Expression(); - $$.type = '/'; - $$.children.push($1); - $$.children.push($3); - } - | expr '%' expr - { - $$ = new Expression(); - $$.type = '%'; - $$.children.push($1); - $$.children.push($3); - } - | expr '+' expr - { - $$ = new Expression(); - $$.type = '+'; - $$.children.push($1); - $$.children.push($3); - } - | expr '-' expr - { - $$ = new Expression(); - $$.type = '-'; - $$.children.push($1); - $$.children.push($3); - } - | expr '<' expr - { - $$ = new Expression(); - $$.type = '<'; - $$.children.push($1); - $$.children.push($3); - } - | expr LE expr - { - $$ = new Expression(); - $$.type = '<='; - $$.children.push($1); - $$.children.push($3); - } - | expr EQ expr - { - $$ = new Expression(); - $$.type = '=='; - $$.children.push($1); - $$.children.push($3); - } - | expr NE expr - { - $$ = new Expression(); - $$.type = '!='; - $$.children.push($1); - $$.children.push($3); - } - | expr GE expr - { - $$ = new Expression(); - $$.type = '>='; - $$.children.push($1); - $$.children.push($3); - } - | expr '>' expr - { - $$ = new Expression(); - $$.type = '>'; - $$.children.push($1); - $$.children.push($3); - } - | expr AND expr - { - $$ = new Expression(); - $$.type = '&&'; - $$.children.push($1); - $$.children.push($3); - } - | expr OR expr - { - $$ = new Expression(); - $$.type = '||'; - $$.children.push($1); - $$.children.push($3); - } - | '+' expr - { - $$ = $2; - } - | '-' expr - { - $$ = new Expression(); - $$.type = 'I'; - $$.children.push($2); - } - | '!' expr - { - $$ = new Expression(); - $$.type = '!'; - $$.children.push($2); - } - | '(' expr ')' - { $$ = $2; } - | expr '?' expr ':' expr - { - $$ = new Expression(); - $$.type = '?:'; - $$.children.push($1); - $$.children.push($3); - $$.children.push($5); - } - | expr '[' expr ']' - { - $$ = new Expression(); - $$.type = '[]'; - $$.children.push($1); - $$.children.push($3); - } - | TOK_ID '(' arguments_call ')' - { - $$ = new Expression(); - $$.type = 'F'; - $$.call_funcname = $1; - $$.call_argnames = $3.argnames; - $$.children = $3.argexpr; - delete $3; - } - ; - -optional_commas: - ',' optional_commas - | - ; - -vector_expr: - expr - { - $$ = new Expression(); - $$.type = 'V'; - $$.children.push($1); - } - | vector_expr ',' optional_commas expr - { - $$ = $1; - $$.children.push($4); - } - ; - -arguments_decl: - /* empty */ - { - $$ = new ArgsContainer(); - } - | argument_decl - { - $$ = new ArgsContainer(); - $$.argnames.push($1.argname); - $$.argexpr.push($1.argexpr); - delete $1; - } - | arguments_decl ',' optional_commas argument_decl - { - $$ = $1; - $$.argnames.push($4.argname); - $$.argexpr.push($4.argexpr); - delete $4; - } - ; - -argument_decl: - TOK_ID - { - $$ = new ArgContainer(); - $$.argname = $1; - $$.argexpr = undefined; - } - | TOK_ID '=' expr - { - $$ = new ArgContainer(); - $$.argname = $1; - $$.argexpr = $3; - } - ; - -arguments_call: - /* empty */ - { - $$ = new ArgsContainer(); - } - | argument_call - { - $$ = new ArgsContainer(); - $$.argnames.push($1.argname); - $$.argexpr.push($1.argexpr); - delete $1; - } - | arguments_call ',' optional_commas argument_call - { - $$ = $1; - $$.argnames.push($4.argname); - $$.argexpr.push($4.argexpr); - delete $4; - } - ; - -argument_call: - expr - { - $$ = new ArgContainer(); - $$.argexpr = $1; - } - | TOK_ID '=' expr - { - $$ = new ArgContainer(); - $$.argname = $1; - $$.argexpr = $3; - } - ; - -%% diff --git a/packages/scad-deserializer/package.json b/packages/scad-deserializer/package.json deleted file mode 100755 index 6cace1e..0000000 --- a/packages/scad-deserializer/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "@jscad/scad-deserializer", - "version": "0.0.10", - "description": "Translates OpenSCAD syntax (http://www.openscad.org/) into OpenJsCAD syntax (http://joostn.github.com/OpenJsCad/).", - "main": "src/parserWrapper.js", - "browser": { - "lapack": false - }, - "scripts": { - "test": "node tests/all-tests", - "build-old": "browserify src/parserWrapper.js --ignore lapack --standalone openscadOpenJscadParser -o dist/web-built.js", - "build-min-old": "browserify src/parserWrapper.js --ignore lapack --standalone openscadOpenJscadParser | uglifyjs -c > dist/web-built.min.js", - "build-all-old": "npm run build && npm run build-min", - "build-parser": "node src/parserMaker", - "release-patch": "git checkout master && npm run build-all; npm version patch ; git commit -a -m 'chore(dist): built release'; git push origin master --tags ", - "release-minor": "git checkout master && npm run build-all; npm version minor ; git commit -a -m 'chore(dist): built release'; git push origin master --tags ", - "release-major": "git checkout master && npm run build-all; npm version major ; git commit -a -m 'chore(dist): built release'; git push origin master --tags " - }, - "directories": { - "test": "tests" - }, - "dependencies": { - "lodash": "^4.17.4", - "sylvester": "github:kaosat-dev/node-sylvester" - }, - "devDependencies": { - "jison": "^0.4.17", - "test": "~0.6.0" - }, - "repository": "https://github.com/jscad/io", - "bugs": { - "url": "https://github.com/jscad/io/issues" - }, - "keywords": [ - "openscad", - "openjscad", - "jscad", - "scad", - "deserializer", - "translator" - ], - "author": { - "name": "Gary Hodgson", - "email": "contact@garyhodgson.com", - "url": "http://garyhodgson.com" - }, - "contributors": [ - { - "name": "z3dev", - "url": "http://www.z3d.jp" - }, - { - "name": "Mark 'kaosat-dev' Moissette", - "url": "http://kaosat.net" - } - ], - "license": "MIT" -} diff --git a/packages/scad-deserializer/src/ArgContainer.js b/packages/scad-deserializer/src/ArgContainer.js deleted file mode 100755 index fdbb625..0000000 --- a/packages/scad-deserializer/src/ArgContainer.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = function () { - this.argname - this.argexpr -} diff --git a/packages/scad-deserializer/src/ArgsContainer.js b/packages/scad-deserializer/src/ArgsContainer.js deleted file mode 100755 index fc8e011..0000000 --- a/packages/scad-deserializer/src/ArgsContainer.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = function () { - this.argnames = [] - this.argexpr = [] -} diff --git a/packages/scad-deserializer/src/CSGModule.js b/packages/scad-deserializer/src/CSGModule.js deleted file mode 100755 index b72c0ad..0000000 --- a/packages/scad-deserializer/src/CSGModule.js +++ /dev/null @@ -1,36 +0,0 @@ -var Context = require('./Context') -var Globals = require('./Globals') -var _ = require('lodash') - -function CSGModule (factory, csgOperation) { - this.csgOperation = csgOperation - this.factory = factory -}; - -CSGModule.prototype.evaluate = function (parentContext, inst) { - var context = new Context(parentContext) - - var childModules = [] - - for (var i = 0; i < inst.children.length; i++) { - var childInst = inst.children[i] - childInst.argvalues = [] - _.each(childInst.argexpr, function (expr, index, list) { - childInst.argvalues.push(expr.evaluate(context)) - }) - - var childAdaptor = this.factory.getAdaptor(childInst) - var evaluatedChild = childAdaptor.evaluate(parentContext, childInst) - if (evaluatedChild !== undefined) { - childModules.push(evaluatedChild) - } - }; - - if (childModules.length <= 1) { - return childModules[0] - } else { - return childModules[0] + '.' + this.csgOperation + '([' + childModules.slice(1).join(',\n') + '])' - } -} - -module.exports = CSGModule diff --git a/packages/scad-deserializer/src/ChildModule.js b/packages/scad-deserializer/src/ChildModule.js deleted file mode 100755 index e9ac192..0000000 --- a/packages/scad-deserializer/src/ChildModule.js +++ /dev/null @@ -1,46 +0,0 @@ -var _ = require('lodash') -var Context = require('./Context') -var Globals = require('./Globals') - -function Child (factory) { - this.factory = factory -}; - -Child.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, [], [], inst) - - var childIndex = 0 - if (inst.argvalues[0] !== undefined) { - childIndex = inst.argvalues[0] - } - - var evaluatedChildren = [] - - for (var i = Globals.context_stack.length - 1; i >= 0; i--) { - var ctx = Globals.context_stack[i] - - if (ctx.inst_p !== undefined) { - if (childIndex < ctx.inst_p.children.length) { - var childInst = ctx.inst_p.children[childIndex] - - _.each(childInst.argexpr, function (expr, index, list) { - childInst.argvalues.push(expr.evaluate(ctx.inst_p.ctx)) - }) - - var childAdaptor = this.factory.getAdaptor(childInst) - evaluatedChildren.push(childAdaptor.evaluate(ctx.inst_p.ctx, childInst)) - } - return evaluatedChildren - } - ctx = ctx.parentContext - }; - - return undefined -} - -module.exports = Child diff --git a/packages/scad-deserializer/src/Context.js b/packages/scad-deserializer/src/Context.js deleted file mode 100755 index 2255097..0000000 --- a/packages/scad-deserializer/src/Context.js +++ /dev/null @@ -1,306 +0,0 @@ -var _ = require('lodash') -var Globals = require('./Globals') - -function Context (parentContext) { - this.vars = (parentContext) ? {} : { - '$fn': Globals.FN_DEFAULT, - '$fs': Globals.FS_DEFAULT, - '$fa': Globals.FA_DEFAULT - } - this.parentContext = parentContext - this.inst_p - this.functions_p = {} - this.modules_p = {} - Globals.context_stack.push(this) -}; - -Context.prototype.setVariable = function (name, value) { - if (value !== undefined) { - this.vars[name] = value - } -} - -Context.prototype.args = function (argnames, argexpr, call_argnames, call_argvalues) { - for (var i = 0; i < argnames.length; i++) { - if (i < argexpr.length && argexpr[i] !== undefined) { - this.setVariable(argnames[i], argexpr[i].evaluate(this.parentContext)) - } else { - this.setVariable(argnames[i], undefined) - } - }; - var posarg = 0 - for (var i = 0; i < call_argnames.length; i++) { - if (call_argnames[i] === undefined) { - if (posarg < argnames.length) { - this.setVariable(argnames[posarg++], call_argvalues[i]) - } - } else { - this.setVariable(call_argnames[i], call_argvalues[i]) - } - } -} - -Context.prototype.lookupVariable = function (name) { - if (_.has(this.vars, name)) { - return this.vars[name] - } - - if (this.parentContext !== undefined) { - return this.parentContext.lookupVariable(name) - } - - // console.log("WARNING: Ignoring unknown variable '"+name+"'."); - return undefined -} - -Context.prototype.evaluateFunction = function (name, argnames, argvalues) { - if (_.has(this.functions_p, name)) { - return this.functions_p[name].evaluate(this, argnames, argvalues) - } - - if (_.has(functionNameLookup, name)) { - return functionNameLookup[name].apply(this, argvalues) - } - - if (this.parentContext !== undefined) { - return this.parentContext.evaluateFunction(name, argnames, argvalues) - } - - console.log("WARNING: Ignoring unknown function '" + name + "'.") - return undefined -} - -Context.prototype.evaluateModule = function (inst, factory) { - var that = this - - var customModule = _.find(this.modules_p, function (x) { return x.name == inst.name }) - if (customModule !== undefined) { - return customModule.evaluate(this, inst) - } - - if (inst.isSubmodule === undefined || !inst.isSubmodule) { - var adaptor = factory.getAdaptor(inst) - if (adaptor !== undefined) { - return adaptor.evaluate(this, inst) - } - } - - if (this.parentContext) { - return this.parentContext.evaluateModule(inst, factory) - } - - console.log('WARNING: Ignoring unknown module: ' + inst.name) - return undefined -} - -Context.newContext = function (parentContext, argnames, argexpr, inst) { - var context = new Context(parentContext) - context.args(argnames, argexpr, inst.argnames, inst.argvalues) - return context -} - -Context.contextVariableLookup = function (context, name, defaultValue) { - var val = context.lookupVariable(name) - if (val === undefined) { - val = defaultValue - } - return val -} - -Context.printContext = function (c) { - console.log(c.vars) - if (c.parentContext) { - Context.printContext(c.parentContext) - } -} - -/* - Returns the number of subdivision of a whole circle, given radius and - the three special variables $fn, $fs and $fa -*/ -Context.get_fragments_from_r = function (r, context) { - var fn = Context.contextVariableLookup(context, '$fn', Globals.FN_DEFAULT) - var fs = Context.contextVariableLookup(context, '$fs', Globals.FS_DEFAULT) - var fa = Context.contextVariableLookup(context, '$fa', Globals.FA_DEFAULT) - - var GRID_FINE = 0.000001 - if (r < GRID_FINE) return 0 - if (fn > 0.0) { return parseInt(fn)} - return parseInt(Math.ceil(Math.max(Math.min(360.0 / fa, r * 2 * Math.PI / fs), 5))) -} - -function rad2deg (rad) { - return rad * (180 / Math.PI) -}; - -function deg2rad (deg) { - return deg * Math.PI / 180.0 -}; - -var functionNameLookup = { - 'cos': function (degree) { - if (_.isUndefined(degree) || _.isNaN(degree)) { return undefined } - return Math.cos(deg2rad(degree)) - }, - 'sin': function (degree) { - if (_.isUndefined(degree) || _.isNaN(degree)) { return undefined } - return Math.sin(deg2rad(degree)) - }, - 'acos': function (degree) { - if (_.isUndefined(degree) || _.isNaN(degree)) { return undefined } - return rad2deg(Math.acos(degree)) - }, - 'asin': function (degree) { - if (_.isUndefined(degree) || _.isNaN(degree)) { return undefined } - return rad2deg(Math.asin(degree)) - }, - 'atan': function (degree) { - if (_.isUndefined(degree) || _.isNaN(degree)) { return undefined } - return rad2deg(Math.atan(degree)) - }, - 'atan2': function (x, y) { - if (_.isUndefined(x) || _.isNaN(x) || _.isUndefined(y) || _.isNaN(y)) { return undefined } - return rad2deg(Math.atan2(x, y)) - }, - 'tan': function (degree) { - if (_.isUndefined(degree) || _.isNaN(degree)) { return undefined } - return Math.tan(deg2rad(degree)) - }, - 'rands': function (min_value, max_value, value_count, seed_value) { - var values = [] - if (seed_value !== undefined) { - Math.seedrandom(seed_value) - } - for (var i = 0; i < value_count; i++) { - var random_value = min_value + (Math.random() * (max_value - min_value)) - values[i] = random_value - } - return values - }, - 'round': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - - // This is because Javascript rounds negative numbers up, whereas c++ rounds down - return (x < 0) ? -(Math.round(Math.abs(x))) : Math.round(x) - }, - 'exp': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - - return Math.exp(x) - }, - 'abs': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - return Math.abs(x) - }, - 'max': function () { - return Math.max.apply(null, _.map(arguments, function (num) { return num || -Infinity })) - }, - 'min': function () { - return Math.min.apply(null, _.map(arguments, function (num) { return num || Infinity })) - }, - 'pow': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - return Math.pow(x) - }, - 'ln': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - return Math.log(x) - }, - 'ceil': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - return Math.ceil(x) - }, - 'floor': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - return Math.floor(x) - }, - 'sqrt': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - return Math.sqrt(x) - }, - 'len': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - var y = _.isString(x) ? Globals.stripString(x) : x - return y.length - }, - 'log': function () { - if (arguments.length == 2) { - if (_.isUndefined(arguments[0]) || _.isNaN(arguments[0]) || _.isUndefined(arguments[1]) || _.isNaN(arguments[1])) { return undefined } - return Math.log(arguments[1]) / Math.log(arguments[0]) - } else if (arguments.length == 1) { - if (_.isUndefined(arguments[0]) || _.isNaN(arguments[0])) { return undefined } - return Math.log(arguments[0]) / Math.log(10.0) - } else { - return undefined - } - }, - 'str': function () { - var vals = [] - _.each(arguments, function (x) { - vals.push(Globals.convertForStrFunction(x)) - }) - - return vals.join('') - }, - 'sign': function (x) { - if (_.isUndefined(x) || _.isNaN(x)) { return undefined } - return (x > 0) ? 1.0 : ((x < 0) ? -1.0 : 0) - }, - 'lookup': function () { - var low_p, low_v, high_p, high_v - if (arguments.length < 2) { - console.log('Lookup arguments are invalid. Incorrect parameter count. ' + arguments) - return undefined - } - - var p = arguments[0] - var vector = arguments[1] - if (!_.isNumber(p) || // First must be a number - !_.isArray(vector) || // Second must be a vector of vectors - vector.length < 2 || - (vector.length >= 2 && !_.isArray(vector[0])) - ) { - console.log('Lookup arguments are invalid. Incorrect parameters. ' + arguments) - return undefined - } - - if (vector[0].length != 2) { - console.log('Lookup arguments are invalid. First vector has incorrect number of values. ' + p + ', ' + vector) - return undefined - } - low_p = vector[0][0] - low_v = vector[0][1] - high_p = low_p - high_v = low_v - - _.each(vector.slice(1), function (v) { - if (v.length == 2) { - var this_p = v[0] - var this_v = v[1] - - if (this_p <= p && (this_p > low_p || low_p > p)) { - low_p = this_p - low_v = this_v - } - if (this_p >= p && (this_p < high_p || high_p < p)) { - high_p = this_p - high_v = this_v - } - } - }) - - if (p <= low_p) { - return low_v - } - - if (p >= high_p) { - return high_v - } - - var f = (p - low_p) / (high_p - low_p) - return high_v * f + low_v * (1 - f) - } - -} - -module.exports = Context diff --git a/packages/scad-deserializer/src/ControlModules.js b/packages/scad-deserializer/src/ControlModules.js deleted file mode 100755 index da76c7b..0000000 --- a/packages/scad-deserializer/src/ControlModules.js +++ /dev/null @@ -1,134 +0,0 @@ -var _ = require('lodash') -var Context = require('./Context') -var Globals = require('./Globals') -var Range = require('./Range') - -function ControlModule (factory) { - this.factory = factory -}; - -function IfStatement (a) { - ControlModule.call(this, a) -}; - -IfStatement.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, [], [], inst) - - var childrenToEvaluate = (inst.argvalues.length > 0 && inst.argvalues[0]) ? inst.children : inst.else_children - - var childModules = [] - - for (var i = 0; i < childrenToEvaluate.length; i++) { - var childInst = childrenToEvaluate[i] - - childInst.argvalues = [] - - _.each(childInst.argexpr, function (expr, index, list) { - childInst.argvalues.push(expr.evaluate(context)) - }) - - var childAdaptor = this.factory.getAdaptor(childInst) - - childModules.push(childAdaptor.evaluate(context, childInst)) - }; - if (_.isEmpty(childModules)) { - return undefined - } else { - if (childModules.length > 1) { - return _.first(childModules) + '.union([' + _.tail(childModules) + '])' - } else { - return childModules[0] - } - } -} - -function ForLoopStatement (factory, args) { - ControlModule.call(this, factory) - this.csgOp = args.csgOp - this.evaluatedChildren = [] - - this.forEval = function (parentEvaluatedChildren, inst, recurs_length, call_argnames, call_argvalues, arg_context) { - this.evaluatedChildren = parentEvaluatedChildren - - if (call_argnames.length > recurs_length) { - var it_name = call_argnames[recurs_length] - var it_values = call_argvalues[recurs_length] - var context = new Context(arg_context) - - if (it_values instanceof Range) { - var range = it_values - if (range.end < range.begin) { - var t = range.begin - range.begin = range.end - range.end = t - } - if (range.step > 0 && (range.begin - range.end) / range.step < 10000) { - for (var i = range.begin; i <= range.end; i += range.step) { - context.setVariable(it_name, i) - this.forEval(this.evaluatedChildren, inst, recurs_length + 1, call_argnames, call_argvalues, context) - } - } - } else if (_.isArray(it_values)) { - for (var i = 0; i < it_values.length; i++) { - context.setVariable(it_name, it_values[i]) - this.forEval(this.evaluatedChildren, inst, recurs_length + 1, call_argnames, call_argvalues, context) - } - } - } else if (recurs_length > 0) { - var evaluatedInstanceChildren = inst.evaluateChildren(arg_context) - if (_.isArray(evaluatedInstanceChildren)) { - this.evaluatedChildren = this.evaluatedChildren.concat(evaluatedInstanceChildren) - } else { - this.evaluatedChildren.push(evaluatedInstanceChildren) - } - } - if (_.isArray(this.evaluatedChildren)) { - // remove empty arrays (e.g. for loops containing only echo statements) - this.evaluatedChildren = _.reject(this.evaluatedChildren, function (x) { return _.isEmpty(x) }) - } - - // Note: we union here so subsequent actions (e.g. translate) can be performed on the entire result of the for loop. - if (_.isArray(this.evaluatedChildren) && this.evaluatedChildren.length > 1) { - var unionedEvaluatedChildren = _.first(this.evaluatedChildren) + '.' + this.csgOp + '([' + _.tail(this.evaluatedChildren) + '])' - this.evaluatedChildren = [unionedEvaluatedChildren] - } - - return this.evaluatedChildren - } -}; - -ForLoopStatement.prototype.evaluate = function (context, inst) { - if (inst.context === undefined) { - inst.context = context - } - return this.forEval([], inst, 0, inst.argnames, inst.argvalues, inst.context) -} - -function Echo (a) { - ControlModule.call(this, a) -}; - -Echo.prototype.evaluate = function (parentContext, inst) { - var context = new Context(parentContext) - var argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - argvalues.push(Globals.convertForStrFunction(expr.evaluate(context))) - }) - - console.log(_.template('ECHO: <%=argvalues%>')({ argvalues: argvalues })) - - return undefined -} - -module.exports = { - Echo: Echo, - ForLoopStatement: ForLoopStatement, - IfStatement: IfStatement -} diff --git a/packages/scad-deserializer/src/Expression.js b/packages/scad-deserializer/src/Expression.js deleted file mode 100755 index cb915f1..0000000 --- a/packages/scad-deserializer/src/Expression.js +++ /dev/null @@ -1,370 +0,0 @@ -var Range = require('./Range') -var Sylvester = require('sylvester') -var _ = require('lodash') - -function Expression (value) { - this.children = [] - this.const_value = value - this.var_name - this.call_funcname - this.call_argnames = [] - this.type = 'C' -}; - -function isMatrix (x) { - return _.isArray(x) && _.isArray(x[0]) -} - -function isVector (x) { - return _.isArray(x) && !_.isArray(x[0]) -} - -function getValueObject (x) { - if (isMatrix(x)) { - return Sylvester.$M(x) - } else if (isVector(x)) { - return Sylvester.$V(x) - } else { - return x - } -} - -Sylvester.Matrix.prototype.toString = function () { - var x = _.map(this.elements, function (y) { return '[' + y.join(',') + ']' }) - return '[' + x.join(',') + ']' -} - -Sylvester.Vector.prototype.toString = function () { - return '[' + this.elements.join(',') + ']' -} - -Expression.prototype.evaluate = function (context) { - switch (this.type) { - case '!': - return !this.children[0].evaluate(context) - break - case '&&': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return false - } - - if (_.isArray(c1) || _.isArray(c2)) { - return true - } - - return c1 && c2 - break - case '||': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return true - } - - if (_.isArray(c1) || _.isArray(c2)) { - return true - } - return c1 || c2 - break - case '*': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return undefined - } - if (_.isArray(c1) || _.isArray(c2)) { - var v1 = getValueObject(c1) - var v2 = getValueObject(c2) - - if (isVector(c1) && isVector(c2)) { - return v1.dot(v2) - } - - if (isVector(c1) && isMatrix(c2)) { - return [v1.dot(v2.col(1)), - v1.dot(v2.col(2)), - v1.dot(v2.col(3))] - } - - if (_.isNumber(c1)) { - return v2.multiply(v1) - } - - return (v1.multiply(v2)) - } - - return c1 * c2 - - break - case '/': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return undefined - } - - if (_.isArray(c1) || _.isArray(c2)) { - var v1 = getValueObject(c1) - var v2 = getValueObject(c2) - - if (_.isArray(c1) && _.isArray(c2)) { - return undefined - } - - if (isMatrix(c1) && _.isNumber(c2)) { - return v1.multiply(1 / v2) - } - - if (_.isNumber(c1) && isMatrix(c2)) { - var result = [] - - for (var i = 0; i < c2.length; i++) { - var a1 = [] - for (var j = 0; j < c2[i].length; j++) { - a1[j] = c1 / c2[i][j] - } - result.push(a1) - } - return result - } - - if (isVector(c1) && _.isNumber(c2)) { - return v1.multiply(1 / v2) - } - - if (_.isNumber(c1) && isVector(c2)) { - return v2.multiply(1 / v1) - } - } - - return c1 / c2 - - break - case '%': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return undefined - } - - if (_.isArray(c1) || _.isArray(c2)) { - return undefined - } - - return c1 % c2 - break - case '+': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return undefined - } - - if (_.isArray(c1) && _.isArray(c2)) { - // matrices - if (isMatrix(c1) && isMatrix(c2)) { - var minLength = Math.min(c1.length, c2.length) - var result = [] - - for (var i = 0; i < minLength; i++) { - var a1 = [] - for (var j = 0; j < c1[i].length; j++) { - a1[j] = c1[i][j] + c2[i][j] - } - result.push(a1) - } - return result - } else if (isMatrix(c1) || isMatrix(c2)) { - return undefined - } - return [c1[0] + c2[0], c1[1] + c2[1], c1[2] + c2[2]] - } else if (_.isArray(c1) || _.isArray(c2)) { - return undefined - } else { - return c1 + c2 - } - break - case '-': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return undefined - } - - if (_.isArray(c1) && _.isArray(c2)) { - // matrices - if (_.isArray(c1[0]) && _.isArray(c2[0])) { - var minLength = Math.min(c1.length, c2.length) - var result = [] - - for (var i = 0; i < minLength; i++) { - var a1 = [] - for (var j = 0; j < c1[i].length; j++) { - a1[j] = c1[i][j] - c2[i][j] - } - result.push(a1) - } - return result - } - - return [c1[0] - c2[0], c1[1] - c2[1], c1[2] - c2[2]] - } else if (_.isArray(c1) || _.isArray(c2)) { - return undefined - } else { - return c1 - c2 - } - break - case '<': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return false - } - - if (_.isArray(c1) || _.isArray(c2)) { - return false - } - return c1 < c2 - break - case '<=': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return true - } - - if (_.isArray(c1) || _.isArray(c2)) { - return true - } - return c1 <= c2 - break - case '==': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return false - } - - if ((isVector(c1) && isVector(c2)) || - (isMatrix(c1) && isMatrix(c2))) { - var v1 = getValueObject(c1) - var v2 = getValueObject(c2) - return v1.eql(v2) - } - if (_.isArray(c1) || _.isArray(c2)) { - return false - } - return c1 == c2 - break - case '!=': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return false - } - - if ((isVector(c1) && isVector(c2)) || - (isMatrix(c1) && isMatrix(c2))) { - var v1 = getValueObject(c1) - var v2 = getValueObject(c2) - return !v1.eql(v2) - } - - if (_.isArray(c1) || _.isArray(c2)) { - return true - } - return c1 != c2 - break - case '>=': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return true - } - - if (_.isArray(c1) || _.isArray(c2)) { - return true - } - - return c1 >= c2 - break - case '>': - var c1 = this.children[0].evaluate(context) - var c2 = this.children[1].evaluate(context) - - if (_.isUndefined(c1) || _.isUndefined(c2) || _.isNaN(c1) || _.isNaN(c2)) { - return false - } - - if (_.isArray(c1) || _.isArray(c2)) { - return false - } - - return c1 > c2 - break - case '?:': - var v = this.children[0].evaluate(context) - return this.children[v ? 1 : 2].evaluate(context) - break - case 'I': - - var c1 = this.children[0].evaluate(context) - - if (_.isArray(c1)) { - return _.map(c1, function (x) { return -x }) - } - - return -c1 - break - case 'C': - return this.const_value - break - case 'R': - var v1 = this.children[0].evaluate(context) - var v2 = this.children[1].evaluate(context) - var v3 = this.children[2].evaluate(context) - if (_.isNumber(v1) && _.isNumber(v2) && _.isNumber(v3)) { - return new Range(v1, v2, v3) - } - return undefined - break - case 'V': - var vec = [] - for (var i = 0; i < this.children.length; i++) { - vec.push(this.children[i].evaluate(context)) - }; - return vec - break - case 'L': - return context.lookupVariable(this.var_name) - break - case '[]': - return this.children[0].evaluate(context)[this.children[1].evaluate(context)] - break - case 'F': - var argvalues = [] - for (var i = 0; i < this.children.length; i++) { - argvalues.push(this.children[i].evaluate(context)) - } - - return context.evaluateFunction(this.call_funcname, this.call_argnames, argvalues) - break - default: - console.log('todo - evaluate expression', this) - } -} -module.exports = Expression diff --git a/packages/scad-deserializer/src/FunctionDef.js b/packages/scad-deserializer/src/FunctionDef.js deleted file mode 100755 index 9c2b6e8..0000000 --- a/packages/scad-deserializer/src/FunctionDef.js +++ /dev/null @@ -1,20 +0,0 @@ -var Context = require('./Context') - -function FunctionDef () { - this.argnames = [] - this.argexpr = [] - this.expr -} - -FunctionDef.prototype.evaluate = function (parentContext, call_argnames, call_argvalues) { - var context = new Context(parentContext) - context.args(this.argnames, this.argexpr, call_argnames, call_argvalues) - - if (this.expr !== undefined) { - return this.expr.evaluate(context) - } - - return undefined -} - -module.exports = FunctionDef diff --git a/packages/scad-deserializer/src/Globals.js b/packages/scad-deserializer/src/Globals.js deleted file mode 100755 index a727c2c..0000000 --- a/packages/scad-deserializer/src/Globals.js +++ /dev/null @@ -1,51 +0,0 @@ -var _ = require('lodash') - -var singleLineModuleRegex = /(module\s*\w*\([^\)]*\)[\w\n]*)([^{};]*);/gm -var singleLineModuleReplacement = '$1 {$2;};' -var multiLineCommentRegex = /((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/gm - -function stripString (s) { - if (/^\".*\"$/.test(s)) { - return s.match(/^\"(.*)\"$/)[1] - } else { - return s - } -} - -function convertForStrFunction (val) { - if (_.isString(val)) { - return stripString(val) - } - - if (_.isArray(val)) { - var mapped = _.map(val, function (value, key, list) { - return convertForStrFunction(value) - }) - - return '[' + mapped.join(',') + ']' - } - - return val -} - -function preParse (text) { - return text - .replace(multiLineCommentRegex, '') - .replace(singleLineModuleRegex, singleLineModuleReplacement) -} - -module.exports = { - DEFAULT_RESOLUTION: 16, - DEFAULT_2D_RESOLUTION: 16, - FN_DEFAULT: 0, - FS_DEFAULT: 2.0, - FA_DEFAULT: 12.0, - module_stack: [], - context_stack: [], - stripString: stripString, - convertForStrFunction: convertForStrFunction, - preParse: preParse, - importedObjectRegex: /import\([^\"]*\"([^\)]*)\"[,]?.*\);?/gm, - usedLibraryRegex: /use <([^>]*)>;?/gm, - includedLibraryRegex: /include <([^>]*)>;?/gm -} diff --git a/packages/scad-deserializer/src/IfElseModuleInstantiation.js b/packages/scad-deserializer/src/IfElseModuleInstantiation.js deleted file mode 100755 index aa2e6e2..0000000 --- a/packages/scad-deserializer/src/IfElseModuleInstantiation.js +++ /dev/null @@ -1,12 +0,0 @@ -var ModuleInstantiation = require('./ModuleInstantiation') - -function IfElseModuleInstantiation () { - ModuleInstantiation.call(this) - this.name = 'if' - this.else_children = [] -} - -IfElseModuleInstantiation.prototype = new ModuleInstantiation() -IfElseModuleInstantiation.prototype.constructor = IfElseModuleInstantiation - -module.exports = IfElseModuleInstantiation diff --git a/packages/scad-deserializer/src/ImportModule.js b/packages/scad-deserializer/src/ImportModule.js deleted file mode 100755 index ca5fdae..0000000 --- a/packages/scad-deserializer/src/ImportModule.js +++ /dev/null @@ -1,34 +0,0 @@ -var Context = require('./Context') -var Globals = require('./Globals') -var StlDecoder = require('./StlDecoder') - -function Import (factory) { - this.factory = factory -} - -Import.prototype.evaluate = function (parentContext, inst) { - var context = new Context(parentContext) - - var argnames = ['file', 'filename', 'convexity'] - var argexpr = [] - - context.args(argnames, argexpr, inst.argnames, inst.argvalues) - - var filename = Context.contextVariableLookup(context, 'file', null) || Context.contextVariableLookup(context, 'filename', null) - - var convexity = Context.contextVariableLookup(context, 'convexity', 5) - - var importCache = Context.contextVariableLookup(context, 'importCache', {}) - - var fileContents = importCache[filename] - - if (fileContents !== undefined) { - var stlDecoder = new StlDecoder(atob(fileContents)) - stlDecoder.decode() - return stlDecoder.getCSGString() - } - - return undefined -} - -module.Exports = Import diff --git a/packages/scad-deserializer/src/Module.js b/packages/scad-deserializer/src/Module.js deleted file mode 100755 index d09589d..0000000 --- a/packages/scad-deserializer/src/Module.js +++ /dev/null @@ -1,71 +0,0 @@ -var _ = require('lodash') -var Context = require('./Context') -var Globals = require('./Globals') - - -function Module(name) { - this.name = name; - this.children = []; - this.assignments_var = {}; - this.functions = {}; - this.modules = []; - this.argnames = []; - this.argexpr = []; -}; - -Module.prototype.evaluate = function(parentContext, inst) { - var lines = []; - - var context = new Context(parentContext); - - if (parentContext === undefined){ - context.setVariable("$fn", Globals.DEFAULT_RESOLUTION); - context.setVariable("$fs", 2.0); - context.setVariable("$fa", 12.0); - } - - if (inst !== undefined) { - context.args(this.argnames, this.argexpr, inst.argnames, inst.argvalues); - context.setVariable("$children", inst.children.length); - } - - context.inst_p = inst; - context.functions_p = this.functions; - context.modules_p = this.modules; - _.each(this.assignments_var, function(value, key, list) { - context.setVariable(key, value.evaluate(context)); - }); - - var controlChildren = _.filter(this.children, function(child){ - return child && child.name == "echo"; - }); - - _.each(controlChildren, function(child, index, list) { - child.evaluate(context); - }); - - var nonControlChildren = _.reject(this.children, function(child){ - return !child || child.name == "echo"; - }); - - var evaluatedLines = []; - _.each(nonControlChildren, function(child, index, list) { - var evaluatedChild = child.evaluate(context) - if (evaluatedChild == undefined || (_.isArray(evaluatedChild) && _.isEmpty(evaluatedChild))){ - // ignore - } else { - evaluatedLines.push(evaluatedChild); - } - }); - - var cleanedLines = _.compact(evaluatedLines); - if (cleanedLines.length == 1){ - lines.push(cleanedLines[0]); - } else if (cleanedLines.length > 1){ - lines.push(_.head(cleanedLines)+".union([" +_.tail(cleanedLines)+"])"); - } - - return lines; -}; - -module.exports = Module diff --git a/packages/scad-deserializer/src/ModuleAdaptor.js b/packages/scad-deserializer/src/ModuleAdaptor.js deleted file mode 100755 index cb8b1eb..0000000 --- a/packages/scad-deserializer/src/ModuleAdaptor.js +++ /dev/null @@ -1,8 +0,0 @@ -function ModuleAdaptor () {} - -ModuleAdaptor.prototype.evaluate = function (parentContext, inst) { - inst.isSubmodule = true - return parentContext.evaluateModule(inst) -} - -module.exports = ModuleAdaptor diff --git a/packages/scad-deserializer/src/ModuleInstantiation.js b/packages/scad-deserializer/src/ModuleInstantiation.js deleted file mode 100755 index fec4038..0000000 --- a/packages/scad-deserializer/src/ModuleInstantiation.js +++ /dev/null @@ -1,55 +0,0 @@ -var _ = require('lodash') -var OpenjscadSolidFactorySingleton = require('./OpenjscadSolidFactorySingleton') - -function ModuleInstantiation () { - this.name - this.argnames = [] - this.argvalues = [] - this.argexpr = [] - this.children = [] - this.isSubmodule = false - this.context -} - -ModuleInstantiation.prototype.evaluate = function (context) { - var evaluatedModule - - // NOTE: not sure how we should handle this in javascript ... is it necessary? - // if (this.context === null) { - // console.log("WARNING: Ignoring recursive module instantiation of ", this.name) - // } else { - var that = this - - this.argvalues = [] - - _.each(this.argexpr, function (expr, index, list) { - that.argvalues.push(expr.evaluate(context)) - }) - - that.context = context - - evaluatedModule = context.evaluateModule(that, OpenjscadSolidFactorySingleton.getInstance()) - - that.context = null - that.argvalues = [] - - // } - return evaluatedModule -} - -ModuleInstantiation.prototype.evaluateChildren = function (context) { - var childModules = [] - - for (var i = 0; i < this.children.length; i++) { - var childInst = this.children[i] - - var evaluatedChild = childInst.evaluate(context) - if (evaluatedChild !== undefined) { - childModules.push(evaluatedChild) - } - } - - return childModules -} - -module.exports = ModuleInstantiation diff --git a/packages/scad-deserializer/src/OpenjscadSolidFactory.js b/packages/scad-deserializer/src/OpenjscadSolidFactory.js deleted file mode 100755 index 50a5630..0000000 --- a/packages/scad-deserializer/src/OpenjscadSolidFactory.js +++ /dev/null @@ -1,71 +0,0 @@ -var Context = require('./Context') -var Globals = require('./Globals') -var PrimitiveModules = require('./PrimitiveModules') -var TransformModules = require('./TransformModules') -var ControlModules = require('./ControlModules') -var CSGModule = require('./CSGModule') - -var ChildModule = require('./ChildModule') -var ModuleAdaptor = require('./ModuleAdaptor') -var ImportModule = require('./ImportModule') - -function OpenjscadSolidFactory () {} - -OpenjscadSolidFactory.prototype.getAdaptor = function (args) { - switch (args.name) { - case 'cube': - return new PrimitiveModules.Cube() - case 'sphere': - return new PrimitiveModules.Sphere() - case 'cylinder': - return new PrimitiveModules.Cylinder() - case 'polyhedron': - return new PrimitiveModules.Polyhedron() - case 'circle': - return new PrimitiveModules.Circle() - case 'square': - return new PrimitiveModules.Square() - case 'polygon': - return new PrimitiveModules.Polygon() - case 'union': - return new CSGModule(this, 'union') - case 'difference': - return new CSGModule(this, 'subtract') - case 'intersect': - case 'intersection': - return new CSGModule(this, 'intersect') - case 'translate': - return new TransformModules.Translate(this) - case 'scale': - return new TransformModules.Scale(this) - case 'rotate': - return new TransformModules.Rotate(this) - case 'mirror': - return new TransformModules.Mirror(this) - case 'linear_extrude': - return new TransformModules.Extrude(this) - case 'color': - return new TransformModules.Color(this) - case 'multmatrix': - return new TransformModules.Multimatrix(this) - case 'render': - case 'assign': // Note: assign does the same as render in this case - re-evaluate the arguments and process the children. - return new TransformModules.Render(this) - case 'echo': - return new ControlModules.Echo(this) - case 'for': - return new ControlModules.ForLoopStatement(this, { csgOp: 'union' }) - case 'intersection_for': - return new ControlModules.ForLoopStatement(this, { csgOp: 'intersect' }) - case 'if': - return new ControlModules.IfStatement(this) - case 'import': - return new ImportModule(this) - case 'child': - return new ChildModule(this) - default: - return new ModuleAdaptor() - } -} - -module.exports = OpenjscadSolidFactory diff --git a/packages/scad-deserializer/src/OpenjscadSolidFactorySingleton.js b/packages/scad-deserializer/src/OpenjscadSolidFactorySingleton.js deleted file mode 100755 index be1a93f..0000000 --- a/packages/scad-deserializer/src/OpenjscadSolidFactorySingleton.js +++ /dev/null @@ -1,8 +0,0 @@ -var OpenjscadSolidFactory = require('./OpenjscadSolidFactory') -var factory = new OpenjscadSolidFactory() - -module.exports = { - getInstance: function () { - return factory - } -} diff --git a/packages/scad-deserializer/src/OpenscadOpenjscadParser.js b/packages/scad-deserializer/src/OpenscadOpenjscadParser.js deleted file mode 100755 index 1d8ba78..0000000 --- a/packages/scad-deserializer/src/OpenscadOpenjscadParser.js +++ /dev/null @@ -1,28 +0,0 @@ -var requirejs = require('requirejs') - -requirejs.config({ - baseUrl: __dirname, - paths: { - lib: '../lib' - }, - nodeRequire: require -}) - -var parser = requirejs('openscad-parser') -var Globals = requirejs('Globals') -var parser_support = requirejs('openscad-parser-support') -var us = requirejs('lib/underscore') - -module.exports = { - parse: function (text) { - if (parser.yy === undefined) { - parser.yy = {} - } - - var openSCADText = Globals.preParse(text) - - var openJSCADResult = parser.parse(openSCADText) - - return openJSCADResult.lines.join('\n') - } -} diff --git a/packages/scad-deserializer/src/PrimitiveModules.js b/packages/scad-deserializer/src/PrimitiveModules.js deleted file mode 100755 index d8d6f15..0000000 --- a/packages/scad-deserializer/src/PrimitiveModules.js +++ /dev/null @@ -1,216 +0,0 @@ -var _ = require('lodash') -var Context = require('./Context') -var Globals = require('./Globals') - -function PrimitiveModule () {}; - -function Sphere (a) { - PrimitiveModule.call(this, a) -}; - -Sphere.prototype.evaluate = function (parentContext, inst) { - var context = new Context(parentContext) - - var argnames = ['r', '$fn'] - var argexpr = [] - - context.args(argnames, argexpr, inst.argnames, inst.argvalues) - - var r = Context.contextVariableLookup(context, 'r', 1) - - var resolution = Context.get_fragments_from_r(r, context) - - var openjscadParameters = { center: [0, 0, 0], resolution: resolution, radius: r } - - return _.template('CSG.sphere({center: [<%=String(center)%>], radius: <%= radius %>, resolution: <%= resolution%>})')(openjscadParameters) -} - -function Cylinder (a) { - PrimitiveModule.call(this, a) -}; - -Cylinder.prototype.evaluate = function (parentContext, inst) { - var context = new Context(parentContext) - - var argnames = ['h', 'r1', 'r2', 'center', '$fn', '$fa', '$fs'] - var argexpr = [] - - context.args(argnames, argexpr, inst.argnames, inst.argvalues) - - var openjscadArgs = { start: [0, 0, 0], end: [0, 0, 1], radiusStart: 1, radiusEnd: 1, resolution: Globals.DEFAULT_RESOLUTION } - var isCentered = Context.contextVariableLookup(context, 'center', false) - var h = Context.contextVariableLookup(context, 'h', 1) - var r = Context.contextVariableLookup(context, 'r', 1) - var r1 = Context.contextVariableLookup(context, 'r1', undefined) - var r2 = Context.contextVariableLookup(context, 'r2', undefined) - - var startZ = isCentered ? -(h / 2) : 0 - var endZ = isCentered ? h / 2 : h - - openjscadArgs.start = [0, 0, startZ] - openjscadArgs.end = [0, 0, endZ] - - /* we have to check the context vars directly here in case a parent module in the context stack has the same parameters, e.g. r1 which would be used as default. - Example testcad case: - module ring(r1, r2, h) { - cylinder(r = 3, h = h); - } - ring(8, 6, 10); -*/ - - if (_.has(context.vars, 'r')) { - openjscadArgs.radiusStart = r - openjscadArgs.radiusEnd = r - } - if (_.has(context.vars, 'r1')) { - openjscadArgs.radiusStart = r1 - } - if (_.has(context.vars, 'r2')) { - openjscadArgs.radiusEnd = r2 - } - openjscadArgs.resolution = Context.get_fragments_from_r(Math.max(openjscadArgs.radiusStart, openjscadArgs.radiusEnd), context) - - if (openjscadArgs.radiusStart == 0 && openjscadArgs.radiusEnd == 0) { - return undefined - } - - return _.template('CSG.cylinder({start: [<%=start%>], end: [<%=end%>],radiusStart: <%=radiusStart%>, radiusEnd: <%=radiusEnd%>, resolution: <%=resolution%>})')(openjscadArgs) -} - -function Cube (a) { - PrimitiveModule.call(this, a) -}; - -Cube.prototype.evaluate = function (parentContext, inst) { - var context = Context.newContext(parentContext, ['size', 'center'], [], inst) - - var openjscadArgs = { resolution: Globals.DEFAULT_RESOLUTION } - var isCentered = Context.contextVariableLookup(context, 'center', false) - var size = Context.contextVariableLookup(context, 'size', 1) - - if (size instanceof Array) { - openjscadArgs.radius = [size[0] / 2, size[1] / 2, size[2] / 2] - } else { - openjscadArgs.radius = [size / 2, size / 2, size / 2] - } - - if (isCentered) { - openjscadArgs.centerVector = [0, 0, 0] - } else { - openjscadArgs.centerVector = [openjscadArgs.radius[0], openjscadArgs.radius[1], openjscadArgs.radius[2]] - } - - return _.template('CSG.cube({center: [<%=String(centerVector)%>],radius: [<%= radius %>], resolution: <%= resolution%>})')(openjscadArgs) -} - -function Circle (a) { - PrimitiveModule.call(this, a) -}; - -Circle.prototype.evaluate = function (parentContext, inst) { - var context = Context.newContext(parentContext, ['r', '$fn'], [], inst) - - var r = Context.contextVariableLookup(context, 'r', 1) - var resolution = Context.get_fragments_from_r(r, context) - - return _.template('CAG.circle({center: [0,0], radius: <%=r%>, resolution: <%=resolution%>})')({ r: r, resolution: resolution }) -} - -function Square (a) { - PrimitiveModule.call(this, a) -}; - -Square.prototype.evaluate = function (parentContext, inst) { - var context = Context.newContext(parentContext, ['size', 'center'], [], inst) - - var size = Context.contextVariableLookup(context, 'size', [0.5, 0.5]) - var center = Context.contextVariableLookup(context, 'center', false) - var radius = _.isArray(size) ? radius = [size[0] / 2, size[1] / 2] : [size / 2, size / 2] - var centerPoint = [0, 0] - if (!center) { - centerPoint = [size[0] / 2, size[1] / 2] - } - - return _.template('CAG.rectangle({center: [<%=centerPoint%>], radius: [<%=radius%>]})')({ centerPoint: centerPoint, radius: radius }) -} - -function Polygon (a) { - PrimitiveModule.call(this, a) -}; - -Polygon.prototype.evaluate = function (parentContext, inst) { - var context = Context.newContext(parentContext, ['points', 'paths', 'convexity'], [], inst) - - var points = Context.contextVariableLookup(context, 'points', []) - var paths = Context.contextVariableLookup(context, 'paths', []) - var pointsMap = [] - - function formatPoints (points) { - return _.map(points, function (x) { return _.template('[<%=x%>]')({ x: x }) }) - } - - if (_.isEmpty(paths)) { - return _.template('CAG.fromPoints([<%=points%>])')({ points: formatPoints(points) }) - } - - if (paths.length > 1) { - var lines = '' - - _.each(_.first(paths), function (x) { - pointsMap.push(points[x]) - }) - lines += _.template('(new CSG.Path2D([<%=points%>],true)).innerToCAG().subtract([')({ points: formatPoints(pointsMap) }) - - var holes = [] - - _.each(_.tail(paths), function (shape) { - pointsMap = [] - _.each(shape, function (x) { - pointsMap.push(points[x]) - }) - holes.push(_.template('(new CSG.Path2D([<%=points%>],true)).innerToCAG()')({ points: formatPoints(pointsMap) })) - }) - - lines += holes.join(',') + '])' - - return lines - } else { - _.each(paths[0], function (x) { - pointsMap.push(points[x]) - }) - return _.template('(new CSG.Path2D([<%=points%>],true)).innerToCAG()')({ points: formatPoints(pointsMap) }) - } -} - -function Polyhedron (a) { - PrimitiveModule.call(this, a) -}; - -Polyhedron.prototype.evaluate = function (parentContext, inst) { - var context = Context.newContext(parentContext, ['points', 'triangles', 'convexity'], [], inst) - - var points = Context.contextVariableLookup(context, 'points', []) - var triangles = Context.contextVariableLookup(context, 'triangles', []) - - var polygons = [] - - _.each(triangles, function (triangle) { - polygons.push( - _.template('new CSG.Polygon([new CSG.Vertex(new CSG.Vector3D([<%=vec1%>])),new CSG.Vertex(new CSG.Vector3D([<%=vec2%>])),new CSG.Vertex(new CSG.Vector3D([<%=vec3%>]))])') - ({ vec1: points[triangle[2]], - vec2: points[triangle[1]], - vec3: points[triangle[0]] })) - }) - - return _.template('CSG.fromPolygons([<%=polygons%>])')({ polygons: polygons }) -} - -module.exports = { - Sphere: Sphere, - Cube: Cube, - Cylinder: Cylinder, - Circle: Circle, - Square: Square, - Polygon: Polygon, - Polyhedron: Polyhedron -} diff --git a/packages/scad-deserializer/src/Range.js b/packages/scad-deserializer/src/Range.js deleted file mode 100755 index 65321f0..0000000 --- a/packages/scad-deserializer/src/Range.js +++ /dev/null @@ -1,7 +0,0 @@ -function Range (begin, step, end) { - this.begin = begin - this.step = step - this.end = end -} - -module.exports = Range diff --git a/packages/scad-deserializer/src/StlDecoder.js b/packages/scad-deserializer/src/StlDecoder.js deleted file mode 100755 index 346fa28..0000000 --- a/packages/scad-deserializer/src/StlDecoder.js +++ /dev/null @@ -1,412 +0,0 @@ -/* - # Module: STL.js - # - # Description: decode STL 3D file - # modified Devon Govett's bmp.js - # - # Reference: - # STL specs. http://en.wikipedia.org/wiki/STL_%28file_format%29#Binary_STL - # BMP.js http://devongovett.github.com/bmp.js/ - # - # Author(s): Devon Govett provide a bmp decoding example. - # C.T. Yeung modify to decode STL. - # - # History: - # 20Dec11 1st crack at it cty - # 23Dec11 loading vertexies OK - # need to test normal when rendering shades - # rotation is off when passed 180 degrees cty - # - # MIT LICENSE - # Copyright (c) 2011 CT Yeung - # Copyright (c) 2011 Devon Govett - # - # Permission is hereby granted, free of charge, to any person obtaining a copy of this - # software and associated documentation files (the "Software"), to deal in the Software - # without restriction, including without limitation the rights to use, copy, modify, merge, - # publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons - # to whom the Software is furnished to do so, subject to the following conditions: - # - # The above copyright notice and this permission notice shall be included in all copies or - # substantial portions of the Software. - # - # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - # BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -var HDR_LEN = 80 - -function STL (data) { - var buf = new ArrayBuffer(data.length) - this.data = new Uint8Array(buf) - for (var i = 0, dataLen = data.length; i < dataLen; i++) { - this.data[i] = data.charCodeAt(i) - } - - this.TYPE_ASCII = 'ascii' - this.TYPE_BINARY = 'binary' - this.dataType = '' - - this.ASCII_TITLE = 'solid' - this.TYPE_VERTEX = 'vertex' - this.TYPE_NORMAL = 'normal' - this.TYPE_END = 'end' - this.NOT_ASCII = -1 - this.listVertex = null - this.listNormal = null - this.pos = 0 - - if (this.data.length < (HDR_LEN + 4)) { throw 'STL file too small: ' + this.data.length } -}; - -STL.prototype.findEndPos = function (stt) { - var i = stt - while (i < (this.data.length - 1)) { - // seek linefeed - if (this.data[i] == 10) { return i } - i++ - } - return this.data.length - 1 -} - -STL.prototype.bin2String = function (sttPos, endPos) { - var buf = '' - for (var i = sttPos; i < endPos; i++) { - var char = this.data[i].toString() - buf += String.fromCharCode(char) - } - return buf.replace('\r', '') -} - -STL.prototype.readUInt16 = function () { - var b1, b2 - b1 = this.data[this.pos++] - b2 = this.data[this.pos++] << 8 - return b1 | b2 -} - -STL.prototype.readUInt32 = function () { - var b1, b2, b3, b4 - b1 = this.data[this.pos++] - b2 = this.data[this.pos++] << 8 - b3 = this.data[this.pos++] << 16 - b4 = this.data[this.pos++] << 24 - var num = b1 | b2 | b3 | b4 - return num -} - -STL.prototype.readReal32 = function () { - if (this.data.length <= this.pos + 4) // over run !!! error condition - { return 0 } - - var byteArray = [0, 0, 0, 0] - byteArray[3] = this.data[this.pos++] - byteArray[2] = this.data[this.pos++] - byteArray[1] = this.data[this.pos++] - byteArray[0] = this.data[this.pos++] - - var sign = this.parseSign(byteArray) - var exponent = this.parseExponent(byteArray) - var mantissa = this.parseSignificand(byteArray) - var num = sign * exponent * mantissa - return num -} - -STL.prototype.parseSign = function (byteArray) { - if (byteArray[0] & 0x80) { return -1 } - return 1 -} - -STL.prototype.parseExponent = function (byteArray) { - var ex = (byteArray[0] & 0x7F) - ex = ex << 1 - - if ((byteArray[1] & 0x80) != 0) { ex += 0x01 } - - ex = Math.pow(2, ex - 127) - return ex -} - -STL.prototype.parseSignificand = function (byteArray) { - var num = 0 - var bit - var mask = 0x40 - for (var i = 1; i < 8; i++) { - if ((byteArray[1] & mask) != 0) { num += 1 / Math.pow(2, i) } - mask = mask >> 1 - } - mask = 0x80 - for (var j = 0; j < 8; j++) { - if ((byteArray[2] & mask) != 0) { num += 1 / Math.pow(2, j + 8) } - mask = mask >> 1 - } - mask = 0x80 - for (var k = 0; k < 8; k++) { - if ((byteArray[2] & mask) != 0) { num += 1 / Math.pow(2, k + 16) } - mask = mask >> 1 - } - return (num + 1) -} - -STL.prototype.readNormal = function (index) { - var sttPos = this.listNormal[index] - var endPos = this.findEndPos(sttPos) // return EOF pos if not found - var vString = this.bin2String(sttPos, endPos) - var pos = vString.indexOf(this.TYPE_NORMAL) - vString = vString.substring(pos + this.TYPE_NORMAL.length + 1, vString.length) - var list = vString.split(' ') - - var normal = new Array() - for (var i = 0; i < list.length; i++) { - if (list[i].length) { normal.push(Number(list[i])) } - } - - if (list.length < 3) { return null } // invalid normal - - return normal -} - -STL.prototype.readVertex = function (index) { - var sttPos = this.listVertex[index] - var endPos = this.findEndPos(sttPos) // return EOF pos if not found - var vString = this.bin2String(sttPos, endPos) - var pos = vString.indexOf(this.TYPE_VERTEX) - vString = vString.substring(pos + this.TYPE_VERTEX.length + 1, vString.length) - var list = vString.split(' ') - - var vertex = new Array() - for (var i = 0; i < list.length; i++) { - if (list[i].length) { vertex.push(Number(list[i])) } - } - if (vertex.length != 3) { return null } // invalid vertex - - return vertex -} - -STL.prototype.decode = function () { - if (this.dataType.length) { - return this.dataType - } - - var str = this.bin2String(0, 10).toLocaleLowerCase() - var endPos = 0 - var sttPos = 0 - - if (str.indexOf(this.ASCII_TITLE) >= 0) { - this.dataType = this.TYPE_ASCII - this.listVertex = new Array() - this.listNormal = new Array() - - while (endPos < (this.data.length - 1)) { - endPos = this.findEndPos(sttPos) // return EOF pos if not found - str = this.bin2String(sttPos, endPos) - - if (str.indexOf(this.TYPE_VERTEX) >= 0) { - this.listVertex.push(sttPos) - } else if (str.indexOf(this.TYPE_NORMAL) >= 0) { - this.listNormal.push(sttPos) - } - - sttPos = endPos + 1 - } - } else { - this.dataType = this.TYPE_BINARY - } - - return this.dataType -} - -STL.prototype.getCSG = function () { - var csgPolygons = [] - var numTriangles - - if (this.dataType == this.TYPE_BINARY) { - this.pos = HDR_LEN - numTriangles = this.readUInt32() - } else { - this.pos = 0 - numTriangles = this.listVertex.length / 3 - } - - if (this.dataType == this.TYPE_BINARY) { - for (i = 0; i < numTriangles; i++) { - var csgVertices = [] - - var normal = [0, 0, 0] - for (var j = 0; j < 3; j++) { - normal[j] = this.readReal32() - } - - var csgNormal = new CSG.Vector3D(normal) - var csgPlane = new CSG.Plane(csgNormal, 1) - - for (var j = 0; j < 3; j++) { - var x = this.readReal32() - var y = this.readReal32() - var z = this.readReal32() - csgVertices.push(new CSG.Vertex(new CSG.Vector3D(x, y, z))) - } - - this.pos += 2 - - csgPolygons.push(new CSG.Polygon(csgVertices, null, csgPlane)) - } - } else { - for (i = 0; i < numTriangles; i++) { - var csgVertices = [] - for (var j = 0; j < 3; j++) { - var vtx = this.readVertex(i * 3 + j) - csgVertices.push(new CSG.Vertex(new CSG.Vector3D(vtx))) - } - csgPolygons.push(new CSG.Polygon(csgVertices, null)) - } - } - - return CSG.fromPolygons(csgPolygons) -} - -STL.prototype.getCSGString = function () { - var csgPolygons = [] - var numTriangles - - if (this.dataType == this.TYPE_BINARY) { - this.pos = HDR_LEN - numTriangles = this.readUInt32() - } else { - this.pos = 0 - numTriangles = this.listVertex.length / 3 - } - - if (this.dataType == this.TYPE_BINARY) { - for (i = 0; i < numTriangles; i++) { - var csgVertices = [] - - var normal = [0, 0, 0] - for (var j = 0; j < 3; j++) { - normal[j] = this.readReal32() - } - - var csgPlane = _.template('new CSG.Plane(new CSG.Vector3D([<%=normal%>]), 1)')({ normal: normal }) - - for (var j = 0; j < 3; j++) { - var x = this.readReal32() - var y = this.readReal32() - var z = this.readReal32() - csgVertices.push(_.template('new CSG.Vertex(new CSG.Vector3D([<%=vertex%>]))')({ vertex: [x, y, z] })) - } - this.pos += 2 - - csgPolygons.push(_.template('new CSG.Polygon([<%=vertices%>], null)')({ vertices: csgVertices })) - } - } else { - for (i = 0; i < numTriangles; i++) { - var csgVertices = [] - for (var j = 0; j < 3; j++) { - var vertex = this.readVertex(i * 3 + j) - csgVertices.push(_.template('new CSG.Vertex(new CSG.Vector3D([<%=vertex%>]))')({ vertex: vertex })) - } - csgPolygons.push(_.template('new CSG.Polygon([<%=vertices%>], null)')({ vertices: csgVertices })) - } - } - - return _.template('CSG.fromPolygons([<%=polygons%>])')({ polygons: csgPolygons }) -} - -STL.prototype.drawWireFrame = function (context, // [in] canvas context - w, // [in] canvas width - h, // [in] canvas height - mag, // [in] magnification - rX, - rY, - rZ) { - var numTriangles - var i - - if (this.dataType == this.TYPE_BINARY) { - this.pos = HDR_LEN - numTriangles = this.readUInt32() - } else { - numTriangles = this.listVertex.length / 3 - } - - if (this.dataType == this.TYPE_BINARY) { - for (i = 0; i < numTriangles; i++) { - // retrieve normal - var normal = [0, 0, 0] - for (var j = 0; j < 3; j++) { - normal[j] = this.readReal32() - } - - this.drawTriangles(context, w, h, mag, rX, rY, rZ) - - // var attr = this.readUInt16(); // retrieve attribute - this.pos += 2 - } - } else { - for (i = 0; i < numTriangles; i++) { - this.triangleIndex = i - this.drawTriangles(context, w, h, mag, rX, rY, rZ) - } - } -} - -STL.prototype.drawTriangles = function (context, // [in] canvas context - w, // [in] canvas width - h, // [in] canvas height - mag, // [in] magnification - rX, // [in] amount of rotation X - rY, // [in] amount of rotation Y - rZ) { // [in] amount of rotation Z - var vtx0 = [0, 0, 0] - var vtx1 = [0, 0, 0] - var offX = w / 2 - var offY = h / 2 - context.beginPath() - - // convert rotation from degrees to radian - var radX = Math.PI / 180.0 * rX - var radY = Math.PI / 180.0 * rY - var radZ = Math.PI / 180.0 * rZ - - for (var j = 0; j < 3; j++) { - if (this.dataType == this.TYPE_ASCII) { - vtx1 = this.readVertex(this.triangleIndex * 3 + j) - } else { - vtx1[0] = this.readReal32() - vtx1[1] = this.readReal32() - vtx1[2] = this.readReal32() - } - - // vtx1[0] = vtx1[0]; - var y = vtx1[1] - var z = vtx1[2] - vtx1[1] = Math.cos(radX) * y - Math.sin(radX) * z - vtx1[2] = Math.sin(radX) * y + Math.cos(radX) * z - - var x = vtx1[0] - z = vtx1[2] - vtx1[0] = Math.cos(radY) * x + Math.sin(radY) * z - // vtx1[1] = vtx1[1]; - vtx1[2] = -Math.sin(radY) * x + Math.cos(radY) * z - - // draw 2 lengths of a triangle - if (j == 0) { - context.moveTo(vtx1[0] * mag + offX, vtx1[1] * mag + offY) // move to 1st triangle corner - vtx0[0] = vtx1[0] - vtx0[1] = vtx1[1] - vtx0[2] = vtx1[2] - } else { - context.lineTo(vtx1[0] * mag + offX, vtx1[1] * mag + offY) - } - } - // complete triangle - context.lineTo(vtx0[0] * mag + offX, vtx0[1] * mag + offY) - // render on canvase - context.stroke() - context.closePath() -} - -module.exports = STL diff --git a/packages/scad-deserializer/src/TransformModules.js b/packages/scad-deserializer/src/TransformModules.js deleted file mode 100755 index a4bc45d..0000000 --- a/packages/scad-deserializer/src/TransformModules.js +++ /dev/null @@ -1,271 +0,0 @@ -var _ = require('lodash') -var Context = require('./Context') -var Globals = require('./Globals') - -function TransformModule (factory) { - var factory = factory - - this.transformChildren = function (children, context, cb) { - var childModules = [] - - for (var i = 0; i < children.length; i++) { - var childInst = children[i] - childInst.argvalues = [] - - _.each(childInst.argexpr, function (expr, index, list) { - childInst.argvalues.push(expr.evaluate(context)) - }) - var childAdaptor = factory.getAdaptor(childInst) - var transformedChild = childAdaptor.evaluate(context, childInst) - if (transformedChild) { - transformedChild += cb() - childModules.push(transformedChild) - } - } - - if (childModules.length == 1) { - return childModules[0] - } else if (childModules.length > 1) { - return _.first(childModules) + '.union([' + _.tail(childModules) + '])' - } - } -} - -function ColorTransform (a) { - TransformModule.call(this, a) -} - -ColorTransform.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, ['c', 'alpha'], [], inst) - - var c = Context.contextVariableLookup(context, 'c', undefined) - var color = 'white' - if (c !== undefined) { - color = _.isString(c) ? colorNameLookup[Globals.stripString(c.toLowerCase())] : c - } - - var alpha = Context.contextVariableLookup(context, 'alpha', undefined) - if (alpha !== undefined) { - color[3] = alpha - } - - return this.transformChildren(inst.children, context, function () { - return _.template('.setColor(<%=color%>)')({ color: color }) - }) -} - -function MirrorTransform (a) { - TransformModule.call(this, a) -} - -MirrorTransform.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, ['v'], [], inst) - - var v = Context.contextVariableLookup(context, 'v', [0, 0, 0]) - - if (!(v instanceof Array)) { - var val = v - v = [val, val, val] - } - - return this.transformChildren(inst.children, context, function () { - return _.template('.mirrored(CSG.Plane.fromNormalAndPoint([<%=v%>], [0,0,0]))')({ v: v }) - }) -} - -function RotateTransform (a) { - TransformModule.call(this, a) -} - -RotateTransform.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, ['a', 'v'], [], inst) - - var a = Context.contextVariableLookup(context, 'a', undefined) - - if (_.isArray(a)) { - return this.transformChildren(inst.children, context, function () { - return _.template('.rotateX(<%=degreeX%>).rotateY(<%=degreeY%>).rotateZ(<%=degreeZ%>)') - ({ degreeX: a[0], degreeY: a[1], degreeZ: a[2] }) - }) - } else { - var v = Context.contextVariableLookup(context, 'v', undefined) - return this.transformChildren(inst.children, context, function () { - if (v === undefined || v.toString() == '0,0,0') { - v = [0, 0, 1] - } - return _.template('.transform(CSG.Matrix4x4.rotation([0,0,0], [<%=vector%>], <%=degree%>))')({ degree: a, vector: v }) - }) - } -} - -function ScaleTransform (a) { - TransformModule.call(this, a) -} - -ScaleTransform.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, ['v'], [], inst) - - var v = Context.contextVariableLookup(context, 'v', [0, 0, 0]) - - if (!(v instanceof Array)) { - var val = v - v = [val, val, val] - } - - return this.transformChildren(inst.children, context, function () { - return _.template('.scale([<%=v%>])')({ v: v }) - }) -} - -function TranslateTransform (a) { - TransformModule.call(this, a) -} - -TranslateTransform.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, ['v'], [], inst) - - var v = Context.contextVariableLookup(context, 'v', [0, 0, 0]) - - return this.transformChildren(inst.children, context, function () { - return _.template('.translate([<%=v%>])')({ v: v }) - }) -} - -function RenderModule (a) { - TransformModule.call(this, a) -} - -RenderModule.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, [], [], inst) - - var childIndex = 0 - if (inst.argvalues[0] !== undefined) { - childIndex = inst.argvalues[0] - } - - return this.transformChildren(inst.children, context, function () { - return '' - }) -} - -function MultimatrixTransform (a) { - TransformModule.call(this, a) - - this.transposeMatrix = function (m) { - var t = [] - var ti = 0 - - for (var j in _.range(4)) { - for (var i in _.range(4)) { - t[ti++] = m[i][j] - } - } - return t - } -} - -MultimatrixTransform.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, ['m'], [], inst) - - var m = Context.contextVariableLookup(context, 'm', undefined) - - var matrix - if (m !== undefined) { - matrix = this.transposeMatrix(m) - } - - return this.transformChildren(inst.children, context, function () { - return _.template('.transform(new CSG.Matrix4x4( [<%= matrix %>] ))')({ matrix: matrix }) - }) -} - -function ExtrudeTransform (a) { - TransformModule.call(this, a) -} - -ExtrudeTransform.prototype.evaluate = function (parentContext, inst) { - inst.argvalues = [] - - _.each(inst.argexpr, function (expr, index, list) { - inst.argvalues.push(expr.evaluate(parentContext)) - }) - - var context = Context.newContext(parentContext, ['file', 'layer', 'height', 'origin', 'scale', 'center', 'twist', 'slices', '$fn', '$fs', '$fa'], [], inst) - - var height = Context.contextVariableLookup(context, 'height', 100) - var center = Context.contextVariableLookup(context, 'center', false) - var twist = Number(Context.contextVariableLookup(context, 'twist', 0)) / -1 // note inverse for openjscad - var slices = Context.contextVariableLookup(context, 'slices', undefined) - var fn = Context.contextVariableLookup(context, '$fn', Globals.FN_DEFAULT) - var fs = Context.contextVariableLookup(context, '$fs', Globals.FS_DEFAULT) - var fa = Context.contextVariableLookup(context, '$fa', Globals.FA_DEFAULT) - - if (slices === undefined) { - slices = parseInt(Math.max(2, Math.abs(Context.get_fragments_from_r(height, context) * twist / 360))) - } - - return this.transformChildren(inst.children, context, function () { - var template = _.template('.extrude({offset: [0, 0, <%=height%>], twistangle: <%=twist%>,twiststeps: <%=slices%>})') - ({ height: height, twist: twist, slices: slices }) - if (center) { - var offset = -height / 2 - template += _.template('.translate([0,0,<%=offset%>])')({ offset: offset }) - } - return template - }) -} - -var colorNameLookup = { 'indianred': [0.804, 0.361, 0.361], 'lightcoral': [0.941, 0.502, 0.502], 'salmon': [0.980, 0.502, 0.447], 'darksalmon': [0.914, 0.588, 0.478], 'lightsalmon': [1, 0.627, 0.478], 'red': [1, 0, 0], 'crimson': [0.863, 0.078, 0.235], 'firebrick': [0.698, 0.133, 0.133], 'darkred': [0.545, 0, 0], 'pink': [1, 0.753, 0.796], 'lightpink': [1, 0.714, 0.757], 'hotpink': [1, 0.412, 0.706], 'deeppink': [1, 0.078, 0.576], 'mediumvioletred': [0.780, 0.082, 0.522], 'palevioletred': [0.859, 0.439, 0.576], 'lightsalmon': [1, 0.627, 0.478], 'coral': [1, 0.498, 0.314], 'tomato': [1, 0.388, 0.278], 'orangered': [1, 0.271, 0], 'darkorange': [1, 0.549, 0], 'orange': [1, 0.647, 0], 'gold': [1, 0.843, 0], 'yellow': [1, 1, 0], 'lightyellow': [1, 1, 0.878], 'lemonchiffon': [1, 0.980, 0.804], 'lightgoldenrodyellow': [0.980, 0.980, 0.824], 'papayawhip': [1, 0.937, 0.835], 'moccasin': [1, 0.894, 0.710], 'peachpuff': [1, 0.855, 0.725], 'palegoldenrod': [0.933, 0.910, 0.667], 'khaki': [0.941, 0.902, 0.549], 'darkkhaki': [0.741, 0.718, 0.420], 'lavender': [0.902, 0.902, 0.980], 'thistle': [0.847, 0.749, 0.847], 'plum': [0.867, 0.627, 0.867], 'violet': [0.933, 0.510, 0.933], 'orchid': [0.855, 0.439, 0.839], 'fuchsia': [1, 0, 1], 'magenta': [1, 0, 1], 'mediumorchid': [0.729, 0.333, 0.827], 'mediumpurple': [0.576, 0.439, 0.859], 'blueviolet': [0.541, 0.169, 0.886], 'darkviolet': [0.580, 0, 0.827], 'darkorchid': [0.600, 0.196, 0.800], 'darkmagenta': [0.545, 0, 0.545], 'purple': [0.502, 0, 0.502], 'indigo': [0.294, 0, 0.510], 'darkslateblue': [0.282, 0.239, 0.545], 'slateblue': [0.416, 0.353, 0.804], 'mediumslateblue': [0.482, 0.408, 0.933], 'greenyellow': [0.678, 1, 0.184], 'chartreuse': [0.498, 1, 0], 'lawngreen': [0.486, 0.988, 0], 'lime': [0, 1, 0], 'limegreen': [0.196, 0.804, 0.196], 'palegreen': [0.596, 0.984, 0.596], 'lightgreen': [0.565, 0.933, 0.565], 'mediumspringgreen': [0, 0.980, 0.604], 'springgreen': [0, 1, 0.498], 'mediumseagreen': [0.235, 0.702, 0.443], 'seagreen': [0.180, 0.545, 0.341], 'forestgreen': [0.133, 0.545, 0.133], 'green': [0, 0.502, 0], 'darkgreen': [0, 0.392, 0], 'yellowgreen': [0.604, 0.804, 0.196], 'olivedrab': [0.420, 0.557, 0.137], 'olive': [0.502, 0.502, 0], 'darkolivegreen': [0.333, 0.420, 0.184], 'mediumaquamarine': [0.400, 0.804, 0.667], 'darkseagreen': [0.561, 0.737, 0.561], 'lightseagreen': [0.125, 0.698, 0.667], 'darkcyan': [0, 0.545, 0.545], 'teal': [0, 0.502, 0.502], 'aqua': [0, 1, 1], 'cyan': [0, 1, 1], 'lightcyan': [0.878, 1, 1], 'paleturquoise': [0.686, 0.933, 0.933], 'aquamarine': [0.498, 1, 0.831], 'turquoise': [0.251, 0.878, 0.816], 'mediumturquoise': [0.282, 0.820, 0.800], 'darkturquoise': [0, 0.808, 0.820], 'cadetblue': [0.373, 0.620, 0.627], 'steelblue': [0.275, 0.510, 0.706], 'lightsteelblue': [0.690, 0.769, 0.871], 'powderblue': [0.690, 0.878, 0.902], 'lightblue': [0.678, 0.847, 0.902], 'skyblue': [0.529, 0.808, 0.922], 'lightskyblue': [0.529, 0.808, 0.980], 'deepskyblue': [0, 0.749, 1], 'dodgerblue': [0.118, 0.565, 1], 'cornflowerblue': [0.392, 0.584, 0.929], 'royalblue': [0.255, 0.412, 0.882], 'blue': [0, 0, 1], 'mediumblue': [0, 0, 0.804], 'darkblue': [0, 0, 0.545], 'navy': [0, 0, 0.502], 'midnightblue': [0.098, 0.098, 0.439], 'cornsilk': [1, 0.973, 0.863], 'blanchedalmond': [1, 0.922, 0.804], 'bisque': [1, 0.894, 0.769], 'navajowhite': [1, 0.871, 0.678], 'wheat': [0.961, 0.871, 0.702], 'burlywood': [0.871, 0.722, 0.529], 'tan': [0.824, 0.706, 0.549], 'rosybrown': [0.737, 0.561, 0.561], 'sandybrown': [0.957, 0.643, 0.376], 'goldenrod': [0.855, 0.647, 0.125], 'darkgoldenrod': [0.722, 0.525, 0.043], 'peru': [0.804, 0.522, 0.247], 'chocolate': [0.824, 0.412, 0.118], 'saddlebrown': [0.545, 0.271, 0.075], 'sienna': [0.627, 0.322, 0.176], 'brown': [0.647, 0.165, 0.165], 'maroon': [0.502, 0, 0], 'white': [1, 1, 1], 'snow': [1, 0.980, 0.980], 'honeydew': [0.941, 1, 0.941], 'mintcream': [0.961, 1, 0.980], 'azure': [0.941, 1, 1], 'aliceblue': [0.941, 0.973, 1], 'ghostwhite': [0.973, 0.973, 1], 'whitesmoke': [0.961, 0.961, 0.961], 'seashell': [1, 0.961, 0.933], 'beige': [0.961, 0.961, 0.863], 'oldlace': [0.992, 0.961, 0.902], 'floralwhite': [1, 0.980, 0.941], 'ivory': [1, 1, 0.941], 'antiquewhite': [0.980, 0.922, 0.843], 'linen': [0.980, 0.941, 0.902], 'lavenderblush': [1, 0.941, 0.961], 'mistyrose': [1, 0.894, 0.882], 'gainsboro': [0.863, 0.863, 0.863], 'lightgrey': [0.827, 0.827, 0.827], 'silver': [0.753, 0.753, 0.753], 'darkgray': [0.663, 0.663, 0.663], 'gray': [0.502, 0.502, 0.502], 'dimgray': [0.412, 0.412, 0.412], 'lightslategray': [0.467, 0.533, 0.600], 'slategray': [0.439, 0.502, 0.565], 'darkslategray': [0.184, 0.310, 0.310], 'black': [0, 0, 0] } - -module.exports = { - Translate: TranslateTransform, - Scale: ScaleTransform, - Rotate: RotateTransform, - Mirror: MirrorTransform, - Color: ColorTransform, - Render: RenderModule, - Multimatrix: MultimatrixTransform, - Extrude: ExtrudeTransform -} diff --git a/packages/scad-deserializer/src/openscad-parser-ext.js b/packages/scad-deserializer/src/openscad-parser-ext.js deleted file mode 100755 index 89dd900..0000000 --- a/packages/scad-deserializer/src/openscad-parser-ext.js +++ /dev/null @@ -1,91 +0,0 @@ -var _ = require('lodash') -var Module = require('./Module') -var Context = require('./Context') -var Globals = require('./Globals') -var FunctionDef = require('./FunctionDef') -var support = require('./openscad-parser-support') - -var currmodule = new Module('root') - -function resetModule () { - currmodule = new Module('root') - Globals.context_stack = [] - Globals.module_stack = [] -} - -function processModule (yy) { - var lines = [] - lines.push('function main(){') - lines.push('\n') - - var context = undefined - if (yy.context !== undefined) { - context = yy.context - } else { - context = new Context() - } - - if (yy.importCache !== undefined) { - context.setVariable('importCache', yy.importCache) - } - - var res = currmodule.evaluate(context) - - var evaluatedLines = _.flatten(res) - if (evaluatedLines.length == 1) { - lines.push('return ' + evaluatedLines[0] + ';') - } else if (evaluatedLines.length > 1) { - lines.push('return ' + _.first(evaluatedLines) + '.union([') - lines.push(_.tail(evaluatedLines)) - lines.push(']);') - } - lines.push('};') - - var x = { lines: lines, context: Globals.context_stack[Globals.context_stack.length - 1] } - resetModule() - - return x -} - -function stashModule (newName, newArgNames, newArgExpr) { - var p_currmodule = currmodule - Globals.module_stack.push(currmodule) - - currmodule = new Module(newName) - - p_currmodule.modules.push(currmodule) - - currmodule.argnames = newArgNames - currmodule.argexpr = newArgExpr -} - -function popModule () { - if (Globals.module_stack.length > 0) { - currmodule = Globals.module_stack.pop() - } -} - -function addModuleChild (child) { - currmodule.children.push(child) -} - -function addModuleAssignmentVar (name, value) { - currmodule.assignments_var[name] = value -} - -function addModuleFunction (name, expr, argnames, argexpr) { - var func = new FunctionDef() - func.argnames = argnames - func.argexpr = argexpr - func.expr = expr - currmodule.functions[name] = func -} - -module.exports = { - processModule: processModule, - stashModule: stashModule, - popModule: popModule, - addModuleChild: addModuleChild, - addModuleAssignmentVar: addModuleAssignmentVar, - addModuleFunction: addModuleFunction -} diff --git a/packages/scad-deserializer/src/openscad-parser-support.js b/packages/scad-deserializer/src/openscad-parser-support.js deleted file mode 100755 index 8802bb6..0000000 --- a/packages/scad-deserializer/src/openscad-parser-support.js +++ /dev/null @@ -1,271 +0,0 @@ - -// seedrandom.js version 2.0. -// Author: David Bau 4/2/2011 -// -// Defines a method Math.seedrandom() that, when called, substitutes -// an explicitly seeded RC4-based algorithm for Math.random(). Also -// supports automatic seeding from local or network sources of entropy. -// -// Usage: -// -// -// -// Math.seedrandom('yipee'); Sets Math.random to a function that is -// initialized using the given explicit seed. -// -// Math.seedrandom(); Sets Math.random to a function that is -// seeded using the current time, dom state, -// and other accumulated local entropy. -// The generated seed string is returned. -// -// Math.seedrandom('yowza', true); -// Seeds using the given explicit seed mixed -// together with accumulated entropy. -// -// -// Seeds using physical random bits downloaded -// from random.org. -// -// Seeds using urandom bits from call.jsonlib.com, -// which is faster than random.org. -// -// Examples: -// -// Math.seedrandom("hello"); // Use "hello" as the seed. -// document.write(Math.random()); // Always 0.5463663768140734 -// document.write(Math.random()); // Always 0.43973793770592234 -// var rng1 = Math.random; // Remember the current prng. -// -// var autoseed = Math.seedrandom(); // New prng with an automatic seed. -// document.write(Math.random()); // Pretty much unpredictable. -// -// Math.random = rng1; // Continue "hello" prng sequence. -// document.write(Math.random()); // Always 0.554769432473455 -// -// Math.seedrandom(autoseed); // Restart at the previous seed. -// document.write(Math.random()); // Repeat the 'unpredictable' value. -// -// Notes: -// -// Each time seedrandom('arg') is called, entropy from the passed seed -// is accumulated in a pool to help generate future seeds for the -// zero-argument form of Math.seedrandom, so entropy can be injected over -// time by calling seedrandom with explicit data repeatedly. -// -// On speed - This javascript implementation of Math.random() is about -// 3-10x slower than the built-in Math.random() because it is not native -// code, but this is typically fast enough anyway. Seeding is more expensive, -// especially if you use auto-seeding. Some details (timings on Chrome 4): -// -// Our Math.random() - avg less than 0.002 milliseconds per call -// seedrandom('explicit') - avg less than 0.5 milliseconds per call -// seedrandom('explicit', true) - avg less than 2 milliseconds per call -// seedrandom() - avg about 38 milliseconds per call -// -// LICENSE (BSD): -// -// Copyright 2010 David Bau, all rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// 3. Neither the name of this module nor the names of its contributors may -// be used to endorse or promote products derived from this software -// without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -/** - * All code is in an anonymous closure to keep the global namespace clean. - * - * @param {number=} overflow - * @param {number=} startdenom - */ -(function (pool, math, width, chunks, significance, overflow, startdenom) { - // - // seedrandom() - // This is the seedrandom function described above. - // - math['seedrandom'] = function seedrandom (seed, use_entropy) { - var key = [] - var arc4 - - // Flatten the seed string or build one from local entropy if needed. - seed = mixkey(flatten( - use_entropy ? [seed, pool] - : arguments.length ? seed - : [new Date().getTime(), pool, window], 3), key) - - // Use the seed to initialize an ARC4 generator. - arc4 = new ARC4(key) - - // Mix the randomness into accumulated entropy. - mixkey(arc4.S, pool) - - // Override Math.random - - // This function returns a random double in [0, 1) that contains - // randomness in every bit of the mantissa of the IEEE 754 value. - - math['random'] = function random () { // Closure to return a random double: - var n = arc4.g(chunks) // Start with a numerator n < 2 ^ 48 - var d = startdenom // and denominator d = 2 ^ 48. - var x = 0 // and no 'extra last byte'. - while (n < significance) { // Fill up all significant digits by - n = (n + x) * width // shifting numerator and - d *= width // denominator and generating a - x = arc4.g(1) // new least-significant-byte. - } - while (n >= overflow) { // To avoid rounding up, before adding - n /= 2 // last byte, shift everything - d /= 2 // right using integer math until - x >>>= 1 // we have exactly the desired bits. - } - return (n + x) / d // Form the number within [0, 1). - } - - // Return the seed that was used - return seed - } - - // - // ARC4 - // - // An ARC4 implementation. The constructor takes a key in the form of - // an array of at most (width) integers that should be 0 <= x < (width). - // - // The g(count) method returns a pseudorandom integer that concatenates - // the next (count) outputs from ARC4. Its return value is a number x - // that is in the range 0 <= x < (width ^ count). - // - /** @constructor */ - function ARC4 (key) { - var t; var u; var me = this; var keylen = key.length - var i = 0; var j = me.i = me.j = me.m = 0 - me.S = [] - me.c = [] - - // The empty key [] is treated as [0]. - if (!keylen) { key = [keylen++] } - - // Set up S using the standard key scheduling algorithm. - while (i < width) { me.S[i] = i++ } - for (i = 0; i < width; i++) { - t = me.S[i] - j = lowbits(j + t + key[i % keylen]) - u = me.S[j] - me.S[i] = u - me.S[j] = t - } - - // The "g" method returns the next (count) outputs as one number. - me.g = function getnext (count) { - var s = me.S - var i = lowbits(me.i + 1); var t = s[i] - var j = lowbits(me.j + t); var u = s[j] - s[i] = u - s[j] = t - var r = s[lowbits(t + u)] - while (--count) { - i = lowbits(i + 1); t = s[i] - j = lowbits(j + t); u = s[j] - s[i] = u - s[j] = t - r = r * width + s[lowbits(t + u)] - } - me.i = i - me.j = j - return r - } - // For robust unpredictability discard an initial batch of values. - // See http://www.rsa.com/rsalabs/node.asp?id=2009 - me.g(width) - } - - // - // flatten() - // Converts an object tree to nested arrays of strings. - // - /** @param {Object=} result - * @param {string=} prop - * @param {string=} typ */ - function flatten (obj, depth, result, prop, typ) { - result = [] - typ = typeof (obj) - if (depth && typ == 'object') { - for (prop in obj) { - if (prop.indexOf('S') < 5) { // Avoid FF3 bug (local/sessionStorage) - try { result.push(flatten(obj[prop], depth - 1)) } catch (e) {} - } - } - } - return (result.length ? result : obj + (typ != 'string' ? '\0' : '')) - } - - // - // mixkey() - // Mixes a string seed into a key that is an array of integers, and - // returns a shortened string seed that is equivalent to the result key. - // - /** @param {number=} smear - * @param {number=} j */ - function mixkey (seed, key, smear, j) { - seed += '' // Ensure the seed is a string - smear = 0 - for (j = 0; j < seed.length; j++) { - key[lowbits(j)] = - lowbits((smear ^= key[lowbits(j)] * 19) + seed.charCodeAt(j)) - } - seed = '' - for (j in key) { seed += String.fromCharCode(key[j]) } - return seed - } - - // - // lowbits() - // A quick "n mod width" for width a power of 2. - // - function lowbits (n) { return n & (width - 1) } - - // - // The following constants are related to IEEE 754 limits. - // - startdenom = math.pow(width, chunks) - significance = math.pow(2, significance) - overflow = significance * 2 - - // - // When seedrandom.js is loaded, we immediately mix a few bits - // from the built-in RNG into the entropy pool. Because we do - // not want to intefere with determinstic PRNG state later, - // seedrandom will not call math.random on its own again after - // initialization. - // - mixkey(math.random(), pool) - -// End anonymous scope, and pass initial values. -})( - [], // pool: entropy pool starts empty - Math, // math: package containing random, pow, and seedrandom - 256, // width: each RC4 output is 0 <= x < 256 - 6, // chunks: at least six RC4 outputs for each double - 52 // significance: there are 52 significant digits in a double -) diff --git a/packages/scad-deserializer/src/openscad-parser.js b/packages/scad-deserializer/src/openscad-parser.js deleted file mode 100755 index 484afae..0000000 --- a/packages/scad-deserializer/src/openscad-parser.js +++ /dev/null @@ -1,805 +0,0 @@ -define(["openscad-parser-ext", "ArgContainer", "ArgsContainer", "Expression", "ModuleInstantiation", "IfElseModuleInstantiation"], function(ext, ArgContainer, ArgsContainer, Expression, ModuleInstantiation, IfElseModuleInstantiation){ -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"program":3,"input":4,"statement":5,"inner_input":6,"statement_begin":7,"statement_end":8,"TOK_MODULE":9,"TOK_ID":10,"(":11,"arguments_decl":12,"optional_commas":13,")":14,";":15,"{":16,"}":17,"module_instantiation":18,"=":19,"expr":20,"TOK_FUNCTION":21,"BR":22,"children_instantiation":23,"module_instantiation_list":24,"if_statement":25,"TOK_IF":26,"ifelse_statement":27,"TOK_ELSE":28,"single_module_instantiation":29,"arguments_call":30,"!":31,"#":32,"%":33,"*":34,"TOK_TRUE":35,"TOK_FALSE":36,"TOK_UNDEF":37,".":38,"TOK_STRING":39,"TOK_NUMBER":40,"[":41,":":42,"]":43,"vector_expr":44,"/":45,"+":46,"-":47,"<":48,"LE":49,"EQ":50,"NE":51,"GE":52,">":53,"AND":54,"OR":55,"?":56,",":57,"argument_decl":58,"argument_call":59,"$accept":0,"$end":1}, -terminals_: {2:"error",9:"TOK_MODULE",10:"TOK_ID",11:"(",14:")",15:";",16:"{",17:"}",19:"=",21:"TOK_FUNCTION",22:"BR",26:"TOK_IF",28:"TOK_ELSE",31:"!",32:"#",33:"%",34:"*",35:"TOK_TRUE",36:"TOK_FALSE",37:"TOK_UNDEF",38:".",39:"TOK_STRING",40:"TOK_NUMBER",41:"[",42:":",43:"]",45:"/",46:"+",47:"-",48:"<",49:"LE",50:"EQ",51:"NE",52:"GE",53:">",54:"AND",55:"OR",56:"?",57:","}, -productions_: [0,[3,1],[4,0],[4,2],[6,0],[6,2],[5,2],[7,0],[7,6],[8,1],[8,3],[8,1],[8,4],[8,9],[8,1],[23,1],[23,3],[25,5],[27,1],[27,3],[18,2],[18,2],[18,1],[24,0],[24,2],[29,4],[29,2],[29,2],[29,2],[29,2],[20,1],[20,1],[20,1],[20,1],[20,3],[20,1],[20,1],[20,5],[20,7],[20,3],[20,4],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,2],[20,2],[20,2],[20,3],[20,5],[20,4],[20,4],[13,2],[13,0],[44,1],[44,4],[12,0],[12,1],[12,4],[58,1],[58,3],[30,0],[30,1],[30,4],[59,1],[59,3]], -performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) { - -var $0 = $$.length - 1; -switch (yystate) { -case 1: - return ext.processModule(yy); - -break; -case 8: - ext.stashModule($$[$0-4], $$[$0-2].argnames, $$[$0-2].argexpr); - delete $$[$0-2]; - -break; -case 9: - -break; -case 10: - ext.popModule(); - -break; -case 11: - ext.addModuleChild($$[$0]); - -break; -case 12: - ext.addModuleAssignmentVar($$[$0-3], $$[$0-1]); - -break; -case 13: - ext.addModuleFunction($$[$0-7], $$[$0-1], $$[$0-5].argnames, $$[$0-5].argexpr); - delete $$[$0-5]; - -break; -case 15: - this.$ = new ModuleInstantiation(); - if ($$[$0]) { - this.$.children.push($$[$0]); - } - -break; -case 16: - this.$ = $$[$0-1]; - -break; -case 17: - this.$ = new IfElseModuleInstantiation(); - this.$.argnames.push(""); - this.$.argexpr.push($$[$0-2]); - - if (this.$) { - this.$.children = $$[$0].children; - } else { - for (var i = 0; i < $$[$0].children.size(); i++) - delete $$[$0].children[i]; - } - delete $$[$0]; - -break; -case 18: - this.$ = $$[$0]; - -break; -case 19: - this.$ = $$[$0-2]; - if (this.$) { - this.$.else_children = $$[$0].children; - } else { - for (var i = 0; i < $$[$0].children.size(); i++) - delete $$[$0].children[i]; - } - delete $$[$0]; - -break; -case 20: - this.$ = $$[$0-1]; - -break; -case 21: - this.$ = $$[$0-1]; - if (this.$) { - this.$.children = $$[$0].children; - } else { - for (var i = 0; i < $$[$0].children.length; i++) - delete $$[$0].children[i]; - } - delete $$[$0]; - -break; -case 22: - this.$ = $$[$0]; - -break; -case 23: - this.$ = new ModuleInstantiation(); - -break; -case 24: - this.$ = $$[$0-1]; - if (this.$) { - if ($$[$0]) { - this.$.children.push($$[$0]); - } - } else { - delete $$[$0]; - } - -break; -case 25: - this.$ = new ModuleInstantiation(); - this.$.name = $$[$0-3]; - this.$.argnames = $$[$0-1].argnames; - this.$.argexpr = $$[$0-1].argexpr; - delete $$[$0-1]; - -break; -case 26: - this.$ = $$[$0]; - if (this.$) { - this.$.tag_root = true; - } - -break; -case 27: - this.$ = $$[$0]; - if (this.$) { - this.$.tag_highlight = true; - } - -break; -case 28: - /* - NOTE: Currently unimplemented, therefore not displaying parts marked with % - this.$ = $$[$0]; - if (this.$) { - this.$.tag_background = true; - } - */ - delete $$[$0]; - this.$ = undefined; - -break; -case 29: - delete $$[$0]; - this.$ = undefined; - -break; -case 30: - this.$ = new Expression(true); - -break; -case 31: - this.$ = new Expression(false); - -break; -case 32: - this.$ = new Expression(undefined); - -break; -case 33: - this.$ = new Expression(); - this.$.type = "L"; - this.$.var_name = $$[$0]; - -break; -case 34: - this.$ = new Expression(); - this.$.type = "N"; - this.$.children.push($$[$0-2]); - this.$.var_name = $$[$0]; - -break; -case 35: - this.$ = new Expression(String($$[$0])); - -break; -case 36: - this.$ = new Expression(Number($$[$0])); - -break; -case 37: - var e_one = new Expression(1.0); - this.$ = new Expression(); - this.$.type = "R"; - this.$.children.push($$[$0-3]); - this.$.children.push(e_one); - this.$.children.push($$[$0-1]); - -break; -case 38: - this.$ = new Expression(); - this.$.type = "R"; - this.$.children.push($$[$0-5]); - this.$.children.push($$[$0-3]); - this.$.children.push($$[$0-1]); - -break; -case 39: - this.$ = new Expression([]); - -break; -case 40: - this.$ = $$[$0-2]; - -break; -case 41: - this.$ = new Expression(); - this.$.type = '*'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 42: - this.$ = new Expression(); - this.$.type = '/'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 43: - this.$ = new Expression(); - this.$.type = '%'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 44: - this.$ = new Expression(); - this.$.type = '+'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 45: - this.$ = new Expression(); - this.$.type = '-'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 46: - this.$ = new Expression(); - this.$.type = '<'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 47: - this.$ = new Expression(); - this.$.type = '<='; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 48: - this.$ = new Expression(); - this.$.type = '=='; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 49: - this.$ = new Expression(); - this.$.type = '!='; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 50: - this.$ = new Expression(); - this.$.type = '>='; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 51: - this.$ = new Expression(); - this.$.type = '>'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 52: - this.$ = new Expression(); - this.$.type = '&&'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 53: - this.$ = new Expression(); - this.$.type = '||'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 54: - this.$ = $$[$0]; - -break; -case 55: - this.$ = new Expression(); - this.$.type = 'I'; - this.$.children.push($$[$0]); - -break; -case 56: - this.$ = new Expression(); - this.$.type = '!'; - this.$.children.push($$[$0]); - -break; -case 57: this.$ = $$[$0-1]; -break; -case 58: - this.$ = new Expression(); - this.$.type = '?:'; - this.$.children.push($$[$0-4]); - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 59: - this.$ = new Expression(); - this.$.type = '[]'; - this.$.children.push($$[$0-3]); - this.$.children.push($$[$0-1]); - -break; -case 60: - this.$ = new Expression(); - this.$.type = 'F'; - this.$.call_funcname = $$[$0-3]; - this.$.call_argnames = $$[$0-1].argnames; - this.$.children = $$[$0-1].argexpr; - delete $$[$0-1]; - -break; -case 63: - this.$ = new Expression(); - this.$.type = 'V'; - this.$.children.push($$[$0]); - -break; -case 64: - this.$ = $$[$0-3]; - this.$.children.push($$[$0]); - -break; -case 65: - this.$ = new ArgsContainer(); - -break; -case 66: - this.$ = new ArgsContainer(); - this.$.argnames.push($$[$0].argname); - this.$.argexpr.push($$[$0].argexpr); - delete $$[$0]; - -break; -case 67: - this.$ = $$[$0-3]; - this.$.argnames.push($$[$0].argname); - this.$.argexpr.push($$[$0].argexpr); - delete $$[$0]; - -break; -case 68: - this.$ = new ArgContainer(); - this.$.argname = $$[$0]; - this.$.argexpr = undefined; - -break; -case 69: - this.$ = new ArgContainer(); - this.$.argname = $$[$0-2]; - this.$.argexpr = $$[$0]; - -break; -case 70: - this.$ = new ArgsContainer(); - -break; -case 71: - this.$ = new ArgsContainer(); - this.$.argnames.push($$[$0].argname); - this.$.argexpr.push($$[$0].argexpr); - delete $$[$0]; - -break; -case 72: - this.$ = $$[$0-3]; - this.$.argnames.push($$[$0].argname); - this.$.argexpr.push($$[$0].argexpr); - delete $$[$0]; - -break; -case 73: - this.$ = new ArgContainer(); - this.$.argexpr = $$[$0]; - -break; -case 74: - this.$ = new ArgContainer(); - this.$.argname = $$[$0-2]; - this.$.argexpr = $$[$0]; - -break; -} -}, -table: [{1:[2,2],3:1,4:2,9:[2,2],10:[2,2],15:[2,2],16:[2,2],21:[2,2],22:[2,2],26:[2,2],31:[2,2],32:[2,2],33:[2,2],34:[2,2]},{1:[3]},{1:[2,1],5:3,7:4,9:[1,5],10:[2,7],15:[2,7],16:[2,7],21:[2,7],22:[2,7],26:[2,7],31:[2,7],32:[2,7],33:[2,7],34:[2,7]},{1:[2,3],9:[2,3],10:[2,3],15:[2,3],16:[2,3],21:[2,3],22:[2,3],26:[2,3],31:[2,3],32:[2,3],33:[2,3],34:[2,3]},{8:6,10:[1,10],15:[1,7],16:[1,8],18:9,21:[1,11],22:[1,12],25:19,26:[1,20],27:14,29:13,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{10:[1,21]},{1:[2,6],9:[2,6],10:[2,6],15:[2,6],16:[2,6],17:[2,6],21:[2,6],22:[2,6],26:[2,6],31:[2,6],32:[2,6],33:[2,6],34:[2,6]},{1:[2,9],9:[2,9],10:[2,9],15:[2,9],16:[2,9],17:[2,9],21:[2,9],22:[2,9],26:[2,9],31:[2,9],32:[2,9],33:[2,9],34:[2,9]},{6:22,9:[2,4],10:[2,4],15:[2,4],16:[2,4],17:[2,4],21:[2,4],22:[2,4],26:[2,4],31:[2,4],32:[2,4],33:[2,4],34:[2,4]},{1:[2,11],9:[2,11],10:[2,11],15:[2,11],16:[2,11],17:[2,11],21:[2,11],22:[2,11],26:[2,11],31:[2,11],32:[2,11],33:[2,11],34:[2,11]},{11:[1,24],19:[1,23]},{10:[1,25]},{1:[2,14],9:[2,14],10:[2,14],15:[2,14],16:[2,14],17:[2,14],21:[2,14],22:[2,14],26:[2,14],31:[2,14],32:[2,14],33:[2,14],34:[2,14]},{10:[1,30],15:[1,26],16:[1,29],18:28,23:27,25:19,26:[1,20],27:14,29:13,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{1:[2,22],9:[2,22],10:[2,22],15:[2,22],16:[2,22],17:[2,22],21:[2,22],22:[2,22],26:[2,22],28:[2,22],31:[2,22],32:[2,22],33:[2,22],34:[2,22]},{10:[1,30],29:31,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{10:[1,30],29:32,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{10:[1,30],29:33,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{10:[1,30],29:34,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{1:[2,18],9:[2,18],10:[2,18],15:[2,18],16:[2,18],17:[2,18],21:[2,18],22:[2,18],26:[2,18],28:[1,35],31:[2,18],32:[2,18],33:[2,18],34:[2,18]},{11:[1,36]},{11:[1,37]},{5:39,7:4,9:[1,5],10:[2,7],15:[2,7],16:[2,7],17:[1,38],21:[2,7],22:[2,7],26:[2,7],31:[2,7],32:[2,7],33:[2,7],34:[2,7]},{10:[1,44],11:[1,51],20:40,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,55],11:[1,51],14:[2,70],20:54,30:52,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49],57:[2,70],59:53},{11:[1,56]},{1:[2,20],9:[2,20],10:[2,20],15:[2,20],16:[2,20],17:[2,20],21:[2,20],22:[2,20],26:[2,20],28:[2,20],31:[2,20],32:[2,20],33:[2,20],34:[2,20]},{1:[2,21],9:[2,21],10:[2,21],15:[2,21],16:[2,21],17:[2,21],21:[2,21],22:[2,21],26:[2,21],28:[2,21],31:[2,21],32:[2,21],33:[2,21],34:[2,21]},{1:[2,15],9:[2,15],10:[2,15],15:[2,15],16:[2,15],17:[2,15],21:[2,15],22:[2,15],26:[2,15],28:[2,15],31:[2,15],32:[2,15],33:[2,15],34:[2,15]},{10:[2,23],17:[2,23],24:57,26:[2,23],31:[2,23],32:[2,23],33:[2,23],34:[2,23]},{11:[1,24]},{10:[2,26],15:[2,26],16:[2,26],26:[2,26],31:[2,26],32:[2,26],33:[2,26],34:[2,26]},{10:[2,27],15:[2,27],16:[2,27],26:[2,27],31:[2,27],32:[2,27],33:[2,27],34:[2,27]},{10:[2,28],15:[2,28],16:[2,28],26:[2,28],31:[2,28],32:[2,28],33:[2,28],34:[2,28]},{10:[2,29],15:[2,29],16:[2,29],26:[2,29],31:[2,29],32:[2,29],33:[2,29],34:[2,29]},{10:[1,30],16:[1,29],18:28,23:58,25:19,26:[1,20],27:14,29:13,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{10:[1,44],11:[1,51],20:59,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,62],12:60,14:[2,65],57:[2,65],58:61},{1:[2,10],9:[2,10],10:[2,10],15:[2,10],16:[2,10],17:[2,10],21:[2,10],22:[2,10],26:[2,10],31:[2,10],32:[2,10],33:[2,10],34:[2,10]},{9:[2,5],10:[2,5],15:[2,5],16:[2,5],17:[2,5],21:[2,5],22:[2,5],26:[2,5],31:[2,5],32:[2,5],33:[2,5],34:[2,5]},{15:[1,63],33:[1,67],34:[1,65],38:[1,64],41:[1,79],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78]},{14:[2,30],15:[2,30],33:[2,30],34:[2,30],38:[2,30],41:[2,30],42:[2,30],43:[2,30],45:[2,30],46:[2,30],47:[2,30],48:[2,30],49:[2,30],50:[2,30],51:[2,30],52:[2,30],53:[2,30],54:[2,30],55:[2,30],56:[2,30],57:[2,30]},{14:[2,31],15:[2,31],33:[2,31],34:[2,31],38:[2,31],41:[2,31],42:[2,31],43:[2,31],45:[2,31],46:[2,31],47:[2,31],48:[2,31],49:[2,31],50:[2,31],51:[2,31],52:[2,31],53:[2,31],54:[2,31],55:[2,31],56:[2,31],57:[2,31]},{14:[2,32],15:[2,32],33:[2,32],34:[2,32],38:[2,32],41:[2,32],42:[2,32],43:[2,32],45:[2,32],46:[2,32],47:[2,32],48:[2,32],49:[2,32],50:[2,32],51:[2,32],52:[2,32],53:[2,32],54:[2,32],55:[2,32],56:[2,32],57:[2,32]},{11:[1,80],14:[2,33],15:[2,33],33:[2,33],34:[2,33],38:[2,33],41:[2,33],42:[2,33],43:[2,33],45:[2,33],46:[2,33],47:[2,33],48:[2,33],49:[2,33],50:[2,33],51:[2,33],52:[2,33],53:[2,33],54:[2,33],55:[2,33],56:[2,33],57:[2,33]},{14:[2,35],15:[2,35],33:[2,35],34:[2,35],38:[2,35],41:[2,35],42:[2,35],43:[2,35],45:[2,35],46:[2,35],47:[2,35],48:[2,35],49:[2,35],50:[2,35],51:[2,35],52:[2,35],53:[2,35],54:[2,35],55:[2,35],56:[2,35],57:[2,35]},{14:[2,36],15:[2,36],33:[2,36],34:[2,36],38:[2,36],41:[2,36],42:[2,36],43:[2,36],45:[2,36],46:[2,36],47:[2,36],48:[2,36],49:[2,36],50:[2,36],51:[2,36],52:[2,36],53:[2,36],54:[2,36],55:[2,36],56:[2,36],57:[2,36]},{10:[1,44],11:[1,51],13:82,20:81,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],43:[2,62],44:83,46:[1,48],47:[1,49],57:[1,84]},{10:[1,44],11:[1,51],20:85,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:86,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:87,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:88,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{14:[1,89],57:[1,90]},{14:[2,71],57:[2,71]},{14:[2,73],33:[1,67],34:[1,65],38:[1,64],41:[1,79],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78],57:[2,73]},{11:[1,80],14:[2,33],19:[1,91],33:[2,33],34:[2,33],38:[2,33],41:[2,33],45:[2,33],46:[2,33],47:[2,33],48:[2,33],49:[2,33],50:[2,33],51:[2,33],52:[2,33],53:[2,33],54:[2,33],55:[2,33],56:[2,33],57:[2,33]},{10:[1,62],12:92,14:[2,65],57:[2,65],58:61},{10:[1,30],17:[1,93],18:94,25:19,26:[1,20],27:14,29:13,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{1:[2,19],9:[2,19],10:[2,19],15:[2,19],16:[2,19],17:[2,19],21:[2,19],22:[2,19],26:[2,19],28:[2,19],31:[2,19],32:[2,19],33:[2,19],34:[2,19]},{14:[1,95],33:[1,67],34:[1,65],38:[1,64],41:[1,79],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78]},{13:96,14:[2,62],57:[1,97]},{14:[2,66],57:[2,66]},{14:[2,68],19:[1,98],57:[2,68]},{1:[2,12],9:[2,12],10:[2,12],15:[2,12],16:[2,12],17:[2,12],21:[2,12],22:[2,12],26:[2,12],31:[2,12],32:[2,12],33:[2,12],34:[2,12]},{10:[1,99]},{10:[1,44],11:[1,51],20:100,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:101,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:102,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:103,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:104,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:105,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:106,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:107,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:108,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:109,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:110,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:111,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:112,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:113,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,44],11:[1,51],20:114,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{10:[1,55],11:[1,51],14:[2,70],20:54,30:115,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49],57:[2,70],59:53},{33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[1,116],43:[2,63],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78],57:[2,63]},{43:[1,117]},{13:118,43:[2,62],57:[1,119]},{10:[2,62],11:[2,62],13:120,14:[2,62],31:[2,62],35:[2,62],36:[2,62],37:[2,62],39:[2,62],40:[2,62],41:[2,62],43:[2,62],46:[2,62],47:[2,62],57:[1,84]},{14:[2,54],15:[2,54],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,54],43:[2,54],45:[1,66],46:[2,54],47:[2,54],48:[2,54],49:[2,54],50:[2,54],51:[2,54],52:[2,54],53:[2,54],54:[2,54],55:[2,54],56:[2,54],57:[2,54]},{14:[2,55],15:[2,55],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,55],43:[2,55],45:[1,66],46:[2,55],47:[2,55],48:[2,55],49:[2,55],50:[2,55],51:[2,55],52:[2,55],53:[2,55],54:[2,55],55:[2,55],56:[2,55],57:[2,55]},{14:[2,56],15:[2,56],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,56],43:[2,56],45:[1,66],46:[2,56],47:[2,56],48:[2,56],49:[2,56],50:[2,56],51:[2,56],52:[2,56],53:[2,56],54:[2,56],55:[2,56],56:[2,56],57:[2,56]},{14:[1,121],33:[1,67],34:[1,65],38:[1,64],41:[1,79],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78]},{10:[2,25],15:[2,25],16:[2,25],26:[2,25],31:[2,25],32:[2,25],33:[2,25],34:[2,25]},{10:[2,62],11:[2,62],13:122,31:[2,62],35:[2,62],36:[2,62],37:[2,62],39:[2,62],40:[2,62],41:[2,62],46:[2,62],47:[2,62],57:[1,84]},{10:[1,44],11:[1,51],20:123,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{13:124,14:[2,62],57:[1,97]},{1:[2,16],9:[2,16],10:[2,16],15:[2,16],16:[2,16],17:[2,16],21:[2,16],22:[2,16],26:[2,16],28:[2,16],31:[2,16],32:[2,16],33:[2,16],34:[2,16]},{10:[2,24],17:[2,24],26:[2,24],31:[2,24],32:[2,24],33:[2,24],34:[2,24]},{10:[1,30],16:[1,29],18:28,23:125,25:19,26:[1,20],27:14,29:13,31:[1,15],32:[1,16],33:[1,17],34:[1,18]},{14:[1,126]},{10:[2,62],13:127,14:[2,62],57:[1,84]},{10:[1,44],11:[1,51],20:128,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{14:[2,34],15:[2,34],33:[2,34],34:[2,34],38:[2,34],41:[2,34],42:[2,34],43:[2,34],45:[2,34],46:[2,34],47:[2,34],48:[2,34],49:[2,34],50:[2,34],51:[2,34],52:[2,34],53:[2,34],54:[2,34],55:[2,34],56:[2,34],57:[2,34]},{14:[2,41],15:[2,41],33:[2,41],34:[2,41],38:[1,64],41:[1,79],42:[2,41],43:[2,41],45:[2,41],46:[2,41],47:[2,41],48:[2,41],49:[2,41],50:[2,41],51:[2,41],52:[2,41],53:[2,41],54:[2,41],55:[2,41],56:[2,41],57:[2,41]},{14:[2,42],15:[2,42],33:[2,42],34:[2,42],38:[1,64],41:[1,79],42:[2,42],43:[2,42],45:[2,42],46:[2,42],47:[2,42],48:[2,42],49:[2,42],50:[2,42],51:[2,42],52:[2,42],53:[2,42],54:[2,42],55:[2,42],56:[2,42],57:[2,42]},{14:[2,43],15:[2,43],33:[2,43],34:[2,43],38:[1,64],41:[1,79],42:[2,43],43:[2,43],45:[2,43],46:[2,43],47:[2,43],48:[2,43],49:[2,43],50:[2,43],51:[2,43],52:[2,43],53:[2,43],54:[2,43],55:[2,43],56:[2,43],57:[2,43]},{14:[2,44],15:[2,44],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,44],43:[2,44],45:[1,66],46:[2,44],47:[2,44],48:[2,44],49:[2,44],50:[2,44],51:[2,44],52:[2,44],53:[2,44],54:[2,44],55:[2,44],56:[2,44],57:[2,44]},{14:[2,45],15:[2,45],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,45],43:[2,45],45:[1,66],46:[2,45],47:[2,45],48:[2,45],49:[2,45],50:[2,45],51:[2,45],52:[2,45],53:[2,45],54:[2,45],55:[2,45],56:[2,45],57:[2,45]},{14:[2,46],15:[2,46],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,46],43:[2,46],45:[1,66],46:[1,68],47:[1,69],48:[2,46],49:[2,46],50:[1,72],51:[1,73],52:[2,46],53:[2,46],54:[2,46],55:[2,46],56:[2,46],57:[2,46]},{14:[2,47],15:[2,47],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,47],43:[2,47],45:[1,66],46:[1,68],47:[1,69],48:[2,47],49:[2,47],50:[1,72],51:[1,73],52:[2,47],53:[2,47],54:[2,47],55:[2,47],56:[2,47],57:[2,47]},{14:[2,48],15:[2,48],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,48],43:[2,48],45:[1,66],46:[1,68],47:[1,69],48:[2,48],49:[2,48],50:[2,48],51:[2,48],52:[2,48],53:[2,48],54:[2,48],55:[2,48],56:[2,48],57:[2,48]},{14:[2,49],15:[2,49],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,49],43:[2,49],45:[1,66],46:[1,68],47:[1,69],48:[2,49],49:[2,49],50:[2,49],51:[2,49],52:[2,49],53:[2,49],54:[2,49],55:[2,49],56:[2,49],57:[2,49]},{14:[2,50],15:[2,50],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,50],43:[2,50],45:[1,66],46:[1,68],47:[1,69],48:[2,50],49:[2,50],50:[1,72],51:[1,73],52:[2,50],53:[2,50],54:[2,50],55:[2,50],56:[2,50],57:[2,50]},{14:[2,51],15:[2,51],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,51],43:[2,51],45:[1,66],46:[1,68],47:[1,69],48:[2,51],49:[2,51],50:[1,72],51:[1,73],52:[2,51],53:[2,51],54:[2,51],55:[2,51],56:[2,51],57:[2,51]},{14:[2,52],15:[2,52],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,52],43:[2,52],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[2,52],55:[2,52],56:[2,52],57:[2,52]},{14:[2,53],15:[2,53],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,53],43:[2,53],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[2,53],56:[2,53],57:[2,53]},{33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[1,129],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78]},{33:[1,67],34:[1,65],38:[1,64],41:[1,79],43:[1,130],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78]},{14:[1,131],57:[1,90]},{10:[1,44],11:[1,51],20:132,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{14:[2,39],15:[2,39],33:[2,39],34:[2,39],38:[2,39],41:[2,39],42:[2,39],43:[2,39],45:[2,39],46:[2,39],47:[2,39],48:[2,39],49:[2,39],50:[2,39],51:[2,39],52:[2,39],53:[2,39],54:[2,39],55:[2,39],56:[2,39],57:[2,39]},{43:[1,133]},{10:[2,62],11:[2,62],13:134,31:[2,62],35:[2,62],36:[2,62],37:[2,62],39:[2,62],40:[2,62],41:[2,62],43:[2,62],46:[2,62],47:[2,62],57:[1,84]},{10:[2,61],11:[2,61],14:[2,61],31:[2,61],35:[2,61],36:[2,61],37:[2,61],39:[2,61],40:[2,61],41:[2,61],43:[2,61],46:[2,61],47:[2,61]},{14:[2,57],15:[2,57],33:[2,57],34:[2,57],38:[2,57],41:[2,57],42:[2,57],43:[2,57],45:[2,57],46:[2,57],47:[2,57],48:[2,57],49:[2,57],50:[2,57],51:[2,57],52:[2,57],53:[2,57],54:[2,57],55:[2,57],56:[2,57],57:[2,57]},{10:[1,55],11:[1,51],20:54,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49],59:135},{14:[2,74],33:[1,67],34:[1,65],38:[1,64],41:[1,79],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78],57:[2,74]},{14:[1,136]},{1:[2,17],9:[2,17],10:[2,17],15:[2,17],16:[2,17],17:[2,17],21:[2,17],22:[2,17],26:[2,17],28:[2,17],31:[2,17],32:[2,17],33:[2,17],34:[2,17]},{10:[2,8],15:[2,8],16:[2,8],21:[2,8],22:[2,8],26:[2,8],31:[2,8],32:[2,8],33:[2,8],34:[2,8]},{10:[1,62],14:[2,61],58:137},{14:[2,69],33:[1,67],34:[1,65],38:[1,64],41:[1,79],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78],57:[2,69]},{10:[1,44],11:[1,51],20:138,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{14:[2,59],15:[2,59],33:[2,59],34:[2,59],38:[2,59],41:[2,59],42:[2,59],43:[2,59],45:[2,59],46:[2,59],47:[2,59],48:[2,59],49:[2,59],50:[2,59],51:[2,59],52:[2,59],53:[2,59],54:[2,59],55:[2,59],56:[2,59],57:[2,59]},{14:[2,60],15:[2,60],33:[2,60],34:[2,60],38:[2,60],41:[2,60],42:[2,60],43:[2,60],45:[2,60],46:[2,60],47:[2,60],48:[2,60],49:[2,60],50:[2,60],51:[2,60],52:[2,60],53:[2,60],54:[2,60],55:[2,60],56:[2,60],57:[2,60]},{33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[1,140],43:[1,139],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78]},{14:[2,40],15:[2,40],33:[2,40],34:[2,40],38:[2,40],41:[2,40],42:[2,40],43:[2,40],45:[2,40],46:[2,40],47:[2,40],48:[2,40],49:[2,40],50:[2,40],51:[2,40],52:[2,40],53:[2,40],54:[2,40],55:[2,40],56:[2,40],57:[2,40]},{10:[1,44],11:[1,51],20:141,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],43:[2,61],46:[1,48],47:[1,49]},{14:[2,72],57:[2,72]},{19:[1,142]},{14:[2,67],57:[2,67]},{14:[2,58],15:[2,58],33:[1,67],34:[1,65],38:[1,64],41:[1,79],42:[2,58],43:[2,58],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78],57:[2,58]},{14:[2,37],15:[2,37],33:[2,37],34:[2,37],38:[2,37],41:[2,37],42:[2,37],43:[2,37],45:[2,37],46:[2,37],47:[2,37],48:[2,37],49:[2,37],50:[2,37],51:[2,37],52:[2,37],53:[2,37],54:[2,37],55:[2,37],56:[2,37],57:[2,37]},{10:[1,44],11:[1,51],20:143,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{33:[1,67],34:[1,65],38:[1,64],41:[1,79],43:[2,64],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78],57:[2,64]},{10:[1,44],11:[1,51],20:144,31:[1,50],35:[1,41],36:[1,42],37:[1,43],39:[1,45],40:[1,46],41:[1,47],46:[1,48],47:[1,49]},{33:[1,67],34:[1,65],38:[1,64],41:[1,79],43:[1,145],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78]},{15:[1,146],33:[1,67],34:[1,65],38:[1,64],41:[1,79],45:[1,66],46:[1,68],47:[1,69],48:[1,70],49:[1,71],50:[1,72],51:[1,73],52:[1,74],53:[1,75],54:[1,76],55:[1,77],56:[1,78]},{14:[2,38],15:[2,38],33:[2,38],34:[2,38],38:[2,38],41:[2,38],42:[2,38],43:[2,38],45:[2,38],46:[2,38],47:[2,38],48:[2,38],49:[2,38],50:[2,38],51:[2,38],52:[2,38],53:[2,38],54:[2,38],55:[2,38],56:[2,38],57:[2,38]},{1:[2,13],9:[2,13],10:[2,13],15:[2,13],16:[2,13],17:[2,13],21:[2,13],22:[2,13],26:[2,13],31:[2,13],32:[2,13],33:[2,13],34:[2,13]}], -defaultActions: {}, -parseError: function parseError(str, hash) { - throw new Error(str); -}, -parse: function parse(input) { - var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - this.lexer.setInput(input); - this.lexer.yy = this.yy; - this.yy.lexer = this.lexer; - this.yy.parser = this; - if (typeof this.lexer.yylloc == "undefined") - this.lexer.yylloc = {}; - var yyloc = this.lexer.yylloc; - lstack.push(yyloc); - var ranges = this.lexer.options && this.lexer.options.ranges; - if (typeof this.yy.parseError === "function") - this.parseError = this.yy.parseError; - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - function lex() { - var token; - token = self.lexer.lex() || 1; - if (typeof token !== "number") { - token = self.symbols_[token] || token; - } - return token; - } - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - if (!recovering) { - expected = []; - for (p in table[state]) - if (this.terminals_[p] && p > 2) { - expected.push("'" + this.terminals_[p] + "'"); - } - if (this.lexer.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected}); - } - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(this.lexer.yytext); - lstack.push(this.lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = this.lexer.yyleng; - yytext = this.lexer.yytext; - yylineno = this.lexer.yylineno; - yyloc = this.lexer.yylloc; - if (recovering > 0) - recovering--; - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column}; - if (ranges) { - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; - } - r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -} -}; -/* Jison generated lexer */ -var lexer = (function(){ -var lexer = ({EOF:1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, -setInput:function (input) { - this._input = input; - this._more = this._less = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0}; - if (this.options.ranges) this.yylloc.range = [0,0]; - this.offset = 0; - return this; - }, -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) this.yylloc.range[1]++; - - this._input = this._input.slice(1); - return ch; - }, -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length-len-1); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length-1); - this.matched = this.matched.substr(0, this.matched.length-1); - - if (lines.length-1) this.yylineno -= lines.length-1; - var r = this.yylloc.range; - - this.yylloc = {first_line: this.yylloc.first_line, - last_line: this.yylineno+1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length: - this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - return this; - }, -more:function () { - this._more = true; - return this; - }, -less:function (n) { - this.unput(this.match.slice(n)); - }, -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, ""); - }, -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c+"^"; - }, -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) this.done = true; - - var token, - match, - tempMatch, - index, - col, - lines; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i=0;i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (!this.options.flex) break; - } - } - if (match) { - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) this.yylineno += lines.length; - this.yylloc = {first_line: this.yylloc.last_line, - last_line: this.yylineno+1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length}; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]); - if (this.done && this._input) this.done = false; - if (token) return token; - else return; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(), - {text: "", token: null, line: this.yylineno}); - } - }, -lex:function lex() { - var r = this.next(); - if (typeof r !== 'undefined') { - return r; - } else { - return this.lex(); - } - }, -begin:function begin(condition) { - this.conditionStack.push(condition); - }, -popState:function popState() { - return this.conditionStack.pop(); - }, -_currentRules:function _currentRules() { - return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules; - }, -topState:function () { - return this.conditionStack[this.conditionStack.length-2]; - }, -pushState:function begin(condition) { - this.begin(condition); - }}); -lexer.options = {"flex":true}; -lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { - -var YYSTATE=YY_START -switch($avoiding_name_collisions) { -case 0: this.begin('cond_include'); -break; -case 1: yy.filepath = yy_.yytext; -break; -case 2: yy.filename = yy_.yytext; -break; -case 3: this.popState(); -break; -case 4: this.begin('cond_use'); -break; -case 5: yy.filename = yy_.yytext; -break; -case 6: this.popState(); -break; -case 7:return 9 -break; -case 8:return 21 -break; -case 9:return 26 -break; -case 10:return 28 -break; -case 11:return 35 -break; -case 12:return 36 -break; -case 13:return 37 -break; -case 14: stringcontents += ' '; -break; -case 15: stringcontents += '\n'; -break; -case 16: stringcontents += '\"'; -break; -case 17: stringcontents += '\r'; -break; -case 18: stringcontents += '\\'; -break; -case 19: stringcontents += '\0'; -break; -case 20: stringcontents += '\a'; -break; -case 21: stringcontents += '\b'; -break; -case 22: stringcontents += '\t'; -break; -case 23: stringcontents += '\n'; -break; -case 24: stringcontents += '\v'; -break; -case 25: stringcontents += '\f'; -break; -case 26: stringcontents += '\e'; -break; -case 27: /*"*/ - stringcontents += yy_.yytext; - -break; -case 28: - this.popState(); - yy_.yytext = stringcontents; - return 39; - -break; -case 29: /*"*/ - this.begin('cond_string'); - stringcontents = ""; - -break; -case 30:/* Ignore */ -break; -case 31:/* Ignore */ -break; -case 32:/* Ignore */ -break; -case 33:/* Ignore Note: multi-line comments are removed via a preparse regex. */ -break; -case 34:return 40 -break; -case 35:return 40 -break; -case 36:return 40 -break; -case 37:return 10 -break; -case 38:return 49 -break; -case 39:return 52 -break; -case 40:return 50 -break; -case 41:return 51 -break; -case 42:return 54 -break; -case 43:return 55 -break; -case 44:return yy_.yytext; -break; -case 45:console.log(yy_.yytext); -break; -} -}; -lexer.rules = [/^(?:include[ \t\r\n>]*<)/,/^(?:[^\t\r\n>]*\/)/,/^(?:[^\t\r\n>/]+)/,/^(?:>)/,/^(?:use[ \t\r\n>]*<)/,/^(?:[^\t\r\n>]+)/,/^(?:>)/,/^(?:module)/,/^(?:function)/,/^(?:if)/,/^(?:else)/,/^(?:true)/,/^(?:false)/,/^(?:undef)/,/^(?:\\t)/,/^(?:\\n)/,/^(?:\\")/,/^(?:\\r)/,/^(?:\\\\)/,/^(?:\\0)/,/^(?:\\a)/,/^(?:\\b)/,/^(?:\\t)/,/^(?:\\n)/,/^(?:\\v)/,/^(?:\\f)/,/^(?:\\e)/,/^(?:[^\\\n\"]+)/,/^(?:")/,/^(?:[\"])/,/^(?:[\n])/,/^(?:[\r\t ])/,/^(?:\/\/[^\n]*\n?)/,/^(?:\/\*.+\*\/)/,/^(?:([0-9])*\.([0-9])+([Ee][+-]?([0-9])+)?)/,/^(?:([0-9])+\.([0-9])*([Ee][+-]?([0-9])+)?)/,/^(?:([0-9])+([Ee][+-]?([0-9])+)?)/,/^(?:\$?[a-zA-Z0-9_]+)/,/^(?:<=)/,/^(?:>=)/,/^(?:==)/,/^(?:!=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:.)/,/^(?:.)/]; -lexer.conditions = {"cond_include":{"rules":[0,1,2,3,4,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"cond_use":{"rules":[0,4,5,6,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"cond_comment":{"rules":[0,4,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"cond_string":{"rules":[0,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"cond_import":{"rules":[0,4,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"INITIAL":{"rules":[0,4,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true}}; -return lexer;})() -parser.lexer = lexer; -return parser; -}); \ No newline at end of file diff --git a/packages/scad-deserializer/src/parserCJS.js b/packages/scad-deserializer/src/parserCJS.js deleted file mode 100644 index e1553f0..0000000 --- a/packages/scad-deserializer/src/parserCJS.js +++ /dev/null @@ -1,1131 +0,0 @@ -const ext = require('./openscad-parser-ext') -const ArgContainer = require('./ArgContainer') -const ArgsContainer = require('./ArgsContainer') -const Expression = require('./Expression') -const ModuleInstantiation = require('./ModuleInstantiation') -const IfElseModuleInstantiation = require('./IfElseModuleInstantiation') -/* parser generated by jison 0.4.17 */ -/* - Returns a Parser object of the following structure: - - Parser: { - yy: {} - } - - Parser.prototype: { - yy: {}, - trace: function(), - symbols_: {associative list: name ==> number}, - terminals_: {associative list: number ==> name}, - productions_: [...], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$), - table: [...], - defaultActions: {...}, - parseError: function(str, hash), - parse: function(input), - - lexer: { - EOF: 1, - parseError: function(str, hash), - setInput: function(input), - input: function(), - unput: function(str), - more: function(), - less: function(n), - pastInput: function(), - upcomingInput: function(), - showPosition: function(), - test_match: function(regex_match_array, rule_index), - next: function(), - lex: function(), - begin: function(condition), - popState: function(), - _currentRules: function(), - topState: function(), - pushState: function(condition), - - options: { - ranges: boolean (optional: true ==> token location info will include a .range[] member) - flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match) - backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code) - }, - - performAction: function(yy, yy_, $avoiding_name_collisions, YY_START), - rules: [...], - conditions: {associative list: name ==> set}, - } - } - - - token location info (@$, _$, etc.): { - first_line: n, - last_line: n, - first_column: n, - last_column: n, - range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based) - } - - - the parseError function receives a 'hash' object with these members for lexer and parser errors: { - text: (matched text) - token: (the produced terminal token, if any) - line: (yylineno) - } - while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: { - loc: (yylloc) - expected: (string describing the set of expected tokens) - recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) - } -*/ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,9,10,15,16,21,22,26,31,32,33,34],$V1=[10,15,16,21,22,26,31,32,33,34],$V2=[2,7],$V3=[1,5],$V4=[1,20],$V5=[1,15],$V6=[1,16],$V7=[1,17],$V8=[1,18],$V9=[1,9,10,15,16,17,21,22,26,31,32,33,34],$Va=[9,10,15,16,17,21,22,26,31,32,33,34],$Vb=[1,24],$Vc=[1,30],$Vd=[1,29],$Ve=[1,9,10,15,16,17,21,22,26,28,31,32,33,34],$Vf=[1,44],$Vg=[1,51],$Vh=[1,50],$Vi=[1,41],$Vj=[1,42],$Vk=[1,43],$Vl=[1,45],$Vm=[1,46],$Vn=[1,47],$Vo=[1,48],$Vp=[1,49],$Vq=[14,57],$Vr=[2,70],$Vs=[1,55],$Vt=[10,17,26,31,32,33,34],$Vu=[10,15,16,26,31,32,33,34],$Vv=[2,65],$Vw=[1,62],$Vx=[1,67],$Vy=[1,65],$Vz=[1,64],$VA=[1,79],$VB=[1,66],$VC=[1,68],$VD=[1,69],$VE=[1,70],$VF=[1,71],$VG=[1,72],$VH=[1,73],$VI=[1,74],$VJ=[1,75],$VK=[1,76],$VL=[1,77],$VM=[1,78],$VN=[14,15,33,34,38,41,42,43,45,46,47,48,49,50,51,52,53,54,55,56,57],$VO=[2,33],$VP=[1,80],$VQ=[2,62],$VR=[1,84],$VS=[1,90],$VT=[1,97],$VU=[43,57],$VV=[10,11,14,31,35,36,37,39,40,41,43,46,47],$VW=[14,15,42,43,46,47,48,49,50,51,52,53,54,55,56,57],$VX=[14,15,33,34,42,43,45,46,47,48,49,50,51,52,53,54,55,56,57],$VY=[14,15,42,43,48,49,52,53,54,55,56,57],$VZ=[14,15,42,43,48,49,50,51,52,53,54,55,56,57],$V_=[2,61]; -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"program":3,"input":4,"statement":5,"inner_input":6,"statement_begin":7,"statement_end":8,"TOK_MODULE":9,"TOK_ID":10,"(":11,"arguments_decl":12,"optional_commas":13,")":14,";":15,"{":16,"}":17,"module_instantiation":18,"=":19,"expr":20,"TOK_FUNCTION":21,"BR":22,"children_instantiation":23,"module_instantiation_list":24,"if_statement":25,"TOK_IF":26,"ifelse_statement":27,"TOK_ELSE":28,"single_module_instantiation":29,"arguments_call":30,"!":31,"#":32,"%":33,"*":34,"TOK_TRUE":35,"TOK_FALSE":36,"TOK_UNDEF":37,".":38,"TOK_STRING":39,"TOK_NUMBER":40,"[":41,":":42,"]":43,"vector_expr":44,"/":45,"+":46,"-":47,"<":48,"LE":49,"EQ":50,"NE":51,"GE":52,">":53,"AND":54,"OR":55,"?":56,",":57,"argument_decl":58,"argument_call":59,"$accept":0,"$end":1}, -terminals_: {2:"error",9:"TOK_MODULE",10:"TOK_ID",11:"(",14:")",15:";",16:"{",17:"}",19:"=",21:"TOK_FUNCTION",22:"BR",26:"TOK_IF",28:"TOK_ELSE",31:"!",32:"#",33:"%",34:"*",35:"TOK_TRUE",36:"TOK_FALSE",37:"TOK_UNDEF",38:".",39:"TOK_STRING",40:"TOK_NUMBER",41:"[",42:":",43:"]",45:"/",46:"+",47:"-",48:"<",49:"LE",50:"EQ",51:"NE",52:"GE",53:">",54:"AND",55:"OR",56:"?",57:","}, -productions_: [0,[3,1],[4,0],[4,2],[6,0],[6,2],[5,2],[7,0],[7,6],[8,1],[8,3],[8,1],[8,4],[8,9],[8,1],[23,1],[23,3],[25,5],[27,1],[27,3],[18,2],[18,2],[18,1],[24,0],[24,2],[29,4],[29,2],[29,2],[29,2],[29,2],[20,1],[20,1],[20,1],[20,1],[20,3],[20,1],[20,1],[20,5],[20,7],[20,3],[20,4],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,3],[20,2],[20,2],[20,2],[20,3],[20,5],[20,4],[20,4],[13,2],[13,0],[44,1],[44,4],[12,0],[12,1],[12,4],[58,1],[58,3],[30,0],[30,1],[30,4],[59,1],[59,3]], -performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { -/* this == yyval */ - -var $0 = $$.length - 1; -switch (yystate) { -case 1: - - return ext.processModule(yy); - -break; -case 8: - - ext.stashModule($$[$0-4], $$[$0-2].argnames, $$[$0-2].argexpr); - delete $$[$0-2]; - -break; -case 9: - - -break; -case 10: - - ext.popModule(); - -break; -case 11: - - ext.addModuleChild($$[$0]); - -break; -case 12: - - ext.addModuleAssignmentVar($$[$0-3], $$[$0-1]); - -break; -case 13: - - ext.addModuleFunction($$[$0-7], $$[$0-1], $$[$0-5].argnames, $$[$0-5].argexpr); - delete $$[$0-5]; - -break; -case 15: - - this.$ = new ModuleInstantiation(); - if ($$[$0]) { - this.$.children.push($$[$0]); - } - -break; -case 16: case 20: - - this.$ = $$[$0-1]; - -break; -case 17: - - this.$ = new IfElseModuleInstantiation(); - this.$.argnames.push(""); - this.$.argexpr.push($$[$0-2]); - - if (this.$) { - this.$.children = $$[$0].children; - } else { - for (var i = 0; i < $$[$0].children.size(); i++) - delete $$[$0].children[i]; - } - delete $$[$0]; - -break; -case 18: case 22: case 54: - - this.$ = $$[$0]; - -break; -case 19: - - this.$ = $$[$0-2]; - if (this.$) { - this.$.else_children = $$[$0].children; - } else { - for (var i = 0; i < $$[$0].children.size(); i++) - delete $$[$0].children[i]; - } - delete $$[$0]; - -break; -case 21: - - this.$ = $$[$0-1]; - if (this.$) { - this.$.children = $$[$0].children; - } else { - for (var i = 0; i < $$[$0].children.length; i++) - delete $$[$0].children[i]; - } - delete $$[$0]; - -break; -case 23: - - this.$ = new ModuleInstantiation(); - -break; -case 24: - - this.$ = $$[$0-1]; - if (this.$) { - if ($$[$0]) { - this.$.children.push($$[$0]); - } - } else { - delete $$[$0]; - } - -break; -case 25: - - this.$ = new ModuleInstantiation(); - this.$.name = $$[$0-3]; - this.$.argnames = $$[$0-1].argnames; - this.$.argexpr = $$[$0-1].argexpr; - delete $$[$0-1]; - -break; -case 26: - - this.$ = $$[$0]; - if (this.$) { - this.$.tag_root = true; - } - -break; -case 27: - - this.$ = $$[$0]; - if (this.$) { - this.$.tag_highlight = true; - } - -break; -case 28: - - /* - NOTE: Currently unimplemented, therefore not displaying parts marked with % - this.$ = $$[$0]; - if (this.$) { - this.$.tag_background = true; - } - */ - delete $$[$0]; - this.$ = undefined; - -break; -case 29: - - delete $$[$0]; - this.$ = undefined; - -break; -case 30: - - this.$ = new Expression(true); - -break; -case 31: - - this.$ = new Expression(false); - -break; -case 32: - - this.$ = new Expression(undefined); - -break; -case 33: - - this.$ = new Expression(); - this.$.type = "L"; - this.$.var_name = $$[$0]; - -break; -case 34: - - this.$ = new Expression(); - this.$.type = "N"; - this.$.children.push($$[$0-2]); - this.$.var_name = $$[$0]; - -break; -case 35: - - this.$ = new Expression(String($$[$0])); - -break; -case 36: - - this.$ = new Expression(Number($$[$0])); - -break; -case 37: - - var e_one = new Expression(1.0); - this.$ = new Expression(); - this.$.type = "R"; - this.$.children.push($$[$0-3]); - this.$.children.push(e_one); - this.$.children.push($$[$0-1]); - -break; -case 38: - - this.$ = new Expression(); - this.$.type = "R"; - this.$.children.push($$[$0-5]); - this.$.children.push($$[$0-3]); - this.$.children.push($$[$0-1]); - -break; -case 39: - - this.$ = new Expression([]); - -break; -case 40: - - this.$ = $$[$0-2]; - -break; -case 41: - - this.$ = new Expression(); - this.$.type = '*'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 42: - - this.$ = new Expression(); - this.$.type = '/'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 43: - - this.$ = new Expression(); - this.$.type = '%'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 44: - - this.$ = new Expression(); - this.$.type = '+'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 45: - - this.$ = new Expression(); - this.$.type = '-'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 46: - - this.$ = new Expression(); - this.$.type = '<'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 47: - - this.$ = new Expression(); - this.$.type = '<='; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 48: - - this.$ = new Expression(); - this.$.type = '=='; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 49: - - this.$ = new Expression(); - this.$.type = '!='; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 50: - - this.$ = new Expression(); - this.$.type = '>='; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 51: - - this.$ = new Expression(); - this.$.type = '>'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 52: - - this.$ = new Expression(); - this.$.type = '&&'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 53: - - this.$ = new Expression(); - this.$.type = '||'; - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 55: - - this.$ = new Expression(); - this.$.type = 'I'; - this.$.children.push($$[$0]); - -break; -case 56: - - this.$ = new Expression(); - this.$.type = '!'; - this.$.children.push($$[$0]); - -break; -case 57: - this.$ = $$[$0-1]; -break; -case 58: - - this.$ = new Expression(); - this.$.type = '?:'; - this.$.children.push($$[$0-4]); - this.$.children.push($$[$0-2]); - this.$.children.push($$[$0]); - -break; -case 59: - - this.$ = new Expression(); - this.$.type = '[]'; - this.$.children.push($$[$0-3]); - this.$.children.push($$[$0-1]); - -break; -case 60: - - this.$ = new Expression(); - this.$.type = 'F'; - this.$.call_funcname = $$[$0-3]; - this.$.call_argnames = $$[$0-1].argnames; - this.$.children = $$[$0-1].argexpr; - delete $$[$0-1]; - -break; -case 63: - - this.$ = new Expression(); - this.$.type = 'V'; - this.$.children.push($$[$0]); - -break; -case 64: - - this.$ = $$[$0-3]; - this.$.children.push($$[$0]); - -break; -case 65: case 70: - - this.$ = new ArgsContainer(); - -break; -case 66: case 71: - - this.$ = new ArgsContainer(); - this.$.argnames.push($$[$0].argname); - this.$.argexpr.push($$[$0].argexpr); - delete $$[$0]; - -break; -case 67: case 72: - - this.$ = $$[$0-3]; - this.$.argnames.push($$[$0].argname); - this.$.argexpr.push($$[$0].argexpr); - delete $$[$0]; - -break; -case 68: - - this.$ = new ArgContainer(); - this.$.argname = $$[$0]; - this.$.argexpr = undefined; - -break; -case 69: case 74: - - this.$ = new ArgContainer(); - this.$.argname = $$[$0-2]; - this.$.argexpr = $$[$0]; - -break; -case 73: - - this.$ = new ArgContainer(); - this.$.argexpr = $$[$0]; - -break; -} -}, -table: [o($V0,[2,2],{3:1,4:2}),{1:[3]},o($V1,$V2,{5:3,7:4,1:[2,1],9:$V3}),o($V0,[2,3]),{8:6,10:[1,10],15:[1,7],16:[1,8],18:9,21:[1,11],22:[1,12],25:19,26:$V4,27:14,29:13,31:$V5,32:$V6,33:$V7,34:$V8},{10:[1,21]},o($V9,[2,6]),o($V9,[2,9]),o($Va,[2,4],{6:22}),o($V9,[2,11]),{11:$Vb,19:[1,23]},{10:[1,25]},o($V9,[2,14]),{10:$Vc,15:[1,26],16:$Vd,18:28,23:27,25:19,26:$V4,27:14,29:13,31:$V5,32:$V6,33:$V7,34:$V8},o($Ve,[2,22]),{10:$Vc,29:31,31:$V5,32:$V6,33:$V7,34:$V8},{10:$Vc,29:32,31:$V5,32:$V6,33:$V7,34:$V8},{10:$Vc,29:33,31:$V5,32:$V6,33:$V7,34:$V8},{10:$Vc,29:34,31:$V5,32:$V6,33:$V7,34:$V8},o($V9,[2,18],{28:[1,35]}),{11:[1,36]},{11:[1,37]},o($V1,$V2,{7:4,5:39,9:$V3,17:[1,38]}),{10:$Vf,11:$Vg,20:40,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},o($Vq,$Vr,{30:52,59:53,20:54,10:$Vs,11:$Vg,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp}),{11:[1,56]},o($Ve,[2,20]),o($Ve,[2,21]),o($Ve,[2,15]),o($Vt,[2,23],{24:57}),{11:$Vb},o($Vu,[2,26]),o($Vu,[2,27]),o($Vu,[2,28]),o($Vu,[2,29]),{10:$Vc,16:$Vd,18:28,23:58,25:19,26:$V4,27:14,29:13,31:$V5,32:$V6,33:$V7,34:$V8},{10:$Vf,11:$Vg,20:59,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},o($Vq,$Vv,{12:60,58:61,10:$Vw}),o($V9,[2,10]),o($Va,[2,5]),{15:[1,63],33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM},o($VN,[2,30]),o($VN,[2,31]),o($VN,[2,32]),o($VN,$VO,{11:$VP}),o($VN,[2,35]),o($VN,[2,36]),{10:$Vf,11:$Vg,13:82,20:81,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,43:$VQ,44:83,46:$Vo,47:$Vp,57:$VR},{10:$Vf,11:$Vg,20:85,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:86,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:87,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:88,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{14:[1,89],57:$VS},o($Vq,[2,71]),o($Vq,[2,73],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM}),o([14,33,34,38,41,45,46,47,48,49,50,51,52,53,54,55,56,57],$VO,{11:$VP,19:[1,91]}),o($Vq,$Vv,{58:61,12:92,10:$Vw}),{10:$Vc,17:[1,93],18:94,25:19,26:$V4,27:14,29:13,31:$V5,32:$V6,33:$V7,34:$V8},o($Ve,[2,19]),{14:[1,95],33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM},{13:96,14:$VQ,57:$VT},o($Vq,[2,66]),o($Vq,[2,68],{19:[1,98]}),o($V9,[2,12]),{10:[1,99]},{10:$Vf,11:$Vg,20:100,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:101,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:102,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:103,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:104,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:105,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:106,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:107,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:108,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:109,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:110,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:111,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:112,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:113,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{10:$Vf,11:$Vg,20:114,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},o($Vq,$Vr,{59:53,20:54,30:115,10:$Vs,11:$Vg,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp}),o($VU,[2,63],{33:$Vx,34:$Vy,38:$Vz,41:$VA,42:[1,116],45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM}),{43:[1,117]},{13:118,43:$VQ,57:[1,119]},o($VV,$VQ,{13:120,57:$VR}),o($VW,[2,54],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB}),o($VW,[2,55],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB}),o($VW,[2,56],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB}),{14:[1,121],33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM},o($Vu,[2,25]),o([10,11,31,35,36,37,39,40,41,46,47],$VQ,{13:122,57:$VR}),{10:$Vf,11:$Vg,20:123,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{13:124,14:$VQ,57:$VT},o($Ve,[2,16]),o($Vt,[2,24]),{10:$Vc,16:$Vd,18:28,23:125,25:19,26:$V4,27:14,29:13,31:$V5,32:$V6,33:$V7,34:$V8},{14:[1,126]},o([10,14],$VQ,{13:127,57:$VR}),{10:$Vf,11:$Vg,20:128,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},o($VN,[2,34]),o($VX,[2,41],{38:$Vz,41:$VA}),o($VX,[2,42],{38:$Vz,41:$VA}),o($VX,[2,43],{38:$Vz,41:$VA}),o($VW,[2,44],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB}),o($VW,[2,45],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB}),o($VY,[2,46],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,50:$VG,51:$VH}),o($VY,[2,47],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,50:$VG,51:$VH}),o($VZ,[2,48],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD}),o($VZ,[2,49],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD}),o($VY,[2,50],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,50:$VG,51:$VH}),o($VY,[2,51],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,50:$VG,51:$VH}),o([14,15,42,43,54,55,56,57],[2,52],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ}),o([14,15,42,43,55,56,57],[2,53],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK}),{33:$Vx,34:$Vy,38:$Vz,41:$VA,42:[1,129],45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM},{33:$Vx,34:$Vy,38:$Vz,41:$VA,43:[1,130],45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM},{14:[1,131],57:$VS},{10:$Vf,11:$Vg,20:132,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},o($VN,[2,39]),{43:[1,133]},o([10,11,31,35,36,37,39,40,41,43,46,47],$VQ,{13:134,57:$VR}),o($VV,$V_),o($VN,[2,57]),{10:$Vs,11:$Vg,20:54,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp,59:135},o($Vq,[2,74],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM}),{14:[1,136]},o($Ve,[2,17]),o($V1,[2,8]),{10:$Vw,14:$V_,58:137},o($Vq,[2,69],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM}),{10:$Vf,11:$Vg,20:138,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},o($VN,[2,59]),o($VN,[2,60]),{33:$Vx,34:$Vy,38:$Vz,41:$VA,42:[1,140],43:[1,139],45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM},o($VN,[2,40]),{10:$Vf,11:$Vg,20:141,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,43:$V_,46:$Vo,47:$Vp},o($Vq,[2,72]),{19:[1,142]},o($Vq,[2,67]),o([14,15,42,43,57],[2,58],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM}),o($VN,[2,37]),{10:$Vf,11:$Vg,20:143,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},o($VU,[2,64],{33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM}),{10:$Vf,11:$Vg,20:144,31:$Vh,35:$Vi,36:$Vj,37:$Vk,39:$Vl,40:$Vm,41:$Vn,46:$Vo,47:$Vp},{33:$Vx,34:$Vy,38:$Vz,41:$VA,43:[1,145],45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM},{15:[1,146],33:$Vx,34:$Vy,38:$Vz,41:$VA,45:$VB,46:$VC,47:$VD,48:$VE,49:$VF,50:$VG,51:$VH,52:$VI,53:$VJ,54:$VK,55:$VL,56:$VM},o($VN,[2,38]),o($V9,[2,13])], -defaultActions: {}, -parseError: function parseError(str, hash) { - if (hash.recoverable) { - this.trace(str); - } else { - function _parseError (msg, hash) { - this.message = msg; - this.hash = hash; - } - _parseError.prototype = Error; - - throw new _parseError(str, hash); - } -}, -parse: function parse(input) { - var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - var args = lstack.slice.call(arguments, 1); - var lexer = Object.create(this.lexer); - var sharedState = { yy: {} }; - for (var k in this.yy) { - if (Object.prototype.hasOwnProperty.call(this.yy, k)) { - sharedState.yy[k] = this.yy[k]; - } - } - lexer.setInput(input, sharedState.yy); - sharedState.yy.lexer = lexer; - sharedState.yy.parser = this; - if (typeof lexer.yylloc == 'undefined') { - lexer.yylloc = {}; - } - var yyloc = lexer.yylloc; - lstack.push(yyloc); - var ranges = lexer.options && lexer.options.ranges; - if (typeof sharedState.yy.parseError === 'function') { - this.parseError = sharedState.yy.parseError; - } else { - this.parseError = Object.getPrototypeOf(this).parseError; - } - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - _token_stack: - var lex = function () { - var token; - token = lexer.lex() || EOF; - if (typeof token !== 'number') { - token = self.symbols_[token] || token; - } - return token; - }; - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == 'undefined') { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } - } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; - } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected - }); - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(lexer.yytext); - lstack.push(lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = lexer.yyleng; - yytext = lexer.yytext; - yylineno = lexer.yylineno; - yyloc = lexer.yylloc; - if (recovering > 0) { - recovering--; - } - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { - first_line: lstack[lstack.length - (len || 1)].first_line, - last_line: lstack[lstack.length - 1].last_line, - first_column: lstack[lstack.length - (len || 1)].first_column, - last_column: lstack[lstack.length - 1].last_column - }; - if (ranges) { - yyval._$.range = [ - lstack[lstack.length - (len || 1)].range[0], - lstack[lstack.length - 1].range[1] - ]; - } - r = this.performAction.apply(yyval, [ - yytext, - yyleng, - yylineno, - sharedState.yy, - action[1], - vstack, - lstack - ].concat(args)); - if (typeof r !== 'undefined') { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -}}; - -/* generated by jison-lex 0.3.4 */ -var lexer = (function(){ -var lexer = ({ - -EOF:1, - -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - -// resets the lexer, sets new input -setInput:function (input, yy) { - this.yy = yy || this.yy || {}; - this._input = input; - this._more = this._backtrack = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { - first_line: 1, - first_column: 0, - last_line: 1, - last_column: 0 - }; - if (this.options.ranges) { - this.yylloc.range = [0,0]; - } - this.offset = 0; - return this; - }, - -// consumes and returns one char from the input -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) { - this.yylloc.range[1]++; - } - - this._input = this._input.slice(1); - return ch; - }, - -// unshifts one char (or a string) into the input -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) { - this.yylineno -= lines.length - 1; - } - var r = this.yylloc.range; - - this.yylloc = { - first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) - + oldLines[oldLines.length - lines.length].length - lines[0].length : - this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - this.yyleng = this.yytext.length; - return this; - }, - -// When called from action, caches matched text and appends it on next action -more:function () { - this._more = true; - return this; - }, - -// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead. -reject:function () { - if (this.options.backtrack_lexer) { - this._backtrack = true; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - - } - return this; - }, - -// retain first n characters of the match -less:function (n) { - this.unput(this.match.slice(n)); - }, - -// displays already matched input, i.e. for error messages -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, - -// displays upcoming input, i.e. for error messages -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, - -// displays the character position where the lexing error occurred, i.e. for error messages -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - -// test the lexed token: return FALSE when not a match, otherwise return token -test_match:function (match, indexed_rule) { - var token, - lines, - backup; - - if (this.options.backtrack_lexer) { - // save context - backup = { - yylineno: this.yylineno, - yylloc: { - first_line: this.yylloc.first_line, - last_line: this.last_line, - first_column: this.yylloc.first_column, - last_column: this.yylloc.last_column - }, - yytext: this.yytext, - match: this.match, - matches: this.matches, - matched: this.matched, - yyleng: this.yyleng, - offset: this.offset, - _more: this._more, - _input: this._input, - yy: this.yy, - conditionStack: this.conditionStack.slice(0), - done: this.done - }; - if (this.options.ranges) { - backup.yylloc.range = this.yylloc.range.slice(0); - } - } - - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno += lines.length; - } - this.yylloc = { - first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? - lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : - this.yylloc.last_column + match[0].length - }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._backtrack = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) { - this.done = false; - } - if (token) { - return token; - } else if (this._backtrack) { - // recover context - for (var k in backup) { - this[k] = backup[k]; - } - return false; // rule action called reject() implying the next rule should be tested instead. - } - return false; - }, - -// return next match in input -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) { - this.done = true; - } - - var token, - match, - tempMatch, - index; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (this.options.backtrack_lexer) { - token = this.test_match(tempMatch, rules[i]); - if (token !== false) { - return token; - } else if (this._backtrack) { - match = false; - continue; // rule action called reject() implying a rule MISmatch. - } else { - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - } else if (!this.options.flex) { - break; - } - } - } - if (match) { - token = this.test_match(match, rules[index]); - if (token !== false) { - return token; - } - // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace) - return false; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { - text: "", - token: null, - line: this.yylineno - }); - } - }, - -// return next match that has a token -lex:function lex() { - var r = this.next(); - if (r) { - return r; - } else { - return this.lex(); - } - }, - -// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack) -begin:function begin(condition) { - this.conditionStack.push(condition); - }, - -// pop the previously active lexer condition state off the condition stack -popState:function popState() { - var n = this.conditionStack.length - 1; - if (n > 0) { - return this.conditionStack.pop(); - } else { - return this.conditionStack[0]; - } - }, - -// produce the lexer rule set which is active for the currently active lexer condition state -_currentRules:function _currentRules() { - if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - } else { - return this.conditions["INITIAL"].rules; - } - }, - -// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available -topState:function topState(n) { - n = this.conditionStack.length - 1 - Math.abs(n || 0); - if (n >= 0) { - return this.conditionStack[n]; - } else { - return "INITIAL"; - } - }, - -// alias for begin(condition) -pushState:function pushState(condition) { - this.begin(condition); - }, - -// return the number of states currently on the stack -stateStackSize:function stateStackSize() { - return this.conditionStack.length; - }, -options: {"flex":true}, -performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) { -var YYSTATE=YY_START; -switch($avoiding_name_collisions) { -case 0: this.begin('cond_include'); -break; -case 1: yy.filepath = yy_.yytext; -break; -case 2: yy.filename = yy_.yytext; -break; -case 3: this.popState(); -break; -case 4: this.begin('cond_use'); -break; -case 5: yy.filename = yy_.yytext; -break; -case 6: this.popState(); -break; -case 7:return 9 -break; -case 8:return 21 -break; -case 9:return 26 -break; -case 10:return 28 -break; -case 11:return 35 -break; -case 12:return 36 -break; -case 13:return 37 -break; -case 14: stringcontents += ' '; -break; -case 15: stringcontents += '\n'; -break; -case 16: stringcontents += '\"'; -break; -case 17: stringcontents += '\r'; -break; -case 18: stringcontents += '\\'; -break; -case 19: stringcontents += '\0'; -break; -case 20: stringcontents += '\a'; -break; -case 21: stringcontents += '\b'; -break; -case 22: stringcontents += '\t'; -break; -case 23: stringcontents += '\n'; -break; -case 24: stringcontents += '\v'; -break; -case 25: stringcontents += '\f'; -break; -case 26: stringcontents += '\e'; -break; -case 27: /*"*/ - stringcontents += yy_.yytext; - -break; -case 28: - this.popState(); - yy_.yytext = stringcontents; - return 39; - -break; -case 29: /*"*/ - this.begin('cond_string'); - stringcontents = ""; - -break; -case 30:/* Ignore */ -break; -case 31:/* Ignore */ -break; -case 32:/* Ignore */ -break; -case 33:/* Ignore Note: multi-line comments are removed via a preparse regex. */ -break; -case 34:return 40 -break; -case 35:return 40 -break; -case 36:return 40 -break; -case 37:return 10 -break; -case 38:return 49 -break; -case 39:return 52 -break; -case 40:return 50 -break; -case 41:return 51 -break; -case 42:return 54 -break; -case 43:return 55 -break; -case 44:return yy_.yytext; -break; -case 45:console.log(yy_.yytext); -break; -} -}, -rules: [/^(?:include[ \t\r\n>]*<)/,/^(?:[^\t\r\n>]*\/)/,/^(?:[^\t\r\n>\/]+)/,/^(?:>)/,/^(?:use[ \t\r\n>]*<)/,/^(?:[^\t\r\n>]+)/,/^(?:>)/,/^(?:module)/,/^(?:function)/,/^(?:if)/,/^(?:else)/,/^(?:true)/,/^(?:false)/,/^(?:undef)/,/^(?:\\t)/,/^(?:\\n)/,/^(?:\\")/,/^(?:\\r)/,/^(?:\\\\)/,/^(?:\\0)/,/^(?:\\a)/,/^(?:\\b)/,/^(?:\\t)/,/^(?:\\n)/,/^(?:\\v)/,/^(?:\\f)/,/^(?:\\e)/,/^(?:[^\\\n\"]+)/,/^(?:")/,/^(?:[\"])/,/^(?:[\n])/,/^(?:[\r\t ])/,/^(?:\/\/[^\n]*\n?)/,/^(?:\/\*.+\*\/)/,/^(?:([0-9])*\.([0-9])+([Ee][+-]?([0-9])+)?)/,/^(?:([0-9])+\.([0-9])*([Ee][+-]?([0-9])+)?)/,/^(?:([0-9])+([Ee][+-]?([0-9])+)?)/,/^(?:\$?[a-zA-Z0-9_]+)/,/^(?:<=)/,/^(?:>=)/,/^(?:==)/,/^(?:!=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:.)/,/^(?:.)/], -conditions: {"cond_include":{"rules":[0,1,2,3,4,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"cond_use":{"rules":[0,4,5,6,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"cond_comment":{"rules":[0,4,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"cond_string":{"rules":[0,4,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"cond_import":{"rules":[0,4,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true},"INITIAL":{"rules":[0,4,7,8,9,10,11,12,13,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"inclusive":true}} -}); -return lexer; -})(); -parser.lexer = lexer; -function Parser () { - this.yy = {}; -} -Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})(); - - -if (typeof require !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; -exports.main = function commonjsMain(args) { - if (!args[1]) { - console.log('Usage: '+args[0]+' FILE'); - process.exit(1); - } - var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8"); - return exports.parser.parse(source); -}; -if (typeof module !== 'undefined' && require.main === module) { - exports.main(process.argv.slice(1)); -} -} \ No newline at end of file diff --git a/packages/scad-deserializer/src/parserMaker.js b/packages/scad-deserializer/src/parserMaker.js deleted file mode 100644 index eb4d61c..0000000 --- a/packages/scad-deserializer/src/parserMaker.js +++ /dev/null @@ -1,22 +0,0 @@ -const Parser = require('jison').Parser -const fs = require('fs') -const path = require('path') - -const grammar = fs.readFileSync('./openscad-parser.jison', 'utf8') -const parser = new Parser(grammar, {type: 'LALR'}) - -// generate source, ready to be written to disk -let parserSource = parser.generate() - -// we add our extra variables to the base parser -parserSource = `const ext = require('./openscad-parser-ext') -const ArgContainer = require('./ArgContainer') -const ArgsContainer = require('./ArgsContainer') -const Expression = require('./Expression') -const ModuleInstantiation = require('./ModuleInstantiation') -const IfElseModuleInstantiation = require('./IfElseModuleInstantiation') -${parserSource}` -fs.writeFileSync(path.join(__dirname, 'parserCJS.js'), parserSource) - -// ext, ArgContainer, ArgsContainer, Expression, ModuleInstantiation, IfElseModuleInstantiation -// openscad-parser-ext", "ArgContainer", "ArgsContainer", "Expression", "ModuleInstantiation", "IfElseModuleInstantiation diff --git a/packages/scad-deserializer/src/parserWrapper.js b/packages/scad-deserializer/src/parserWrapper.js deleted file mode 100644 index e788dc4..0000000 --- a/packages/scad-deserializer/src/parserWrapper.js +++ /dev/null @@ -1,14 +0,0 @@ -var parser = require('./parserCJS') -var Globals = require('./Globals') - -module.exports = { - parse: function (text) { - if (parser.yy === undefined) { - parser.yy = {} - } - - var openSCADText = Globals.preParse(text) - var openJSCADResult = parser.parse(openSCADText) - return openJSCADResult.lines.join('\n') - } -} diff --git a/packages/scad-deserializer/tests/2d_primitives.js b/packages/scad-deserializer/tests/2d_primitives.js deleted file mode 100755 index fb0d217..0000000 --- a/packages/scad-deserializer/tests/2d_primitives.js +++ /dev/null @@ -1,7 +0,0 @@ -const check = require('./helpers').check -const filedir = '2d_primitives/' - -exports['test Square'] = function () { - check(filedir, 'squareEx1') -} -if (module === require.main) require('test').run(exports) diff --git a/packages/scad-deserializer/tests/2d_primitives/squareEx1.jscad b/packages/scad-deserializer/tests/2d_primitives/squareEx1.jscad deleted file mode 100755 index 42d3ac1..0000000 --- a/packages/scad-deserializer/tests/2d_primitives/squareEx1.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CAG.rectangle({center: [0,0], radius: [1,1]}); -}; diff --git a/packages/scad-deserializer/tests/2d_primitives/squareEx1.scad b/packages/scad-deserializer/tests/2d_primitives/squareEx1.scad deleted file mode 100755 index 31146f7..0000000 --- a/packages/scad-deserializer/tests/2d_primitives/squareEx1.scad +++ /dev/null @@ -1 +0,0 @@ -square ([2,2],center =true); \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion.js b/packages/scad-deserializer/tests/2d_to_3d_extrusion.js deleted file mode 100755 index 7368345..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion.js +++ /dev/null @@ -1,14 +0,0 @@ -const check = require('./helpers').check -const filedir = '2d_to_3d_extrusion/' - -exports['test Linear Extrude'] = function () { - check(filedir, 'linearExtrudeEx1') - check(filedir, 'linearExtrudeEx2') - check(filedir, 'linearExtrudeEx3') - check(filedir, 'linearExtrudeEx4') - check(filedir, 'linearExtrudeEx5') - check(filedir, 'linearExtrudeEx6') - check(filedir, 'linearExtrudeEx7') -} - -if (module === require.main) require('test').run(exports) diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx1.jscad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx1.jscad deleted file mode 100755 index ca1f3ac..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx1.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CAG.circle({center: [0,0], radius: 1, resolution: 5}).translate([2,0,0]).extrude({offset: [0, 0, 10], twistangle: 0,twiststeps: 2}).translate([0,0,-5]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx1.scad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx1.scad deleted file mode 100755 index 6fb909c..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx1.scad +++ /dev/null @@ -1,3 +0,0 @@ -linear_extrude(height = 10, center = true, convexity = 10, twist = 0) -translate([2, 0, 0]) -circle(r = 1); \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx2.jscad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx2.jscad deleted file mode 100755 index 4697d2b..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx2.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CAG.circle({center: [0,0], radius: 1, resolution: 5}).translate([2,0,0]).extrude({offset: [0, 0, 10], twistangle: 100,twiststeps: 8}).translate([0,0,-5]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx2.scad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx2.scad deleted file mode 100755 index 7db3d26..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx2.scad +++ /dev/null @@ -1,3 +0,0 @@ -linear_extrude(height = 10, center = true, convexity = 10, twist = -100) -translate([2, 0, 0]) -circle(r = 1); \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx3.jscad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx3.jscad deleted file mode 100755 index 9bbd7d9..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx3.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CAG.circle({center: [0,0], radius: 1, resolution: 5}).translate([2,0,0]).extrude({offset: [0, 0, 10], twistangle: -100,twiststeps: 8}).translate([0,0,-5]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx3.scad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx3.scad deleted file mode 100755 index c40d402..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx3.scad +++ /dev/null @@ -1,3 +0,0 @@ -linear_extrude(height = 10, center = true, convexity = 10, twist = 100) -translate([2, 0, 0]) -circle(r = 1); \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx4.jscad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx4.jscad deleted file mode 100755 index c5720e6..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx4.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CAG.circle({center: [0,0], radius: 1, resolution: 5}).translate([2,0,0]).extrude({offset: [0, 0, 10], twistangle: 500,twiststeps: 41}).translate([0,0,-5]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx4.scad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx4.scad deleted file mode 100755 index ccb8bf3..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx4.scad +++ /dev/null @@ -1,3 +0,0 @@ -linear_extrude(height = 10, center = true, convexity = 10, twist = -500) -translate([2, 0, 0]) -circle(r = 1); \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx5.jscad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx5.jscad deleted file mode 100755 index 250b377..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx5.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CAG.circle({center: [0,0], radius: 1, resolution: 5}).translate([2,0,0]).extrude({offset: [0, 0, 10], twistangle: 500,twiststeps: 41}); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx5.scad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx5.scad deleted file mode 100755 index 895de45..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx5.scad +++ /dev/null @@ -1,3 +0,0 @@ -linear_extrude(height = 10, center = false, convexity = 10, twist = -500) -translate([2, 0, 0]) -circle(r = 1); \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx6.jscad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx6.jscad deleted file mode 100755 index 53155f9..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx6.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CAG.circle({center: [0,0], radius: 1, resolution: 5}).translate([2,0,0]).extrude({offset: [0, 0, 10], twistangle: -360,twiststeps: 100}); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx6.scad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx6.scad deleted file mode 100755 index b6edda9..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx6.scad +++ /dev/null @@ -1,3 +0,0 @@ -linear_extrude(height = 10, center = false, convexity = 10, twist = 360, slices = 100) -translate([2, 0, 0]) -circle(r = 1); \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx7.jscad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx7.jscad deleted file mode 100755 index 27ca3ad..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx7.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CAG.circle({center: [0,0], radius: 1, resolution: 100}).translate([2,0,0]).extrude({offset: [0, 0, 10], twistangle: -360,twiststeps: 100}); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx7.scad b/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx7.scad deleted file mode 100755 index 395af7e..0000000 --- a/packages/scad-deserializer/tests/2d_to_3d_extrusion/linearExtrudeEx7.scad +++ /dev/null @@ -1,3 +0,0 @@ -linear_extrude(height = 10, center = false, convexity = 10, twist = 360, $fn = 100) -translate([2, 0, 0]) -circle(r = 1); \ No newline at end of file diff --git a/packages/scad-deserializer/tests/all-tests.js b/packages/scad-deserializer/tests/all-tests.js deleted file mode 100755 index b4a9380..0000000 --- a/packages/scad-deserializer/tests/all-tests.js +++ /dev/null @@ -1,11 +0,0 @@ -exports.test1 = require('./2d_to_3d_extrusion') -exports.test2 = require('./conditional_and_iterator_functions') -exports.test5 = require('./modules') -exports.test6 = require('./primitive_solids') -exports.test7 = require('./submodule_tests') -exports.test8 = require('./transformations') -exports.test9 = require('./2d_primitives') - -if (require.main === module) { - require('test').run(exports) -} diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions.js b/packages/scad-deserializer/tests/conditional_and_iterator_functions.js deleted file mode 100755 index 523594b..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions.js +++ /dev/null @@ -1,27 +0,0 @@ -const assert = require('assert') -const check = require('./helpers').check -const filedir = 'conditional_and_iterator_functions/' - -exports['test for loop'] = function () { - check(filedir, 'forLoopEx1') - check(filedir, 'forLoopEx2a') - check(filedir, 'forLoopEx2b') - check(filedir, 'forLoopEx3') - check(filedir, 'forLoopEx4') -} - -exports['test intersection_for loop'] = function () { - check(filedir, 'intersectionForLoopEx1') - check(filedir, 'intersectionForLoopEx2') -} - -exports['test if statement'] = function () { - check(filedir, 'ifStatementEx1') -} - -/* -exports['test assign statement'] = function () { - assert.todo('todo ') -}*/ - -if (module === require.main) require('test').run(exports) diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/assignStatementEx1.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/assignStatementEx1.jscad deleted file mode 100755 index e69de29..0000000 diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/assignStatementEx1.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/assignStatementEx1.scad deleted file mode 100755 index 79cab14..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/assignStatementEx1.scad +++ /dev/null @@ -1,9 +0,0 @@ -for (i = [10:50]) -{ - assign (angle = i*360/20, distance = i*10, r = i*2) - { - rotate(angle, [1, 0, 0]) - translate([0, distance, 0]) - sphere(r = r); - } -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx1.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx1.jscad deleted file mode 100755 index e7bacca..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx1.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}).translate([0,0,-1]).union([CSG.cube({center: [0.5,0.5,0.5],radius: [0.5,0.5,0.5], resolution: 16}).translate([0,0,1])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx1.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx1.scad deleted file mode 100755 index b7dac87..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx1.scad +++ /dev/null @@ -1,5 +0,0 @@ -for (z = [-1, 1]) // two iterations, z = -1, z = 1 -{ - translate([0, 0, z]) - cube(size = 1, center = false); -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2a.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2a.jscad deleted file mode 100755 index 151b579..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2a.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 0)).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 60))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 120))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 180))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 240))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 300))]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2a.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2a.scad deleted file mode 100755 index fe160d8..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2a.scad +++ /dev/null @@ -1,6 +0,0 @@ -for ( i = [0 : 5] ) -{ - rotate( i * 360 / 6, [1, 0, 0]) - translate([0, 10, 0]) - sphere(r = 1); -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2b.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2b.jscad deleted file mode 100755 index d55e2a6..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2b.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 0)).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 12))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 24))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 36.00000000000001))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 48))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 60))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 72))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 83.99999999999999))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 96))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 107.99999999999999))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 119.99999999999999))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 131.99999999999997))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 144))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 156))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 168.00000000000003))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 180.00000000000003))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 192.00000000000003))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 204.00000000000003))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 216.00000000000009))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 228.00000000000009))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 240.00000000000003))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 252.00000000000009))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 264.00000000000006))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 276.00000000000006))]).union([CSG.sphere({center: [0,0,0], radius: 1, resolution: 5}).translate([0,10,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 288.0000000000001))]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2b.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2b.scad deleted file mode 100755 index 14dd13b..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx2b.scad +++ /dev/null @@ -1,10 +0,0 @@ -// Note: The middle parameter in the range designation -// ('0.2' in this case) is the 'increment-by' value -// Warning: Depending on the 'increment-by' value, the -// real end value will be smaller than the given one. -for ( i = [0 : 0.2 : 5] ) -{ - rotate( i * 360 / 6, [1, 0, 0]) - translate([0, 10, 0]) - sphere(r = 1); -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx3.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx3.jscad deleted file mode 100755 index 2911cb3..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx3.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(0).rotateY(0).rotateZ(0).union([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(10).rotateY(20).rotateZ(300)]).union([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(200).rotateY(40).rotateZ(57)]).union([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(20).rotateY(88).rotateZ(57)]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx3.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx3.scad deleted file mode 100755 index ce6ba03..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx3.scad +++ /dev/null @@ -1,8 +0,0 @@ -for(i = [ [ 0, 0, 0], - [ 10, 20, 300], - [200, 40, 57], - [ 20, 88, 57] ]) -{ - rotate(i) - cube([100, 20, 20], center = true); -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx4.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx4.jscad deleted file mode 100755 index 5c6fb66..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx4.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CSG.cube({center: [0,0,0],radius: [25,7.5,5], resolution: 16}).translate([0,0,0]).union([CSG.cube({center: [0,0,0],radius: [25,7.5,5], resolution: 16}).translate([10,12,10])]).union([CSG.cube({center: [0,0,0],radius: [25,7.5,5], resolution: 16}).translate([20,24,20])]).union([CSG.cube({center: [0,0,0],radius: [25,7.5,5], resolution: 16}).translate([30,36,30])]).union([CSG.cube({center: [0,0,0],radius: [25,7.5,5], resolution: 16}).translate([20,48,40])]).union([CSG.cube({center: [0,0,0],radius: [25,7.5,5], resolution: 16}).translate([10,60,50])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx4.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx4.scad deleted file mode 100755 index 47c20de..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/forLoopEx4.scad +++ /dev/null @@ -1,10 +0,0 @@ -for(i = [ [ 0, 0, 0], - [10, 12, 10], - [20, 24, 20], - [30, 36, 30], - [20, 48, 40], - [10, 60, 50] ]) -{ - translate(i) - cube([50, 15, 10], center = true); -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/ifStatementEx1.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/ifStatementEx1.jscad deleted file mode 100755 index 78984ed..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/ifStatementEx1.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/conditional_and_iterator_functions/ifStatementEx1.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/ifStatementEx1.scad deleted file mode 100755 index 6b453a5..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/ifStatementEx1.scad +++ /dev/null @@ -1,8 +0,0 @@ -x=2; -y=1; -if (x > y) -{ - cube(size = 1, center = false); -} else { - cube(size = 2, center = true); -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx1.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx1.jscad deleted file mode 100755 index 76aca97..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx1.jscad +++ /dev/null @@ -1 +0,0 @@ -function main(){return CSG.sphere({center: [0,0,0], radius: 12, resolution: 30}).translate([5,0,0]).rotateX(0).rotateY(0).rotateZ(60).intersect([CSG.sphere({center: [0,0,0], radius: 12, resolution: 30}).translate([5,0,0]).rotateX(0).rotateY(0).rotateZ(120)]).intersect([CSG.sphere({center: [0,0,0], radius: 12, resolution: 30}).translate([5,0,0]).rotateX(0).rotateY(0).rotateZ(180)]).intersect([CSG.sphere({center: [0,0,0], radius: 12, resolution: 30}).translate([5,0,0]).rotateX(0).rotateY(0).rotateZ(240)]).intersect([CSG.sphere({center: [0,0,0], radius: 12, resolution: 30}).translate([5,0,0]).rotateX(0).rotateY(0).rotateZ(300)]).intersect([CSG.sphere({center: [0,0,0], radius: 12, resolution: 30}).translate([5,0,0]).rotateX(0).rotateY(0).rotateZ(360)]);}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx1.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx1.scad deleted file mode 100755 index 6155827..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx1.scad +++ /dev/null @@ -1,8 +0,0 @@ -intersection_for(n = [1 : 6]) -{ - rotate([0, 0, n * 60]) - { - translate([5,0,0]) - sphere(r=12); - } -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx2.jscad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx2.jscad deleted file mode 100755 index 3b27e36..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx2.jscad +++ /dev/null @@ -1 +0,0 @@ -function main(){return CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(0).rotateY(0).rotateZ(0).intersect([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(10).rotateY(20).rotateZ(300)]).intersect([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(200).rotateY(40).rotateZ(57)]).intersect([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(20).rotateY(88).rotateZ(57)]);}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx2.scad b/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx2.scad deleted file mode 100755 index 5e11645..0000000 --- a/packages/scad-deserializer/tests/conditional_and_iterator_functions/intersectionForLoopEx2.scad +++ /dev/null @@ -1,8 +0,0 @@ -intersection_for(i = [ [ 0, 0, 0], - [ 10, 20, 300], - [200, 40, 57], - [ 20, 88, 57] ]) -{ - rotate(i) - cube([100, 20, 20], center = true); -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples.js b/packages/scad-deserializer/tests/examples.js deleted file mode 100755 index 1c73f28..0000000 --- a/packages/scad-deserializer/tests/examples.js +++ /dev/null @@ -1,37 +0,0 @@ -const fs = require('fs') -const assert = require('assert') -const parser = require('../src/parser') - -function check (testFileName) { - var test = fs.readFileSync('examples/' + testFileName + '.scad', 'utf8') - var expected = fs.readFileSync('examples/' + testFileName + '.jscad', 'utf8').replace(/\n/g, '') - var actual = parser.parse(test).lines.join('').replace(/\n/g, '') - // assert.equal(actual, expected, console.log("\nExpected:\n" + expected + "\n\nActual:\n" + actual + "\n")) - assert.equal(actual, expected) -} - -exports['test example001'] = function () { check('example001'); } -exports['test example002'] = function () { check('example002'); } -exports['test example003'] = function () { check('example003'); } -exports['test example004'] = function () { check('example004'); } -exports['test example005'] = function () { check('example005'); } -exports['test example006'] = function () { check('example006'); } -// exports["test example007"] = function() { check("example007"); } -// exports["test example008"] = function() { check("example008"); } -// exports["test example009"] = function() { check("example009"); } -// exports["test example010"] = function() { check("example010"); } -exports['test example011'] = function () { check('example011'); } -// exports["test example012"] = function() { check("example012"); } -// exports["test example013"] = function() { check("example013"); } -exports['test example014'] = function () { check('example014'); } -// exports["test example015"] = function() { check("example015"); } -// exports["test example016"] = function() { check("example016"); } -// exports["test example017"] = function() { check("example017"); } -exports['test example018'] = function () { check('example018'); } -exports['test example019'] = function () { check('example019'); } -// exports["test example020"] = function() { check("example020"); } -// exports["test example021"] = function() { check("example021"); } -// exports["test example022"] = function() { check("example022"); } -// exports["test example023"] = function() { check("example023"); } - -if (module === require.main) require('test').run(exports) diff --git a/packages/scad-deserializer/tests/examples/example001.jscad b/packages/scad-deserializer/tests/examples/example001.jscad deleted file mode 100755 index 62b9210..0000000 --- a/packages/scad-deserializer/tests/examples/example001.jscad +++ /dev/null @@ -1,7 +0,0 @@ -function main(){ - - -return CSG.sphere({center: [0,0,0], radius: 25, resolution: 30}).subtract([CSG.cylinder({start: [0,0,-31.25], end: [0,0,31.25],radiusStart: 12.5, radiusEnd: 12.5, resolution: 30}).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 90)), -CSG.cylinder({start: [0,0,-31.25], end: [0,0,31.25],radiusStart: 12.5, radiusEnd: 12.5, resolution: 30}).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 90)), -CSG.cylinder({start: [0,0,-31.25], end: [0,0,31.25],radiusStart: 12.5, radiusEnd: 12.5, resolution: 30}).transform(CSG.Matrix4x4.rotation([0,0,0], [0,1,0], 90))]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example001.scad b/packages/scad-deserializer/tests/examples/example001.scad deleted file mode 100755 index 50bf8ff..0000000 --- a/packages/scad-deserializer/tests/examples/example001.scad +++ /dev/null @@ -1,26 +0,0 @@ - -module example001() -{ - 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); -} - -example001(); - diff --git a/packages/scad-deserializer/tests/examples/example002.jscad b/packages/scad-deserializer/tests/examples/example002.jscad deleted file mode 100755 index f9f7d72..0000000 --- a/packages/scad-deserializer/tests/examples/example002.jscad +++ /dev/null @@ -1,6 +0,0 @@ -function main(){ - - -return CSG.cube({center: [0,0,0],radius: [15,15,15], resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [7.5,7.5,25], resolution: 16}).translate([0,0,-25])]).subtract([CSG.cube({center: [0,0,0],radius: [25,5,5], resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [5,25,5], resolution: 16}), -CSG.cube({center: [0,0,0],radius: [5,5,25], resolution: 16})])]).intersect([CSG.cylinder({start: [0,0,-25], end: [0,0,25],radiusStart: 20, radiusEnd: 5, resolution: 30}).translate([0,0,5])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example002.scad b/packages/scad-deserializer/tests/examples/example002.scad deleted file mode 100755 index 6c4587f..0000000 --- a/packages/scad-deserializer/tests/examples/example002.scad +++ /dev/null @@ -1,23 +0,0 @@ - -module example002() -{ - intersection() { - difference() { - union() { - cube([30, 30, 30], center = true); - translate([0, 0, -25]) - cube([15, 15, 50], center = true); - } - union() { - cube([50, 10, 10], center = true); - cube([10, 50, 10], center = true); - cube([10, 10, 50], center = true); - } - } - translate([0, 0, 5]) - cylinder(h = 50, r1 = 20, r2 = 5, center = true); - } -} - -example002(); - diff --git a/packages/scad-deserializer/tests/examples/example003.jscad b/packages/scad-deserializer/tests/examples/example003.jscad deleted file mode 100755 index bc3191e..0000000 --- a/packages/scad-deserializer/tests/examples/example003.jscad +++ /dev/null @@ -1,8 +0,0 @@ -function main(){ - - -return CSG.cube({center: [0,0,0],radius: [15,15,15], resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [20,7.5,7.5], resolution: 16}), -CSG.cube({center: [0,0,0],radius: [7.5,20,7.5], resolution: 16}), -CSG.cube({center: [0,0,0],radius: [7.5,7.5,20], resolution: 16})]).subtract([CSG.cube({center: [0,0,0],radius: [25,5,5], resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [5,25,5], resolution: 16}), -CSG.cube({center: [0,0,0],radius: [5,5,25], resolution: 16})])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example003.scad b/packages/scad-deserializer/tests/examples/example003.scad deleted file mode 100755 index 531b3b4..0000000 --- a/packages/scad-deserializer/tests/examples/example003.scad +++ /dev/null @@ -1,20 +0,0 @@ - -module example003() -{ - difference() { - union() { - cube([30, 30, 30], center = true); - cube([40, 15, 15], center = true); - cube([15, 40, 15], center = true); - cube([15, 15, 40], center = true); - } - union() { - cube([50, 10, 10], center = true); - cube([10, 50, 10], center = true); - cube([10, 10, 50], center = true); - } - } -} - -example003(); - diff --git a/packages/scad-deserializer/tests/examples/example004.jscad b/packages/scad-deserializer/tests/examples/example004.jscad deleted file mode 100755 index cbcdab3..0000000 --- a/packages/scad-deserializer/tests/examples/example004.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CSG.cube({center: [0,0,0],radius: [15,15,15], resolution: 16}).subtract([CSG.sphere({center: [0,0,0], radius: 20, resolution: 30})]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example004.scad b/packages/scad-deserializer/tests/examples/example004.scad deleted file mode 100755 index 9cfc4f6..0000000 --- a/packages/scad-deserializer/tests/examples/example004.scad +++ /dev/null @@ -1,11 +0,0 @@ - -module example004() -{ - difference() { - cube(30, center = true); - sphere(20); - } -} - -example004(); - diff --git a/packages/scad-deserializer/tests/examples/example005.jscad b/packages/scad-deserializer/tests/examples/example005.jscad deleted file mode 100755 index 5c7e181..0000000 --- a/packages/scad-deserializer/tests/examples/example005.jscad +++ /dev/null @@ -1,6 +0,0 @@ -function main(){ - - -return CSG.cylinder({start: [0,0,0], end: [0,0,50],radiusStart: 100, radiusEnd: 100, resolution: 30}).subtract([CSG.cylinder({start: [0,0,0], end: [0,0,50],radiusStart: 80, radiusEnd: 80, resolution: 30}).translate([0,0,10]), -CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).translate([100,0,35])]).translate([0,0,-120]).union([CSG.cylinder({start: [0,0,0], end: [0,0,200],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([0,80,0]).union([CSG.cylinder({start: [0,0,0], end: [0,0,200],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([69.28203230275508,40.00000000000001,0])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,200],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([69.2820323027551,-39.999999999999986,0])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,200],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([9.796850830579018e-15,-80,0])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,200],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-69.28203230275507,-40.000000000000036,0])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,200],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-69.28203230275508,40.00000000000001,0])]).translate([0,0,-120]),CSG.cylinder({start: [0,0,0], end: [0,0,80],radiusStart: 120, radiusEnd: 0, resolution: 30}).translate([0,0,200]).translate([0,0,-120])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example005.scad b/packages/scad-deserializer/tests/examples/example005.scad deleted file mode 100755 index 08f0780..0000000 --- a/packages/scad-deserializer/tests/examples/example005.scad +++ /dev/null @@ -1,20 +0,0 @@ - -module example005() -{ - translate([0, 0, -120]) { - difference() { - cylinder(h = 50, r = 100); - translate([0, 0, 10]) cylinder(h = 50, r = 80); - translate([100, 0, 35]) cube(50, center = true); - } - for (i = [0:5]) { - echo(360*i/6, sin(360*i/6)*80, cos(360*i/6)*80); - translate([sin(360*i/6)*80, cos(360*i/6)*80, 0 ]) - cylinder(h = 200, r=10); - } - translate([0, 0, 200]) - cylinder(h = 80, r1 = 120, r2 = 0); - } -} - -example005(); diff --git a/packages/scad-deserializer/tests/examples/example006.jscad b/packages/scad-deserializer/tests/examples/example006.jscad deleted file mode 100755 index 9006452..0000000 --- a/packages/scad-deserializer/tests/examples/example006.jscad +++ /dev/null @@ -1,30 +0,0 @@ -function main(){ - - -return CSG.cube({center: [0,0,0],radius: [50,50,50], resolution: 16}).subtract([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 0)).translate([50,50,0]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 90)).translate([-50,50,0])]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 180)).translate([-50,-50,0])]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 270)).translate([50,-50,0])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 90)).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 0)).translate([50,50,0]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 90)).translate([-50,50,0])]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 180)).translate([-50,-50,0])]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 270)).translate([50,-50,0])]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 90))]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 0)).translate([50,50,0]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 90)).translate([-50,50,0])]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 180)).translate([-50,-50,0])]).union([CSG.cube({center: [0,0,0],radius: [10,10,75], resolution: 16}).subtract([CSG.cylinder({start: [0,0,-40], end: [0,0,40],radiusStart: 10, radiusEnd: 10, resolution: 30}).translate([-10,-10,0]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,40]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-10,-10,-40])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 270)).translate([50,-50,0])]).transform(CSG.Matrix4x4.rotation([0,0,0], [0,1,0], 90))]), -CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([0,0,0]).translate([0,-50,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 0)).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 0)).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-20,0,-20]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([20,0,20])]).translate([0,-50,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 0)).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 90))]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-20,0,-25]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-20,0,0])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-20,0,25])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([20,0,-25])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([20,0,0])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([20,0,25])]).translate([0,-50,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 0)).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 180))]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([0,0,0]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-25,0,-25])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([25,0,-25])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-25,0,25])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([25,0,25])]).translate([0,-50,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 0)).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 270))]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-25,0,-25]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([0,0,0])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([25,0,25])]).translate([0,-50,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], 90)).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 0))]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-25,0,-25]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([25,0,-25])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([-25,0,25])]).union([CSG.sphere({center: [0,0,0], radius: 10, resolution: 30}).translate([25,0,25])]).translate([0,-50,0]).transform(CSG.Matrix4x4.rotation([0,0,0], [1,0,0], -90)).transform(CSG.Matrix4x4.rotation([0,0,0], [0,0,1], 0))])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example006.scad b/packages/scad-deserializer/tests/examples/example006.scad deleted file mode 100755 index 548339d..0000000 --- a/packages/scad-deserializer/tests/examples/example006.scad +++ /dev/null @@ -1,44 +0,0 @@ - -module example006() -{ - module edgeprofile() - { - render(convexity = 2) difference() { - cube([20, 20, 150], center = true); - translate([-10, -10, 0]) - cylinder(h = 80, r = 10, center = true); - translate([-10, -10, +40]) - sphere(r = 10); - translate([-10, -10, -40]) - sphere(r = 10); - } - } - - difference() - { - cube(100, center = true); - for (rot = [ [0, 0, 0], [1, 0, 0], [0, 1, 0] ]) { - rotate(90, rot) - for (p = [[+1, +1, 0], [-1, +1, 90], [-1, -1, 180], [+1, -1, 270]]) { - translate([ p[0]*50, p[1]*50, 0 ]) - rotate(p[2], [0, 0, 1]) - edgeprofile(); - } - } - for (i = [ - [ 0, 0, [ [0, 0] ] ], - [ 90, 0, [ [-20, -20], [+20, +20] ] ], - [ 180, 0, [ [-20, -25], [-20, 0], [-20, +25], [+20, -25], [+20, 0], [+20, +25] ] ], - [ 270, 0, [ [0, 0], [-25, -25], [+25, -25], [-25, +25], [+25, +25] ] ], - [ 0, 90, [ [-25, -25], [0, 0], [+25, +25] ] ], - [ 0, -90, [ [-25, -25], [+25, -25], [-25, +25], [+25, +25] ] ] - ]) { - rotate(i[0], [0, 0, 1]) rotate(i[1], [1, 0, 0]) translate([0, -50, 0]) - for (j = i[2]) - translate([j[0], 0, j[1]]) sphere(10); - } - } -} - -example006(); - diff --git a/packages/scad-deserializer/tests/examples/example007.dxf b/packages/scad-deserializer/tests/examples/example007.dxf deleted file mode 100755 index 70e2bf3..0000000 --- a/packages/scad-deserializer/tests/examples/example007.dxf +++ /dev/null @@ -1,2410 +0,0 @@ -999 -dxflib 2.0.4.8 - 0 -SECTION - 2 -HEADER - 9 -$ACADVER - 1 -AC1015 - 9 -$HANDSEED - 5 -FFFF - 9 -$DIMASZ - 40 -2.5 - 9 -$DIMGAP - 40 -0.625 - 9 -$INSUNITS - 70 -4 - 9 -$DIMEXO - 40 -0.625 - 9 -$DIMTXT - 40 -2.5 - 9 -$DIMSTYLE - 2 -Standard - 9 -$PLIMMIN - 10 -0.0 - 20 -0.0 - 9 -$PLIMMAX - 10 -210.0 - 20 -297.0 - 9 -$DIMEXE - 40 -1.25 - 0 -ENDSEC - 0 -SECTION - 2 -TABLES - 0 -TABLE - 2 -VPORT - 5 -8 -100 -AcDbSymbolTable - 70 -1 - 0 -VPORT - 5 -30 -100 -AcDbSymbolTableRecord -100 -AcDbViewportTableRecord - 2 -*Active - 70 -0 - 10 -0.0 - 20 -0.0 - 11 -1.0 - 21 -1.0 - 12 -286.3055555555554861 - 22 -148.5 - 13 -0.0 - 23 -0.0 - 14 -10.0 - 24 -10.0 - 15 -10.0 - 25 -10.0 - 16 -0.0 - 26 -0.0 - 36 -1.0 - 17 -0.0 - 27 -0.0 - 37 -0.0 - 40 -297.0 - 41 -1.92798353909465 - 42 -50.0 - 43 -0.0 - 44 -0.0 - 50 -0.0 - 51 -0.0 - 71 -0 - 72 -100 - 73 -1 - 74 -3 - 75 -1 - 76 -1 - 77 -0 - 78 -0 -281 -0 - 65 -1 -110 -0.0 -120 -0.0 -130 -0.0 -111 -1.0 -121 -0.0 -131 -0.0 -112 -0.0 -122 -1.0 -132 -0.0 - 79 -0 -146 -0.0 - 0 -ENDTAB - 0 -TABLE - 2 -LTYPE - 5 -5 -100 -AcDbSymbolTable - 70 -21 - 0 -LTYPE - 5 -14 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -ByBlock - 70 -0 - 3 - - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -15 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -ByLayer - 70 -0 - 3 - - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -16 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CONTINUOUS - 70 -0 - 3 -Solid line - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -31 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOT - 70 -0 - 3 -Dot . . . . . . . . . . . . . . . . . . . . . . - 72 -65 - 73 -2 - 40 -6.3499999999999996 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -32 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOT2 - 70 -0 - 3 -Dot (.5x) ..................................... - 72 -65 - 73 -2 - 40 -3.1749999999999998 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -33 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOTX2 - 70 -0 - 3 -Dot (2x) . . . . . . . . . . . . . - 72 -65 - 73 -2 - 40 -12.6999999999999993 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -34 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHED - 70 -0 - 3 -Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ - 72 -65 - 73 -2 - 40 -19.0500000000000007 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -35 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHED2 - 70 -0 - 3 -Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - 72 -65 - 73 -2 - 40 -9.5250000000000004 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -36 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHEDX2 - 70 -0 - 3 -Dashed (2x) ____ ____ ____ ____ ____ ___ - 72 -65 - 73 -2 - 40 -38.1000000000000014 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -37 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOT - 70 -0 - 3 -Dash dot __ . __ . __ . __ . __ . __ . __ . __ - 72 -65 - 73 -4 - 40 -25.3999999999999986 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -38 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOT2 - 70 -0 - 3 -Dash dot (.5x) _._._._._._._._._._._._._._._. - 72 -65 - 73 -4 - 40 -12.6999999999999993 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -39 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOTX2 - 70 -0 - 3 -Dash dot (2x) ____ . ____ . ____ . ___ - 72 -65 - 73 -4 - 40 -50.7999999999999972 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -3A -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDE - 70 -0 - 3 -Divide ____ . . ____ . . ____ . . ____ . . ____ - 72 -65 - 73 -6 - 40 -31.75 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -3B -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDE2 - 70 -0 - 3 -Divide (.5x) __..__..__..__..__..__..__..__.._ - 72 -65 - 73 -6 - 40 -15.875 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -3C -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDEX2 - 70 -0 - 3 -Divide (2x) ________ . . ________ . . _ - 72 -65 - 73 -6 - 40 -63.5 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -3D -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTER - 70 -0 - 3 -Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ - 72 -65 - 73 -4 - 40 -50.7999999999999972 - 49 -31.75 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -6.3499999999999996 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -3E -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTER2 - 70 -0 - 3 -Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ - 72 -65 - 73 -4 - 40 -28.5749999999999993 - 49 -19.0500000000000007 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -3.1749999999999998 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -3F -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTERX2 - 70 -0 - 3 -Center (2x) ________ __ ________ __ _____ - 72 -65 - 73 -4 - 40 -101.5999999999999943 - 49 -63.5 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -12.6999999999999993 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -40 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDER - 70 -0 - 3 -Border __ __ . __ __ . __ __ . __ __ . __ __ . - 72 -65 - 73 -6 - 40 -44.4500000000000028 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -41 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDER2 - 70 -0 - 3 -Border (.5x) __.__.__.__.__.__.__.__.__.__.__. - 72 -65 - 73 -6 - 40 -22.2250000000000014 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -42 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDERX2 - 70 -0 - 3 -Border (2x) ____ ____ . ____ ____ . ___ - 72 -65 - 73 -6 - 40 -88.9000000000000057 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -ENDTAB - 0 -TABLE - 2 -LAYER - 5 -2 -100 -AcDbSymbolTable - 70 -4 - 0 -LAYER - 5 -10 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -0 - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -43 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -cutout1 - 70 -0 - 62 -6 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -44 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -cutout2 - 70 -0 - 62 -5 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -45 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -dorn - 70 -0 - 62 -3 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -ENDTAB - 0 -TABLE - 2 -STYLE - 5 -3 -100 -AcDbSymbolTable - 70 -1 - 0 -STYLE - 5 -11 -100 -AcDbSymbolTableRecord -100 -AcDbTextStyleTableRecord - 2 -Standard - 70 -0 - 40 -0.0 - 41 -0.75 - 50 -0.0 - 71 -0 - 42 -2.5 - 3 -txt - 4 - - 0 -ENDTAB - 0 -TABLE - 2 -VIEW - 5 -6 -100 -AcDbSymbolTable - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -UCS - 5 -7 -100 -AcDbSymbolTable - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -APPID - 5 -9 -100 -AcDbSymbolTable - 70 -1 - 0 -APPID - 5 -12 -100 -AcDbSymbolTableRecord -100 -AcDbRegAppTableRecord - 2 -ACAD - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -DIMSTYLE - 5 -A -100 -AcDbSymbolTable - 70 -1 -100 -AcDbDimStyleTable - 71 -0 - 0 -DIMSTYLE -105 -27 -100 -AcDbSymbolTableRecord -100 -AcDbDimStyleTableRecord - 2 -Standard - 41 -2.5 - 42 -0.625 - 43 -3.75 - 44 -1.25 - 70 -0 - 73 -0 - 74 -0 - 77 -1 - 78 -8 -140 -2.5 -141 -2.5 -143 -0.03937007874016 -147 -0.625 -171 -3 -172 -1 -271 -2 -272 -2 -274 -3 -278 -44 -283 -0 -284 -8 -340 -11 - 0 -ENDTAB - 0 -TABLE - 2 -BLOCK_RECORD - 5 -1 -100 -AcDbSymbolTable - 70 -1 - 0 -BLOCK_RECORD - 5 -1F -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Model_Space -340 -22 - 0 -BLOCK_RECORD - 5 -1B -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Paper_Space -340 -1E - 0 -BLOCK_RECORD - 5 -23 -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Paper_Space0 -340 -26 - 0 -ENDTAB - 0 -ENDSEC - 0 -SECTION - 2 -BLOCKS - 0 -BLOCK - 5 -20 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -*Model_Space - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Model_Space - 1 - - 0 -ENDBLK - 5 -21 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -1C -100 -AcDbEntity - 67 -1 - 8 -0 -100 -AcDbBlockBegin - 2 -*Paper_Space - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Paper_Space - 1 - - 0 -ENDBLK - 5 -1D -100 -AcDbEntity - 67 -1 - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -24 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -*Paper_Space0 - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Paper_Space0 - 1 - - 0 -ENDBLK - 5 -25 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -ENDSEC - 0 -SECTION - 2 -ENTITIES - 0 -LINE - 5 -46 -100 -AcDbEntity -100 -AcDbLine - 8 -cutout1 - 62 -256 -370 --1 - 6 -ByLayer - 10 -2.0 - 20 -31.0 - 30 -0.0 - 11 --2.0 - 21 -31.0 - 31 -0.0 - 0 -LINE - 5 -47 -100 -AcDbEntity -100 -AcDbLine - 8 -cutout1 - 62 -256 -370 --1 - 6 -ByLayer - 10 --2.0 - 20 -31.0 - 30 -0.0 - 11 --2.0 - 21 -3.0 - 31 -0.0 - 0 -LINE - 5 -48 -100 -AcDbEntity -100 -AcDbLine - 8 -cutout1 - 62 -256 -370 --1 - 6 -ByLayer - 10 --2.0 - 20 -3.0 - 30 -0.0 - 11 -2.0 - 21 -3.0 - 31 -0.0 - 0 -LINE - 5 -49 -100 -AcDbEntity -100 -AcDbLine - 8 -cutout1 - 62 -256 -370 --1 - 6 -ByLayer - 10 -2.0 - 20 -3.0 - 30 -0.0 - 11 -2.0 - 21 -31.0 - 31 -0.0 - 0 -LINE - 5 -4A -100 -AcDbEntity -100 -AcDbLine - 8 -cutout2 - 62 -256 -370 --1 - 6 -ByLayer - 10 -11.0 - 20 -31.0 - 30 -0.0 - 11 -11.0 - 21 -15.0 - 31 -0.0 - 0 -LINE - 5 -4B -100 -AcDbEntity -100 -AcDbLine - 8 -cutout2 - 62 -256 -370 --1 - 6 -ByLayer - 10 --11.0 - 20 -31.0 - 30 -0.0 - 11 -11.0 - 21 -31.0 - 31 -0.0 - 0 -LINE - 5 -4C -100 -AcDbEntity -100 -AcDbLine - 8 -cutout2 - 62 -256 -370 --1 - 6 -ByLayer - 10 -11.0 - 20 -15.0 - 30 -0.0 - 11 -6.0 - 21 -12.0 - 31 -0.0 - 0 -LINE - 5 -4D -100 -AcDbEntity -100 -AcDbLine - 8 -cutout2 - 62 -256 -370 --1 - 6 -ByLayer - 10 -6.0 - 20 -12.0 - 30 -0.0 - 11 -6.0 - 21 -3.0 - 31 -0.0 - 0 -LINE - 5 -4E -100 -AcDbEntity -100 -AcDbLine - 8 -cutout2 - 62 -256 -370 --1 - 6 -ByLayer - 10 -6.0 - 20 -3.0 - 30 -0.0 - 11 --6.0 - 21 -3.0 - 31 -0.0 - 0 -LINE - 5 -4F -100 -AcDbEntity -100 -AcDbLine - 8 -cutout2 - 62 -256 -370 --1 - 6 -ByLayer - 10 --6.0 - 20 -3.0 - 30 -0.0 - 11 --6.0 - 21 -12.0 - 31 -0.0 - 0 -LINE - 5 -50 -100 -AcDbEntity -100 -AcDbLine - 8 -cutout2 - 62 -256 -370 --1 - 6 -ByLayer - 10 --6.0 - 20 -12.0 - 30 -0.0 - 11 --11.0 - 21 -15.0 - 31 -0.0 - 0 -LINE - 5 -51 -100 -AcDbEntity -100 -AcDbLine - 8 -cutout2 - 62 -256 -370 --1 - 6 -ByLayer - 10 --11.0 - 20 -31.0 - 30 -0.0 - 11 --11.0 - 21 -15.0 - 31 -0.0 - 0 -LINE - 5 -52 -100 -AcDbEntity -100 -AcDbLine - 8 -dorn - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -30.0 - 30 -0.0 - 11 -8.0 - 21 -15.0 - 31 -0.0 - 0 -LINE - 5 -53 -100 -AcDbEntity -100 -AcDbLine - 8 -dorn - 62 -256 -370 --1 - 6 -ByLayer - 10 -8.0 - 20 -15.0 - 30 -0.0 - 11 -5.0 - 21 -12.0 - 31 -0.0 - 0 -LINE - 5 -54 -100 -AcDbEntity -100 -AcDbLine - 8 -dorn - 62 -256 -370 --1 - 6 -ByLayer - 10 -5.0 - 20 -12.0 - 30 -0.0 - 11 -5.0 - 21 -2.0 - 31 -0.0 - 0 -LINE - 5 -55 -100 -AcDbEntity -100 -AcDbLine - 8 -dorn - 62 -256 -370 --1 - 6 -ByLayer - 10 -5.0 - 20 -2.0 - 30 -0.0 - 11 -7.0 - 21 -2.0 - 31 -0.0 - 0 -LINE - 5 -56 -100 -AcDbEntity -100 -AcDbLine - 8 -dorn - 62 -256 -370 --1 - 6 -ByLayer - 10 -7.0 - 20 -2.0 - 30 -0.0 - 11 -7.0 - 21 -11.0 - 31 -0.0 - 0 -LINE - 5 -57 -100 -AcDbEntity -100 -AcDbLine - 8 -dorn - 62 -256 -370 --1 - 6 -ByLayer - 10 -7.0 - 20 -11.0 - 30 -0.0 - 11 -11.0 - 21 -11.0 - 31 -0.0 - 0 -LINE - 5 -58 -100 -AcDbEntity -100 -AcDbLine - 8 -dorn - 62 -256 -370 --1 - 6 -ByLayer - 10 -11.0 - 20 -11.0 - 30 -0.0 - 11 -11.0 - 21 -0.0 - 31 -0.0 - 0 -LINE - 5 -59 -100 -AcDbEntity -100 -AcDbLine - 8 -dorn - 62 -256 -370 --1 - 6 -ByLayer - 10 -11.0 - 20 -0.0 - 30 -0.0 - 11 -0.0 - 21 -0.0 - 31 -0.0 - 0 -ENDSEC - 0 -SECTION - 2 -OBJECTS - 0 -DICTIONARY - 5 -C -100 -AcDbDictionary -280 -0 -281 -1 - 3 -ACAD_GROUP -350 -D - 3 -ACAD_LAYOUT -350 -1A - 3 -ACAD_MLINESTYLE -350 -17 - 3 -ACAD_PLOTSETTINGS -350 -19 - 3 -ACAD_PLOTSTYLENAME -350 -E - 3 -AcDbVariableDictionary -350 -5A - 0 -DICTIONARY - 5 -D -100 -AcDbDictionary -280 -0 -281 -1 - 0 -ACDBDICTIONARYWDFLT - 5 -E -100 -AcDbDictionary -281 -1 - 3 -Normal -350 -F -100 -AcDbDictionaryWithDefault -340 -F - 0 -ACDBPLACEHOLDER - 5 -F - 0 -DICTIONARY - 5 -17 -100 -AcDbDictionary -280 -0 -281 -1 - 3 -Standard -350 -18 - 0 -MLINESTYLE - 5 -18 -100 -AcDbMlineStyle - 2 -STANDARD - 70 -0 - 3 - - 62 -256 - 51 -90.0 - 52 -90.0 - 71 -2 - 49 -0.5 - 62 -256 - 6 -BYLAYER - 49 --0.5 - 62 -256 - 6 -BYLAYER - 0 -DICTIONARY - 5 -19 -100 -AcDbDictionary -280 -0 -281 -1 - 0 -DICTIONARY - 5 -1A -100 -AcDbDictionary -281 -1 - 3 -Layout1 -350 -1E - 3 -Layout2 -350 -26 - 3 -Model -350 -22 - 0 -LAYOUT - 5 -1E -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -688 - 72 -0 - 73 -0 - 74 -5 - 7 - - 75 -16 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Layout1 - 70 -1 - 71 -1 - 10 -0.0 - 20 -0.0 - 11 -420.0 - 21 -297.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -100000000000000000000.0 - 24 -100000000000000000000.0 - 34 -100000000000000000000.0 - 15 --100000000000000000000.0 - 25 --100000000000000000000.0 - 35 --100000000000000000000.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -1B - 0 -LAYOUT - 5 -22 -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -1712 - 72 -0 - 73 -0 - 74 -0 - 7 - - 75 -0 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Model - 70 -1 - 71 -0 - 10 -0.0 - 20 -0.0 - 11 -12.0 - 21 -9.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -0.0 - 24 -0.0 - 34 -0.0 - 15 -0.0 - 25 -0.0 - 35 -0.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -1F - 0 -LAYOUT - 5 -26 -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -688 - 72 -0 - 73 -0 - 74 -5 - 7 - - 75 -16 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Layout2 - 70 -1 - 71 -2 - 10 -0.0 - 20 -0.0 - 11 -12.0 - 21 -9.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -0.0 - 24 -0.0 - 34 -0.0 - 15 -0.0 - 25 -0.0 - 35 -0.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -23 - 0 -DICTIONARY - 5 -5A -100 -AcDbDictionary -281 -1 - 3 -DIMASSOC -350 -5C - 3 -HIDETEXT -350 -5B - 0 -DICTIONARYVAR - 5 -5B -100 -DictionaryVariables -280 -0 - 1 -2 - 0 -DICTIONARYVAR - 5 -5C -100 -DictionaryVariables -280 -0 - 1 -1 - 0 -ENDSEC - 0 -EOF diff --git a/packages/scad-deserializer/tests/examples/example007.scad b/packages/scad-deserializer/tests/examples/example007.scad deleted file mode 100755 index 6a57a3b..0000000 --- a/packages/scad-deserializer/tests/examples/example007.scad +++ /dev/null @@ -1,67 +0,0 @@ - -module cutout() -{ - intersection() - { - rotate(90, [1, 0, 0]) - translate([0, 0, -50]) - linear_extrude(height = 100, convexity = 1) - import(file = "example007.dxf", layer = "cutout1"); - - rotate(90, [0, 0, 1]) - rotate(90, [1, 0, 0]) - translate([0, 0, -50]) - linear_extrude(height = 100, convexity = 2) - import(file = "example007.dxf", layer = "cutout2"); - } -} - -module clip() -{ - difference() { - // NB! We have to use the deprecated module here since the "dorn" - // layer contains an open polyline, which is not yet supported - // by the import() module. - rotate_extrude( - file = "example007.dxf", - layer="dorn", - convexity = 3); - for (r = [0, 90]) - rotate(r, [0, 0, 1]) - cutout(); - } -} - -module cutview() -{ - difference() - { - difference() - { - translate([0, 0, -10]) - clip(); - - rotate(20, [0, 0, 1]) - rotate(-20, [0, 1, 0]) - translate([18, 0, 0]) - cube(30, center = true); - } - - # render(convexity = 5) intersection() - { - translate([0, 0, -10]) - clip(); - - rotate(20, [0, 0, 1]) - rotate(-20, [0, 1, 0]) - translate([18, 0, 0]) - cube(30, center = true); - } - } -} - -translate([0, 0, -10]) - clip(); - -// cutview(); - diff --git a/packages/scad-deserializer/tests/examples/example008.dxf b/packages/scad-deserializer/tests/examples/example008.dxf deleted file mode 100755 index de63b6d..0000000 --- a/packages/scad-deserializer/tests/examples/example008.dxf +++ /dev/null @@ -1,3238 +0,0 @@ -999 -dxflib 2.0.4.8 - 0 -SECTION - 2 -HEADER - 9 -$ACADVER - 1 -AC1015 - 9 -$HANDSEED - 5 -FFFF - 9 -$DIMASZ - 40 -2.5 - 9 -$DIMGAP - 40 -0.625 - 9 -$DIMEXO - 40 -0.625 - 9 -$INSUNITS - 70 -4 - 9 -$DIMTXT - 40 -2.5 - 9 -$PLIMMAX - 10 -210.0 - 20 -297.0 - 9 -$PLIMMIN - 10 -0.0 - 20 -0.0 - 9 -$DIMEXE - 40 -1.25 - 0 -ENDSEC - 0 -SECTION - 2 -TABLES - 0 -TABLE - 2 -VPORT - 5 -8 -100 -AcDbSymbolTable - 70 -1 - 0 -VPORT - 5 -30 -100 -AcDbSymbolTableRecord -100 -AcDbViewportTableRecord - 2 -*Active - 70 -0 - 10 -0.0 - 20 -0.0 - 11 -1.0 - 21 -1.0 - 12 -286.3055555555554861 - 22 -148.5 - 13 -0.0 - 23 -0.0 - 14 -10.0 - 24 -10.0 - 15 -10.0 - 25 -10.0 - 16 -0.0 - 26 -0.0 - 36 -1.0 - 17 -0.0 - 27 -0.0 - 37 -0.0 - 40 -297.0 - 41 -1.92798353909465 - 42 -50.0 - 43 -0.0 - 44 -0.0 - 50 -0.0 - 51 -0.0 - 71 -0 - 72 -100 - 73 -1 - 74 -3 - 75 -1 - 76 -1 - 77 -0 - 78 -0 -281 -0 - 65 -1 -110 -0.0 -120 -0.0 -130 -0.0 -111 -1.0 -121 -0.0 -131 -0.0 -112 -0.0 -122 -1.0 -132 -0.0 - 79 -0 -146 -0.0 - 0 -ENDTAB - 0 -TABLE - 2 -LTYPE - 5 -5 -100 -AcDbSymbolTable - 70 -21 - 0 -LTYPE - 5 -14 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -ByBlock - 70 -0 - 3 - - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -15 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -ByLayer - 70 -0 - 3 - - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -16 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CONTINUOUS - 70 -0 - 3 -Solid line - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -31 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOT - 70 -0 - 3 -Dot . . . . . . . . . . . . . . . . . . . . . . - 72 -65 - 73 -2 - 40 -6.3499999999999996 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -32 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOT2 - 70 -0 - 3 -Dot (.5x) ..................................... - 72 -65 - 73 -2 - 40 -3.1749999999999998 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -33 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOTX2 - 70 -0 - 3 -Dot (2x) . . . . . . . . . . . . . - 72 -65 - 73 -2 - 40 -12.6999999999999993 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -34 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHED - 70 -0 - 3 -Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ - 72 -65 - 73 -2 - 40 -19.0500000000000007 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -35 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHED2 - 70 -0 - 3 -Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - 72 -65 - 73 -2 - 40 -9.5250000000000004 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -36 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHEDX2 - 70 -0 - 3 -Dashed (2x) ____ ____ ____ ____ ____ ___ - 72 -65 - 73 -2 - 40 -38.1000000000000014 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -37 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOT - 70 -0 - 3 -Dash dot __ . __ . __ . __ . __ . __ . __ . __ - 72 -65 - 73 -4 - 40 -25.3999999999999986 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -38 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOT2 - 70 -0 - 3 -Dash dot (.5x) _._._._._._._._._._._._._._._. - 72 -65 - 73 -4 - 40 -12.6999999999999993 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -39 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOTX2 - 70 -0 - 3 -Dash dot (2x) ____ . ____ . ____ . ___ - 72 -65 - 73 -4 - 40 -50.7999999999999972 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -3A -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDE - 70 -0 - 3 -Divide ____ . . ____ . . ____ . . ____ . . ____ - 72 -65 - 73 -6 - 40 -31.75 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -3B -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDE2 - 70 -0 - 3 -Divide (.5x) __..__..__..__..__..__..__..__.._ - 72 -65 - 73 -6 - 40 -15.875 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -3C -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDEX2 - 70 -0 - 3 -Divide (2x) ________ . . ________ . . _ - 72 -65 - 73 -6 - 40 -63.5 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -3D -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTER - 70 -0 - 3 -Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ - 72 -65 - 73 -4 - 40 -50.7999999999999972 - 49 -31.75 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -6.3499999999999996 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -3E -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTER2 - 70 -0 - 3 -Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ - 72 -65 - 73 -4 - 40 -28.5749999999999993 - 49 -19.0500000000000007 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -3.1749999999999998 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -3F -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTERX2 - 70 -0 - 3 -Center (2x) ________ __ ________ __ _____ - 72 -65 - 73 -4 - 40 -101.5999999999999943 - 49 -63.5 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -12.6999999999999993 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -40 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDER - 70 -0 - 3 -Border __ __ . __ __ . __ __ . __ __ . __ __ . - 72 -65 - 73 -6 - 40 -44.4500000000000028 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -41 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDER2 - 70 -0 - 3 -Border (.5x) __.__.__.__.__.__.__.__.__.__.__. - 72 -65 - 73 -6 - 40 -22.2250000000000014 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -42 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDERX2 - 70 -0 - 3 -Border (2x) ____ ____ . ____ ____ . ___ - 72 -65 - 73 -6 - 40 -88.9000000000000057 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -ENDTAB - 0 -TABLE - 2 -LAYER - 5 -2 -100 -AcDbSymbolTable - 70 -5 - 0 -LAYER - 5 -10 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -0 - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -43 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -G - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -44 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -E - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -45 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -B - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -46 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -X - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -ENDTAB - 0 -TABLE - 2 -STYLE - 5 -3 -100 -AcDbSymbolTable - 70 -1 - 0 -STYLE - 5 -11 -100 -AcDbSymbolTableRecord -100 -AcDbTextStyleTableRecord - 2 -Standard - 70 -0 - 40 -0.0 - 41 -0.75 - 50 -0.0 - 71 -0 - 42 -2.5 - 3 -txt - 4 - - 0 -ENDTAB - 0 -TABLE - 2 -VIEW - 5 -6 -100 -AcDbSymbolTable - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -UCS - 5 -7 -100 -AcDbSymbolTable - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -APPID - 5 -9 -100 -AcDbSymbolTable - 70 -1 - 0 -APPID - 5 -12 -100 -AcDbSymbolTableRecord -100 -AcDbRegAppTableRecord - 2 -ACAD - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -DIMSTYLE - 5 -A -100 -AcDbSymbolTable - 70 -1 -100 -AcDbDimStyleTable - 71 -0 - 0 -DIMSTYLE -105 -27 -100 -AcDbSymbolTableRecord -100 -AcDbDimStyleTableRecord - 2 -Standard - 41 -2.5 - 42 -0.625 - 43 -3.75 - 44 -1.25 - 70 -0 - 73 -0 - 74 -0 - 77 -1 - 78 -8 -140 -2.5 -141 -2.5 -143 -0.03937007874016 -147 -0.625 -171 -3 -172 -1 -271 -2 -272 -2 -274 -3 -278 -44 -283 -0 -284 -8 -340 -11 - 0 -ENDTAB - 0 -TABLE - 2 -BLOCK_RECORD - 5 -1 -100 -AcDbSymbolTable - 70 -1 - 0 -BLOCK_RECORD - 5 -1F -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Model_Space -340 -22 - 0 -BLOCK_RECORD - 5 -1B -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Paper_Space -340 -1E - 0 -BLOCK_RECORD - 5 -23 -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Paper_Space0 -340 -26 - 0 -ENDTAB - 0 -ENDSEC - 0 -SECTION - 2 -BLOCKS - 0 -BLOCK - 5 -20 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -*Model_Space - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Model_Space - 1 - - 0 -ENDBLK - 5 -21 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -1C -100 -AcDbEntity - 67 -1 - 8 -0 -100 -AcDbBlockBegin - 2 -*Paper_Space - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Paper_Space - 1 - - 0 -ENDBLK - 5 -1D -100 -AcDbEntity - 67 -1 - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -24 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -*Paper_Space0 - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Paper_Space0 - 1 - - 0 -ENDBLK - 5 -25 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -ENDSEC - 0 -SECTION - 2 -ENTITIES - 0 -LINE - 5 -47 -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -20.0 - 20 -30.0 - 30 -0.0 - 11 -20.0 - 21 -20.0 - 31 -0.0 - 0 -LINE - 5 -48 -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -20.0 - 20 -20.0 - 30 -0.0 - 11 -40.0 - 21 -20.0 - 31 -0.0 - 0 -LINE - 5 -49 -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -40.0 - 20 -20.0 - 30 -0.0 - 11 -40.0 - 21 -10.0 - 31 -0.0 - 0 -LINE - 5 -4A -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -40.0 - 20 -10.0 - 30 -0.0 - 11 -10.0 - 21 -10.0 - 31 -0.0 - 0 -LINE - 5 -4B -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -10.0 - 20 -10.0 - 30 -0.0 - 11 -10.0 - 21 -40.0 - 31 -0.0 - 0 -LINE - 5 -4C -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -10.0 - 20 -40.0 - 30 -0.0 - 11 -50.0 - 21 -40.0 - 31 -0.0 - 0 -LINE - 5 -4D -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -50.0 - 20 -40.0 - 30 -0.0 - 11 -50.0 - 21 -50.0 - 31 -0.0 - 0 -LINE - 5 -4E -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -100.0 - 30 -0.0 - 11 -50.0 - 21 -100.0 - 31 -0.0 - 0 -LINE - 5 -4F -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -50.0 - 20 -100.0 - 30 -0.0 - 11 -50.0 - 21 -110.0 - 31 -0.0 - 0 -LINE - 5 -50 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -50.0 - 20 -110.0 - 30 -0.0 - 11 -10.0 - 21 -110.0 - 31 -0.0 - 0 -LINE - 5 -51 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -10.0 - 20 -110.0 - 30 -0.0 - 11 -10.0 - 21 -120.0 - 31 -0.0 - 0 -LINE - 5 -52 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -10.0 - 20 -120.0 - 30 -0.0 - 11 -30.0 - 21 -120.0 - 31 -0.0 - 0 -LINE - 5 -53 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -30.0 - 20 -120.0 - 30 -0.0 - 11 -30.0 - 21 -130.0 - 31 -0.0 - 0 -LINE - 5 -54 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -30.0 - 20 -130.0 - 30 -0.0 - 11 -10.0 - 21 -130.0 - 31 -0.0 - 0 -LINE - 5 -55 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -10.0 - 20 -130.0 - 30 -0.0 - 11 -10.0 - 21 -140.0 - 31 -0.0 - 0 -LINE - 5 -56 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -10.0 - 20 -140.0 - 30 -0.0 - 11 -50.0 - 21 -140.0 - 31 -0.0 - 0 -LINE - 5 -57 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -50.0 - 20 -140.0 - 30 -0.0 - 11 -50.0 - 21 -150.0 - 31 -0.0 - 0 -LINE - 5 -58 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -50.0 - 20 -150.0 - 30 -0.0 - 11 -0.0 - 21 -150.0 - 31 -0.0 - 0 -LINE - 5 -59 -100 -AcDbEntity -100 -AcDbLine - 8 -E - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -150.0 - 30 -0.0 - 11 -0.0 - 21 -100.0 - 31 -0.0 - 0 -LINE - 5 -5A -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -100.0 - 20 -100.0 - 30 -0.0 - 11 -100.0 - 21 -150.0 - 31 -0.0 - 0 -LINE - 5 -5B -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -110.0 - 20 -140.0 - 30 -0.0 - 11 -140.0 - 21 -140.0 - 31 -0.0 - 0 -LINE - 5 -5C -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -140.0 - 20 -140.0 - 30 -0.0 - 11 -140.0 - 21 -130.0 - 31 -0.0 - 0 -LINE - 5 -5D -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -140.0 - 20 -130.0 - 30 -0.0 - 11 -110.0 - 21 -130.0 - 31 -0.0 - 0 -LINE - 5 -5E -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -110.0 - 20 -130.0 - 30 -0.0 - 11 -110.0 - 21 -140.0 - 31 -0.0 - 0 -LINE - 5 -5F -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -110.0 - 20 -120.0 - 30 -0.0 - 11 -110.0 - 21 -110.0 - 31 -0.0 - 0 -LINE - 5 -60 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -110.0 - 20 -110.0 - 30 -0.0 - 11 -140.0 - 21 -110.0 - 31 -0.0 - 0 -LINE - 5 -61 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -140.0 - 20 -110.0 - 30 -0.0 - 11 -140.0 - 21 -120.0 - 31 -0.0 - 0 -LINE - 5 -62 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -140.0 - 20 -120.0 - 30 -0.0 - 11 -110.0 - 21 -120.0 - 31 -0.0 - 0 -LINE - 5 -63 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -150.0 - 20 -145.0 - 30 -0.0 - 11 -145.0 - 21 -150.0 - 31 -0.0 - 0 -LINE - 5 -64 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -150.0 - 20 -105.0 - 30 -0.0 - 11 -145.0 - 21 -100.0 - 31 -0.0 - 0 -LINE - 5 -65 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -150.0 - 20 -120.0 - 30 -0.0 - 11 -150.0 - 21 -105.0 - 31 -0.0 - 0 -LINE - 5 -66 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -145.0 - 20 -100.0 - 30 -0.0 - 11 -100.0 - 21 -100.0 - 31 -0.0 - 0 -LINE - 5 -67 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -100.0 - 20 -150.0 - 30 -0.0 - 11 -145.0 - 21 -150.0 - 31 -0.0 - 0 -LINE - 5 -68 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -150.0 - 20 -145.0 - 30 -0.0 - 11 -150.0 - 21 -130.0 - 31 -0.0 - 0 -LINE - 5 -69 -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -45.0 - 20 -30.0 - 30 -0.0 - 11 -20.0 - 21 -30.0 - 31 -0.0 - 0 -LINE - 5 -6A -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -50.0 - 20 -5.0 - 30 -0.0 - 11 -50.0 - 21 -25.0 - 31 -0.0 - 0 -LINE - 5 -6B -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -5.0 - 20 -0.0 - 30 -0.0 - 11 -45.0 - 21 -0.0 - 31 -0.0 - 0 -LINE - 5 -6C -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -45.0 - 30 -0.0 - 11 -0.0 - 21 -5.0 - 31 -0.0 - 0 -LINE - 5 -6D -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -50.0 - 20 -50.0 - 30 -0.0 - 11 -5.0 - 21 -50.0 - 31 -0.0 - 0 -LINE - 5 -6E -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -5.0 - 20 -50.0 - 30 -0.0 - 11 -0.0 - 21 -45.0 - 31 -0.0 - 0 -LINE - 5 -6F -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -5.0 - 30 -0.0 - 11 -5.0 - 21 -0.0 - 31 -0.0 - 0 -LINE - 5 -70 -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -45.0 - 20 -0.0 - 30 -0.0 - 11 -50.0 - 21 -5.0 - 31 -0.0 - 0 -LINE - 5 -71 -100 -AcDbEntity -100 -AcDbLine - 8 -G - 62 -256 -370 --1 - 6 -ByLayer - 10 -50.0 - 20 -25.0 - 30 -0.0 - 11 -45.0 - 21 -30.0 - 31 -0.0 - 0 -LINE - 5 -72 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -150.0 - 20 -130.0 - 30 -0.0 - 11 -145.0 - 21 -125.0 - 31 -0.0 - 0 -LINE - 5 -73 -100 -AcDbEntity -100 -AcDbLine - 8 -B - 62 -256 -370 --1 - 6 -ByLayer - 10 -145.0 - 20 -125.0 - 30 -0.0 - 11 -150.0 - 21 -120.0 - 31 -0.0 - 0 -LINE - 5 -74 -100 -AcDbEntity -100 -AcDbLine - 8 -X - 62 -256 -370 --1 - 6 -ByLayer - 10 -115.0 - 20 -35.0 - 30 -0.0 - 11 -115.0 - 21 -15.0 - 31 -0.0 - 0 -LINE - 5 -75 -100 -AcDbEntity -100 -AcDbLine - 8 -X - 62 -256 -370 --1 - 6 -ByLayer - 10 -115.0 - 20 -15.0 - 30 -0.0 - 11 -135.0 - 21 -15.0 - 31 -0.0 - 0 -LINE - 5 -76 -100 -AcDbEntity -100 -AcDbLine - 8 -X - 62 -256 -370 --1 - 6 -ByLayer - 10 -135.0 - 20 -15.0 - 30 -0.0 - 11 -135.0 - 21 -35.0 - 31 -0.0 - 0 -LINE - 5 -77 -100 -AcDbEntity -100 -AcDbLine - 8 -X - 62 -256 -370 --1 - 6 -ByLayer - 10 -135.0 - 20 -35.0 - 30 -0.0 - 11 -115.0 - 21 -35.0 - 31 -0.0 - 0 -ENDSEC - 0 -SECTION - 2 -OBJECTS - 0 -DICTIONARY - 5 -C -100 -AcDbDictionary -280 -0 -281 -1 - 3 -ACAD_GROUP -350 -D - 3 -ACAD_LAYOUT -350 -1A - 3 -ACAD_MLINESTYLE -350 -17 - 3 -ACAD_PLOTSETTINGS -350 -19 - 3 -ACAD_PLOTSTYLENAME -350 -E - 3 -AcDbVariableDictionary -350 -78 - 0 -DICTIONARY - 5 -D -100 -AcDbDictionary -280 -0 -281 -1 - 0 -ACDBDICTIONARYWDFLT - 5 -E -100 -AcDbDictionary -281 -1 - 3 -Normal -350 -F -100 -AcDbDictionaryWithDefault -340 -F - 0 -ACDBPLACEHOLDER - 5 -F - 0 -DICTIONARY - 5 -17 -100 -AcDbDictionary -280 -0 -281 -1 - 3 -Standard -350 -18 - 0 -MLINESTYLE - 5 -18 -100 -AcDbMlineStyle - 2 -STANDARD - 70 -0 - 3 - - 62 -256 - 51 -90.0 - 52 -90.0 - 71 -2 - 49 -0.5 - 62 -256 - 6 -BYLAYER - 49 --0.5 - 62 -256 - 6 -BYLAYER - 0 -DICTIONARY - 5 -19 -100 -AcDbDictionary -280 -0 -281 -1 - 0 -DICTIONARY - 5 -1A -100 -AcDbDictionary -281 -1 - 3 -Layout1 -350 -1E - 3 -Layout2 -350 -26 - 3 -Model -350 -22 - 0 -LAYOUT - 5 -1E -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -688 - 72 -0 - 73 -0 - 74 -5 - 7 - - 75 -16 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Layout1 - 70 -1 - 71 -1 - 10 -0.0 - 20 -0.0 - 11 -420.0 - 21 -297.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -100000000000000000000.0 - 24 -100000000000000000000.0 - 34 -100000000000000000000.0 - 15 --100000000000000000000.0 - 25 --100000000000000000000.0 - 35 --100000000000000000000.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -1B - 0 -LAYOUT - 5 -22 -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -1712 - 72 -0 - 73 -0 - 74 -0 - 7 - - 75 -0 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Model - 70 -1 - 71 -0 - 10 -0.0 - 20 -0.0 - 11 -12.0 - 21 -9.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -0.0 - 24 -0.0 - 34 -0.0 - 15 -0.0 - 25 -0.0 - 35 -0.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -1F - 0 -LAYOUT - 5 -26 -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -688 - 72 -0 - 73 -0 - 74 -5 - 7 - - 75 -16 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Layout2 - 70 -1 - 71 -2 - 10 -0.0 - 20 -0.0 - 11 -12.0 - 21 -9.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -0.0 - 24 -0.0 - 34 -0.0 - 15 -0.0 - 25 -0.0 - 35 -0.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -23 - 0 -DICTIONARY - 5 -78 -100 -AcDbDictionary -281 -1 - 3 -DIMASSOC -350 -7A - 3 -HIDETEXT -350 -79 - 0 -DICTIONARYVAR - 5 -79 -100 -DictionaryVariables -280 -0 - 1 -2 - 0 -DICTIONARYVAR - 5 -7A -100 -DictionaryVariables -280 -0 - 1 -1 - 0 -ENDSEC - 0 -EOF diff --git a/packages/scad-deserializer/tests/examples/example008.scad b/packages/scad-deserializer/tests/examples/example008.scad deleted file mode 100755 index 8372f6b..0000000 --- a/packages/scad-deserializer/tests/examples/example008.scad +++ /dev/null @@ -1,32 +0,0 @@ - -difference() -{ - intersection() - { - translate([ -25, -25, -25]) - linear_extrude(height = 50, convexity = 3) - import(file = "example008.dxf", layer = "G"); - - rotate(90, [1, 0, 0]) - translate([ -25, -125, -25]) - linear_extrude(height = 50, convexity = 3) - import(file = "example008.dxf", layer = "E"); - - rotate(90, [0, 1, 0]) - translate([ -125, -125, -25]) - linear_extrude(height = 50, convexity = 3) - import(file = "example008.dxf", layer = "B"); - } - - intersection() - { - translate([ -125, -25, -26]) - linear_extrude(height = 52, convexity = 1) - import(file = "example008.dxf", layer = "X"); - - rotate(90, [0, 1, 0]) - translate([ -125, -25, -26]) - linear_extrude(height = 52, convexity = 1) - import(file = "example008.dxf", layer = "X"); - } -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example009.dxf b/packages/scad-deserializer/tests/examples/example009.dxf deleted file mode 100755 index c9719d1..0000000 --- a/packages/scad-deserializer/tests/examples/example009.dxf +++ /dev/null @@ -1,3894 +0,0 @@ -999 -dxflib 2.0.4.8 - 0 -SECTION - 2 -HEADER - 9 -$ACADVER - 1 -AC1015 - 9 -$HANDSEED - 5 -FFFF - 9 -$DIMASZ - 40 -2.5 - 9 -$DIMGAP - 40 -0.625 - 9 -$DIMEXO - 40 -0.625 - 9 -$INSUNITS - 70 -4 - 9 -$DIMTXT - 40 -2.5 - 9 -$DIMSTYLE - 2 -Standard - 9 -$PLIMMAX - 10 -210.0 - 20 -297.0 - 9 -$PLIMMIN - 10 -0.0 - 20 -0.0 - 9 -$DIMEXE - 40 -1.25 - 0 -ENDSEC - 0 -SECTION - 2 -TABLES - 0 -TABLE - 2 -VPORT - 5 -8 -100 -AcDbSymbolTable - 70 -1 - 0 -VPORT - 5 -30 -100 -AcDbSymbolTableRecord -100 -AcDbViewportTableRecord - 2 -*Active - 70 -0 - 10 -0.0 - 20 -0.0 - 11 -1.0 - 21 -1.0 - 12 -286.3055555555554861 - 22 -148.5 - 13 -0.0 - 23 -0.0 - 14 -10.0 - 24 -10.0 - 15 -10.0 - 25 -10.0 - 16 -0.0 - 26 -0.0 - 36 -1.0 - 17 -0.0 - 27 -0.0 - 37 -0.0 - 40 -297.0 - 41 -1.92798353909465 - 42 -50.0 - 43 -0.0 - 44 -0.0 - 50 -0.0 - 51 -0.0 - 71 -0 - 72 -100 - 73 -1 - 74 -3 - 75 -1 - 76 -1 - 77 -0 - 78 -0 -281 -0 - 65 -1 -110 -0.0 -120 -0.0 -130 -0.0 -111 -1.0 -121 -0.0 -131 -0.0 -112 -0.0 -122 -1.0 -132 -0.0 - 79 -0 -146 -0.0 - 0 -ENDTAB - 0 -TABLE - 2 -LTYPE - 5 -5 -100 -AcDbSymbolTable - 70 -21 - 0 -LTYPE - 5 -14 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -ByBlock - 70 -0 - 3 - - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -15 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -ByLayer - 70 -0 - 3 - - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -16 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CONTINUOUS - 70 -0 - 3 -Solid line - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -31 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOT - 70 -0 - 3 -Dot . . . . . . . . . . . . . . . . . . . . . . - 72 -65 - 73 -2 - 40 -6.3499999999999996 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -32 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOT2 - 70 -0 - 3 -Dot (.5x) ..................................... - 72 -65 - 73 -2 - 40 -3.1749999999999998 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -33 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOTX2 - 70 -0 - 3 -Dot (2x) . . . . . . . . . . . . . - 72 -65 - 73 -2 - 40 -12.6999999999999993 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -34 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHED - 70 -0 - 3 -Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ - 72 -65 - 73 -2 - 40 -19.0500000000000007 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -35 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHED2 - 70 -0 - 3 -Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - 72 -65 - 73 -2 - 40 -9.5250000000000004 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -36 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHEDX2 - 70 -0 - 3 -Dashed (2x) ____ ____ ____ ____ ____ ___ - 72 -65 - 73 -2 - 40 -38.1000000000000014 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -37 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOT - 70 -0 - 3 -Dash dot __ . __ . __ . __ . __ . __ . __ . __ - 72 -65 - 73 -4 - 40 -25.3999999999999986 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -38 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOT2 - 70 -0 - 3 -Dash dot (.5x) _._._._._._._._._._._._._._._. - 72 -65 - 73 -4 - 40 -12.6999999999999993 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -39 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOTX2 - 70 -0 - 3 -Dash dot (2x) ____ . ____ . ____ . ___ - 72 -65 - 73 -4 - 40 -50.7999999999999972 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -3A -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDE - 70 -0 - 3 -Divide ____ . . ____ . . ____ . . ____ . . ____ - 72 -65 - 73 -6 - 40 -31.75 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -3B -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDE2 - 70 -0 - 3 -Divide (.5x) __..__..__..__..__..__..__..__.._ - 72 -65 - 73 -6 - 40 -15.875 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -3C -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDEX2 - 70 -0 - 3 -Divide (2x) ________ . . ________ . . _ - 72 -65 - 73 -6 - 40 -63.5 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -3D -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTER - 70 -0 - 3 -Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ - 72 -65 - 73 -4 - 40 -50.7999999999999972 - 49 -31.75 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -6.3499999999999996 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -3E -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTER2 - 70 -0 - 3 -Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ - 72 -65 - 73 -4 - 40 -28.5749999999999993 - 49 -19.0500000000000007 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -3.1749999999999998 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -3F -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTERX2 - 70 -0 - 3 -Center (2x) ________ __ ________ __ _____ - 72 -65 - 73 -4 - 40 -101.5999999999999943 - 49 -63.5 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -12.6999999999999993 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -40 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDER - 70 -0 - 3 -Border __ __ . __ __ . __ __ . __ __ . __ __ . - 72 -65 - 73 -6 - 40 -44.4500000000000028 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -41 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDER2 - 70 -0 - 3 -Border (.5x) __.__.__.__.__.__.__.__.__.__.__. - 72 -65 - 73 -6 - 40 -22.2250000000000014 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -42 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDERX2 - 70 -0 - 3 -Border (2x) ____ ____ . ____ ____ . ___ - 72 -65 - 73 -6 - 40 -88.9000000000000057 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -ENDTAB - 0 -TABLE - 2 -LAYER - 5 -2 -100 -AcDbSymbolTable - 70 -7 - 0 -LAYER - 5 -10 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -0 - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -43 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -plate - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -44 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -body - 70 -0 - 62 -3 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -45 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -fan_top - 70 -0 - 62 -1 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -46 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -fan_side - 70 -0 - 62 -1 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -47 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -fan_side_center - 70 -0 - 62 -2 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -LAYER - 5 -48 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -dim - 70 -0 - 62 -2 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -ENDTAB - 0 -TABLE - 2 -STYLE - 5 -3 -100 -AcDbSymbolTable - 70 -1 - 0 -STYLE - 5 -11 -100 -AcDbSymbolTableRecord -100 -AcDbTextStyleTableRecord - 2 -Standard - 70 -0 - 40 -0.0 - 41 -0.75 - 50 -0.0 - 71 -0 - 42 -2.5 - 3 -txt - 4 - - 0 -ENDTAB - 0 -TABLE - 2 -VIEW - 5 -6 -100 -AcDbSymbolTable - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -UCS - 5 -7 -100 -AcDbSymbolTable - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -APPID - 5 -9 -100 -AcDbSymbolTable - 70 -1 - 0 -APPID - 5 -12 -100 -AcDbSymbolTableRecord -100 -AcDbRegAppTableRecord - 2 -ACAD - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -DIMSTYLE - 5 -A -100 -AcDbSymbolTable - 70 -1 -100 -AcDbDimStyleTable - 71 -0 - 0 -DIMSTYLE -105 -27 -100 -AcDbSymbolTableRecord -100 -AcDbDimStyleTableRecord - 2 -Standard - 41 -2.5 - 42 -0.625 - 43 -3.75 - 44 -1.25 - 70 -0 - 73 -0 - 74 -0 - 77 -1 - 78 -8 -140 -2.5 -141 -2.5 -143 -0.03937007874016 -147 -0.625 -171 -3 -172 -1 -271 -2 -272 -2 -274 -3 -278 -44 -283 -0 -284 -8 -340 -11 - 0 -ENDTAB - 0 -TABLE - 2 -BLOCK_RECORD - 5 -1 -100 -AcDbSymbolTable - 70 -1 - 0 -BLOCK_RECORD - 5 -1F -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Model_Space -340 -22 - 0 -BLOCK_RECORD - 5 -1B -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Paper_Space -340 -1E - 0 -BLOCK_RECORD - 5 -23 -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Paper_Space0 -340 -26 - 0 -ENDTAB - 0 -ENDSEC - 0 -SECTION - 2 -BLOCKS - 0 -BLOCK - 5 -20 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -*Model_Space - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Model_Space - 1 - - 0 -ENDBLK - 5 -21 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -1C -100 -AcDbEntity - 67 -1 - 8 -0 -100 -AcDbBlockBegin - 2 -*Paper_Space - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Paper_Space - 1 - - 0 -ENDBLK - 5 -1D -100 -AcDbEntity - 67 -1 - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -24 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -*Paper_Space0 - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Paper_Space0 - 1 - - 0 -ENDBLK - 5 -25 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -ENDSEC - 0 -SECTION - 2 -ENTITIES - 0 -LINE - 5 -49 -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 --20.0 - 20 -20.0 - 30 -0.0 - 11 -20.0 - 21 -20.0 - 31 -0.0 - 0 -LINE - 5 -4A -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 --20.0 - 20 --20.0 - 30 -0.0 - 11 --20.0 - 21 -20.0 - 31 -0.0 - 0 -LINE - 5 -4B -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 -20.0 - 20 -20.0 - 30 -0.0 - 11 -20.0 - 21 --20.0 - 31 -0.0 - 0 -LINE - 5 -4C -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 -20.0 - 20 --20.0 - 30 -0.0 - 11 --20.0 - 21 --20.0 - 31 -0.0 - 0 -CIRCLE - 5 -4D -100 -AcDbEntity -100 -AcDbCircle - 8 -body - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -18.0 - 0 -CIRCLE - 5 -4E -100 -AcDbEntity -100 -AcDbCircle - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 --16.0 - 20 -16.0 - 30 -0.0 - 40 -3.0 - 0 -CIRCLE - 5 -4F -100 -AcDbEntity -100 -AcDbCircle - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 -16.0 - 20 -16.0 - 30 -0.0 - 40 -3.0 - 0 -CIRCLE - 5 -50 -100 -AcDbEntity -100 -AcDbCircle - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 -16.0 - 20 --16.0 - 30 -0.0 - 40 -3.0 - 0 -CIRCLE - 5 -51 -100 -AcDbEntity -100 -AcDbCircle - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 --16.0 - 20 --16.0 - 30 -0.0 - 40 -3.0 - 0 -CIRCLE - 5 -52 -100 -AcDbEntity -100 -AcDbCircle - 8 -body - 62 -256 -370 --1 - 6 -ByLayer - 10 --16.0 - 20 -16.0 - 30 -0.0 - 40 -3.0 - 0 -CIRCLE - 5 -53 -100 -AcDbEntity -100 -AcDbCircle - 8 -body - 62 -256 -370 --1 - 6 -ByLayer - 10 -16.0 - 20 -16.0 - 30 -0.0 - 40 -3.0 - 0 -CIRCLE - 5 -54 -100 -AcDbEntity -100 -AcDbCircle - 8 -body - 62 -256 -370 --1 - 6 -ByLayer - 10 -16.0 - 20 --16.0 - 30 -0.0 - 40 -3.0 - 0 -CIRCLE - 5 -55 -100 -AcDbEntity -100 -AcDbCircle - 8 -body - 62 -256 -370 --1 - 6 -ByLayer - 10 --16.0 - 20 --16.0 - 30 -0.0 - 40 -3.0 - 0 -ARC - 5 -56 -100 -AcDbEntity - 8 -body - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -16.0 - 20 -16.0 - 30 -0.0 - 40 -4.0 -100 -AcDbArc - 50 -270.0 - 51 -180.0 - 0 -ARC - 5 -57 -100 -AcDbEntity - 8 -body - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -20.0 -100 -AcDbArc - 50 -53.1301023541559729 - 51 -126.8698976458440342 - 0 -ARC - 5 -58 -100 -AcDbEntity - 8 -body - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 --16.0 - 20 -16.0 - 30 -0.0 - 40 -4.0 -100 -AcDbArc - 50 -360.0 - 51 -270.0 - 0 -ARC - 5 -59 -100 -AcDbEntity - 8 -body - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -20.0 -100 -AcDbArc - 50 -323.1301023541560085 - 51 -36.8698976458440058 - 0 -ARC - 5 -5A -100 -AcDbEntity - 8 -body - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -16.0 - 20 --16.0 - 30 -0.0 - 40 -4.0 -100 -AcDbArc - 50 -180.0 - 51 -90.0000000000000568 - 0 -ARC - 5 -5B -100 -AcDbEntity - 8 -body - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -20.0 -100 -AcDbArc - 50 -233.13010235415598 - 51 -306.8698976458439915 - 0 -ARC - 5 -5C -100 -AcDbEntity - 8 -body - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -20.0 -100 -AcDbArc - 50 -143.1301023541560085 - 51 -216.8698976458439915 - 0 -ARC - 5 -5D -100 -AcDbEntity - 8 -body - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 --16.0 - 20 --16.0 - 30 -0.0 - 40 -4.0 -100 -AcDbArc - 50 -90.0 - 51 -0.0 - 0 -LINE - 5 -5E -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 -1.0000000000000002 - 20 -4.8989794855663567 - 30 -0.0 - 11 -1.0000000000000011 - 21 -17.9722007556114285 - 31 -0.0 - 0 -ARC - 5 -5F -100 -AcDbEntity - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -5.0 -100 -AcDbArc - 50 -341.5369590328155027 - 51 -78.4630409671845115 - 0 -ARC - 5 -60 -100 -AcDbEntity - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -18.0 -100 -AcDbArc - 50 -333.1847385367203742 - 51 -86.8152614632795974 - 0 -LINE - 5 -61 -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 -4.7426406871192839 - 20 --1.5834643389987413 - 30 -0.0 - 11 -16.064382416273375 - 21 --8.1200749740212839 - 31 -0.0 - 0 -LINE - 5 -62 -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 --0.9999999999999997 - 20 -4.8989794855663558 - 30 -0.0 - 11 --0.9999999999999989 - 21 -17.9722007556114249 - 31 -0.0 - 0 -ARC - 5 -63 -100 -AcDbEntity - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -5.0 -100 -AcDbArc - 50 -101.5369590328154885 - 51 -198.4630409671844973 - 0 -ARC - 5 -64 -100 -AcDbEntity - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -18.0 -100 -AcDbArc - 50 -93.1847385367204026 - 51 -206.8152614632795689 - 0 -LINE - 5 -65 -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 --4.7426406871192857 - 20 --1.583464338998738 - 30 -0.0 - 11 --16.0643824162733821 - 21 --8.1200749740212697 - 31 -0.0 - 0 -ARC - 5 -66 -100 -AcDbEntity - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -5.0 -100 -AcDbArc - 50 -221.5369590328154459 - 51 -318.4630409671844973 - 0 -LINE - 5 -67 -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 -3.742640687119283 - 20 --3.3155151465676189 - 30 -0.0 - 11 -15.064382416273375 - 21 --9.8521257815901606 - 31 -0.0 - 0 -ARC - 5 -68 -100 -AcDbEntity - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -18.0 -100 -AcDbArc - 50 -213.1847385367203742 - 51 -326.8152614632795121 - 0 -LINE - 5 -69 -100 -AcDbEntity -100 -AcDbLine - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 --3.7426406871192861 - 20 --3.3155151465676154 - 30 -0.0 - 11 --15.0643824162733804 - 21 --9.8521257815901464 - 31 -0.0 - 0 -CIRCLE - 5 -6A -100 -AcDbEntity -100 -AcDbCircle - 8 -plate - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -2.0 - 0 -ARC - 5 -6B -100 -AcDbEntity - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -17.1172427686236901 -100 -AcDbArc - 50 -83.290163192243071 - 51 -96.7098368077569432 - 0 -LINE - 5 -6C -100 -AcDbEntity -100 -AcDbLine - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 -2.0 - 20 -17.0 - 30 -0.0 - 11 -2.0 - 21 -6.0827625302982185 - 31 -0.0 - 0 -ARC - 5 -6D -100 -AcDbEntity - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -6.4031242374328485 -100 -AcDbArc - 50 -18.2007602645333293 - 51 -71.7992397354666707 - 0 -LINE - 5 -6E -100 -AcDbEntity -100 -AcDbLine - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 -6.0827625302982193 - 20 -2.0 - 30 -0.0 - 11 -17.0 - 21 -2.0 - 31 -0.0 - 0 -ARC - 5 -6F -100 -AcDbEntity - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -17.1172427686236901 -100 -AcDbArc - 50 -353.2901631922430852 - 51 -6.7098368077569503 - 0 -LINE - 5 -70 -100 -AcDbEntity -100 -AcDbLine - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 -6.0827625302982193 - 20 --2.0 - 30 -0.0 - 11 -17.0 - 21 --2.0 - 31 -0.0 - 0 -ARC - 5 -71 -100 -AcDbEntity - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -6.4031242374328485 -100 -AcDbArc - 50 -288.2007602645333577 - 51 -341.7992397354666423 - 0 -ARC - 5 -72 -100 -AcDbEntity - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -6.4031242374328485 -100 -AcDbArc - 50 -198.2007602645333009 - 51 -251.7992397354666707 - 0 -LINE - 5 -73 -100 -AcDbEntity -100 -AcDbLine - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 -2.0 - 20 --6.0827625302982193 - 30 -0.0 - 11 -2.0 - 21 --17.0 - 31 -0.0 - 0 -LINE - 5 -74 -100 -AcDbEntity -100 -AcDbLine - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 --2.0 - 20 --6.0827625302982193 - 30 -0.0 - 11 --2.0 - 21 --17.0 - 31 -0.0 - 0 -ARC - 5 -75 -100 -AcDbEntity - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -17.1172427686236901 -100 -AcDbArc - 50 -263.2901631922430852 - 51 -276.7098368077569148 - 0 -LINE - 5 -76 -100 -AcDbEntity -100 -AcDbLine - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 --2.0 - 20 -6.0827625302982193 - 30 -0.0 - 11 --2.0 - 21 -17.0 - 31 -0.0 - 0 -ARC - 5 -77 -100 -AcDbEntity - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -6.4031242374328485 -100 -AcDbArc - 50 -108.2007602645333293 - 51 -161.7992397354666991 - 0 -LINE - 5 -78 -100 -AcDbEntity -100 -AcDbLine - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 --6.0827625302982193 - 20 --2.0 - 30 -0.0 - 11 --17.0 - 21 --2.0 - 31 -0.0 - 0 -LINE - 5 -79 -100 -AcDbEntity -100 -AcDbLine - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 --6.0827625302982193 - 20 -2.0 - 30 -0.0 - 11 --17.0 - 21 -2.0 - 31 -0.0 - 0 -ARC - 5 -7A -100 -AcDbEntity - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -0.0 - 20 -0.0 - 30 -0.0 - 40 -17.1172427686236901 -100 -AcDbArc - 50 -173.2901631922430568 - 51 -186.7098368077569432 - 0 -LINE - 5 -7B -100 -AcDbEntity -100 -AcDbLine - 8 -fan_side - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 --30.0 - 30 -0.0 - 11 -6.0 - 21 --30.0 - 31 -0.0 - 0 -LINE - 5 -7C -100 -AcDbEntity -100 -AcDbLine - 8 -fan_side - 62 -256 -370 --1 - 6 -ByLayer - 10 -6.0 - 20 --30.0 - 30 -0.0 - 11 -6.0 - 21 --35.0 - 31 -0.0 - 0 -LINE - 5 -7D -100 -AcDbEntity -100 -AcDbLine - 8 -fan_side - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 --50.0 - 30 -0.0 - 11 -6.0 - 21 --50.0 - 31 -0.0 - 0 -LINE - 5 -7E -100 -AcDbEntity -100 -AcDbLine - 8 -fan_side - 62 -256 -370 --1 - 6 -ByLayer - 10 -6.0 - 20 --50.0 - 30 -0.0 - 11 -6.0 - 21 --45.0 - 31 -0.0 - 0 -CIRCLE - 5 -7F -100 -AcDbEntity -100 -AcDbCircle - 8 -fan_side_center - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 --40.0 - 30 -0.0 - 40 -3.0 - 0 -LINE - 5 -80 -100 -AcDbEntity -100 -AcDbLine - 8 -fan_side_center - 62 -256 -370 --1 - 6 -ByLayer - 10 --3.0 - 20 --37.0 - 30 -0.0 - 11 -3.0 - 21 --43.0 - 31 -0.0 - 0 -LINE - 5 -81 -100 -AcDbEntity -100 -AcDbLine - 8 -fan_side_center - 62 -256 -370 --1 - 6 -ByLayer - 10 --3.0 - 20 --43.0 - 30 -0.0 - 11 -3.0 - 21 --37.0 - 31 -0.0 - 0 -DIMENSION - 5 -82 -100 -AcDbEntity - 8 -dim - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbDimension - 10 --10.0 - 20 --51.0 - 30 -0.0 - 11 --11.875 - 21 --40.0 - 31 -0.0 - 70 -0 - 71 -5 - 72 -1 - 41 -1.0 - 42 -0.0 - 1 -bodywidth - 3 -Standard -100 -AcDbAlignedDimension - 13 -0.0 - 23 --29.0 - 33 -0.0 - 14 -0.0 - 24 --51.0 - 34 -0.0 - 50 -90.0 -100 -AcDbRotatedDimension - 0 -DIMENSION - 5 -83 -100 -AcDbEntity - 8 -dim - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbDimension - 10 --15.0 - 20 --27.0 - 30 -0.0 - 11 --17.0 - 21 --48.0 - 31 -0.0 - 70 -0 - 71 -5 - 72 -1 - 41 -1.0 - 42 -0.0 - 1 -platewidth - 3 -Standard -100 -AcDbAlignedDimension - 13 -0.0 - 23 --29.0 - 33 -0.0 - 14 -0.0 - 24 --27.0 - 34 -0.0 - 50 -90.0 -100 -AcDbRotatedDimension - 0 -CIRCLE - 5 -84 -100 -AcDbEntity -100 -AcDbCircle - 8 -fan_top - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0000000000000005 - 20 -0.0 - 30 -0.0 - 40 -1.5 - 0 -LINE - 5 -85 -100 -AcDbEntity -100 -AcDbLine - 8 -dim - 62 -256 -370 --1 - 6 -ByLayer - 10 -6.0 - 20 --4.0 - 30 -0.0 - 11 -6.0 - 21 --29.0 - 31 -0.0 - 0 -ARC - 5 -86 -100 -AcDbEntity - 8 -fan_side - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -13.0238095238095237 - 20 --37.4333333333333371 - 30 -0.0 - 40 -7.4333714650801985 -100 -AcDbArc - 50 -339.8005183485309999 - 51 -160.8918335353623945 - 0 -ARC - 5 -87 -100 -AcDbEntity - 8 -fan_side - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbCircle - 10 -13.0238095238095237 - 20 --42.5666666666666629 - 30 -0.0 - 40 -7.4333714650801985 -100 -AcDbArc - 50 -199.1081664646376055 - 51 -20.1994816514690321 - 0 -LINE - 5 -88 -100 -AcDbEntity -100 -AcDbLine - 8 -dim - 62 -256 -370 --1 - 6 -ByLayer - 10 -17.0 - 20 --3.0 - 30 -0.0 - 11 -17.0 - 21 --30.0 - 31 -0.0 - 0 -DIMENSION - 5 -89 -100 -AcDbEntity - 8 -dim - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbDimension - 10 --5.0 - 20 --50.0 - 30 -0.0 - 11 --6.875 - 21 --40.0 - 31 -0.0 - 70 -0 - 71 -5 - 72 -1 - 41 -1.0 - 42 -0.0 - 1 -fanwidth - 3 -Standard -100 -AcDbAlignedDimension - 13 -0.0 - 23 --30.0 - 33 -0.0 - 14 -0.0 - 24 --50.0 - 34 -0.0 - 50 -90.0 -100 -AcDbRotatedDimension - 0 -DIMENSION - 5 -8A -100 -AcDbEntity - 8 -dim - 62 -256 -370 --1 - 6 -ByLayer -100 -AcDbDimension - 10 -18.0 - 20 -0.0 - 30 -0.0 - 11 -0.0 - 21 -0.0 - 31 -0.0 - 70 -2 - 71 -5 - 72 -1 - 41 -1.0 - 42 -0.0 - 1 -fanrot - 3 -Standard -100 -AcDb2LineAngularDimension - 13 -2.6843774609657962 - 23 -4.2183074386605375 - 33 -0.0 - 14 -9.6637588594768662 - 24 -15.1859067791779339 - 34 -0.0 - 15 -5.0 - 25 -0.0 - 35 -0.0 - 16 -26.0 - 26 -15.0 - 36 -0.0 - 0 -ENDSEC - 0 -SECTION - 2 -OBJECTS - 0 -DICTIONARY - 5 -C -100 -AcDbDictionary -280 -0 -281 -1 - 3 -ACAD_GROUP -350 -D - 3 -ACAD_LAYOUT -350 -1A - 3 -ACAD_MLINESTYLE -350 -17 - 3 -ACAD_PLOTSETTINGS -350 -19 - 3 -ACAD_PLOTSTYLENAME -350 -E - 3 -AcDbVariableDictionary -350 -8B - 0 -DICTIONARY - 5 -D -100 -AcDbDictionary -280 -0 -281 -1 - 0 -ACDBDICTIONARYWDFLT - 5 -E -100 -AcDbDictionary -281 -1 - 3 -Normal -350 -F -100 -AcDbDictionaryWithDefault -340 -F - 0 -ACDBPLACEHOLDER - 5 -F - 0 -DICTIONARY - 5 -17 -100 -AcDbDictionary -280 -0 -281 -1 - 3 -Standard -350 -18 - 0 -MLINESTYLE - 5 -18 -100 -AcDbMlineStyle - 2 -STANDARD - 70 -0 - 3 - - 62 -256 - 51 -90.0 - 52 -90.0 - 71 -2 - 49 -0.5 - 62 -256 - 6 -BYLAYER - 49 --0.5 - 62 -256 - 6 -BYLAYER - 0 -DICTIONARY - 5 -19 -100 -AcDbDictionary -280 -0 -281 -1 - 0 -DICTIONARY - 5 -1A -100 -AcDbDictionary -281 -1 - 3 -Layout1 -350 -1E - 3 -Layout2 -350 -26 - 3 -Model -350 -22 - 0 -LAYOUT - 5 -1E -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -688 - 72 -0 - 73 -0 - 74 -5 - 7 - - 75 -16 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Layout1 - 70 -1 - 71 -1 - 10 -0.0 - 20 -0.0 - 11 -420.0 - 21 -297.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -100000000000000000000.0 - 24 -100000000000000000000.0 - 34 -100000000000000000000.0 - 15 --100000000000000000000.0 - 25 --100000000000000000000.0 - 35 --100000000000000000000.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -1B - 0 -LAYOUT - 5 -22 -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -1712 - 72 -0 - 73 -0 - 74 -0 - 7 - - 75 -0 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Model - 70 -1 - 71 -0 - 10 -0.0 - 20 -0.0 - 11 -12.0 - 21 -9.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -0.0 - 24 -0.0 - 34 -0.0 - 15 -0.0 - 25 -0.0 - 35 -0.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -1F - 0 -LAYOUT - 5 -26 -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -688 - 72 -0 - 73 -0 - 74 -5 - 7 - - 75 -16 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Layout2 - 70 -1 - 71 -2 - 10 -0.0 - 20 -0.0 - 11 -12.0 - 21 -9.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -0.0 - 24 -0.0 - 34 -0.0 - 15 -0.0 - 25 -0.0 - 35 -0.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -23 - 0 -DICTIONARY - 5 -8B -100 -AcDbDictionary -281 -1 - 3 -DIMASSOC -350 -8D - 3 -HIDETEXT -350 -8C - 0 -DICTIONARYVAR - 5 -8C -100 -DictionaryVariables -280 -0 - 1 -2 - 0 -DICTIONARYVAR - 5 -8D -100 -DictionaryVariables -280 -0 - 1 -1 - 0 -ENDSEC - 0 -EOF diff --git a/packages/scad-deserializer/tests/examples/example009.scad b/packages/scad-deserializer/tests/examples/example009.scad deleted file mode 100755 index 017ecc3..0000000 --- a/packages/scad-deserializer/tests/examples/example009.scad +++ /dev/null @@ -1,30 +0,0 @@ - -bodywidth = dxf_dim(file = "example009.dxf", name = "bodywidth"); -fanwidth = dxf_dim(file = "example009.dxf", name = "fanwidth"); -platewidth = dxf_dim(file = "example009.dxf", name = "platewidth"); -fan_side_center = dxf_cross(file = "example009.dxf", layer = "fan_side_center"); -fanrot = dxf_dim(file = "example009.dxf", name = "fanrot"); - -% linear_extrude(height = bodywidth, center = true, convexity = 10) - import(file = "example009.dxf", layer = "body"); - -% for (z = [+(bodywidth/2 + platewidth/2), - -(bodywidth/2 + platewidth/2)]) -{ - translate([0, 0, z]) - linear_extrude(height = platewidth, center = true, convexity = 10) - import(file = "example009.dxf", layer = "plate"); -} - -intersection() -{ - linear_extrude(height = fanwidth, center = true, convexity = 10, twist = -fanrot) - import(file = "example009.dxf", layer = "fan_top"); - - // NB! We have to use the deprecated module here since the "fan_side" - // layer contains an open polyline, which is not yet supported - // by the import() module. - rotate_extrude(file = "example009.dxf", layer = "fan_side", - origin = fan_side_center, convexity = 10); -} - diff --git a/packages/scad-deserializer/tests/examples/example010.dat b/packages/scad-deserializer/tests/examples/example010.dat deleted file mode 100755 index 21d10af..0000000 --- a/packages/scad-deserializer/tests/examples/example010.dat +++ /dev/null @@ -1,51 +0,0 @@ -# Created by Octave 3.1.54, Sat Jul 25 03:55:47 2009 CEST -# name: d -# type: matrix -# rows: 46 -# columns: 46 - 4.546487134128409 3.049135365122645 1.430224191212503 -0.2457055078678564 -1.91183970371809 -3.501754883740146 -4.952066146974032 -6.204954160076457 -7.210470231681788 -7.928527609104572 -8.330499610668049 -8.400360881165891 -8.135326272203333 -7.545961877274642 -6.655763794958727 -5.500221413615028 -4.125402561462865 -2.586116927645778 -0.9437309728873401 0.7362785576448079 2.386934985545012 3.942431847980459 5.340756393700049 6.526161835734216 7.451389799872247 8.079554366909637 8.385612597846531 8.357362916838071 7.995931549519037 7.315727623941807 6.343868724111537 5.119099797486346 3.690248516188934 2.114278671803671 0.4540192087657636 -1.224340567385163 -2.853889748744539 -4.369663351791345 -5.71123226627233 -6.825112373132667 -7.666896787563758 -8.203026221366581 -8.412126885869672 -8.285862597434599 -7.829267114791266 -7.060543458962299 - 5.035828673073257 3.377315902755755 1.584160205132016 -0.2721509607637287 -2.117612326675841 -3.878651171635513 -5.48506043417364 -6.872797646310392 -7.986538104655897 -8.781880491747168 -9.227117016458916 -9.304497503575988 -9.01093703726527 -8.358138946934957 -7.372128232423011 -6.09221402938029 -4.569422478079272 -2.864462472223704 -1.045305386934624 0.815524725479631 2.643842440626112 4.366758500792109 5.915585679634834 7.228577125140624 8.25338801176127 8.949162363424968 9.288161852373825 9.256871638758197 8.856539164652959 8.103124422478512 7.026663680467649 5.670072031436031 4.087432503458046 2.34183994020634 0.5028856086418853 -1.356117185191807 -3.161055866327164 -4.839973225360668 -6.325936125317769 -7.559703914604285 -8.492090164840738 -9.085923578545179 -9.317529891462899 -9.17767569077386 -8.67193652212408 -7.820474610215396 - 5.324407614299007 3.570853513082628 1.674940750779526 -0.2877466136759709 -2.238962428681152 -4.100917877109334 -5.799382670971877 -7.266644378753076 -8.444207906375773 -9.285127512010241 -9.755878384655105 -9.837693172558298 -9.52731017830761 -8.837103392413644 -7.794589181356518 -6.441329296887258 -4.831273940141129 -3.028610937368119 -1.105206773856724 0.8622584960466719 2.795348240726728 4.616996272280487 6.254579232232685 7.64281185566189 8.726349688693348 9.461995497225455 9.820421404336635 9.787338100188716 9.364064511717672 8.567475221178798 7.429327729803009 5.99499638643935 4.321663455453438 2.476039440296261 0.5317035462487614 -1.4338296903001 -3.342200661807952 -5.117328639853587 -6.688444873692612 -7.992913917025852 -8.978730705585699 -9.60659383493706 -9.851472383449366 -9.703603816152382 -9.168883186197988 -8.268628117693945 - 5.400719226082497 3.622032462322777 1.698946694274643 -0.2918707171379004 -2.271052164109463 -4.159693928017514 -5.882501821688773 -7.370792931037254 -8.565233786107424 -9.418205799283712 -9.895703668109622 -9.97869105938673 -9.663859527706666 -8.963760412729174 -7.906304456877885 -6.53364909211736 -4.900517756176106 -3.07201824177415 -1.121047054386814 0.8746167413903643 2.835412327701047 4.683168972167305 6.344222448307544 7.752351795785409 8.851419341126077 9.59760872960501 9.961171745040346 9.927614277296112 9.498274156714555 8.690267819042166 7.535807927150502 6.080919153820417 4.383603323277566 2.511527061495859 0.5393241413542663 -1.454379930367366 -3.39010246382654 -5.190672310139893 -6.784306431561657 -8.107471664674037 -9.107417587122166 -9.744279510489891 -9.992667759626542 -9.842679878873495 -9.300295411722241 -8.387137515284946 - 5.261721205277139 3.528812407274513 1.655220994405354 -0.2843588561588514 -2.212602216474262 -4.052636108688901 -5.731104188082895 -7.181091229043116 -8.344790823945194 -9.175809942206806 -9.641018474015334 -9.721870023257994 -9.41514129380829 -8.733060592170913 -7.702820323490013 -6.365492916166737 -4.774393393750382 -2.992953873194801 -1.092194726527053 0.852106777267553 2.762437472830941 4.562638503728103 6.180941535720031 7.552829933771732 8.623610836697077 9.350595588940964 9.704801602564489 9.672107801566185 9.253817584620604 8.466606862686255 7.341859243059576 5.924414863988718 4.270782759862838 2.446888024335571 0.5254435848797225 -1.416948632172156 -3.302851578699326 -5.057080255534608 -6.609699101121306 -7.898810101657983 -8.873020469578222 -9.493491511811653 -9.735487005914017 -9.589359355196404 -9.06093420796045 -8.171278207284479 - 4.91295496433882 3.294909737359715 1.545506856841021 -0.2655105049310103 -2.06594280073829 -3.784012476539642 -5.351225516043248 -6.705102080990831 -7.7916673851425 -8.567603498676819 -9.001976297355174 -9.077468708436898 -8.791071087722237 -8.154201204569132 -7.19224905145976 -5.943564625123038 -4.457929033185433 -2.794569878503285 -1.019800041540425 0.7956260049135155 2.579332953294609 4.260210036383667 5.771245989192293 7.052200576631698 8.052006181586624 8.730803709656549 9.061531645466804 9.031004909888981 8.640440507537887 7.905409008638012 6.855213799524476 5.531722849102 3.987699565046725 2.284699283246702 0.4906152508091408 -1.32302806345222 -3.083926423880241 -4.721878369680736 -6.171583925630922 -7.375247906025503 -8.284884026347463 -8.864227965002353 -9.090183107381513 -8.953741335000977 -8.460342150758638 -7.629655823119084 - 4.368324712698232 2.929649413905326 1.374178238023352 -0.2360770877384193 -1.836920764996389 -3.364532208092634 -4.75801036944758 -5.961801672142627 -6.927914755722455 -7.61783374029087 -8.004053733098379 -8.071177361819418 -7.816528619197737 -7.250259547011087 -6.394945506202153 -5.284685168478457 -3.96374110987594 -2.484775201531057 -0.9067491470627086 0.7074261344866228 2.29339856846624 3.787940438758798 5.131469077295334 6.270422237007184 7.159393449591173 7.762942238112459 8.057007016981043 8.029864351438505 7.682596333906389 7.029047444376102 6.095272614680437 4.918498500582482 3.545639372485864 2.031426791520294 0.4362276349147517 -1.176362540898928 -2.742054854433646 -4.198430093976552 -5.487427174584921 -6.55765785032041 -7.366455401449627 -7.881575621917326 -8.082482294089306 -7.961165902943748 -7.522462950159604 -6.783863138057164 - 3.649543139808145 2.44759321336187 1.148065469325888 -0.1972320220420281 -1.534666495092764 -2.810918657904327 -3.975108364192017 -4.980823044179203 -5.787968027290999 -6.36436499014402 -6.687034804755113 -6.743113643859221 -6.530365821108268 -6.05727292083076 -5.342695664029783 -4.415121990955059 -3.311531336824084 -2.075920378435365 -0.7575490255040018 0.5910234164900096 1.916033619950813 3.164657609377909 4.287116686573691 5.238661950254811 5.981358293533024 6.485596756915665 6.731274944084161 6.708598440998452 6.418471288276723 5.872459939948812 5.092332145434113 4.109189138064303 2.962225727056051 1.697167724153914 0.3644489998122177 -0.9827991560666609 -2.290866210995255 -3.50760365933783 -4.584504018666033 -5.478634670009056 -6.15434944589027 -6.584709730536586 -6.752558417479561 -6.651203909247942 -6.284686890242273 -5.667619237398981 - 2.785265798733263 1.867959195228706 0.8761829532964909 -0.1505239380284582 -1.171229914949966 -2.145242651192145 -3.033731332635951 -3.801274719340386 -4.417273278600766 -4.857169091755243 -5.103424900904859 -5.146223264043962 -4.983857945492241 -4.622801938126964 -4.077449405583663 -3.369541832375409 -2.527301259514483 -1.584305160797028 -0.5781478148826403 0.4510584599601819 1.462282457401677 2.415209867765704 3.271850482337386 3.99805274309953 4.564865257579304 4.949690999504721 5.137188180933072 5.119881880922376 4.898462047040874 4.481755989334729 3.886376463332679 3.136059371907682 2.260717489732352 1.295247935347975 0.2781409331724952 -0.750054670284097 -1.748347960970855 -2.676940135684732 -3.498811154761955 -4.181195614235898 -4.696888999096009 -5.025332241452506 -5.153431345695215 -5.076079404778086 -4.796360196487312 -4.325425242952448 - 1.809948699677379 1.213855538667884 0.5693697878743604 -0.09781493961144824 -0.7611000941278394 -1.394042589681589 -1.971409006340514 -2.470181567057512 -2.870475783804629 -3.156333189361605 -3.316357551044089 -3.344169202537879 -3.238659381062657 -3.004034430245145 -2.649648106472589 -2.189628674143088 -1.642315656348354 -1.029528695961759 -0.37569767533284 0.2931112260290228 0.950234707775073 1.569475330361154 2.126145924291543 2.598053789661878 2.966385449071229 3.216456681596708 3.338297936342937 3.327051786975494 3.183166581980383 2.912378570424738 2.5254832158083 2.037904815000729 1.469081580199606 0.8416906987509336 0.180744265251656 -0.4874078717316904 -1.136128594973583 -1.739555456394979 -2.273631731254591 -2.717065483848913 -3.052178409798129 -3.26561061425464 -3.348853228751029 -3.298587632934588 -3.116817757488257 -2.810790193738072 - 0.7624746575887673 0.5113592923230357 0.2398576457599462 -0.0412063682250215 -0.3206276143430717 -0.5872664492762099 -0.8304928241031526 -1.04061007080476 -1.209241477818354 -1.32966424309348 -1.397077490994629 -1.408793668062789 -1.364345687290786 -1.265505549408286 -1.116213698804572 -0.9224219304455371 -0.6918561105903662 -0.4337081708841666 -0.1582696550500929 0.1234785724820486 0.4003040989885004 0.6611707643009137 0.895678637685649 1.094478630263245 1.249645213679287 1.354992385909446 1.406320287639134 1.401582637400947 1.340968310359362 1.226893808453956 1.063906922092792 0.8585054241002257 0.6188780240193119 0.3545779101032878 0.07614189384674533 -0.2053296594378249 -0.4786153671558212 -0.7328201905434427 -0.9578097854819362 -1.144614526816829 -1.285787099007545 -1.375699397096658 -1.410766901494015 -1.389591581461206 -1.31301763018535 -1.184097809460741 - -0.3153968429699904 -0.2115232353191719 -0.09921686377634671 0.01704497102832257 0.132627276626609 0.2429221512353662 0.3435324862595468 0.4304472651360086 0.5002014699063924 0.5500142205486248 0.5778996398878249 0.5827460242524682 0.5643601635915864 0.5234750441497907 0.46172062661877 0.3815588647481526 0.286185555018652 0.1794029303213007 0.0654680769307238 -0.05107678209061699 -0.1655853709921119 -0.2734925936870061 -0.3704965297273865 -0.452729938296945 -0.5169144328985401 -0.5604911802782915 -0.5817229130325473 -0.5797631889770021 -0.5546901361254837 -0.5075033379725885 -0.4400839832541203 -0.3551198688886271 -0.2559982459960941 -0.1466707808848774 -0.03149601458619469 0.08493439842261759 0.1979787449923144 0.3031303037572243 0.3961970138943235 0.4734685993594334 0.5318644858846474 0.5690566137530826 0.5835622501931699 0.5748031012552267 0.5431283665663152 0.4898008178430777 - -1.380694466691827 -0.9259729990693727 -0.4343359100507957 0.07461678107528391 0.5805947366067604 1.063426212162366 1.503862240474527 1.884344026970699 2.189702963502988 2.407765352887697 2.529837735795723 2.5510534715422 2.470566755693045 2.291586339618643 2.021247607702515 1.670328112082959 1.25281790565982 0.7853618028335425 0.2865958032807762 -0.2235958665434362 -0.7248734747661234 -1.197252665020412 -1.6219011696696 -1.981889592889172 -2.262866332254524 -2.453629731840534 -2.546574656894428 -2.537995686558978 -2.428234837308953 -2.22166792783356 -1.926530128954008 -1.55458765335044 -1.120668673792816 -0.6420721706855765 -0.1378782763090046 0.3718123898439437 0.8666800693356641 1.32699594943008 1.734408688598593 2.072676026595801 2.328312312120061 2.491126133174475 2.554626616502324 2.516282198220691 2.377621549283654 2.144172632195354 - -2.390948159060002 -1.603507141423449 -0.7521393542177419 0.1292138555276426 1.00541571661104 1.84153482584592 2.604237752873515 3.263117938841503 3.791907909952001 4.169526478750082 4.380919184542068 4.417658467236295 4.278279647569251 3.968339319245766 3.500193825082827 2.89250664861418 2.169504359897848 1.360010778619294 0.4962978593593797 -0.3872008893947277 -1.255263160571735 -2.073282050748716 -2.808645728182195 -3.432037563627176 -3.918604891831163 -4.248949808870655 -4.409902505366961 -4.395046305226375 -4.20497347826705 -3.847261628290367 -3.336171597929878 -2.692078933858195 -1.940661578039921 -1.111876169216943 -0.2387637662554357 0.6438673946040369 1.500829594281713 2.29795845417703 3.003474962131552 3.58925240135922 4.031937673885623 4.3138823148693 4.423846081201991 4.357445064530748 4.117326463849724 3.713063050030014 - -3.30588229339968 -2.217114514208372 -1.039957375845013 0.1786595813180147 1.390153944766803 2.546227257322191 3.600790524212898 4.511801635854819 5.2429414540886 5.765061741606376 6.057347210190657 6.108145360569123 5.915431030789019 5.486887133033441 4.839598360157432 3.99937007289772 2.999699521573657 1.880440416423686 0.6862140859437864 -0.535369434668916 -1.735609465377321 -2.86665622373352 -3.883418444706294 -4.745361027124189 -5.418121040243312 -5.874877665357591 -6.097421457202605 -6.076880297075037 -5.814073096207792 -5.31947714836337 -4.612810433194559 -3.722245522619361 -2.683286429282323 -1.537353173609781 -0.3301304983038976 0.8902534381823263 2.075145779445412 3.177308606983185 4.152802166937654 4.962736609421381 5.57482240410846 5.964657621913146 6.116700762897727 6.02489034683103 5.69288656527711 5.133925361308007 - -4.089021333016357 -2.742332527821242 -1.286315578672616 0.2209827133941487 1.719471122029165 3.149409643133779 4.453791140303494 5.580614039459991 6.484955467509192 7.130762185529173 7.492287917633426 7.555119773743378 7.316752846033308 6.786690071700684 5.986063380848329 4.946791233116909 3.710306129423557 2.325902828898148 0.8487731223953848 -0.6621944900388012 -2.146762497830699 -3.545745859334898 -4.803371522675512 -5.869501921322429 -6.701633800650617 -7.266592688575257 -7.541855457065665 -7.516448248184021 -7.191383967171353 -6.579621901111978 -5.705551073052852 -4.604017928618686 -3.31893711818922 -1.901540758369277 -0.4083359691720135 1.101147886537466 2.566732450883808 3.929989492206033 5.136570254273005 6.138372169686898 6.895456557448895 7.377640852136887 7.565701887542177 7.452142263644087 7.041489244289306 6.35011426946898 - -4.709143995738668 -3.158222397480602 -1.481392438582083 0.254495962038536 1.980238411761126 3.627035005010469 5.129233158380877 6.426944971957868 7.468434770900569 8.212181643536248 8.628534749081897 8.700895403097618 8.426378814655045 7.815929093848203 6.89388294466016 5.696999437374171 4.272994540441402 2.678638835395257 0.9774942529155544 -0.7626199407663925 -2.472330883996379 -4.083477796772693 -5.531829335951035 -6.759644296201945 -7.717973569654379 -8.368611592358691 -8.685619479556678 -8.656359127161986 -8.281997053088212 -7.577457891860837 -6.57082939653611 -5.302242668622715 -3.822272257705642 -2.189919913751454 -0.4702623735279068 1.268143043529455 2.955991599298102 4.525994098173628 5.915559494955271 7.069290202300532 7.941190617715322 8.496500823077938 8.713082352883248 8.582300785000461 8.109369967835956 7.313144160650595 - -5.141527947914094 -3.448203906499507 -1.617410856769451 0.2778632597848961 2.162059845019839 3.960061927008222 5.600188836664843 7.017053889821449 8.154171147984922 8.966207334453294 9.420789129000436 9.499793789993564 9.200071650912507 8.533571687614522 7.52686515037404 6.220086251984656 4.665332143345871 2.924585964458808 1.067245772233472 -0.8326421410420161 -2.699335239708387 -4.458414360612515 -6.039750570299125 -7.380300984282985 -8.426622087910019 -9.137000360635794 -9.48311526245501 -9.451168284460866 -9.042433051851468 -8.273204548512339 -7.1741494874307 -5.789083725623066 -4.173225464184948 -2.390993872864271 -0.513440901049977 1.384581339232713 3.227404690819291 4.941561602047335 6.458714046201143 7.718377942983702 8.670334467929564 9.276632118461686 9.513099720536216 9.37031005707512 8.853955701361743 7.984622072107995 - -5.368935405835869 -3.600716407202944 -1.68894820813253 0.2901530262118541 2.257686775031992 4.135213676674213 5.847882658448798 7.327415012691896 8.514826453374175 9.362778633449111 9.837466375364958 9.919965376815327 9.606986662953039 8.911007707438348 7.859774994939016 6.495197856345744 4.871677676002062 3.053939080184086 1.11444957050123 -0.8694695267085139 -2.818725617658153 -4.655608013234817 -6.306886008944467 -7.706728362007201 -8.799327775264402 -9.541125758006334 -9.902549165539984 -9.869189187144494 -9.442375779884992 -8.639124647421326 -7.491458877599298 -6.045132282992935 -4.357805340781697 -2.496746451483471 -0.5361501601036421 1.445820746239842 3.370151341981964 5.160124638846803 6.744380050075756 8.059758311830187 9.05381944373006 9.686933365387848 9.933859822653556 9.784754636897503 9.245562161347152 8.337778298482458 - -5.382300351782382 -3.609679707468892 -1.693152524221641 0.2908753071145678 2.263306857866227 4.145507506472566 5.862439852701268 7.345655222001519 8.536022498156086 9.386085494285842 9.861954881263999 9.944659248324436 9.630901433341164 8.933189970277535 7.879340413410047 6.511366418956426 4.883804793183958 3.061541282044484 1.117223781242091 -0.8716339061148982 -2.825742300234944 -4.667197265990103 -6.322585804942894 -7.725912799925885 -8.82123203210352 -9.564876580168589 -9.927199682695818 -9.893756660964112 -9.465880782714354 -8.660630108971949 -7.510107442983564 -6.060180492757929 -4.368653270291459 -2.502961628021068 -0.5374848041936438 1.449419842645591 3.378540694267371 5.172969790010383 6.761168904475835 8.079821550822126 9.076357209288462 9.711047147921935 9.958588281749131 9.809111926925592 9.26857723401821 8.358533615477349 - -5.181089967534271 -3.474736468801078 -1.629856192221796 0.2800013074327352 2.178696038555143 3.990533033893282 5.64328007002529 7.071047338165455 8.216914262913187 9.035198745970977 9.493278367245317 9.572890937789841 9.270862555648927 8.599234139312866 7.58478139429494 6.267947350248265 4.701230024998847 2.947089494241964 1.075457805428347 -0.8390489922843309 -2.720105554446849 -4.492720091943021 -6.086224056971523 -7.437089475039214 -8.491461604830073 -9.207305956793 -9.556084075592718 -9.52389127826568 -9.112010990051067 -8.336863578276587 -7.229351724130582 -5.83362843028209 -4.2053367799973 -2.409391623001631 -0.5173916252718265 1.395235143833869 3.252238290674027 4.979584959896401 6.508411290756739 7.777767801934123 8.737049255013993 9.348012125649753 9.586299252193967 9.442410878869843 8.922083381055785 8.046060574101277 - -4.773325876155424 -3.201266452287175 -1.501582637146705 0.2579645392187804 2.007227483459789 3.676468602107865 5.199140519357471 6.514539110936956 7.570223585980346 8.324107135872664 8.746134802496814 8.819481674569811 8.541223643761541 7.922453979666336 6.987841076151081 5.774645000337366 4.331232051306271 2.715146548382711 0.9908167207155332 -0.773013842903595 -2.506026783992408 -4.139132345428268 -5.607223762039341 -6.851772861875711 -7.823163399728696 -8.482669100254197 -8.803997552362862 -8.774338404679673 -8.394874073827912 -7.680732605209696 -6.660384565575114 -5.374508011369955 -3.874366782992262 -2.219766777248058 -0.4766716749741102 1.285426822756593 2.996279409462914 4.587679791420381 5.996183857354676 7.165638994948616 8.049422718295403 8.612301359286031 8.831834722770459 8.699270706324162 8.219894218952904 7.412816488448197 - -4.175264345195113 -2.800172044501049 -1.3134457208466 0.2256435388803507 1.755737102771503 3.215834968923976 4.547727643019533 5.698316767172359 6.621731983896433 7.281159642506184 7.650310443197156 7.714467508468514 7.471073098587216 6.929830580599756 6.112317585708757 5.05112577720909 3.78856152372123 2.374959277779841 0.8666749000507603 -0.676161070992536 -2.192040633885014 -3.620530454088728 -4.904681150332459 -5.993297686728825 -6.842980357299839 -7.419854995298554 -7.700923429341156 -7.674980347925095 -7.343060019838303 -6.718395061126436 -5.825888892449073 -4.701122918285288 -3.388938008620714 -1.941646834964742 -0.4169483292196312 1.12437259065492 2.620868323502963 4.012878306921188 5.244907495612248 6.267838773715967 7.040891099220648 7.533245315416116 7.725272813416223 7.609318062853523 7.190003813716571 6.484046801895833 - -3.410748200600429 -2.287443613754537 -1.072945868473995 0.1843268427061244 1.434251024344538 2.626996143683169 3.715011216738866 4.654920515979006 5.409252823698197 5.947935291220925 6.249492348477882 6.301901867214561 6.103074445306729 5.660936704629639 4.993115281657762 4.126234109092623 3.094853003682659 1.940089875389279 0.7079814860717643 -0.5523518909306521 -1.790664741088856 -2.957589438789203 -4.00660437877821 -4.895888645756584 -5.589989282298683 -6.061234686386791 -6.290837790860787 -6.269645044499783 -5.998501335223617 -5.488216307077675 -4.759133413836612 -3.840318889699831 -2.768402970257767 -1.586119560592286 -0.3406025693357043 0.9184931715267248 2.140971488113207 3.278096027694826 4.284533223282468 5.120159599884286 5.751661370836673 6.153862553350843 6.310728655499175 6.216005920808633 5.873470645796447 5.296778630944794 - -2.510256288486159 -1.683522024573375 -0.7896710502018139 0.1356616169901937 1.05558588361779 1.933427272159427 2.734189016642643 3.425947273264703 3.981123823303499 4.377585529669897 4.59952671523833 4.638099285316098 4.491765473256983 4.166359146364736 3.674853228013503 3.036842508131333 2.277762460760673 1.427875211974583 0.5210630844078612 -0.4065221840245499 -1.317900695834841 -2.176738665778339 -2.948796934213331 -3.60329597434807 -4.114142974843539 -4.460972077860914 -4.629956301545421 -4.614358778159311 -4.414801331739156 -4.03923968793379 -3.502646304328436 -2.826413465809092 -2.037500441671404 -1.16735870462873 -0.2506780598459248 0.6759963281225712 1.575720875718599 2.412626404474485 3.153348131966858 3.768355820403181 4.233131054014477 4.529144710919736 4.644595660743251 4.574881238442103 4.322780738036853 3.898344610929531 - -1.509688379721747 -1.012483724933438 -0.4749145391091887 0.08158799070985261 0.6348378648050846 1.162778756577268 1.644363328685269 2.060392323967141 2.394279979236409 2.632715247320912 2.766192466508119 2.789390321280759 2.701383986374111 2.505681996640854 2.210086372838312 1.826381579681559 1.369864716423261 0.8587356697792575 0.3133715418782656 -0.2444857204963248 -0.7925961087140347 -1.309108191258972 -1.773430261348203 -2.167051263300292 -2.474278769910309 -2.682864590002175 -2.784493065159446 -2.775112588784801 -2.655097130869491 -2.429231328989921 -2.106519739906278 -1.699827856300014 -1.225369200180058 -0.7020589409250443 -0.150759807170451 0.4065496443459431 0.9476512444838604 1.450972979990634 1.896449001595198 2.26631958609706 2.545839160486248 2.723864161406895 2.793297293862669 2.75137047797148 2.59975520357519 2.344495893214314 - -0.4489339593550001 -0.3010808942575579 -0.141224684021771 0.02426170870570256 0.1887808636693288 0.3457739213309235 0.4889820639017611 0.612696034656969 0.7119837479845479 0.7828869160746246 0.8225788533633334 0.829477167566125 0.8033068446646229 0.7451112128476809 0.657210348308904 0.5431085811302354 0.4073547887001401 0.2553610463269413 0.09318686487506814 -0.07270238281121608 -0.2356932159204538 -0.3892877042838959 -0.5273625203459285 -0.6444130569104365 -0.7357728784589211 -0.7977997572088324 -0.8280208772415469 -0.825231417869619 -0.7895425860355593 -0.7223771828419703 -0.6264128809614945 -0.5054754742772395 -0.3643863555536506 -0.2087703027217771 -0.04483123673317359 0.1208951091908324 0.2818017486179796 0.4314738416045685 0.5639444341208273 0.6739323416782621 0.757052693489469 0.8099917434291753 0.8306389786351164 0.8181712589957502 0.7730856331489335 0.69717952272126 - 0.6297180412781989 0.4223250815566671 0.1980953535573332 -0.03403181106229467 -0.2648022347684586 -0.4850158290061779 -0.6858933726973768 -0.8594265120808325 -0.9986970285048157 -1.09815264597303 -1.153828382867369 -1.163504623252803 -1.126795605960306 -1.045164803667328 -0.9218665788603957 -0.761816442672515 -0.5713950889660844 -0.3581940162040492 -0.1307128783625411 0.1019793694509399 0.3306060216189227 0.5460524549925905 0.7397295001538707 0.903915864495442 1.03206595579104 1.119070834301707 1.161461890080995 1.157549125507695 1.107488530157902 1.013275861992868 0.8786670827870677 0.7090286197848682 0.5111234231810415 0.2928413486382201 0.06288461363950699 -0.1695791324611385 -0.3952822936884582 -0.6052267972518273 -0.7910428183123687 -0.9453224584867627 -1.061915075378811 -1.13617248928231 -1.165134291437744 -1.14764586618743 -1.08440442185818 -0.9779311952654839 - 1.683265170795829 1.12889428909309 0.5295179545161437 -0.09096858991682827 -0.7078285037378014 -1.296469528796759 -1.833424404988772 -2.297286435859161 -2.669562906038411 -2.93541232744681 -3.084236122589167 -3.110101156393801 -3.011976271584753 -2.793773397668383 -2.464191594648746 -2.036370248956716 -1.527365247576704 -0.9574690136555669 -0.3494015116281765 0.2725955260675967 0.8837250403639841 1.459623226056689 1.977330839833961 2.416208512855347 2.758759577256071 2.991327603080867 3.104640837050949 3.094181838108516 2.960367573536122 2.708532795786939 2.348717362739231 1.895265980245349 1.366256323976739 0.7827783395423258 0.1680934529102542 -0.4532927892397816 -1.056607678330947 -1.617798953605395 -2.114493689859416 -2.526890235369443 -2.838547641258541 -3.037041110245732 -3.114457334104856 -3.067709972291675 -2.898662694601847 -2.614054882537336 - 2.669705829804243 1.790458043755305 0.8398303456189292 -0.1442787381593636 -1.122635883945128 -2.056237079720395 -2.907862591958544 -3.643560798946349 -4.234001734801155 -4.655646382654547 -4.891685100973239 -4.932707770921118 -4.777078948101876 -4.431003062566172 -3.908277067764701 -3.229740399552937 -2.422444173646198 -1.518572743000832 -0.5541606092254262 0.4323441592848651 1.401612730505363 2.315003425205354 3.136102238758166 3.832174552594589 4.375470160145175 4.744329580005311 4.924047551108387 4.907459285079375 4.695226103737553 4.295809074282484 3.725131693245221 3.005945066931102 2.166920896606633 1.241508428248773 0.2666009366630344 -0.7189350929595494 -1.675809449156724 -2.565874570938535 -3.353646370662466 -4.007718872631197 -4.502016270236361 -4.816832486081088 -4.939616791099661 -4.865474162519273 -4.597360432970828 -4.145964450769626 - 3.54971374212228 2.380641886330078 1.116661351079797 -0.1918369484093717 -1.492687314141955 -2.73402894710691 -3.866373473677969 -4.844577890900531 -5.62964427556248 -6.19027450832758 -6.50411803098649 -6.558662892681309 -6.351734561902528 -5.89158261819819 -5.196551867470355 -4.294350992454181 -3.22094789497706 -2.019135769216056 -0.736827072087785 0.5748565952123353 1.863622544126233 3.078091743206837 4.169847137965979 5.095363886047989 5.817744555343825 6.308190108172687 6.547148028033732 6.525091816737419 6.242900785825731 5.711825001195826 4.953036778474351 3.996786609606501 2.881197171203133 1.65074349372734 0.3544798823789649 -0.9559157232538983 -2.228201985567143 -3.41165686621379 -4.459099753710306 -5.328772405529383 -5.986003717453734 -6.404591951090286 -6.567849314495497 -6.46926725177881 -6.112775918687044 -5.51258749969712 - 4.288205769311382 2.875917049446775 1.34897459230178 -0.231747224902796 -1.803230011571154 -3.302823708099532 -4.670744246048903 -5.852456950294104 -6.800850664426962 -7.47811592389443 -7.857252300035656 -7.923144821967909 -7.673166562777629 -7.117283366806719 -6.277656542887673 -5.187759362894486 -3.891042588024042 -2.439202224064016 -0.890118564778289 0.6944513127535784 2.25133560791381 3.718466256886861 5.037353390496664 6.155417140715221 7.02808383407551 7.620563003372249 7.909234373801725 7.882589528780094 7.541690714195699 6.900128490017602 5.983479917557116 4.828288882746387 3.480609206727212 1.994168625333327 0.4282268338104019 -1.154787010228619 -2.691763140310978 -4.121427168338916 -5.386782901080704 -6.437384598532856 -7.23134808638331 -7.737020545868154 -7.93424241176944 -7.815151070663276 -7.384494318505103 -6.659441080987506 - 4.855740564693871 3.256538475283084 1.527508473464183 -0.2624184708600041 -2.041883618860373 -3.739945310513147 -5.288907184715668 -6.627017019575332 -7.700928598626055 -8.46782845613504 -8.897142714875848 -8.971755970131976 -8.688693626872098 -8.059240487467115 -7.108490862230847 -5.874348138457536 -4.406013691981442 -2.762025383586276 -1.007923839222646 0.7863604479231795 2.549295025514206 4.210597255203638 5.704036259636104 6.970073338524186 7.958235588743649 8.629128099704545 8.956004504118614 8.925833271260007 8.539817232971965 7.813345630556984 6.775380594289642 5.467302514677827 3.941260336876582 2.258092546810274 0.4849017327257366 -1.307620583246664 -3.048012193000405 -4.66688917517789 -6.099712013161457 -7.289358581934639 -8.188401426947269 -8.760998547062469 -8.984322302035931 -8.849469478495738 -8.361816232963735 -7.540803761460487 - 5.229692306937458 3.507331988711279 1.645145412121301 -0.2826279204933955 -2.199133769801996 -4.027967095476507 -5.696218084039577 -7.137378833047617 -8.293994811283408 -9.119955389607474 -9.582332126231357 -9.662691519780038 -9.357829894821458 -8.679901122296229 -7.655932083036974 -6.326745191317807 -4.74533093401977 -2.974735307140072 -1.085546370884799 0.8469198735379744 2.745622095213007 4.534865028263448 6.143317203231159 7.506854707664531 8.571117604153223 9.293677089490007 9.645726997162825 9.613232208310484 9.197488187621289 8.415069337243999 7.297168227677697 5.888352048419835 4.244785854760888 2.431993444268991 0.5222451297532001 -1.408323450046034 -3.282746618113592 -5.026297037822943 -6.569464856031814 -7.85072884157588 -8.819009042613789 -9.43570318311505 -9.676225613788761 -9.530987464336391 -9.005778921451114 -8.121538392346379 - 5.395152720151853 3.618299243775675 1.697195594753702 -0.2915698868206932 -2.26871139710953 -4.155406543328425 -5.876438743808457 -7.363195875747651 -8.556405624029034 -9.408498481379727 -9.885504194511661 -9.968406050920841 -9.653899015204164 -8.95452149039132 -7.898155451383183 -6.526914878599211 -4.895466806476436 -3.068851921318294 -1.119891594379443 0.8737152764050196 2.832489876287216 4.678342043240527 6.337683476291875 7.744361468860196 8.842296208410893 9.587716501611499 9.950904793681877 9.917381913524109 9.488484312582518 8.681310784741999 7.528040791374196 6.07465156776076 4.379085155812245 2.508938437703814 0.5387682614972115 -1.452880905113711 -3.386608294868589 -5.185322298967513 -6.777313866237354 -8.099115316710975 -9.098030597743653 -9.734236109340088 -9.982368345415507 -9.832535056744142 -9.290709623719028 -8.378492916525859 - 5.345525419802729 3.585016326194277 1.681583944833682 -0.2888878818624344 -2.247842660347122 -4.117183045441479 -5.822384335036501 -7.295465534789873 -8.477699545843972 -9.321954428933225 -9.794572406069209 -9.876711689935791 -9.565097646490701 -8.872153344291123 -7.825504285953553 -6.466877066541816 -4.850435865897734 -3.040623093715808 -1.109590274028466 0.86567840836979 2.806435224432541 4.635308324315644 6.279386308869567 7.673124977038238 8.760960366318479 9.49952391260276 9.859371417972785 9.826156897953913 9.401204510644819 8.601455766712713 7.458794124825067 6.018773898766608 4.338804150703687 2.485859973040466 0.5338124028368944 -1.439516583325327 -3.35545658596765 -5.137625123282998 -6.714972759646662 -8.02461562240514 -9.014342383437267 -9.644695760044115 -9.890545552295466 -9.742090504798149 -9.205249051818882 -8.301423367986789 - 5.082788889746999 3.408810120860735 1.598932849578142 -0.2746888286927486 -2.137359530194382 -3.914820452055196 -5.536209836422897 -6.936888005132817 -8.061014339694061 -8.863773470533452 -9.313161924357349 -9.391264001639069 -9.094966019022742 -8.436080442052933 -7.440874959449751 -6.149025273252079 -4.612033353781187 -2.891174218607906 -1.055053090966565 0.8231296739990461 2.668496856398217 4.407479490061577 5.970749825062005 7.295985206327845 8.330352681230107 9.032615282679755 9.374776016874794 9.343194015093491 8.939128352084104 8.178687850727879 7.092188874105124 5.722946707767992 4.125548715994828 2.363678115836767 0.5075751282179191 -1.368763278017028 -3.190533411739751 -4.885107046646795 -6.384926879450768 -7.630199826372963 -8.571280784705591 -9.170651826392648 -9.40441791942675 -9.263259547370208 -8.752804249065901 -7.893402266422392 - 4.617417606324923 3.096705413130865 1.452537347334307 -0.2495387987538081 -1.941666620400823 -3.5563863211758 -5.029324122151516 -6.301758641327084 -7.322961929822302 -8.052221835118193 -8.460465066103314 -8.531416253444307 -8.262246797201303 -7.663687634181376 -6.759601429351459 -5.586031246689127 -4.189763625962253 -2.626463351031946 -0.958454270580386 0.7477653570618542 2.424173939628084 4.00393835714458 5.42407838751986 6.627977529253878 7.567640122689131 8.205604785502139 8.516437879800469 8.48774747100499 8.120677355176557 7.429861459476516 6.442840433670812 5.198963691333348 3.747820672901074 2.147263871172282 0.4611024349828368 -1.24344170019649 -2.89841373869619 -4.437835167907522 -5.800334113373086 -6.931592041751236 -7.786509269328339 -8.331002944088237 -8.54336582146739 -8.41513166369451 -7.951412761973714 -7.170696125567001 - 3.967964454042534 2.661144832798496 1.248233764798917 -0.2144404443737696 -1.668565589735227 -3.056170290497144 -4.321935126079993 -5.415398046841001 -6.292966136751218 -6.919653525392167 -7.270476164205151 -7.331447861665553 -7.100137868602942 -6.585767784499835 -5.808843921420753 -4.800339782061639 -3.600461243939888 -2.257043677934734 -0.8236449030035197 0.6425899950486453 2.083206857808219 3.440772837086368 4.661166061336456 5.695733303881148 6.503229633525916 7.051462719809843 7.318576239632341 7.293921219883536 6.978480578397405 6.384829938119489 5.536636276704745 4.467714398803897 3.220678846510804 1.845244992047145 0.3962470427578658 -1.068548025696312 -2.490743456364277 -3.813640805422481 -4.984500330207981 -5.956643556328476 -6.691314201133876 -7.15922326440309 -7.341716688355996 -7.231519036070902 -6.833023540195608 -6.162116958625413 - 3.160321080613384 2.119492805710582 0.9941670410904191 -0.1707930261825025 -1.328944114470087 -2.434114394639413 -3.442244215186624 -4.313142621504115 -5.012089642410857 -5.511220465838168 -5.790636320954395 -5.839197779363776 -5.654968848964071 -5.245294155842311 -4.626506137210002 -3.823273918671509 -2.867619834034114 -1.797642795911458 -0.6559994123056947 0.5117965977428373 1.659188892506926 2.740434562000088 3.71242775344765 4.536418165608486 5.179555901001853 5.616201087656102 5.8289460598929 5.809309347024744 5.558073802826458 5.085255395625619 4.409703903252567 3.558351431882195 2.565138717949963 1.469662018096385 0.3155945313679901 -0.8510547134099066 -1.983775092422612 -3.037408618664727 -3.969950248377854 -4.74422248959062 -5.329357551403209 -5.702027945401628 -5.847376479006589 -5.759608564857086 -5.442223232722587 -4.907873634227967 - 2.22668567867006 1.493343288905311 0.7004660147291653 -0.1203366290059004 -0.9363418310866921 -1.715018039159572 -2.425321890063545 -3.038935810756489 -3.531396950591077 -3.883072437973098 -4.079942080996805 -4.114157308252927 -3.984354066603155 -3.695707201674252 -3.259724153093075 -2.693786189182488 -2.020455470643085 -1.266575568405079 -0.4622012951650975 0.3605994851525819 1.16902430193471 1.930843808868214 2.615686666272127 3.196250350568365 3.649389619738685 3.95703924108492 4.10693419504852 4.093098642835834 3.916084164252973 3.582947767959545 3.106970550803082 2.507128222398642 1.807334603467782 1.035488257270811 0.2223602619286077 -0.5996325353583019 -1.397719875710371 -2.140084535377989 -2.797130778047369 -3.342664243452604 -3.75493623385838 -4.017510766006725 -4.11991982190273 -4.058080675658289 -3.834458658889454 -3.457968875724721 - 1.204279345431145 0.8076588876886379 0.3788396188089894 -0.06508279017502479 -0.5064105536953812 -0.9275493265108165 -1.311709634729428 -1.643576219150494 -1.909918606318715 -2.100118565749699 -2.206593425271613 -2.225098368236168 -2.15489566096309 -1.998784063853906 -1.762987253646724 -1.456905705064642 -1.092741923553445 -0.6850139698967194 -0.249976670946797 0.1950264090267705 0.6322544015138652 1.044276406206742 1.414666405988919 1.728658120402314 1.973733690651419 2.140122727131086 2.221191824027839 2.213709012276733 2.117972607968906 1.937799319430418 1.680372087105609 1.355953722388659 0.9774777617194828 0.5600328473000009 0.1202611905445145 -0.3243049003718474 -0.755941978313681 -1.157442035093003 -1.512798530452724 -1.807844522315121 -2.030817458056102 -2.172828110359468 -2.228214962658407 -2.194769915935083 -2.073826318660405 -1.870205810398125 - 0.133862195013134 0.08977567533482943 0.04211008278445129 -0.007234305880492386 -0.05629028559915311 -0.1031021492652438 -0.1458036555977758 -0.1826924302916663 -0.2122978343091302 -0.2334395936172461 -0.2452748529890788 -0.2473317779817941 -0.2395283654869346 -0.2221757129355783 -0.1959656158254859 -0.1619429880176926 -0.1214642043182845 -0.07614302609516824 -0.02778626570485129 0.0216782454144859 0.07027851329880706 0.1160769986345782 0.1572478603369399 0.1921497460719863 0.2193912277947304 0.237886273594353 0.2468975443593155 0.2460657891609279 0.2354241674541947 0.2153969271149841 0.1867824910160091 0.1507216264264608 0.1086519662208858 0.06225069499319062 0.01336768499954474 -0.03604825241086339 -0.08402705975448951 -0.1286559733884243 -0.1681557793607642 -0.2009517450562382 -0.2257363988162215 -0.2415216547078018 -0.2476782043918371 -0.2439606056605409 -0.2305170674437688 -0.2078835411866856 - -0.9418916186934663 -0.6316866098910525 -0.2962982493546524 0.05090258736032291 0.396074098549645 0.7254553853138876 1.025915055172518 1.285474729243588 1.493786582409802 1.64254587845149 1.725822053672573 1.740295149760155 1.685388170045718 1.563290082541485 1.378868552693453 1.139475884920871 0.8546559094405842 0.5357634998735836 0.1955118902661149 -0.1525341614328149 -0.4944991574648012 -0.8167500325709951 -1.106439661282354 -1.352019032270644 -1.54369767098508 -1.67383395497704 -1.737239761272558 -1.731387300463223 -1.656509891692994 -1.515592660960215 -1.314253533564164 -1.060519265151764 -0.7645054402998314 -0.4380131960795705 -0.09405874796218745 0.2536455256169031 0.5912377525143929 0.90525919597775 1.183190812008062 1.413952344138135 1.588344058292062 1.699413507151409 1.742732702290064 1.716574644099477 1.621982171813179 1.462726388797417 - -1.980095185873649 -1.327965543382954 -0.6228941053151842 0.1070101550754859 0.8326482582733674 1.525091302987413 2.156733770155261 2.702394067873998 3.140318442004222 3.453048229699637 3.628115881200739 3.658542001700102 3.54311359778859 3.286432435674765 2.898731583287855 2.395467450151741 1.796703589112747 1.126310825801873 0.4110156041456203 -0.3206655126131722 -1.039562707302622 -1.717015817381742 -2.326016925178589 -2.842287078339433 -3.24524421504243 -3.518823705852006 -3.652118799799595 -3.639815442126497 -3.482404128877647 -3.186160352372156 -2.762894417128001 -2.229480600290467 -1.607184427452228 -0.9208148832552137 -0.1977353554622115 0.5332272569630683 1.242931781349151 1.903084537910887 2.487367319476658 2.972486615356378 3.339102250105779 3.572598415289946 3.663666355642739 3.608675479763801 3.409818100340678 3.075022033560224 - -2.939358606544735 -1.971302681297775 -0.9246571389528138 0.1588515655978607 1.23602735951325 2.263926643114734 3.201570315688885 4.011577482915883 4.661655715163819 5.125888444753457 5.385768177727149 5.430934329229159 5.259586267329132 4.878555098534946 4.303031333133039 3.555959287479722 2.667122366513022 1.671955693384779 0.6101334229225803 -0.476012941724182 -1.543182172530108 -2.548829599910208 -3.45286323443881 -4.219242107950363 -4.817413113206347 -5.223529059864967 -5.421399386705929 -5.403135628214004 -5.169465902805643 -4.729705885045418 -4.101387419098447 -3.309559579428456 -2.385790043245842 -1.366906586834864 -0.2935288783299538 0.7915509002700281 1.845074042359564 2.82503990484805 3.692380341259188 4.412517225444294 4.956740972354244 5.303355098597096 5.438541192763665 5.356909811883925 5.06171534151083 4.564726253638137 diff --git a/packages/scad-deserializer/tests/examples/example010.scad b/packages/scad-deserializer/tests/examples/example010.scad deleted file mode 100755 index 45922dd..0000000 --- a/packages/scad-deserializer/tests/examples/example010.scad +++ /dev/null @@ -1,14 +0,0 @@ - -// example010.dat generated using octave: -// d = (sin(1:0.2:10)' * cos(1:0.2:10)) * 10; -// save("example010.dat", "d"); - -intersection() -{ - surface(file = "example010.dat", - center = true, convexity = 5); - - rotate(45, [0, 0, 1]) - surface(file = "example010.dat", - center = true, convexity = 5); -} diff --git a/packages/scad-deserializer/tests/examples/example011.jscad b/packages/scad-deserializer/tests/examples/example011.jscad deleted file mode 100755 index 8126528..0000000 --- a/packages/scad-deserializer/tests/examples/example011.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]))])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example011.scad b/packages/scad-deserializer/tests/examples/example011.scad deleted file mode 100755 index 3b9f395..0000000 --- a/packages/scad-deserializer/tests/examples/example011.scad +++ /dev/null @@ -1,18 +0,0 @@ -polyhedron( - points=[ - [10,10,0], - [10,-10,0], - [-10,-10,0], - [-10,10,0], - [0,0,10] - ], - triangles=[ - [0,1,4], - [1,2,4], - [2,3,4], - [3,0,4], - [1,0,3], - [2,1,3] - ] - ); - diff --git a/packages/scad-deserializer/tests/examples/example012.scad b/packages/scad-deserializer/tests/examples/example012.scad deleted file mode 100755 index 78ff058..0000000 --- a/packages/scad-deserializer/tests/examples/example012.scad +++ /dev/null @@ -1,12 +0,0 @@ - -// example012.stl is Mblock.stl, (c) 2009 Will Langford -// licensed under the Creative Commons - GNU GPL license. -// http://www.thingiverse.com/thing:753 - -difference() -{ - sphere(20); - - translate([ -2.92, 0.5, +20 ]) rotate([180, 0, 180]) - import("example012.stl", convexity = 5); -} diff --git a/packages/scad-deserializer/tests/examples/example012.stl b/packages/scad-deserializer/tests/examples/example012.stl deleted file mode 100755 index c88d133..0000000 --- a/packages/scad-deserializer/tests/examples/example012.stl +++ /dev/null @@ -1,450 +0,0 @@ -solid ascii - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex 3.422440e+000 -1.067730e+001 5.000000e+000 - vertex 6.347434e+000 -1.067730e+001 5.000000e+000 - vertex 3.422440e+000 8.281660e+000 5.000000e+000 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex 3.422440e+000 8.281660e+000 5.000000e+000 - vertex 6.347434e+000 -1.067730e+001 5.000000e+000 - vertex 6.347434e+000 1.133150e+001 5.000000e+000 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex 2.280978e+000 1.133150e+001 5.000000e+000 - vertex 3.422440e+000 8.281660e+000 5.000000e+000 - vertex 6.347434e+000 1.133150e+001 5.000000e+000 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex 2.280978e+000 1.133150e+001 5.000000e+000 - vertex -3.033951e+000 -9.213713e-001 5.000000e+000 - vertex 3.422440e+000 8.281660e+000 5.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex 3.422440e+000 8.281660e+000 5.000000e+000 - vertex -3.033951e+000 -9.213713e-001 5.000000e+000 - vertex -2.320538e+000 -4.613285e+000 5.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -2.320538e+000 -4.613285e+000 5.000000e+000 - vertex -3.033951e+000 -9.213713e-001 5.000000e+000 - vertex -4.104071e+000 -4.613285e+000 5.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -4.104071e+000 -4.613285e+000 5.000000e+000 - vertex -3.033951e+000 -9.213713e-001 5.000000e+000 - vertex -9.793542e+000 8.281660e+000 5.000000e+000 - endloop - endfacet - facet normal -0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -9.793542e+000 8.281660e+000 5.000000e+000 - vertex -3.033951e+000 -9.213713e-001 5.000000e+000 - vertex -8.527233e+000 1.133150e+001 5.000000e+000 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -1.252235e+001 1.133150e+001 5.000000e+000 - vertex -9.793542e+000 8.281660e+000 5.000000e+000 - vertex -8.527233e+000 1.133150e+001 5.000000e+000 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -1.252235e+001 1.133150e+001 5.000000e+000 - vertex -1.252235e+001 -1.067730e+001 5.000000e+000 - vertex -9.793542e+000 8.281660e+000 5.000000e+000 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -9.793542e+000 8.281660e+000 5.000000e+000 - vertex -1.252235e+001 -1.067730e+001 5.000000e+000 - vertex -9.793542e+000 -1.067730e+001 5.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 -1.000000e+000 0.000000e+000 - outer loop - vertex -1.252235e+001 1.133150e+001 1.500000e+001 - vertex -1.252235e+001 1.133150e+001 5.000000e+000 - vertex -8.527233e+000 1.133150e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -1.000000e+000 -0.000000e+000 - outer loop - vertex -8.527233e+000 1.133150e+001 1.500000e+001 - vertex -1.252235e+001 1.133150e+001 5.000000e+000 - vertex -8.527233e+000 1.133150e+001 5.000000e+000 - endloop - endfacet - facet normal -9.124922e-001 -4.090940e-001 -0.000000e+000 - outer loop - vertex -8.527233e+000 1.133150e+001 1.500000e+001 - vertex -8.527233e+000 1.133150e+001 5.000000e+000 - vertex -3.033951e+000 -9.213713e-001 1.500000e+001 - endloop - endfacet - facet normal -9.124922e-001 -4.090940e-001 0.000000e+000 - outer loop - vertex -3.033951e+000 -9.213713e-001 1.500000e+001 - vertex -8.527233e+000 1.133150e+001 5.000000e+000 - vertex -3.033951e+000 -9.213713e-001 5.000000e+000 - endloop - endfacet - facet normal 9.174094e-001 -3.979447e-001 0.000000e+000 - outer loop - vertex -3.033951e+000 -9.213713e-001 1.500000e+001 - vertex -3.033951e+000 -9.213713e-001 5.000000e+000 - vertex 2.280978e+000 1.133150e+001 1.500000e+001 - endloop - endfacet - facet normal 9.174094e-001 -3.979447e-001 0.000000e+000 - outer loop - vertex 2.280978e+000 1.133150e+001 1.500000e+001 - vertex -3.033951e+000 -9.213713e-001 5.000000e+000 - vertex 2.280978e+000 1.133150e+001 5.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 -1.000000e+000 0.000000e+000 - outer loop - vertex 2.280978e+000 1.133150e+001 1.500000e+001 - vertex 2.280978e+000 1.133150e+001 5.000000e+000 - vertex 6.347434e+000 1.133150e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -1.000000e+000 -0.000000e+000 - outer loop - vertex 6.347434e+000 1.133150e+001 1.500000e+001 - vertex 2.280978e+000 1.133150e+001 5.000000e+000 - vertex 6.347434e+000 1.133150e+001 5.000000e+000 - endloop - endfacet - facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000 - outer loop - vertex 6.347434e+000 1.133150e+001 1.500000e+001 - vertex 6.347434e+000 1.133150e+001 5.000000e+000 - vertex 6.347434e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000 - outer loop - vertex 6.347434e+000 -1.067730e+001 1.500000e+001 - vertex 6.347434e+000 1.133150e+001 5.000000e+000 - vertex 6.347434e+000 -1.067730e+001 5.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 1.000000e+000 0.000000e+000 - outer loop - vertex 6.347434e+000 -1.067730e+001 1.500000e+001 - vertex 6.347434e+000 -1.067730e+001 5.000000e+000 - vertex 3.422440e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 1.000000e+000 0.000000e+000 - outer loop - vertex 3.422440e+000 -1.067730e+001 1.500000e+001 - vertex 6.347434e+000 -1.067730e+001 5.000000e+000 - vertex 3.422440e+000 -1.067730e+001 5.000000e+000 - endloop - endfacet - facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 - outer loop - vertex 3.422440e+000 -1.067730e+001 1.500000e+001 - vertex 3.422440e+000 -1.067730e+001 5.000000e+000 - vertex 3.422440e+000 8.281660e+000 1.500000e+001 - endloop - endfacet - facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 - outer loop - vertex 3.422440e+000 8.281660e+000 1.500000e+001 - vertex 3.422440e+000 -1.067730e+001 5.000000e+000 - vertex 3.422440e+000 8.281660e+000 5.000000e+000 - endloop - endfacet - facet normal -9.134987e-001 4.068417e-001 0.000000e+000 - outer loop - vertex 3.422440e+000 8.281660e+000 1.500000e+001 - vertex 3.422440e+000 8.281660e+000 5.000000e+000 - vertex -2.320538e+000 -4.613285e+000 1.500000e+001 - endloop - endfacet - facet normal -9.134987e-001 4.068417e-001 0.000000e+000 - outer loop - vertex -2.320538e+000 -4.613285e+000 1.500000e+001 - vertex 3.422440e+000 8.281660e+000 5.000000e+000 - vertex -2.320538e+000 -4.613285e+000 5.000000e+000 - endloop - endfacet - facet normal -4.979881e-016 1.000000e+000 0.000000e+000 - outer loop - vertex -2.320538e+000 -4.613285e+000 1.500000e+001 - vertex -2.320538e+000 -4.613285e+000 5.000000e+000 - vertex -4.104071e+000 -4.613285e+000 1.500000e+001 - endloop - endfacet - facet normal -4.979881e-016 1.000000e+000 0.000000e+000 - outer loop - vertex -4.104071e+000 -4.613285e+000 1.500000e+001 - vertex -2.320538e+000 -4.613285e+000 5.000000e+000 - vertex -4.104071e+000 -4.613285e+000 5.000000e+000 - endloop - endfacet - facet normal 9.149041e-001 4.036714e-001 0.000000e+000 - outer loop - vertex -4.104071e+000 -4.613285e+000 1.500000e+001 - vertex -4.104071e+000 -4.613285e+000 5.000000e+000 - vertex -9.793542e+000 8.281660e+000 1.500000e+001 - endloop - endfacet - facet normal 9.149041e-001 4.036714e-001 0.000000e+000 - outer loop - vertex -9.793542e+000 8.281660e+000 1.500000e+001 - vertex -4.104071e+000 -4.613285e+000 5.000000e+000 - vertex -9.793542e+000 8.281660e+000 5.000000e+000 - endloop - endfacet - facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000 - outer loop - vertex -9.793542e+000 8.281660e+000 1.500000e+001 - vertex -9.793542e+000 8.281660e+000 5.000000e+000 - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal -1.000000e+000 -0.000000e+000 -0.000000e+000 - outer loop - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - vertex -9.793542e+000 8.281660e+000 5.000000e+000 - vertex -9.793542e+000 -1.067730e+001 5.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 1.000000e+000 0.000000e+000 - outer loop - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - vertex -9.793542e+000 -1.067730e+001 5.000000e+000 - vertex -1.252235e+001 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 1.000000e+000 0.000000e+000 - outer loop - vertex -1.252235e+001 -1.067730e+001 1.500000e+001 - vertex -9.793542e+000 -1.067730e+001 5.000000e+000 - vertex -1.252235e+001 -1.067730e+001 5.000000e+000 - endloop - endfacet - facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 - outer loop - vertex -1.252235e+001 -1.067730e+001 1.500000e+001 - vertex -1.252235e+001 -1.067730e+001 5.000000e+000 - vertex -1.252235e+001 1.133150e+001 1.500000e+001 - endloop - endfacet - facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 - outer loop - vertex -1.252235e+001 1.133150e+001 1.500000e+001 - vertex -1.252235e+001 -1.067730e+001 5.000000e+000 - vertex -1.252235e+001 1.133150e+001 5.000000e+000 - endloop - endfacet - facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 - outer loop - vertex 1.156780e+001 -1.469280e+001 1.500000e+001 - vertex 1.156780e+001 -1.469280e+001 0.000000e+000 - vertex 1.156780e+001 1.530720e+001 1.500000e+001 - endloop - endfacet - facet normal 1.000000e+000 -0.000000e+000 0.000000e+000 - outer loop - vertex 1.156780e+001 1.530720e+001 1.500000e+001 - vertex 1.156780e+001 -1.469280e+001 0.000000e+000 - vertex 1.156780e+001 1.530720e+001 0.000000e+000 - endloop - endfacet - facet normal 1.184238e-016 -1.000000e+000 0.000000e+000 - outer loop - vertex -1.843220e+001 -1.469280e+001 1.500000e+001 - vertex -1.843220e+001 -1.469280e+001 0.000000e+000 - vertex 1.156780e+001 -1.469280e+001 1.500000e+001 - endloop - endfacet - facet normal 1.184238e-016 -1.000000e+000 0.000000e+000 - outer loop - vertex 1.156780e+001 -1.469280e+001 1.500000e+001 - vertex -1.843220e+001 -1.469280e+001 0.000000e+000 - vertex 1.156780e+001 -1.469280e+001 0.000000e+000 - endloop - endfacet - facet normal -1.000000e+000 -1.184238e-016 -0.000000e+000 - outer loop - vertex -1.843220e+001 1.530720e+001 1.500000e+001 - vertex -1.843220e+001 1.530720e+001 0.000000e+000 - vertex -1.843220e+001 -1.469280e+001 1.500000e+001 - endloop - endfacet - facet normal -1.000000e+000 -1.184238e-016 0.000000e+000 - outer loop - vertex -1.843220e+001 -1.469280e+001 1.500000e+001 - vertex -1.843220e+001 1.530720e+001 0.000000e+000 - vertex -1.843220e+001 -1.469280e+001 0.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 1.000000e+000 0.000000e+000 - outer loop - vertex 1.156780e+001 1.530720e+001 1.500000e+001 - vertex 1.156780e+001 1.530720e+001 0.000000e+000 - vertex -1.843220e+001 1.530720e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 1.000000e+000 0.000000e+000 - outer loop - vertex -1.843220e+001 1.530720e+001 1.500000e+001 - vertex 1.156780e+001 1.530720e+001 0.000000e+000 - vertex -1.843220e+001 1.530720e+001 0.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -1.252235e+001 -1.067730e+001 1.500000e+001 - vertex -1.252235e+001 1.133150e+001 1.500000e+001 - vertex -1.843220e+001 1.530720e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -1.843220e+001 -1.469280e+001 1.500000e+001 - vertex -1.252235e+001 -1.067730e+001 1.500000e+001 - vertex -1.843220e+001 1.530720e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -1.843220e+001 -1.469280e+001 1.500000e+001 - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - vertex -1.252235e+001 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -1.843220e+001 -1.469280e+001 1.500000e+001 - vertex 1.156780e+001 -1.469280e+001 1.500000e+001 - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal -0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - vertex 1.156780e+001 -1.469280e+001 1.500000e+001 - vertex 3.422440e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -2.320538e+000 -4.613285e+000 1.500000e+001 - vertex 3.422440e+000 -1.067730e+001 1.500000e+001 - vertex 3.422440e+000 8.281660e+000 1.500000e+001 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -2.320538e+000 -4.613285e+000 1.500000e+001 - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - vertex 3.422440e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -2.320538e+000 -4.613285e+000 1.500000e+001 - vertex -4.104071e+000 -4.613285e+000 1.500000e+001 - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -9.793542e+000 -1.067730e+001 1.500000e+001 - vertex -4.104071e+000 -4.613285e+000 1.500000e+001 - vertex -9.793542e+000 8.281660e+000 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex -3.033951e+000 -9.213713e-001 1.500000e+001 - vertex 2.280978e+000 1.133150e+001 1.500000e+001 - vertex -8.527233e+000 1.133150e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -8.527233e+000 1.133150e+001 1.500000e+001 - vertex 2.280978e+000 1.133150e+001 1.500000e+001 - vertex 1.156780e+001 1.530720e+001 1.500000e+001 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -1.843220e+001 1.530720e+001 1.500000e+001 - vertex -8.527233e+000 1.133150e+001 1.500000e+001 - vertex 1.156780e+001 1.530720e+001 1.500000e+001 - endloop - endfacet - facet normal -0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex -1.843220e+001 1.530720e+001 1.500000e+001 - vertex -1.252235e+001 1.133150e+001 1.500000e+001 - vertex -8.527233e+000 1.133150e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex 2.280978e+000 1.133150e+001 1.500000e+001 - vertex 6.347434e+000 1.133150e+001 1.500000e+001 - vertex 1.156780e+001 1.530720e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex 1.156780e+001 1.530720e+001 1.500000e+001 - vertex 6.347434e+000 1.133150e+001 1.500000e+001 - vertex 6.347434e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 0.000000e+000 1.000000e+000 - outer loop - vertex 1.156780e+001 -1.469280e+001 1.500000e+001 - vertex 6.347434e+000 -1.067730e+001 1.500000e+001 - vertex 3.422440e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 1.000000e+000 - outer loop - vertex 1.156780e+001 -1.469280e+001 1.500000e+001 - vertex 1.156780e+001 1.530720e+001 1.500000e+001 - vertex 6.347434e+000 -1.067730e+001 1.500000e+001 - endloop - endfacet - facet normal 0.000000e+000 -0.000000e+000 -1.000000e+000 - outer loop - vertex -1.843220e+001 1.530720e+001 0.000000e+000 - vertex 1.156780e+001 1.530720e+001 0.000000e+000 - vertex -1.843220e+001 -1.469280e+001 0.000000e+000 - endloop - endfacet - facet normal 0.000000e+000 0.000000e+000 -1.000000e+000 - outer loop - vertex -1.843220e+001 -1.469280e+001 0.000000e+000 - vertex 1.156780e+001 1.530720e+001 0.000000e+000 - vertex 1.156780e+001 -1.469280e+001 0.000000e+000 - endloop - endfacet -endsolid \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example013.dxf b/packages/scad-deserializer/tests/examples/example013.dxf deleted file mode 100755 index 2662e77..0000000 --- a/packages/scad-deserializer/tests/examples/example013.dxf +++ /dev/null @@ -1,2276 +0,0 @@ -999 -dxflib 2.0.4.8 - 0 -SECTION - 2 -HEADER - 9 -$ACADVER - 1 -AC1015 - 9 -$HANDSEED - 5 -FFFF - 9 -$DIMASZ - 40 -2.5 - 9 -$DIMGAP - 40 -0.625 - 9 -$DIMEXO - 40 -0.625 - 9 -$INSUNITS - 70 -4 - 9 -$DIMTXT - 40 -2.5 - 9 -$PLIMMAX - 10 -210.0 - 20 -297.0 - 9 -$PLIMMIN - 10 -0.0 - 20 -0.0 - 9 -$DIMEXE - 40 -1.25 - 0 -ENDSEC - 0 -SECTION - 2 -TABLES - 0 -TABLE - 2 -VPORT - 5 -8 -100 -AcDbSymbolTable - 70 -1 - 0 -VPORT - 5 -30 -100 -AcDbSymbolTableRecord -100 -AcDbViewportTableRecord - 2 -*Active - 70 -0 - 10 -0.0 - 20 -0.0 - 11 -1.0 - 21 -1.0 - 12 -286.3055555555554861 - 22 -148.5 - 13 -0.0 - 23 -0.0 - 14 -10.0 - 24 -10.0 - 15 -10.0 - 25 -10.0 - 16 -0.0 - 26 -0.0 - 36 -1.0 - 17 -0.0 - 27 -0.0 - 37 -0.0 - 40 -297.0 - 41 -1.92798353909465 - 42 -50.0 - 43 -0.0 - 44 -0.0 - 50 -0.0 - 51 -0.0 - 71 -0 - 72 -100 - 73 -1 - 74 -3 - 75 -1 - 76 -1 - 77 -0 - 78 -0 -281 -0 - 65 -1 -110 -0.0 -120 -0.0 -130 -0.0 -111 -1.0 -121 -0.0 -131 -0.0 -112 -0.0 -122 -1.0 -132 -0.0 - 79 -0 -146 -0.0 - 0 -ENDTAB - 0 -TABLE - 2 -LTYPE - 5 -5 -100 -AcDbSymbolTable - 70 -21 - 0 -LTYPE - 5 -14 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -ByBlock - 70 -0 - 3 - - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -15 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -ByLayer - 70 -0 - 3 - - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -16 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CONTINUOUS - 70 -0 - 3 -Solid line - 72 -65 - 73 -0 - 40 -0.0 - 0 -LTYPE - 5 -31 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOT - 70 -0 - 3 -Dot . . . . . . . . . . . . . . . . . . . . . . - 72 -65 - 73 -2 - 40 -6.3499999999999996 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -32 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOT2 - 70 -0 - 3 -Dot (.5x) ..................................... - 72 -65 - 73 -2 - 40 -3.1749999999999998 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -33 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DOTX2 - 70 -0 - 3 -Dot (2x) . . . . . . . . . . . . . - 72 -65 - 73 -2 - 40 -12.6999999999999993 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -34 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHED - 70 -0 - 3 -Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _ - 72 -65 - 73 -2 - 40 -19.0500000000000007 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -35 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHED2 - 70 -0 - 3 -Dashed (.5x) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ - 72 -65 - 73 -2 - 40 -9.5250000000000004 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -36 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHEDX2 - 70 -0 - 3 -Dashed (2x) ____ ____ ____ ____ ____ ___ - 72 -65 - 73 -2 - 40 -38.1000000000000014 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -37 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOT - 70 -0 - 3 -Dash dot __ . __ . __ . __ . __ . __ . __ . __ - 72 -65 - 73 -4 - 40 -25.3999999999999986 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -38 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOT2 - 70 -0 - 3 -Dash dot (.5x) _._._._._._._._._._._._._._._. - 72 -65 - 73 -4 - 40 -12.6999999999999993 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -39 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DASHDOTX2 - 70 -0 - 3 -Dash dot (2x) ____ . ____ . ____ . ___ - 72 -65 - 73 -4 - 40 -50.7999999999999972 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -3A -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDE - 70 -0 - 3 -Divide ____ . . ____ . . ____ . . ____ . . ____ - 72 -65 - 73 -6 - 40 -31.75 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -3B -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDE2 - 70 -0 - 3 -Divide (.5x) __..__..__..__..__..__..__..__.._ - 72 -65 - 73 -6 - 40 -15.875 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -3C -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -DIVIDEX2 - 70 -0 - 3 -Divide (2x) ________ . . ________ . . _ - 72 -65 - 73 -6 - 40 -63.5 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -3D -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTER - 70 -0 - 3 -Center ____ _ ____ _ ____ _ ____ _ ____ _ ____ - 72 -65 - 73 -4 - 40 -50.7999999999999972 - 49 -31.75 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -6.3499999999999996 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -3E -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTER2 - 70 -0 - 3 -Center (.5x) ___ _ ___ _ ___ _ ___ _ ___ _ ___ - 72 -65 - 73 -4 - 40 -28.5749999999999993 - 49 -19.0500000000000007 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -3.1749999999999998 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -3F -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -CENTERX2 - 70 -0 - 3 -Center (2x) ________ __ ________ __ _____ - 72 -65 - 73 -4 - 40 -101.5999999999999943 - 49 -63.5 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -12.6999999999999993 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -LTYPE - 5 -40 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDER - 70 -0 - 3 -Border __ __ . __ __ . __ __ . __ __ . __ __ . - 72 -65 - 73 -6 - 40 -44.4500000000000028 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -12.6999999999999993 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 49 -0.0 - 74 -0 - 49 --6.3499999999999996 - 74 -0 - 0 -LTYPE - 5 -41 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDER2 - 70 -0 - 3 -Border (.5x) __.__.__.__.__.__.__.__.__.__.__. - 72 -65 - 73 -6 - 40 -22.2250000000000014 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -6.3499999999999996 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 49 -0.0 - 74 -0 - 49 --3.1749999999999998 - 74 -0 - 0 -LTYPE - 5 -42 -100 -AcDbSymbolTableRecord -100 -AcDbLinetypeTableRecord - 2 -BORDERX2 - 70 -0 - 3 -Border (2x) ____ ____ . ____ ____ . ___ - 72 -65 - 73 -6 - 40 -88.9000000000000057 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -25.3999999999999986 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 49 -0.0 - 74 -0 - 49 --12.6999999999999993 - 74 -0 - 0 -ENDTAB - 0 -TABLE - 2 -LAYER - 5 -2 -100 -AcDbSymbolTable - 70 -1 - 0 -LAYER - 5 -10 -100 -AcDbSymbolTableRecord -100 -AcDbLayerTableRecord - 2 -0 - 70 -0 - 62 -7 - 6 -CONTINUOUS -370 -0 -390 -F - 0 -ENDTAB - 0 -TABLE - 2 -STYLE - 5 -3 -100 -AcDbSymbolTable - 70 -1 - 0 -STYLE - 5 -11 -100 -AcDbSymbolTableRecord -100 -AcDbTextStyleTableRecord - 2 -Standard - 70 -0 - 40 -0.0 - 41 -0.75 - 50 -0.0 - 71 -0 - 42 -2.5 - 3 -txt - 4 - - 0 -ENDTAB - 0 -TABLE - 2 -VIEW - 5 -6 -100 -AcDbSymbolTable - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -UCS - 5 -7 -100 -AcDbSymbolTable - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -APPID - 5 -9 -100 -AcDbSymbolTable - 70 -1 - 0 -APPID - 5 -12 -100 -AcDbSymbolTableRecord -100 -AcDbRegAppTableRecord - 2 -ACAD - 70 -0 - 0 -ENDTAB - 0 -TABLE - 2 -DIMSTYLE - 5 -A -100 -AcDbSymbolTable - 70 -1 -100 -AcDbDimStyleTable - 71 -0 - 0 -DIMSTYLE -105 -27 -100 -AcDbSymbolTableRecord -100 -AcDbDimStyleTableRecord - 2 -Standard - 41 -2.5 - 42 -0.625 - 43 -3.75 - 44 -1.25 - 70 -0 - 73 -0 - 74 -0 - 77 -1 - 78 -8 -140 -2.5 -141 -2.5 -143 -0.03937007874016 -147 -0.625 -171 -3 -172 -1 -271 -2 -272 -2 -274 -3 -278 -44 -283 -0 -284 -8 -340 -11 - 0 -ENDTAB - 0 -TABLE - 2 -BLOCK_RECORD - 5 -1 -100 -AcDbSymbolTable - 70 -1 - 0 -BLOCK_RECORD - 5 -1F -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Model_Space -340 -22 - 0 -BLOCK_RECORD - 5 -1B -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Paper_Space -340 -1E - 0 -BLOCK_RECORD - 5 -23 -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -*Paper_Space0 -340 -26 - 0 -BLOCK_RECORD - 5 -43 -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -sub1 -340 -0 - 0 -BLOCK_RECORD - 5 -44 -100 -AcDbSymbolTableRecord -100 -AcDbBlockTableRecord - 2 -sub2 -340 -0 - 0 -ENDTAB - 0 -ENDSEC - 0 -SECTION - 2 -BLOCKS - 0 -BLOCK - 5 -20 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -*Model_Space - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Model_Space - 1 - - 0 -ENDBLK - 5 -21 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -1C -100 -AcDbEntity - 67 -1 - 8 -0 -100 -AcDbBlockBegin - 2 -*Paper_Space - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Paper_Space - 1 - - 0 -ENDBLK - 5 -1D -100 -AcDbEntity - 67 -1 - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -24 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -*Paper_Space0 - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -*Paper_Space0 - 1 - - 0 -ENDBLK - 5 -25 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -45 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -sub1 - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -sub1 - 1 - - 0 -LINE - 5 -46 -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 --10.0 - 20 -0.0 - 30 -0.0 - 11 --10.0 - 21 -10.0 - 31 -0.0 - 0 -LINE - 5 -47 -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 --10.0 - 20 -10.0 - 30 -0.0 - 11 -0.0 - 21 -20.0 - 31 -0.0 - 0 -LINE - 5 -48 -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -20.0 - 30 -0.0 - 11 -10.0 - 21 -10.0 - 31 -0.0 - 0 -LINE - 5 -49 -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 -10.0 - 20 -10.0 - 30 -0.0 - 11 -10.0 - 21 -0.0 - 31 -0.0 - 0 -ENDBLK - 5 -4A -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -BLOCK - 5 -4B -100 -AcDbEntity - 8 -0 -100 -AcDbBlockBegin - 2 -sub2 - 70 -0 - 10 -0.0 - 20 -0.0 - 30 -0.0 - 3 -sub2 - 1 - - 0 -LINE - 5 -4C -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 --10.0 - 20 -0.0 - 30 -0.0 - 11 --20.0 - 21 -10.0 - 31 -0.0 - 0 -LINE - 5 -4D -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 --20.0 - 20 -10.0 - 30 -0.0 - 11 --20.0 - 21 -20.0 - 31 -0.0 - 0 -LINE - 5 -4E -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 --20.0 - 20 -20.0 - 30 -0.0 - 11 -0.0 - 21 -10.0 - 31 -0.0 - 0 -LINE - 5 -4F -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 -0.0 - 20 -10.0 - 30 -0.0 - 11 -20.0 - 21 -20.0 - 31 -0.0 - 0 -LINE - 5 -50 -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 -20.0 - 20 -20.0 - 30 -0.0 - 11 -20.0 - 21 -10.0 - 31 -0.0 - 0 -LINE - 5 -51 -100 -AcDbEntity -100 -AcDbLine - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 10 -20.0 - 20 -10.0 - 30 -0.0 - 11 -10.0 - 21 -0.0 - 31 -0.0 - 0 -ENDBLK - 5 -52 -100 -AcDbEntity - 8 -0 -100 -AcDbBlockEnd - 0 -ENDSEC - 0 -SECTION - 2 -ENTITIES - 0 -INSERT - 5 -53 -100 -AcDbEntity -100 -AcDbBlockReference - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 2 -sub1 - 10 -0.0 - 20 -10.0 - 30 -0.0 - 44 -1.0 - 45 -1.0 - 0 -INSERT - 5 -54 -100 -AcDbEntity -100 -AcDbBlockReference - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 2 -sub1 - 10 -0.0 - 20 --10.0 - 30 -0.0 - 50 -180.0 - 44 -1.0 - 45 -1.0 - 0 -INSERT - 5 -55 -100 -AcDbEntity -100 -AcDbBlockReference - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 2 -sub2 - 10 --10.0 - 20 -0.0 - 30 -0.0 - 50 -90.0 - 44 -1.0 - 45 -1.0 - 0 -INSERT - 5 -56 -100 -AcDbEntity -100 -AcDbBlockReference - 8 -0 - 62 -256 -370 --1 - 6 -ByLayer - 2 -sub2 - 10 -10.0 - 20 -0.0 - 30 -0.0 - 50 -270.0 - 44 -1.0 - 45 -1.0 - 0 -ENDSEC - 0 -SECTION - 2 -OBJECTS - 0 -DICTIONARY - 5 -C -100 -AcDbDictionary -280 -0 -281 -1 - 3 -ACAD_GROUP -350 -D - 3 -ACAD_LAYOUT -350 -1A - 3 -ACAD_MLINESTYLE -350 -17 - 3 -ACAD_PLOTSETTINGS -350 -19 - 3 -ACAD_PLOTSTYLENAME -350 -E - 3 -AcDbVariableDictionary -350 -57 - 0 -DICTIONARY - 5 -D -100 -AcDbDictionary -280 -0 -281 -1 - 0 -ACDBDICTIONARYWDFLT - 5 -E -100 -AcDbDictionary -281 -1 - 3 -Normal -350 -F -100 -AcDbDictionaryWithDefault -340 -F - 0 -ACDBPLACEHOLDER - 5 -F - 0 -DICTIONARY - 5 -17 -100 -AcDbDictionary -280 -0 -281 -1 - 3 -Standard -350 -18 - 0 -MLINESTYLE - 5 -18 -100 -AcDbMlineStyle - 2 -STANDARD - 70 -0 - 3 - - 62 -256 - 51 -90.0 - 52 -90.0 - 71 -2 - 49 -0.5 - 62 -256 - 6 -BYLAYER - 49 --0.5 - 62 -256 - 6 -BYLAYER - 0 -DICTIONARY - 5 -19 -100 -AcDbDictionary -280 -0 -281 -1 - 0 -DICTIONARY - 5 -1A -100 -AcDbDictionary -281 -1 - 3 -Layout1 -350 -1E - 3 -Layout2 -350 -26 - 3 -Model -350 -22 - 0 -LAYOUT - 5 -1E -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -688 - 72 -0 - 73 -0 - 74 -5 - 7 - - 75 -16 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Layout1 - 70 -1 - 71 -1 - 10 -0.0 - 20 -0.0 - 11 -420.0 - 21 -297.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -100000000000000000000.0 - 24 -100000000000000000000.0 - 34 -100000000000000000000.0 - 15 --100000000000000000000.0 - 25 --100000000000000000000.0 - 35 --100000000000000000000.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -1B - 0 -LAYOUT - 5 -22 -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -1712 - 72 -0 - 73 -0 - 74 -0 - 7 - - 75 -0 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Model - 70 -1 - 71 -0 - 10 -0.0 - 20 -0.0 - 11 -12.0 - 21 -9.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -0.0 - 24 -0.0 - 34 -0.0 - 15 -0.0 - 25 -0.0 - 35 -0.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -1F - 0 -LAYOUT - 5 -26 -100 -AcDbPlotSettings - 1 - - 2 -C:\Program Files\AutoCAD 2002\plotters\DWF ePlot (optimized for plotting).pc3 - 4 - - 6 - - 40 -0.0 - 41 -0.0 - 42 -0.0 - 43 -0.0 - 44 -0.0 - 45 -0.0 - 46 -0.0 - 47 -0.0 - 48 -0.0 - 49 -0.0 -140 -0.0 -141 -0.0 -142 -1.0 -143 -1.0 - 70 -688 - 72 -0 - 73 -0 - 74 -5 - 7 - - 75 -16 -147 -1.0 -148 -0.0 -149 -0.0 -100 -AcDbLayout - 1 -Layout2 - 70 -1 - 71 -2 - 10 -0.0 - 20 -0.0 - 11 -12.0 - 21 -9.0 - 12 -0.0 - 22 -0.0 - 32 -0.0 - 14 -0.0 - 24 -0.0 - 34 -0.0 - 15 -0.0 - 25 -0.0 - 35 -0.0 -146 -0.0 - 13 -0.0 - 23 -0.0 - 33 -0.0 - 16 -1.0 - 26 -0.0 - 36 -0.0 - 17 -0.0 - 27 -1.0 - 37 -0.0 - 76 -0 -330 -23 - 0 -DICTIONARY - 5 -57 -100 -AcDbDictionary -281 -1 - 3 -DIMASSOC -350 -59 - 3 -HIDETEXT -350 -58 - 0 -DICTIONARYVAR - 5 -58 -100 -DictionaryVariables -280 -0 - 1 -2 - 0 -DICTIONARYVAR - 5 -59 -100 -DictionaryVariables -280 -0 - 1 -1 - 0 -ENDSEC - 0 -EOF diff --git a/packages/scad-deserializer/tests/examples/example013.scad b/packages/scad-deserializer/tests/examples/example013.scad deleted file mode 100755 index c17422f..0000000 --- a/packages/scad-deserializer/tests/examples/example013.scad +++ /dev/null @@ -1,12 +0,0 @@ - -intersection() -{ - linear_extrude(height = 100, center = true, convexity= 3) - import(file = "example013.dxf"); - rotate([0, 90, 0]) - linear_extrude(height = 100, center = true, convexity= 3) - import(file = "example013.dxf"); - rotate([90, 0, 0]) - linear_extrude(height = 100, center = true, convexity= 3) - import(file = "example013.dxf"); -} \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example014.jscad b/packages/scad-deserializer/tests/examples/example014.jscad deleted file mode 100755 index 4ce6f96..0000000 --- a/packages/scad-deserializer/tests/examples/example014.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(0).rotateY(0).rotateZ(0).intersect([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(10).rotateY(20).rotateZ(300)]).intersect([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(200).rotateY(40).rotateZ(57)]).intersect([CSG.cube({center: [0,0,0],radius: [50,10,10], resolution: 16}).rotateX(20).rotateY(88).rotateZ(57)]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example014.scad b/packages/scad-deserializer/tests/examples/example014.scad deleted file mode 100755 index b88fd92..0000000 --- a/packages/scad-deserializer/tests/examples/example014.scad +++ /dev/null @@ -1,9 +0,0 @@ - -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/packages/scad-deserializer/tests/examples/example015.scad b/packages/scad-deserializer/tests/examples/example015.scad deleted file mode 100755 index e8ac3a6..0000000 --- a/packages/scad-deserializer/tests/examples/example015.scad +++ /dev/null @@ -1,28 +0,0 @@ - -module shape() -{ - difference() - { - translate([ -35, -35 ]) intersection() - { - union() { - difference() { - square(100, true); - square(50, true); - } - translate([ 50, 50 ]) - square(15, true); - } - rotate(45) translate([ 0, -15 ]) square([ 100, 30 ]); - } - - rotate(-45) scale([ 0.7, 1.3 ]) circle(5); - } - - import(file = "example009.dxf", layer = "body", - convexity = 6, scale=2); -} - -// linear_extrude(convexity = 10, center = true) -shape(); - diff --git a/packages/scad-deserializer/tests/examples/example016.scad b/packages/scad-deserializer/tests/examples/example016.scad deleted file mode 100755 index 4ea9655..0000000 --- a/packages/scad-deserializer/tests/examples/example016.scad +++ /dev/null @@ -1,37 +0,0 @@ - -// example016.stl is derived from Mblock.stl -// (c) 2009 Will Langford licensed under -// the Creative Commons - GNU GPL license. -// http://www.thingiverse.com/thing:753 -// -// Jonas Pfeil converted the file to binary -// STL and duplicated its content. - -module blk1() { - cube([ 65, 28, 28 ], center = true); -} - -module blk2() { - difference() { - translate([ 0, 0, 7.5 ]) - cube([ 60, 28, 14 ], center = true); - cube([ 8, 32, 32 ], center = true); - } -} - -module chop() { - translate([ -14, 0, 0 ]) - import(file = "example016.stl", convexity = 12); -} - -difference() { - blk1(); - for (alpha = [0, 90, 180, 270]) { - rotate(alpha, [ 1, 0, 0]) render(convexity = 12) - difference() { - blk2(); - chop(); - } - } -} - diff --git a/packages/scad-deserializer/tests/examples/example016.stl b/packages/scad-deserializer/tests/examples/example016.stl deleted file mode 100755 index c24cdf7..0000000 Binary files a/packages/scad-deserializer/tests/examples/example016.stl and /dev/null differ diff --git a/packages/scad-deserializer/tests/examples/example017.dxf b/packages/scad-deserializer/tests/examples/example017.dxf deleted file mode 100755 index 9b463b5..0000000 --- a/packages/scad-deserializer/tests/examples/example017.dxf +++ /dev/null @@ -1,3874 +0,0 @@ - 0 -SECTION - 2 -BLOCKS - 0 -ENDSEC - 0 -SECTION - 2 -ENTITIES - 0 -LINE - 8 -0 - 10 --147 - 11 --146.675 - 20 --108 - 21 --106.052 - 0 -LINE - 8 -0 - 10 --146.675 - 11 --145.735 - 20 --106.052 - 21 --104.315 - 0 -LINE - 8 -0 - 10 --145.735 - 11 --144.282 - 20 --104.315 - 21 --102.977 - 0 -LINE - 8 -0 - 10 --144.282 - 11 --142.473 - 20 --102.977 - 21 --102.184 - 0 -LINE - 8 -0 - 10 --142.473 - 11 --141 - 20 --102.184 - 21 --102.061 - 0 -LINE - 8 -0 - 10 --141 - 11 --141 - 20 --102.061 - 21 --102 - 0 -LINE - 8 -0 - 10 --141 - 11 --138 - 20 --102 - 21 --102 - 0 -LINE - 8 -0 - 10 --138 - 11 --137.943 - 20 --102 - 21 --101.943 - 0 -LINE - 8 -0 - 10 --137.943 - 11 --137.505 - 20 --101.943 - 21 --101.98 - 0 -LINE - 8 -0 - 10 --137.505 - 11 --135.59 - 20 --101.98 - 21 --101.495 - 0 -LINE - 8 -0 - 10 --135.59 - 11 --133.936 - 20 --101.495 - 21 --100.414 - 0 -LINE - 8 -0 - 10 --133.936 - 11 --132.723 - 20 --100.414 - 21 --98.856 - 0 -LINE - 8 -0 - 10 --132.723 - 11 --132.082 - 20 --98.856 - 21 --96.988 - 0 -LINE - 8 -0 - 10 --132.082 - 11 --132.082 - 20 --96.988 - 21 --96.082 - 0 -LINE - 8 -0 - 10 --132.082 - 11 --132 - 20 --96.082 - 21 --96 - 0 -LINE - 8 -0 - 10 --132 - 11 --132 - 20 --96 - 21 --40 - 0 -LINE - 8 -0 - 10 --132 - 11 --126 - 20 --40 - 21 --40 - 0 -LINE - 8 -0 - 10 --126 - 11 --126 - 20 --40 - 21 --34 - 0 -LINE - 8 -0 - 10 --126 - 11 --116 - 20 --34 - 21 --34 - 0 -LINE - 8 -0 - 10 --116 - 11 --116 - 20 --34 - 21 --40 - 0 -LINE - 8 -0 - 10 --116 - 11 --110 - 20 --40 - 21 --40 - 0 -LINE - 8 -0 - 10 --110 - 11 --110 - 20 --40 - 21 --34 - 0 -LINE - 8 -0 - 10 --110 - 11 --109.944 - 20 --34 - 21 --34.056 - 0 -LINE - 8 -0 - 10 --109.944 - 11 --109.505 - 20 --34.056 - 21 --34.02 - 0 -LINE - 8 -0 - 10 --109.505 - 11 --107.59 - 20 --34.02 - 21 --34.505 - 0 -LINE - 8 -0 - 10 --107.59 - 11 --105.936 - 20 --34.505 - 21 --35.586 - 0 -LINE - 8 -0 - 10 --105.936 - 11 --104.723 - 20 --35.586 - 21 --37.144 - 0 -LINE - 8 -0 - 10 --104.723 - 11 --104.082 - 20 --37.144 - 21 --39.012 - 0 -LINE - 8 -0 - 10 --104.082 - 11 --104.082 - 20 --39.012 - 21 --39.918 - 0 -LINE - 8 -0 - 10 --104.082 - 11 --104 - 20 --39.918 - 21 --40 - 0 -LINE - 8 -0 - 10 --104 - 11 --104 - 20 --40 - 21 --96 - 0 -LINE - 8 -0 - 10 --104 - 11 --103.675 - 20 --96 - 21 --97.948 - 0 -LINE - 8 -0 - 10 --103.675 - 11 --102.735 - 20 --97.948 - 21 --99.685 - 0 -LINE - 8 -0 - 10 --102.735 - 11 --101.282 - 20 --99.685 - 21 --101.023 - 0 -LINE - 8 -0 - 10 --101.282 - 11 --99.473 - 20 --101.023 - 21 --101.816 - 0 -LINE - 8 -0 - 10 --99.473 - 11 --98.067 - 20 --101.816 - 21 --101.933 - 0 -LINE - 8 -0 - 10 --98.067 - 11 --98 - 20 --101.933 - 21 --102 - 0 -LINE - 8 -0 - 10 --98 - 11 --61 - 20 --102 - 21 --102 - 0 -LINE - 8 -0 - 10 --61 - 11 --60.944 - 20 --102 - 21 --102.056 - 0 -LINE - 8 -0 - 10 --60.944 - 11 --60.505 - 20 --102.056 - 21 --102.02 - 0 -LINE - 8 -0 - 10 --60.505 - 11 --58.59 - 20 --102.02 - 21 --102.505 - 0 -LINE - 8 -0 - 10 --58.59 - 11 --56.936 - 20 --102.505 - 21 --103.586 - 0 -LINE - 8 -0 - 10 --56.936 - 11 --55.723 - 20 --103.586 - 21 --105.144 - 0 -LINE - 8 -0 - 10 --55.723 - 11 --55.082 - 20 --105.144 - 21 --107.012 - 0 -LINE - 8 -0 - 10 --55.082 - 11 --55.082 - 20 --107.012 - 21 --107.918 - 0 -LINE - 8 -0 - 10 --55.082 - 11 --55 - 20 --107.918 - 21 --108 - 0 -LINE - 8 -0 - 10 --55 - 11 --61 - 20 --108 - 21 --108 - 0 -LINE - 8 -0 - 10 --61 - 11 --61 - 20 --108 - 21 --114 - 0 -LINE - 8 -0 - 10 --61 - 11 --76 - 20 --114 - 21 --114 - 0 -LINE - 8 -0 - 10 --76 - 11 --76 - 20 --114 - 21 --108 - 0 -LINE - 8 -0 - 10 --76 - 11 --82 - 20 --108 - 21 --108 - 0 -LINE - 8 -0 - 10 --82 - 11 --82 - 20 --108 - 21 --114 - 0 -LINE - 8 -0 - 10 --82 - 11 --141 - 20 --114 - 21 --114 - 0 -LINE - 8 -0 - 10 --141 - 11 --141 - 20 --114 - 21 --113.939 - 0 -LINE - 8 -0 - 10 --141 - 11 --142.473 - 20 --113.939 - 21 --113.816 - 0 -LINE - 8 -0 - 10 --142.473 - 11 --144.282 - 20 --113.816 - 21 --113.023 - 0 -LINE - 8 -0 - 10 --144.282 - 11 --145.735 - 20 --113.023 - 21 --111.685 - 0 -LINE - 8 -0 - 10 --145.735 - 11 --146.675 - 20 --111.685 - 21 --109.948 - 0 -LINE - 8 -0 - 10 --146.675 - 11 --147 - 20 --109.948 - 21 --108 - 0 -LINE - 8 -0 - 10 --102 - 11 --99.771 - 20 -0 - 21 -21.207 - 0 -LINE - 8 -0 - 10 --99.771 - 11 --93.182 - 20 -21.207 - 21 -41.487 - 0 -LINE - 8 -0 - 10 --93.182 - 11 --82.52 - 20 -41.487 - 21 -59.954 - 0 -LINE - 8 -0 - 10 --82.52 - 11 --68.251 - 20 -59.954 - 21 -75.801 - 0 -LINE - 8 -0 - 10 --68.251 - 11 --51 - 20 -75.801 - 21 -88.335 - 0 -LINE - 8 -0 - 10 --51 - 11 --31.52 - 20 -88.335 - 21 -97.008 - 0 -LINE - 8 -0 - 10 --31.52 - 11 --10.662 - 20 -97.008 - 21 -101.441 - 0 -LINE - 8 -0 - 10 --10.662 - 11 -10.662 - 20 -101.441 - 21 -101.441 - 0 -LINE - 8 -0 - 10 -10.662 - 11 -31.52 - 20 -101.441 - 21 -97.008 - 0 -LINE - 8 -0 - 10 -31.52 - 11 -51 - 20 -97.008 - 21 -88.335 - 0 -LINE - 8 -0 - 10 -51 - 11 -68.251 - 20 -88.335 - 21 -75.801 - 0 -LINE - 8 -0 - 10 -68.251 - 11 -82.52 - 20 -75.801 - 21 -59.954 - 0 -LINE - 8 -0 - 10 -82.52 - 11 -93.182 - 20 -59.954 - 21 -41.487 - 0 -LINE - 8 -0 - 10 -93.182 - 11 -99.771 - 20 -41.487 - 21 -21.207 - 0 -LINE - 8 -0 - 10 -99.771 - 11 -102 - 20 -21.207 - 21 -0 - 0 -LINE - 8 -0 - 10 -102 - 11 -99.771 - 20 -0 - 21 --21.207 - 0 -LINE - 8 -0 - 10 -99.771 - 11 -93.182 - 20 --21.207 - 21 --41.487 - 0 -LINE - 8 -0 - 10 -93.182 - 11 -82.52 - 20 --41.487 - 21 --59.954 - 0 -LINE - 8 -0 - 10 -82.52 - 11 -68.251 - 20 --59.954 - 21 --75.801 - 0 -LINE - 8 -0 - 10 -68.251 - 11 -51 - 20 --75.801 - 21 --88.335 - 0 -LINE - 8 -0 - 10 -51 - 11 -31.52 - 20 --88.335 - 21 --97.008 - 0 -LINE - 8 -0 - 10 -31.52 - 11 -10.662 - 20 --97.008 - 21 --101.441 - 0 -LINE - 8 -0 - 10 -10.662 - 11 --10.662 - 20 --101.441 - 21 --101.441 - 0 -LINE - 8 -0 - 10 --10.662 - 11 --31.52 - 20 --101.441 - 21 --97.008 - 0 -LINE - 8 -0 - 10 --31.52 - 11 --51 - 20 --97.008 - 21 --88.335 - 0 -LINE - 8 -0 - 10 --51 - 11 --68.251 - 20 --88.335 - 21 --75.801 - 0 -LINE - 8 -0 - 10 --68.251 - 11 --82.52 - 20 --75.801 - 21 --59.954 - 0 -LINE - 8 -0 - 10 --82.52 - 11 --93.182 - 20 --59.954 - 21 --41.487 - 0 -LINE - 8 -0 - 10 --93.182 - 11 --99.771 - 20 --41.487 - 21 --21.207 - 0 -LINE - 8 -0 - 10 --99.771 - 11 --102 - 20 --21.207 - 21 -0 - 0 -LINE - 8 -0 - 10 --84.638 - 11 --71.648 - 20 --45.402 - 21 --37.902 - 0 -LINE - 8 -0 - 10 --71.648 - 11 --68.648 - 20 --37.902 - 21 --43.098 - 0 -LINE - 8 -0 - 10 --68.648 - 11 --81.638 - 20 --43.098 - 21 --50.598 - 0 -LINE - 8 -0 - 10 --81.638 - 11 --84.638 - 20 --50.598 - 21 --45.402 - 0 -LINE - 8 -0 - 10 --75 - 11 --73.361 - 20 -0 - 21 -15.593 - 0 -LINE - 8 -0 - 10 --73.361 - 11 --68.516 - 20 -15.593 - 21 -30.505 - 0 -LINE - 8 -0 - 10 --68.516 - 11 --60.676 - 20 -30.505 - 21 -44.084 - 0 -LINE - 8 -0 - 10 --60.676 - 11 --50.185 - 20 -44.084 - 21 -55.736 - 0 -LINE - 8 -0 - 10 --50.185 - 11 --37.5 - 20 -55.736 - 21 -64.952 - 0 -LINE - 8 -0 - 10 --37.5 - 11 --23.176 - 20 -64.952 - 21 -71.329 - 0 -LINE - 8 -0 - 10 --23.176 - 11 --7.84 - 20 -71.329 - 21 -74.589 - 0 -LINE - 8 -0 - 10 --7.84 - 11 -7.84 - 20 -74.589 - 21 -74.589 - 0 -LINE - 8 -0 - 10 -7.84 - 11 -23.176 - 20 -74.589 - 21 -71.329 - 0 -LINE - 8 -0 - 10 -23.176 - 11 -37.5 - 20 -71.329 - 21 -64.952 - 0 -LINE - 8 -0 - 10 -37.5 - 11 -50.185 - 20 -64.952 - 21 -55.736 - 0 -LINE - 8 -0 - 10 -50.185 - 11 -60.676 - 20 -55.736 - 21 -44.084 - 0 -LINE - 8 -0 - 10 -60.676 - 11 -68.516 - 20 -44.084 - 21 -30.505 - 0 -LINE - 8 -0 - 10 -68.516 - 11 -73.361 - 20 -30.505 - 21 -15.593 - 0 -LINE - 8 -0 - 10 -73.361 - 11 -75 - 20 -15.593 - 21 -0 - 0 -LINE - 8 -0 - 10 -75 - 11 -73.361 - 20 -0 - 21 --15.593 - 0 -LINE - 8 -0 - 10 -73.361 - 11 -68.516 - 20 --15.593 - 21 --30.505 - 0 -LINE - 8 -0 - 10 -68.516 - 11 -60.676 - 20 --30.505 - 21 --44.084 - 0 -LINE - 8 -0 - 10 -60.676 - 11 -50.185 - 20 --44.084 - 21 --55.736 - 0 -LINE - 8 -0 - 10 -50.185 - 11 -37.5 - 20 --55.736 - 21 --64.952 - 0 -LINE - 8 -0 - 10 -37.5 - 11 -23.176 - 20 --64.952 - 21 --71.329 - 0 -LINE - 8 -0 - 10 -23.176 - 11 -7.84 - 20 --71.329 - 21 --74.589 - 0 -LINE - 8 -0 - 10 -7.84 - 11 --7.84 - 20 --74.589 - 21 --74.589 - 0 -LINE - 8 -0 - 10 --7.84 - 11 --23.176 - 20 --74.589 - 21 --71.329 - 0 -LINE - 8 -0 - 10 --23.176 - 11 --37.5 - 20 --71.329 - 21 --64.952 - 0 -LINE - 8 -0 - 10 --37.5 - 11 --50.185 - 20 --64.952 - 21 --55.736 - 0 -LINE - 8 -0 - 10 --50.185 - 11 --60.676 - 20 --55.736 - 21 --44.084 - 0 -LINE - 8 -0 - 10 --60.676 - 11 --68.516 - 20 --44.084 - 21 --30.505 - 0 -LINE - 8 -0 - 10 --68.516 - 11 --73.361 - 20 --30.505 - 21 --15.593 - 0 -LINE - 8 -0 - 10 --73.361 - 11 --75 - 20 --15.593 - 21 -0 - 0 -LINE - 8 -0 - 10 --47 - 11 --45.973 - 20 -0 - 21 -9.772 - 0 -LINE - 8 -0 - 10 --45.973 - 11 --42.937 - 20 -9.772 - 21 -19.117 - 0 -LINE - 8 -0 - 10 --42.937 - 11 --38.024 - 20 -19.117 - 21 -27.626 - 0 -LINE - 8 -0 - 10 --38.024 - 11 --31.449 - 20 -27.626 - 21 -34.928 - 0 -LINE - 8 -0 - 10 --31.449 - 11 --23.5 - 20 -34.928 - 21 -40.703 - 0 -LINE - 8 -0 - 10 --23.5 - 11 --14.524 - 20 -40.703 - 21 -44.7 - 0 -LINE - 8 -0 - 10 --14.524 - 11 --4.913 - 20 -44.7 - 21 -46.743 - 0 -LINE - 8 -0 - 10 --4.913 - 11 -4.913 - 20 -46.743 - 21 -46.743 - 0 -LINE - 8 -0 - 10 -4.913 - 11 -14.524 - 20 -46.743 - 21 -44.7 - 0 -LINE - 8 -0 - 10 -14.524 - 11 -23.5 - 20 -44.7 - 21 -40.703 - 0 -LINE - 8 -0 - 10 -23.5 - 11 -31.449 - 20 -40.703 - 21 -34.928 - 0 -LINE - 8 -0 - 10 -31.449 - 11 -38.024 - 20 -34.928 - 21 -27.626 - 0 -LINE - 8 -0 - 10 -38.024 - 11 -42.937 - 20 -27.626 - 21 -19.117 - 0 -LINE - 8 -0 - 10 -42.937 - 11 -45.973 - 20 -19.117 - 21 -9.772 - 0 -LINE - 8 -0 - 10 -45.973 - 11 -47 - 20 -9.772 - 21 -0 - 0 -LINE - 8 -0 - 10 -47 - 11 -45.973 - 20 -0 - 21 --9.772 - 0 -LINE - 8 -0 - 10 -45.973 - 11 -42.937 - 20 --9.772 - 21 --19.117 - 0 -LINE - 8 -0 - 10 -42.937 - 11 -38.024 - 20 --19.117 - 21 --27.626 - 0 -LINE - 8 -0 - 10 -38.024 - 11 -31.449 - 20 --27.626 - 21 --34.928 - 0 -LINE - 8 -0 - 10 -31.449 - 11 -23.5 - 20 --34.928 - 21 --40.703 - 0 -LINE - 8 -0 - 10 -23.5 - 11 -14.524 - 20 --40.703 - 21 --44.7 - 0 -LINE - 8 -0 - 10 -14.524 - 11 -4.913 - 20 --44.7 - 21 --46.743 - 0 -LINE - 8 -0 - 10 -4.913 - 11 --4.913 - 20 --46.743 - 21 --46.743 - 0 -LINE - 8 -0 - 10 --4.913 - 11 --14.524 - 20 --46.743 - 21 --44.7 - 0 -LINE - 8 -0 - 10 --14.524 - 11 --23.5 - 20 --44.7 - 21 --40.703 - 0 -LINE - 8 -0 - 10 --23.5 - 11 --31.449 - 20 --40.703 - 21 --34.928 - 0 -LINE - 8 -0 - 10 --31.449 - 11 --38.024 - 20 --34.928 - 21 --27.626 - 0 -LINE - 8 -0 - 10 --38.024 - 11 --42.937 - 20 --27.626 - 21 --19.117 - 0 -LINE - 8 -0 - 10 --42.937 - 11 --45.973 - 20 --19.117 - 21 --9.772 - 0 -LINE - 8 -0 - 10 --45.973 - 11 --47 - 20 --9.772 - 21 -0 - 0 -LINE - 8 -0 - 10 --37.007 - 11 --28.347 - 20 --17.902 - 21 --12.902 - 0 -LINE - 8 -0 - 10 --28.347 - 11 --25.347 - 20 --12.902 - 21 --18.098 - 0 -LINE - 8 -0 - 10 --25.347 - 11 --34.007 - 20 --18.098 - 21 --23.098 - 0 -LINE - 8 -0 - 10 --34.007 - 11 --37.007 - 20 --23.098 - 21 --17.902 - 0 -LINE - 8 -0 - 10 --25 - 11 --24.454 - 20 -0 - 21 -5.198 - 0 -LINE - 8 -0 - 10 --24.454 - 11 --22.839 - 20 -5.198 - 21 -10.168 - 0 -LINE - 8 -0 - 10 --22.839 - 11 --20.225 - 20 -10.168 - 21 -14.695 - 0 -LINE - 8 -0 - 10 --20.225 - 11 --16.728 - 20 -14.695 - 21 -18.579 - 0 -LINE - 8 -0 - 10 --16.728 - 11 --12.5 - 20 -18.579 - 21 -21.651 - 0 -LINE - 8 -0 - 10 --12.5 - 11 --7.725 - 20 -21.651 - 21 -23.776 - 0 -LINE - 8 -0 - 10 --7.725 - 11 --2.613 - 20 -23.776 - 21 -24.863 - 0 -LINE - 8 -0 - 10 --2.613 - 11 -2.613 - 20 -24.863 - 21 -24.863 - 0 -LINE - 8 -0 - 10 -2.613 - 11 -7.725 - 20 -24.863 - 21 -23.776 - 0 -LINE - 8 -0 - 10 -7.725 - 11 -12.5 - 20 -23.776 - 21 -21.651 - 0 -LINE - 8 -0 - 10 -12.5 - 11 -16.728 - 20 -21.651 - 21 -18.579 - 0 -LINE - 8 -0 - 10 -16.728 - 11 -20.225 - 20 -18.579 - 21 -14.695 - 0 -LINE - 8 -0 - 10 -20.225 - 11 -22.839 - 20 -14.695 - 21 -10.168 - 0 -LINE - 8 -0 - 10 -22.839 - 11 -24.454 - 20 -10.168 - 21 -5.198 - 0 -LINE - 8 -0 - 10 -24.454 - 11 -25 - 20 -5.198 - 21 -0 - 0 -LINE - 8 -0 - 10 -25 - 11 -24.454 - 20 -0 - 21 --5.198 - 0 -LINE - 8 -0 - 10 -24.454 - 11 -22.839 - 20 --5.198 - 21 --10.168 - 0 -LINE - 8 -0 - 10 -22.839 - 11 -20.225 - 20 --10.168 - 21 --14.695 - 0 -LINE - 8 -0 - 10 -20.225 - 11 -16.728 - 20 --14.695 - 21 --18.579 - 0 -LINE - 8 -0 - 10 -16.728 - 11 -12.5 - 20 --18.579 - 21 --21.651 - 0 -LINE - 8 -0 - 10 -12.5 - 11 -7.725 - 20 --21.651 - 21 --23.776 - 0 -LINE - 8 -0 - 10 -7.725 - 11 -2.613 - 20 --23.776 - 21 --24.863 - 0 -LINE - 8 -0 - 10 -2.613 - 11 --2.613 - 20 --24.863 - 21 --24.863 - 0 -LINE - 8 -0 - 10 --2.613 - 11 --7.725 - 20 --24.863 - 21 --23.776 - 0 -LINE - 8 -0 - 10 --7.725 - 11 --12.5 - 20 --23.776 - 21 --21.651 - 0 -LINE - 8 -0 - 10 --12.5 - 11 --16.728 - 20 --21.651 - 21 --18.579 - 0 -LINE - 8 -0 - 10 --16.728 - 11 --20.225 - 20 --18.579 - 21 --14.695 - 0 -LINE - 8 -0 - 10 --20.225 - 11 --22.839 - 20 --14.695 - 21 --10.168 - 0 -LINE - 8 -0 - 10 --22.839 - 11 --24.454 - 20 --10.168 - 21 --5.198 - 0 -LINE - 8 -0 - 10 --24.454 - 11 --25 - 20 --5.198 - 21 -0 - 0 -LINE - 8 -0 - 10 --3 - 11 --3 - 20 -31 - 21 -41 - 0 -LINE - 8 -0 - 10 --3 - 11 -3 - 20 -41 - 21 -41 - 0 -LINE - 8 -0 - 10 -3 - 11 -3 - 20 -41 - 21 -31 - 0 -LINE - 8 -0 - 10 -3 - 11 --3 - 20 -31 - 21 -31 - 0 -LINE - 8 -0 - 10 --3 - 11 --3 - 20 -81 - 21 -96 - 0 -LINE - 8 -0 - 10 --3 - 11 -3 - 20 -96 - 21 -96 - 0 -LINE - 8 -0 - 10 -3 - 11 -3 - 20 -96 - 21 -81 - 0 -LINE - 8 -0 - 10 -3 - 11 --3 - 20 -81 - 21 -81 - 0 -LINE - 8 -0 - 10 -25.347 - 11 -28.347 - 20 --18.098 - 21 --12.902 - 0 -LINE - 8 -0 - 10 -28.347 - 11 -37.007 - 20 --12.902 - 21 --17.902 - 0 -LINE - 8 -0 - 10 -37.007 - 11 -34.007 - 20 --17.902 - 21 --23.098 - 0 -LINE - 8 -0 - 10 -34.007 - 11 -25.347 - 20 --23.098 - 21 --18.098 - 0 -LINE - 8 -0 - 10 -55 - 11 -55.082 - 20 --108 - 21 --107.918 - 0 -LINE - 8 -0 - 10 -55.082 - 11 -55.082 - 20 --107.918 - 21 --107.012 - 0 -LINE - 8 -0 - 10 -55.082 - 11 -55.723 - 20 --107.012 - 21 --105.144 - 0 -LINE - 8 -0 - 10 -55.723 - 11 -56.936 - 20 --105.144 - 21 --103.586 - 0 -LINE - 8 -0 - 10 -56.936 - 11 -58.59 - 20 --103.586 - 21 --102.505 - 0 -LINE - 8 -0 - 10 -58.59 - 11 -60.505 - 20 --102.505 - 21 --102.02 - 0 -LINE - 8 -0 - 10 -60.505 - 11 -60.944 - 20 --102.02 - 21 --102.056 - 0 -LINE - 8 -0 - 10 -60.944 - 11 -61 - 20 --102.056 - 21 --102 - 0 -LINE - 8 -0 - 10 -61 - 11 -98 - 20 --102 - 21 --102 - 0 -LINE - 8 -0 - 10 -98 - 11 -98.067 - 20 --102 - 21 --101.933 - 0 -LINE - 8 -0 - 10 -98.067 - 11 -99.473 - 20 --101.933 - 21 --101.816 - 0 -LINE - 8 -0 - 10 -99.473 - 11 -101.282 - 20 --101.816 - 21 --101.023 - 0 -LINE - 8 -0 - 10 -101.282 - 11 -102.735 - 20 --101.023 - 21 --99.685 - 0 -LINE - 8 -0 - 10 -102.735 - 11 -103.675 - 20 --99.685 - 21 --97.948 - 0 -LINE - 8 -0 - 10 -103.675 - 11 -104 - 20 --97.948 - 21 --96 - 0 -LINE - 8 -0 - 10 -104 - 11 -104 - 20 --96 - 21 --40 - 0 -LINE - 8 -0 - 10 -104 - 11 -104.082 - 20 --40 - 21 --39.918 - 0 -LINE - 8 -0 - 10 -104.082 - 11 -104.082 - 20 --39.918 - 21 --39.012 - 0 -LINE - 8 -0 - 10 -104.082 - 11 -104.723 - 20 --39.012 - 21 --37.144 - 0 -LINE - 8 -0 - 10 -104.723 - 11 -105.936 - 20 --37.144 - 21 --35.586 - 0 -LINE - 8 -0 - 10 -105.936 - 11 -107.59 - 20 --35.586 - 21 --34.505 - 0 -LINE - 8 -0 - 10 -107.59 - 11 -109.505 - 20 --34.505 - 21 --34.02 - 0 -LINE - 8 -0 - 10 -109.505 - 11 -109.944 - 20 --34.02 - 21 --34.056 - 0 -LINE - 8 -0 - 10 -109.944 - 11 -110 - 20 --34.056 - 21 --34 - 0 -LINE - 8 -0 - 10 -110 - 11 -110 - 20 --34 - 21 --40 - 0 -LINE - 8 -0 - 10 -110 - 11 -116 - 20 --40 - 21 --40 - 0 -LINE - 8 -0 - 10 -116 - 11 -116 - 20 --40 - 21 --34 - 0 -LINE - 8 -0 - 10 -116 - 11 -126 - 20 --34 - 21 --34 - 0 -LINE - 8 -0 - 10 -126 - 11 -126 - 20 --34 - 21 --40 - 0 -LINE - 8 -0 - 10 -126 - 11 -132 - 20 --40 - 21 --40 - 0 -LINE - 8 -0 - 10 -132 - 11 -132 - 20 --40 - 21 --96 - 0 -LINE - 8 -0 - 10 -132 - 11 -132.082 - 20 --96 - 21 --96.082 - 0 -LINE - 8 -0 - 10 -132.082 - 11 -132.082 - 20 --96.082 - 21 --96.988 - 0 -LINE - 8 -0 - 10 -132.082 - 11 -132.723 - 20 --96.988 - 21 --98.856 - 0 -LINE - 8 -0 - 10 -132.723 - 11 -133.936 - 20 --98.856 - 21 --100.414 - 0 -LINE - 8 -0 - 10 -133.936 - 11 -135.59 - 20 --100.414 - 21 --101.495 - 0 -LINE - 8 -0 - 10 -135.59 - 11 -137.505 - 20 --101.495 - 21 --101.98 - 0 -LINE - 8 -0 - 10 -137.505 - 11 -137.943 - 20 --101.98 - 21 --101.943 - 0 -LINE - 8 -0 - 10 -137.943 - 11 -138 - 20 --101.943 - 21 --102 - 0 -LINE - 8 -0 - 10 -138 - 11 -141 - 20 --102 - 21 --102 - 0 -LINE - 8 -0 - 10 -141 - 11 -141 - 20 --102 - 21 --102.061 - 0 -LINE - 8 -0 - 10 -141 - 11 -142.473 - 20 --102.061 - 21 --102.184 - 0 -LINE - 8 -0 - 10 -142.473 - 11 -144.282 - 20 --102.184 - 21 --102.977 - 0 -LINE - 8 -0 - 10 -144.282 - 11 -145.735 - 20 --102.977 - 21 --104.315 - 0 -LINE - 8 -0 - 10 -145.735 - 11 -146.675 - 20 --104.315 - 21 --106.052 - 0 -LINE - 8 -0 - 10 -146.675 - 11 -147 - 20 --106.052 - 21 --108 - 0 -LINE - 8 -0 - 10 -147 - 11 -146.675 - 20 --108 - 21 --109.948 - 0 -LINE - 8 -0 - 10 -146.675 - 11 -145.735 - 20 --109.948 - 21 --111.685 - 0 -LINE - 8 -0 - 10 -145.735 - 11 -144.282 - 20 --111.685 - 21 --113.023 - 0 -LINE - 8 -0 - 10 -144.282 - 11 -142.473 - 20 --113.023 - 21 --113.816 - 0 -LINE - 8 -0 - 10 -142.473 - 11 -141 - 20 --113.816 - 21 --113.939 - 0 -LINE - 8 -0 - 10 -141 - 11 -141 - 20 --113.939 - 21 --114 - 0 -LINE - 8 -0 - 10 -141 - 11 -82 - 20 --114 - 21 --114 - 0 -LINE - 8 -0 - 10 -82 - 11 -82 - 20 --114 - 21 --108 - 0 -LINE - 8 -0 - 10 -82 - 11 -76 - 20 --108 - 21 --108 - 0 -LINE - 8 -0 - 10 -76 - 11 -76 - 20 --108 - 21 --114 - 0 -LINE - 8 -0 - 10 -76 - 11 -61 - 20 --114 - 21 --114 - 0 -LINE - 8 -0 - 10 -61 - 11 -61 - 20 --114 - 21 --108 - 0 -LINE - 8 -0 - 10 -61 - 11 -55 - 20 --108 - 21 --108 - 0 -LINE - 8 -0 - 10 -55 - 11 -61 - 20 -108 - 21 -108 - 0 -LINE - 8 -0 - 10 -61 - 11 -61 - 20 -108 - 21 -114 - 0 -LINE - 8 -0 - 10 -61 - 11 -76 - 20 -114 - 21 -114 - 0 -LINE - 8 -0 - 10 -76 - 11 -76 - 20 -114 - 21 -108 - 0 -LINE - 8 -0 - 10 -76 - 11 -82 - 20 -108 - 21 -108 - 0 -LINE - 8 -0 - 10 -82 - 11 -82 - 20 -108 - 21 -114 - 0 -LINE - 8 -0 - 10 -82 - 11 -141 - 20 -114 - 21 -114 - 0 -LINE - 8 -0 - 10 -141 - 11 -141 - 20 -114 - 21 -113.939 - 0 -LINE - 8 -0 - 10 -141 - 11 -142.473 - 20 -113.939 - 21 -113.816 - 0 -LINE - 8 -0 - 10 -142.473 - 11 -144.282 - 20 -113.816 - 21 -113.023 - 0 -LINE - 8 -0 - 10 -144.282 - 11 -145.735 - 20 -113.023 - 21 -111.685 - 0 -LINE - 8 -0 - 10 -145.735 - 11 -146.675 - 20 -111.685 - 21 -109.948 - 0 -LINE - 8 -0 - 10 -146.675 - 11 -147 - 20 -109.948 - 21 -108 - 0 -LINE - 8 -0 - 10 -147 - 11 -146.675 - 20 -108 - 21 -106.052 - 0 -LINE - 8 -0 - 10 -146.675 - 11 -145.735 - 20 -106.052 - 21 -104.315 - 0 -LINE - 8 -0 - 10 -145.735 - 11 -144.282 - 20 -104.315 - 21 -102.977 - 0 -LINE - 8 -0 - 10 -144.282 - 11 -142.473 - 20 -102.977 - 21 -102.184 - 0 -LINE - 8 -0 - 10 -142.473 - 11 -141 - 20 -102.184 - 21 -102.061 - 0 -LINE - 8 -0 - 10 -141 - 11 -141 - 20 -102.061 - 21 -102 - 0 -LINE - 8 -0 - 10 -141 - 11 -138 - 20 -102 - 21 -102 - 0 -LINE - 8 -0 - 10 -138 - 11 -137.943 - 20 -102 - 21 -101.943 - 0 -LINE - 8 -0 - 10 -137.943 - 11 -137.505 - 20 -101.943 - 21 -101.98 - 0 -LINE - 8 -0 - 10 -137.505 - 11 -135.59 - 20 -101.98 - 21 -101.495 - 0 -LINE - 8 -0 - 10 -135.59 - 11 -133.936 - 20 -101.495 - 21 -100.414 - 0 -LINE - 8 -0 - 10 -133.936 - 11 -132.723 - 20 -100.414 - 21 -98.856 - 0 -LINE - 8 -0 - 10 -132.723 - 11 -132.082 - 20 -98.856 - 21 -96.988 - 0 -LINE - 8 -0 - 10 -132.082 - 11 -132.082 - 20 -96.988 - 21 -96.082 - 0 -LINE - 8 -0 - 10 -132.082 - 11 -132 - 20 -96.082 - 21 -96 - 0 -LINE - 8 -0 - 10 -132 - 11 -132 - 20 -96 - 21 -40 - 0 -LINE - 8 -0 - 10 -132 - 11 -126 - 20 -40 - 21 -40 - 0 -LINE - 8 -0 - 10 -126 - 11 -126 - 20 -40 - 21 -34 - 0 -LINE - 8 -0 - 10 -126 - 11 -116 - 20 -34 - 21 -34 - 0 -LINE - 8 -0 - 10 -116 - 11 -116 - 20 -34 - 21 -40 - 0 -LINE - 8 -0 - 10 -116 - 11 -110 - 20 -40 - 21 -40 - 0 -LINE - 8 -0 - 10 -110 - 11 -110 - 20 -40 - 21 -34 - 0 -LINE - 8 -0 - 10 -110 - 11 -109.944 - 20 -34 - 21 -34.056 - 0 -LINE - 8 -0 - 10 -109.944 - 11 -109.505 - 20 -34.056 - 21 -34.02 - 0 -LINE - 8 -0 - 10 -109.505 - 11 -107.59 - 20 -34.02 - 21 -34.505 - 0 -LINE - 8 -0 - 10 -107.59 - 11 -105.936 - 20 -34.505 - 21 -35.586 - 0 -LINE - 8 -0 - 10 -105.936 - 11 -104.723 - 20 -35.586 - 21 -37.144 - 0 -LINE - 8 -0 - 10 -104.723 - 11 -104.082 - 20 -37.144 - 21 -39.012 - 0 -LINE - 8 -0 - 10 -104.082 - 11 -104.082 - 20 -39.012 - 21 -39.918 - 0 -LINE - 8 -0 - 10 -104.082 - 11 -104 - 20 -39.918 - 21 -40 - 0 -LINE - 8 -0 - 10 -104 - 11 -104 - 20 -40 - 21 -96 - 0 -LINE - 8 -0 - 10 -104 - 11 -103.675 - 20 -96 - 21 -97.948 - 0 -LINE - 8 -0 - 10 -103.675 - 11 -102.735 - 20 -97.948 - 21 -99.685 - 0 -LINE - 8 -0 - 10 -102.735 - 11 -101.282 - 20 -99.685 - 21 -101.023 - 0 -LINE - 8 -0 - 10 -101.282 - 11 -99.473 - 20 -101.023 - 21 -101.816 - 0 -LINE - 8 -0 - 10 -99.473 - 11 -98.067 - 20 -101.816 - 21 -101.933 - 0 -LINE - 8 -0 - 10 -98.067 - 11 -98 - 20 -101.933 - 21 -102 - 0 -LINE - 8 -0 - 10 -98 - 11 -61 - 20 -102 - 21 -102 - 0 -LINE - 8 -0 - 10 -61 - 11 -60.944 - 20 -102 - 21 -102.056 - 0 -LINE - 8 -0 - 10 -60.944 - 11 -60.505 - 20 -102.056 - 21 -102.02 - 0 -LINE - 8 -0 - 10 -60.505 - 11 -58.59 - 20 -102.02 - 21 -102.505 - 0 -LINE - 8 -0 - 10 -58.59 - 11 -56.936 - 20 -102.505 - 21 -103.586 - 0 -LINE - 8 -0 - 10 -56.936 - 11 -55.723 - 20 -103.586 - 21 -105.144 - 0 -LINE - 8 -0 - 10 -55.723 - 11 -55.082 - 20 -105.144 - 21 -107.012 - 0 -LINE - 8 -0 - 10 -55.082 - 11 -55.082 - 20 -107.012 - 21 -107.918 - 0 -LINE - 8 -0 - 10 -55.082 - 11 -55 - 20 -107.918 - 21 -108 - 0 -LINE - 8 -0 - 10 -68.648 - 11 -71.648 - 20 --43.098 - 21 --37.902 - 0 -LINE - 8 -0 - 10 -71.648 - 11 -84.638 - 20 --37.902 - 21 --45.402 - 0 -LINE - 8 -0 - 10 -84.638 - 11 -81.638 - 20 --45.402 - 21 --50.598 - 0 -LINE - 8 -0 - 10 -81.638 - 11 -68.648 - 20 --50.598 - 21 --43.098 - 0 -ENDSEC - 0 -SECTION - 2 -OBJECTS - 0 -DICTIONARY - 0 -ENDSEC - 0 -EOF diff --git a/packages/scad-deserializer/tests/examples/example017.scad b/packages/scad-deserializer/tests/examples/example017.scad deleted file mode 100755 index 9013d4e..0000000 --- a/packages/scad-deserializer/tests/examples/example017.scad +++ /dev/null @@ -1,157 +0,0 @@ - -// To render the DXF file from the command line: -// openscad -x example017.dxf -D'mode="parts"' example017.scad - -// mode = "parts"; -// mode = "exploded"; -mode = "assembled"; - -thickness = 6; -locklen1 = 15; -locklen2 = 10; -boltlen = 15; -midhole = 10; -inner1_to_inner2 = 50; -total_height = 80; - -module shape_tripod() -{ - x1 = 0; - x2 = x1 + thickness; - x3 = x2 + locklen1; - x4 = x3 + thickness; - x5 = x4 + inner1_to_inner2; - x6 = x5 - thickness; - x7 = x6 - locklen2; - x8 = x7 - thickness; - x9 = x8 - thickness; - x10 = x9 - thickness; - - y1 = 0; - y2 = y1 + thickness; - y3 = y2 + thickness; - y4 = y3 + thickness; - y5 = y3 + total_height - 3*thickness; - y6 = y5 + thickness; - - union() - { - difference() { - polygon([ - [ x1, y2 ], [ x2, y2 ], - [ x2, y1 ], [ x3, y1 ], [ x3, y2 ], - [ x4, y2 ], [ x4, y1 ], [ x5, y1 ], - [ x5 + thickness, y3 ], [ x5, y4 ], - [ x5, y5 ], - [ x6, y5 ], [ x6, y6 ], [ x7, y6 ], [ x7, y5 ], [ x8, y5 ], - [ x8, y6 ], [ x9, y5 ], - [ x9, y4 ], [ x10, y3 ], - [ x2, y3 ] - ]); - translate([ x10, y4 ]) circle(thickness); - translate([ x5 + thickness, y4 ]) circle(thickness); - } - - translate([ x5, y1 ]) - square([ boltlen - thickness, thickness*2 ]); - - translate([ x5 + boltlen - thickness, y2 ]) circle(thickness); - - translate([ x2, y2 ]) intersection() { - circle(thickness); - translate([ -thickness*2, 0 ]) square(thickness*2); - } - - translate([ x8, y5 ]) intersection() { - circle(thickness); - translate([ -thickness*2, 0 ]) square(thickness*2); - } - } -} - -module shape_inner_disc() -{ - difference() { - circle(midhole + boltlen + 2*thickness + locklen2); - for (alpha = [ 0, 120, 240 ]) - rotate(alpha) translate([ 0, midhole + boltlen + thickness + locklen2/2 ]) square([ thickness, locklen2 ], true); - circle(midhole + boltlen); - } -} - -module shape_outer_disc() -{ - difference() { - circle(midhole + boltlen + inner1_to_inner2 + 2*thickness + locklen1); - for (alpha = [ 0, 120, 240 ]) - rotate(alpha) translate([ 0, midhole + boltlen + inner1_to_inner2 + thickness + locklen1/2 ]) square([ thickness, locklen1 ], true); - circle(midhole + boltlen + inner1_to_inner2); - } -} - -module parts() -{ - tripod_x_off = locklen1 - locklen2 + inner1_to_inner2; - tripod_y_off = max(midhole + boltlen + inner1_to_inner2 + 4*thickness + locklen1, total_height); - - shape_inner_disc(); - shape_outer_disc(); - - for (s = [ [1,1], [-1,1], [1,-1] ]) - scale(s) translate([ tripod_x_off, -tripod_y_off ]) shape_tripod(); -} - -module exploded() -{ - translate([ 0, 0, total_height + 2*thickness ]) linear_extrude(height = thickness, convexity = 4) shape_inner_disc(); - linear_extrude(height = thickness, convexity = 4) shape_outer_disc(); - - color([ 0.7, 0.7, 1 ]) for (alpha = [ 0, 120, 240 ]) - rotate(alpha) translate([ 0, thickness*2 + locklen1 + inner1_to_inner2 + boltlen + midhole, 1.5*thickness ]) - rotate([ 90, 0, -90 ]) linear_extrude(height = thickness, convexity = 10, center = true) shape_tripod(); -} - -module bottle() -{ - r = boltlen + midhole; - h = total_height - thickness*2; - - rotate_extrude(convexity = 2) - { - square([ r, h ]); - - translate([ 0, h ]) - intersection() { - square([ r, r ]); - scale([ 1, 0.7 ]) circle(r); - } - - translate([ 0, h+r ]) - intersection() { - translate([ 0, -r/2 ]) square([ r/2, r ]); - circle(r/2); - } - } -} - -module assembled() -{ - translate([ 0, 0, total_height - thickness ]) linear_extrude(height = thickness, convexity = 4) shape_inner_disc(); - linear_extrude(height = thickness, convexity = 4) shape_outer_disc(); - - color([ 0.7, 0.7, 1 ]) for (alpha = [ 0, 120, 240 ]) - rotate(alpha) translate([ 0, thickness*2 + locklen1 + inner1_to_inner2 + boltlen + midhole, 0 ]) - rotate([ 90, 0, -90 ]) linear_extrude(height = thickness, convexity = 10, center = true) shape_tripod(); - - % translate([ 0, 0, thickness*2]) bottle(); -} - -if (mode == "parts") - parts(); - -if (mode == "exploded") - exploded(); - -if (mode == "assembled") - assembled(); - diff --git a/packages/scad-deserializer/tests/examples/example018.jscad b/packages/scad-deserializer/tests/examples/example018.jscad deleted file mode 100755 index dc4e337..0000000 --- a/packages/scad-deserializer/tests/examples/example018.jscad +++ /dev/null @@ -1,4 +0,0 @@ -function main(){ - -return CSG.cube({center: [0,0,0],radius: [30,30,30], resolution: 16}).translate([-150,0,0]).union([CSG.cylinder({start: [0,0,-25], end: [0,0,25],radiusStart: 30, radiusEnd: 30, resolution: 30}).translate([-50,0,0])]).union([CSG.cube({center: [0,0,0],radius: [22.5,22.5,22.5], resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(45).rotateY(0).rotateZ(0),CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(0).rotateY(45).rotateZ(0),CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(0).rotateY(0).rotateZ(45)]).translate([50,0,0])]).union([CSG.sphere({center: [0,0,0], radius: 30, resolution: 30}).translate([150,0,0])]).translate([0,-150,0]).union([CSG.cylinder({start: [0,0,-25], end: [0,0,25],radiusStart: 30, radiusEnd: 30, resolution: 30}).translate([-150,0,0]).union([CSG.cube({center: [0,0,0],radius: [22.5,22.5,22.5], resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(45).rotateY(0).rotateZ(0),CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(0).rotateY(45).rotateZ(0),CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(0).rotateY(0).rotateZ(45)]).translate([-50,0,0])]).union([CSG.sphere({center: [0,0,0], radius: 30, resolution: 30}).translate([50,0,0])]).union([CSG.cube({center: [0,0,0],radius: [30,30,30], resolution: 16}).translate([150,0,0])]).translate([0,-50,0])]).union([CSG.cube({center: [0,0,0],radius: [22.5,22.5,22.5], resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(45).rotateY(0).rotateZ(0),CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(0).rotateY(45).rotateZ(0),CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(0).rotateY(0).rotateZ(45)]).translate([-150,0,0]).union([CSG.sphere({center: [0,0,0], radius: 30, resolution: 30}).translate([-50,0,0])]).union([CSG.cube({center: [0,0,0],radius: [30,30,30], resolution: 16}).translate([50,0,0])]).union([CSG.cylinder({start: [0,0,-25], end: [0,0,25],radiusStart: 30, radiusEnd: 30, resolution: 30}).translate([150,0,0])]).translate([0,50,0])]).union([CSG.sphere({center: [0,0,0], radius: 30, resolution: 30}).translate([-150,0,0]).union([CSG.cube({center: [0,0,0],radius: [30,30,30], resolution: 16}).translate([-50,0,0])]).union([CSG.cylinder({start: [0,0,-25], end: [0,0,25],radiusStart: 30, radiusEnd: 30, resolution: 30}).translate([50,0,0])]).union([CSG.cube({center: [0,0,0],radius: [22.5,22.5,22.5], resolution: 16}).union([CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(45).rotateY(0).rotateZ(0),CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(0).rotateY(45).rotateZ(0),CSG.cube({center: [0,0,0],radius: [25,25,25], resolution: 16}).rotateX(0).rotateY(0).rotateZ(45)]).translate([150,0,0])]).translate([0,150,0])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example018.scad b/packages/scad-deserializer/tests/examples/example018.scad deleted file mode 100755 index 15ed745..0000000 --- a/packages/scad-deserializer/tests/examples/example018.scad +++ /dev/null @@ -1,23 +0,0 @@ - -module step(len, mod) -{ - for (i = [0:$children-1]) - translate([ len*(i - ($children-1)/2), 0, 0 ]) child((i+mod) % $children); -} - -for (i = [1:4]) -{ - translate([0, -250+i*100, 0]) step(100, i) - { - sphere(30); - cube(60, true); - cylinder(r = 30, h = 50, center = true); - - union() { - cube(45, true); - rotate([45, 0, 0]) cube(50, true); - rotate([0, 45, 0]) cube(50, true); - rotate([0, 0, 45]) cube(50, true); - } - } -} diff --git a/packages/scad-deserializer/tests/examples/example019.jscad b/packages/scad-deserializer/tests/examples/example019.jscad deleted file mode 100755 index c5a4680..0000000 --- a/packages/scad-deserializer/tests/examples/example019.jscad +++ /dev/null @@ -1,5 +0,0 @@ -function main(){ - - -return CSG.cylinder({start: [0,0,0], end: [0,0,45],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-100,0,-30]).union([CSG.cylinder({start: [0,0,0], end: [0,0,46.5],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-95,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,48],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-90,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,49.5],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-85,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,51],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-80,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,52.5],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-75,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,54.000000000000014],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-70,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,55.5],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-65,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,57],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-60,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,58.5],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-55,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,60],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-50,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,59],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-45,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,58.00000000000001],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-40,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,57],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-35,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,56],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-30,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,55],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-25,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,54],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-20,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,55.05],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-15,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,56.099999999999994],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-10,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,57.14999999999999],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([-5,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,58.199999999999996],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([0,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,59.25],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([5,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,60.300000000000004],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([10,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,61.35000000000001],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([15,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,62.39999999999999],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([20,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,63.449999999999996],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([25,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,64.5],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([30,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,65.55000000000001],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([35,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,66.6],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([40,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,67.65],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([45,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,68.69999999999999],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([50,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,69.75],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([55,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,70.8],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([60,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,71.85],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([65,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,72.9],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([70,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,73.95],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([75,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,75],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([80,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,70.07142857142857],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([85,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,65.14285714285714],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([90,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,60.21428571428571],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([95,0,-30])]).union([CSG.cylinder({start: [0,0,0], end: [0,0,55.28571428571429],radiusStart: 6, radiusEnd: 2, resolution: 19}).translate([100,0,-30])]); -}; \ No newline at end of file diff --git a/packages/scad-deserializer/tests/examples/example019.scad b/packages/scad-deserializer/tests/examples/example019.scad deleted file mode 100755 index 37a01d6..0000000 --- a/packages/scad-deserializer/tests/examples/example019.scad +++ /dev/null @@ -1,14 +0,0 @@ - -function get_cylinder_h(p) = lookup(p, [ - [ -200, 5 ], - [ -50, 20 ], - [ -20, 18 ], - [ +80, 25 ], - [ +150, 2 ] - ]); - -for (i = [-100:5:+100]) { - // echo(i, get_cylinder_h(i)); - translate([ i, 0, -30 ]) cylinder(r1 = 6, r2 = 2, h = get_cylinder_h(i)*3); -} - diff --git a/packages/scad-deserializer/tests/examples/example020.scad b/packages/scad-deserializer/tests/examples/example020.scad deleted file mode 100755 index e008f0b..0000000 --- a/packages/scad-deserializer/tests/examples/example020.scad +++ /dev/null @@ -1,76 +0,0 @@ - -module screw(type = 2, r1 = 15, r2 = 20, n = 7, h = 100, t = 8) -{ - linear_extrude(height = h, twist = 360*t/n, convexity = t) - difference() { - circle(r2); - for (i = [0:n-1]) { - if (type == 1) rotate(i*360/n) polygon([ - [ 2*r2, 0 ], - [ r2, 0 ], - [ r1*cos(180/n), r1*sin(180/n) ], - [ r2*cos(360/n), r2*sin(360/n) ], - [ 2*r2*cos(360/n), 2*r2*sin(360/n) ], - ]); - if (type == 2) rotate(i*360/n) polygon([ - [ 2*r2, 0 ], - [ r2, 0 ], - [ r1*cos(90/n), r1*sin(90/n) ], - [ r1*cos(180/n), r1*sin(180/n) ], - [ r2*cos(270/n), r2*sin(270/n) ], - [ 2*r2*cos(270/n), 2*r2*sin(270/n) ], - ]); - } - } -} - -module nut(type = 2, r1 = 16, r2 = 21, r3 = 30, s = 6, n = 7, h = 100/5, t = 8/5) -{ - difference() { - cylinder($fn = s, r = r3, h = h); - translate([ 0, 0, -h/2 ]) screw(type, r1, r2, n, h*2, t*2); - } -} - -module spring(r1 = 100, r2 = 10, h = 100, hr = 12) -{ - stepsize = 1/16; - module segment(i1, i2) { - alpha1 = i1 * 360*r2/hr; - alpha2 = i2 * 360*r2/hr; - len1 = sin(acos(i1*2-1))*r2; - len2 = sin(acos(i2*2-1))*r2; - if (len1 < 0.01) - polygon([ - [ cos(alpha1)*r1, sin(alpha1)*r1 ], - [ cos(alpha2)*(r1-len2), sin(alpha2)*(r1-len2) ], - [ cos(alpha2)*(r1+len2), sin(alpha2)*(r1+len2) ] - ]); - if (len2 < 0.01) - polygon([ - [ cos(alpha1)*(r1+len1), sin(alpha1)*(r1+len1) ], - [ cos(alpha1)*(r1-len1), sin(alpha1)*(r1-len1) ], - [ cos(alpha2)*r1, sin(alpha2)*r1 ], - ]); - if (len1 >= 0.01 && len2 >= 0.01) - polygon([ - [ cos(alpha1)*(r1+len1), sin(alpha1)*(r1+len1) ], - [ cos(alpha1)*(r1-len1), sin(alpha1)*(r1-len1) ], - [ cos(alpha2)*(r1-len2), sin(alpha2)*(r1-len2) ], - [ cos(alpha2)*(r1+len2), sin(alpha2)*(r1+len2) ] - ]); - } - linear_extrude(height = 100, twist = 180*h/hr, - $fn = (hr/r2)/stepsize, convexity = 5) { - for (i = [ stepsize : stepsize : 1+stepsize/2 ]) - segment(i-stepsize, min(i, 1)); - } -} - -translate([ -30, 0, 0 ]) -screw(); - -translate([ 30, 0, 0 ]) -nut(); - -spring(); diff --git a/packages/scad-deserializer/tests/examples/example021.scad b/packages/scad-deserializer/tests/examples/example021.scad deleted file mode 100755 index f5dfb78..0000000 --- a/packages/scad-deserializer/tests/examples/example021.scad +++ /dev/null @@ -1,32 +0,0 @@ - -module thing() -{ - $fa = 30; - difference() { - sphere(r = 25); - cylinder(h = 62.5, r1 = 12.5, r2 = 6.25, center = true); - rotate(90, [ 1, 0, 0 ]) cylinder(h = 62.5, - r1 = 12.5, r2 = 6.25, center = true); - rotate(90, [ 0, 1, 0 ]) cylinder(h = 62.5, - r1 = 12.5, r2 = 6.25, center = true); - } -} - -module demo_proj() -{ - linear_extrude(center = true, height = 0.5) projection(cut = false) thing(); - % thing(); -} - -module demo_cut() -{ - for (i=[-20:5:+20]) { - rotate(-30, [ 1, 1, 0 ]) translate([ 0, 0, -i ]) - linear_extrude(center = true, height = 0.5) projection(cut = true) - translate([ 0, 0, i ]) rotate(+30, [ 1, 1, 0 ]) thing(); - } - % thing(); -} - -translate([ -30, 0, 0 ]) demo_proj(); -translate([ +30, 0, 0 ]) demo_cut(); diff --git a/packages/scad-deserializer/tests/examples/example022.scad b/packages/scad-deserializer/tests/examples/example022.scad deleted file mode 100755 index d487829..0000000 --- a/packages/scad-deserializer/tests/examples/example022.scad +++ /dev/null @@ -1,36 +0,0 @@ -// size is a vector [w, h, d] -module roundedBox(size, radius, sidesonly) -{ - rot = [ [0,0,0], [90,0,90], [90,90,0] ]; - if (sidesonly) { - cube(size - [2*radius,0,0], true); - cube(size - [0,2*radius,0], true); - for (x = [radius-size[0]/2, -radius+size[0]/2], - y = [radius-size[1]/2, -radius+size[1]/2]) { - translate([x,y,0]) cylinder(r=radius, h=size[2], center=true); - } - } - else { - cube([size[0], size[1]-radius*2, size[2]-radius*2], center=true); - cube([size[0]-radius*2, size[1], size[2]-radius*2], center=true); - cube([size[0]-radius*2, size[1]-radius*2, size[2]], center=true); - - for (axis = [0:2]) { - for (x = [radius-size[axis]/2, -radius+size[axis]/2], - y = [radius-size[(axis+1)%3]/2, -radius+size[(axis+1)%3]/2]) { - rotate(rot[axis]) - translate([x,y,0]) - cylinder(h=size[(axis+2)%3]-2*radius, r=radius, center=true); - } - } - for (x = [radius-size[0]/2, -radius+size[0]/2], - y = [radius-size[1]/2, -radius+size[1]/2], - z = [radius-size[2]/2, -radius+size[2]/2]) { - translate([x,y,z]) sphere(radius); - } - } -} - -translate([-15,0,0])roundedBox([20,30,40], 5, true); -translate([15,0,0]) roundedBox([20,30,40], 5, false); - diff --git a/packages/scad-deserializer/tests/examples/example023.scad b/packages/scad-deserializer/tests/examples/example023.scad deleted file mode 100755 index 1332899..0000000 --- a/packages/scad-deserializer/tests/examples/example023.scad +++ /dev/null @@ -1,20 +0,0 @@ -// Example combining MCAD/fonts.scad with search() function. - -use - -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 = ` - + - + ` + + const observed = serializer.serialize(source(), undefined, {output: 'jscad', addMetaData: false}) + t.deepEqual([expected], observed) +}) diff --git a/packages/x3d-serializer/index.js b/packages/x3d-serializer/index.js index 0215228..f60dcaa 100644 --- a/packages/x3d-serializer/index.js +++ b/packages/x3d-serializer/index.js @@ -1,169 +1,120 @@ -/* -JSCAD Object to X3D (XML) 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: - IndexedTriangleSet with Coordinates and Colors -3) Path2D conversion to: - none - -TBD -1) gzipped is also possible; same mime type, with file extension .x3dz -*/ - -//const {ensureManifoldness} = require('@jscad/io-utils') -const {isCSG} = require('@jscad/csg') -const {ensureManifoldness} = require('@jscad/io-utils') -const {toArray} = require('@jscad/io-utils/arrays') - -const stringify = require('onml/lib/stringify') - -// http://www.web3d.org/x3d/content/X3dTooltips.html -// http://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html#Meshes -// https://x3dgraphics.com/examples/X3dForWebAuthors/Chapter13GeometryTrianglesQuadrilaterals/ +// import xmldom from 'xmldom' +const xmldom = require('xmldom') +const { ensureManifoldness } = require('@jscad/io-utils') const mimeType = 'model/x3d+xml' -/** Serialize the give objects to X3D (xml) format. - * @param {Object} [options] - options for serialization - * @param {Object|Array} objects - objects to serialize as X3D - * @returns {Array} serialized contents, X3D 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) - - const defaults = { - statusCallback: null, - unit: 'millimeter', // millimeter, inch, feet, meter or micrometer - color: [0, 0, 1, 1.0], // default colorRGBA specification - decimals: 1000 - } - options = Object.assign({}, defaults, options) - - options.statusCallback && options.statusCallback({progress: 0}) - - // construct the contents of the XML - var body = ['X3D', - { - profile: 'Interchange', - version: '3.3', - 'xmlns:xsd': 'http://www.w3.org/2001/XMLSchema-instance', - 'xsd:noNamespaceSchemaLocation': 'http://www.web3d.org/specifications/x3d-3.3.xsd' - }, - ['head', {}, - ['meta',{name: 'creator', content: 'Created using JSCAD'}] - ] - ] - body = body.concat(convertObjects(objects, options)) - - // convert the contents to X3D (XML) format - var contents = ` -${stringify(body)}` - - options && options.statusCallback && options.statusCallback({progress: 100}) - - return [contents] -} +const XMLSerializer = xmldom.XMLSerializer +// NOTE: might be useful :https://github.com/jindw/xmldom/pull/152/commits/be5176ece6fa1591daef96a5f361aaacaa445175 + +function serialize (CSG, options) { + options && options.statusCallback && options.statusCallback({progress: 0}) + CSG = ensureManifoldness(CSG) + const DOMImplementation = typeof document !== 'undefined' ? document.implementation : new xmldom.DOMImplementation() + // materialPolygonLists + // key: a color string (e.g. "0 1 1" for yellow) + // value: an array of strings specifying polygons of this color + // (as space-separated indices into vertexCoords) + var materialPolygonLists = {} + // list of coordinates (as "x y z" strings) + var vertexCoords = [] + // map to look up the index in vertexCoords of a given vertex + var vertexTagToCoordIndexMap = {} -const convertObjects = (objects, options) => { - let scene = ['Scene', {}] - let shapes = [] - objects.forEach(function (object, i) { - options.statusCallback && options.statusCallback({progress: 100 * i / objects.length}) - if (isCSG(object) && object.polygons.length > 0) { - object = ensureManifoldness(object) - shapes.push(convertCSG(object, options)) + CSG.polygons.map(function (p, i) { + var red = 0 + var green = 0 + var blue = 1 // default color is blue + if (p.shared && p.shared.color) { + red = p.shared.color[0] + green = p.shared.color[1] + blue = p.shared.color[2] } - }) - scene = scene.concat(shapes) - return [scene] -} -const convertCSG = (object, options) => { - var shape = ['Shape', {}, convertMesh(object, options)] - return shape -} - -const convertMesh = (object, options) => { - let mesh = object.toTriangles() - let lists = polygons2coordinates(mesh, options) - - let indexList = lists[0].join(' ') - let pointList = lists[1].join(' ') - let colorList = lists[2].join(' ') - - var faceset = [ - 'IndexedTriangleSet', - {ccw: 'true', colorPerVertex: 'false', solid: 'false', index: indexList}, - ['Coordinate', {point: pointList}], - ['Color', {color: colorList}] - ] - return faceset -} - -const convertToColor = (polygon, options) => { - let color = options.color - if (polygon.shared && polygon.shared.color) { - color = polygon.shared.color - } else if (polygon.color) { - color = polygon.color - } - if (color.length < 4) color.push(1.0) - return `${color[0]} ${color[1]} ${color[2]}` -} - -/** - * This function converts the given polygons into three lists - * - indexList : index of each vertex in the triangle (tuples) - * - pointList : coordinates of each vertex (X Y Z) - * - colorList : color of each triangle (R G B) - */ -const polygons2coordinates = (polygons, options) => { - var indexList = [] - var pointList = [] - var colorList = [] - - var vertexTagToCoordIndexMap = {} - polygons.map(function (polygon, i) { - let polygonVertexIndices = [] - let numvertices = polygon.vertices.length + var polygonVertexIndices = [] + var numvertices = p.vertices.length + var vertex for (var i = 0; i < numvertices; i++) { - let vertex = polygon.vertices[i] - // add the vertex to the list of points (and index) if not found + vertex = p.vertices[i] if (!(vertex.getTag() in vertexTagToCoordIndexMap)) { - let x = Math.round(vertex.pos._x * options.decimals) / options.decimals - let y = Math.round(vertex.pos._y * options.decimals) / options.decimals - let z = Math.round(vertex.pos._z * options.decimals) / options.decimals - pointList.push(`${x} ${y} ${z}`) - vertexTagToCoordIndexMap[vertex.getTag()] = pointList.length - 1 + vertexCoords.push(vertex.pos._x.toString() + ' ' + + vertex.pos._y.toString() + ' ' + + vertex.pos._z.toString() + ) + vertexTagToCoordIndexMap[vertex.getTag()] = vertexCoords.length - 1 } - // add the index (of the vertext) to the list for this polygon polygonVertexIndices.push(vertexTagToCoordIndexMap[vertex.getTag()]) } - indexList.push(polygonVertexIndices.join(' ')) - colorList.push(convertToColor(polygon, options)) + + var polygonString = polygonVertexIndices.join(' ') + + var colorString = red.toString() + ' ' + green.toString() + ' ' + blue.toString() + if (!(colorString in materialPolygonLists)) { + materialPolygonLists[colorString] = [] + } + // add this polygonString to the list of colorString-colored polygons + materialPolygonLists[colorString].push(polygonString) + options && options.statusCallback && options.statusCallback({progress: 100 * i / CSG.polygons.length}) }) - return [indexList, pointList, colorList] + + // create output document + var docType = DOMImplementation.createDocumentType('X3D', + 'ISO//Web3D//DTD X3D 3.1//EN', 'http://www.web3d.org/specifications/x3d-3.1.dtd') + var exportDoc = DOMImplementation.createDocument(null, 'X3D', docType) + exportDoc.insertBefore( + exportDoc.createProcessingInstruction('xml', 'version="1.0" encoding="UTF-8"'), + exportDoc.doctype) + + var exportRoot = exportDoc.getElementsByTagName('X3D')[0] + exportRoot.setAttribute('profile', 'Interchange') + exportRoot.setAttribute('version', '3.1') + exportRoot.setAttribute('xsd:noNamespaceSchemaLocation', 'http://www.web3d.org/specifications/x3d-3.1.xsd') + exportRoot.setAttribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema-instance') + + var exportScene = exportDoc.createElement('Scene') + exportRoot.appendChild(exportScene) + + /* + For each color, create a shape made of an appropriately colored + material which contains all polygons that are this color. + + The first shape will contain the definition of all vertices, + (), which will be referenced by + subsequent shapes. + */ + var coordsMeshDefined = false + for (var colorString in materialPolygonLists) { + var polygonList = materialPolygonLists[colorString] + var shape = exportDoc.createElement('Shape') + exportScene.appendChild(shape) + + var appearance = exportDoc.createElement('Appearance') + shape.appendChild(appearance) + + var material = exportDoc.createElement('Material') + appearance.appendChild(material) + material.setAttribute('diffuseColor', colorString) + material.setAttribute('ambientIntensity', '1.0') + + var ifs = exportDoc.createElement('IndexedFaceSet') + shape.appendChild(ifs) + ifs.setAttribute('solid', 'true') + ifs.setAttribute('coordIndex', polygonList.join(' -1 ') + ' -1') + + var coordinate = exportDoc.createElement('Coordinate') + ifs.appendChild(coordinate) + if (coordsMeshDefined) { + coordinate.setAttribute('USE', 'coords_mesh') + } else { + coordinate.setAttribute('DEF', 'coords_mesh') + coordinate.setAttribute('point', vertexCoords.join(' ')) + coordsMeshDefined = true + } + } + + const x3dstring = (new XMLSerializer()).serializeToString(exportDoc) + options && options.statusCallback && options.statusCallback({progress: 100}) + return [x3dstring] } module.exports = { diff --git a/packages/x3d-serializer/package.json b/packages/x3d-serializer/package.json index 40c8403..370c741 100644 --- a/packages/x3d-serializer/package.json +++ b/packages/x3d-serializer/package.json @@ -33,11 +33,10 @@ ], "license": "MIT", "dependencies": { - "@jscad/csg": "0.7.0", "@jscad/io-utils": "^0.1.3", - "onml": "^0.4.1" + "xmldom": "^0.1.27" }, "devDependencies": { - "ava": "^0.19.1" + "@jscad/csg": "0.7.0" } } diff --git a/packages/x3d-serializer/test.js b/packages/x3d-serializer/test.js index b2212a7..d239334 100644 --- a/packages/x3d-serializer/test.js +++ b/packages/x3d-serializer/test.js @@ -2,66 +2,10 @@ const test = require('ava') const {CSG} = require('@jscad/csg') const serializer = require('./index.js') -test('serialize CSG objects to X3D', function (t) { - const csg1 = new CSG() +test('serialize csg to x3d', function (t) { + const input = new CSG.cube() + const expected = [ '' ] + const observed = serializer.serialize(input, {binary: true}) - const observed1 = serializer.serialize({}, csg1) - t.deepEqual(observed1, [expected1]) - - const csg2 = new CSG.cube() - - const observed2 = serializer.serialize({}, csg2) - t.deepEqual(observed2, [expected2]) - - const csg3 = new CSG.cube({center: [5, 5, 5]}).setColor([0.5, 1, 0.5]) - - const observed3 = serializer.serialize({}, [csg2, csg3]) - t.deepEqual(observed3, [expected3]) + t.deepEqual(observed, expected) }) - -const expected1 = ` - - - - - - -` - -const expected2 = ` - - - - - - - - - - - - - -` - -const expected3 = ` - - - - - - - - - - - - - - - - - - - -`