restructure code, internalize devices

This commit is contained in:
Stewart Allen 2020-06-03 22:39:30 -04:00
commit 02feb524e6
110 changed files with 592 additions and 681 deletions

284
app.js
View file

@ -8,7 +8,7 @@ const fs = require('fs');
const uglify = require('uglify-es'); const uglify = require('uglify-es');
const moment = require('moment'); const moment = require('moment');
const agent = require('express-useragent'); const agent = require('express-useragent');
const license = require_fresh('./js/license.js'); const license = require_fresh('./src/license.js');
const version = license.VERSION || "rogue"; const version = license.VERSION || "rogue";
const fileCache = {}; const fileCache = {};
@ -16,12 +16,7 @@ const code_src = {};
const code = {}; const code = {};
const mods = {}; const mods = {};
const load = []; const load = [];
const device = { const synth = {};
fdm: [],
sla: [],
cam: [],
laser: []
};
let level; let level;
let cacheDir; let cacheDir;
@ -68,9 +63,8 @@ function init(mod) {
[ "/data/", handleData ], [ "/data/", handleData ],
[ "/wasm/", handleWasm ] [ "/wasm/", handleWasm ]
])); ]));
mod.add(fixedmap("/api/", api));
if (debug) { if (debug) {
mod.static("/js/", "js"); mod.static("/src/", "src");
mod.static("/mod/", "mod"); mod.static("/mod/", "mod");
mod.sync("/reload", () => { mod.sync("/reload", () => {
mod.reload(); mod.reload();
@ -122,7 +116,7 @@ function loadModule(mod, dir) {
function initModule(mod, file, dir) { function initModule(mod, file, dir) {
logger.log({module: file}); logger.log({module: file});
require_fresh(file)({ require_fresh(file)({
api: api, api: {},
adm: { adm: {
reload: prepareScripts reload: prepareScripts
}, },
@ -208,139 +202,122 @@ function initModule(mod, file, dir) {
}); });
} }
const api = {
"filters-fdm": (req, res, next) => {
res.setHeader("Content-Type", "application/javascript");
res.end(JSON.stringify(device.fdm));
},
"filters-sla": (req, res, next) => {
res.setHeader("Content-Type", "application/javascript");
res.end(JSON.stringify(device.sla));
},
"filters-cam": (req, res, next) => {
res.setHeader("Content-Type", "application/javascript");
res.end(JSON.stringify(device.cam));
},
"filters-laser": (req, res, next) => {
res.setHeader("Content-Type", "application/javascript");
res.end(JSON.stringify(device.laser));
}
};
const script = { const script = {
kiri : [ kiri : [
"ext-three",
"license",
"ext-clip2",
"ext-tween",
"ext-fsave",
"ext-earcut",
"add-array",
"add-three",
"geo",
"geo-debug",
"geo-render",
"geo-point",
"geo-slope",
"geo-line",
"geo-bounds",
"geo-polygon",
"geo-polygons",
"geo-gyroid",
"moto-kv",
"moto-ajax",
"moto-ctrl",
"moto-space",
"moto-load-stl",
"moto-db",
"moto-ui",
"kiri-icons",
"kiri-lang",
"kiri-lang-en",
"kiri-fill",
"kiri-db",
"kiri-slice",
"kiri-slicer",
"kiri-driver-fdm",
"kiri-driver-sla",
"kiri-driver-cam",
"kiri-driver-laser",
"kiri-pack",
"kiri-layer",
"kiri-widget",
"kiri-print",
"kiri-codec",
"kiri-work",
"kiri-conf",
"kiri", "kiri",
"kiri-init", "ext/three",
"kiri-export" "license",
].map(p => `js/${p}.js`), "ext/clip2",
"ext/tween",
"ext/fsave",
"ext/earcut",
"add/array",
"add/three",
"geo/base",
"geo/debug",
"geo/render",
"geo/point",
"geo/slope",
"geo/line",
"geo/bounds",
"geo/polygon",
"geo/polygons",
"geo/gyroid",
"moto/kv",
"moto/ajax",
"moto/ctrl",
"moto/pack",
"moto/space",
"moto/load-stl",
"moto/db",
"moto/ui",
"kiri/icons",
"kiri/lang",
"kiri/lang-en",
"kiri/fill",
"kiri/db",
"kiri/slice",
"kiri/slicer",
"mode/fdm/driver",
"mode/sla/driver",
"mode/cam/driver",
"mode/laser/driver",
"kiri/layer",
"kiri/widget",
"kiri/print",
"kiri/codec",
"kiri/work",
"kiri/conf",
"kiri/main",
"kiri/init",
"kiri/export",
"@devices"
].map(p => p.charAt(0) !== '@' ? `src/${p}.js` : p),
work : [ work : [
"ext-three", "kiri",
"ext-pngjs", "ext/three",
"ext/pngjs",
"license", "license",
"ext-clip2", "ext/clip2",
"add-array", "add/array",
"add-three", "add/three",
"add-class", "add/class",
"geo", "geo/base",
// "geo-wasm", // "geo/wasm",
"geo-debug", "geo/debug",
"geo-point", "geo/point",
"geo-slope", "geo/slope",
"geo-line", "geo/line",
"geo-bounds", "geo/bounds",
"geo-polygon", "geo/polygon",
"geo-polygons", "geo/polygons",
"geo-gyroid", "geo/gyroid",
"kiri-fill", "moto/pack",
"kiri-slice", "kiri/fill",
"kiri-slicer", "kiri/slice",
"kiri-driver-fdm", "kiri/slicer",
"kiri-driver-sla", "mode/fdm/driver",
"kiri-driver-cam", "mode/sla/driver",
"kiri-driver-laser", "mode/cam/driver",
"kiri-pack", "mode/laser/driver",
"kiri-widget", "kiri/widget",
"kiri-print", "kiri/print",
"kiri-codec" "kiri/codec"
].map(p => `js/${p}.js`), ].map(p => `src/${p}.js`),
worker : [ worker : [
"kiri-worker" "kiri",
].map(p => `js/${p}.js`),
meta : [
"ext-three",
"license", "license",
"ext-tween", "kiri/worker"
"ext-fsave", ].map(p => `src/${p}.js`),
"ext-earcut", meta : [
"add-array", "ext/three",
"add-three", "license",
"geo", "ext/tween",
"geo-debug", "ext/fsave",
"geo-render", "ext/earcut",
"geo-point", "add/array",
"geo-slope", "add/three",
"geo-line", "geo/base",
"geo-bounds", "geo/debug",
"geo-polygon", "geo/render",
"geo-polygons", "geo/point",
"geo-gyroid", "geo/slope",
"kiri-layer", "geo/line",
"moto-kv", "geo/bounds",
"moto-ajax", "geo/polygon",
"moto-ctrl", "geo/polygons",
"moto-space", "geo/gyroid",
"moto-load-stl", "kiri/layer",
"moto-db", "moto/kv",
"moto-ui", "moto/ajax",
"kiri-db", "moto/ctrl",
"moto/space",
"moto/load-stl",
"moto/db",
"moto/ui",
"kiri/db",
"meta" "meta"
].map(p => `js/${p}.js`) ].map(p => `src/${p}.js`)
}; };
const db = { const db = {
@ -619,22 +596,19 @@ function serveCode(req, res, code) {
} }
function prepareScripts() { function prepareScripts() {
let root = `${dir}/src/dev`;
let devs = {};
fs.readdirSync(root).forEach(type => {
let map = devs[type] = devs[type] || {};
fs.readdirSync(`${root}/${type}`).forEach(device => {
map[device] = JSON.parse(fs.readFileSync(`${root}/${type}/${device}`));
});
});
synth.devices = `devices = ${JSON.stringify(devs)};`;
code.meta = concatCode(script.meta); code.meta = concatCode(script.meta);
code.kiri = concatCode(script.kiri); code.kiri = concatCode(script.kiri);
code.work = concatCode(script.work); code.work = concatCode(script.work);
code.worker = concatCode(script.worker); code.worker = concatCode(script.worker);
fs.readdir(dir + "/web/kiri/filter/FDM", function(err, files) {
device.fdm = files || device.fdm;
});
fs.readdir(dir + "/web/kiri/filter/SLA", function(err, files) {
device.sla = files || device.sla;
});
fs.readdir(dir + "/web/kiri/filter/CAM", function(err, files) {
device.cam = files || device.cam;
});
fs.readdir(dir + "/web/kiri/filter/LASER", function(err, files) {
device.laser = files || device.laser;
});
} }
function concatCode(array) { function concatCode(array) {
@ -643,11 +617,10 @@ function concatCode(array) {
// in debug mode, the script should load dependent // in debug mode, the script should load dependent
// scripts instead of serving a complete bundle // scripts instead of serving a complete bundle
if (debug) { if (debug) {
let direct = array.filter(f => f.charAt(0) !== '@');
let inject = array.filter(f => f.charAt(0) === '@').map(f => f.substring(1));
let code = [ `(function() { let load = [ `]; let code = [ `(function() { let load = [ `];
array.forEach(file => { direct.forEach(file => {
// if (file.indexOf(":\\") > 0) {
// file = `/${file}`;
// }
code.push(`"/${file.replace(/\\/g,'/')}?${version}",`); code.push(`"/${file.replace(/\\/g,'/')}?${version}",`);
}); });
code.push([ code.push([
@ -663,16 +636,23 @@ function concatCode(array) {
'}; load_next(); })();', '}; load_next(); })();',
'self.debug=true;' 'self.debug=true;'
].join('\n')); ].join('\n'));
inject.forEach(key => {
code.push(synth[key]);
});
return code.join('\n'); return code.join('\n');
} }
array.forEach(file => { direct.forEach(file => {
let cached = getCachedFile(file, function(path) { let cached = getCachedFile(file, function(path) {
return minify(`${dir}/${file}`); return minify(`${dir}/${file}`);
}); });
code.push(cached); code.push(cached);
}); });
inject.forEach(key => {
code.push(synth[key]);
});
return code.join(''); return code.join('');
} }

View file

@ -1 +0,0 @@
../node_modules/earcut/src/earcut.js

View file

@ -1 +0,0 @@
../node_modules/three/build/three.min.js

View file

@ -1 +0,0 @@
../node_modules/tween.js/index.js

View file

@ -1 +0,0 @@
../web/kiri/lang/en.js

View file

@ -1,7 +0,0 @@
var exports = {
COPYRIGHT:"Copyright (C) Stewart Allen <sa@grid.space> - All Rights Reserved",
LICENSE:"See the license.md file included with the source distribution",
VERSION:"3.0.0-dev"
};
if (!module) var module = {};
module.exports = exports;

View file

@ -29,6 +29,7 @@
* `F` determine start point from gcode preamble * `F` determine start point from gcode preamble
* `F` trim support offset from layer below * `F` trim support offset from layer below
* `F` option to support interior bridges when 0% infill * `F` option to support interior bridges when 0% infill
* `F` calculate filament use per extruder per print
* `P` refactor thin fill to use outline and inside poly normal dist to self * `P` refactor thin fill to use outline and inside poly normal dist to self
* `P` segment large polygons for extremely large parts / infill * `P` segment large polygons for extremely large parts / infill
* `P` implement infill clipping in wasm * `P` implement infill clipping in wasm

View file

@ -12,11 +12,11 @@
"tool-change":[ "tool-change":[
"M6 T{tool} ; change tool to '{tool_name}'" "M6 T{tool} ; change tool to '{tool_name}'"
], ],
"dwell":[ "dwell":[
"G4 P{time} ; dwell for {time}ms" "G4 P{time} ; dwell for {time}ms"
], ],
"settings": { "settings": {
"bed_width": 400, "bed_width": 400,
"bed_depth": 400 "bed_depth": 400
} }
} }

View file

@ -5,20 +5,20 @@
"pre":[ "pre":[
"G21 ; set units to MM (required)", "G21 ; set units to MM (required)",
"G90 ; absolute position mode (required)", "G90 ; absolute position mode (required)",
"M03 S20000 ; spindle on" "M03 S20000 ; spindle on"
], ],
"post":[ "post":[
"M05 ; spindle off", "M05 ; spindle off",
"M30 ; program end" "M30 ; program end"
], ],
"tool-change":[ "tool-change":[
"M6 T{tool} ; change tool to '{tool_name}'" "M6 T{tool} ; change tool to '{tool_name}'"
], ],
"dwell":[ "dwell":[
"G4 P{time} ; dwell for {time}ms" "G4 P{time} ; dwell for {time}ms"
], ],
"settings": { "settings": {
"bed_width": 400, "bed_width": 400,
"bed_depth": 400 "bed_depth": 400
} }
} }

View file

@ -12,11 +12,11 @@
"tool-change":[ "tool-change":[
"M6 T{tool} ; change tool to '{tool_name}'" "M6 T{tool} ; change tool to '{tool_name}'"
], ],
"dwell":[ "dwell":[
"G4 P{time} ; dwell for {time}ms" "G4 P{time} ; dwell for {time}ms"
], ],
"settings": { "settings": {
"bed_width": 200, "bed_width": 200,
"bed_depth": 200 "bed_depth": 200
} }
} }

1
src/ext/earcut.js Symbolic link
View file

@ -0,0 +1 @@
../../node_modules/earcut/src/earcut.js

1
src/ext/three.js Symbolic link
View file

@ -0,0 +1 @@
../../node_modules/three/build/three.min.js

1
src/ext/tween.js Symbolic link
View file

@ -0,0 +1 @@
../../node_modules/tween.js/index.js

View file

@ -1,22 +1,19 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_base = exports;
(function() { (function() {
if (!self.base) self.base = {}; if (self.base) return;
if (self.base.util) return;
var BASE = self.base, const BASE = self.base = {},
round_decimal_precision = 8; round_decimal_precision = 8;
/** ****************************************************************** /** ******************************************************************
* Utility Functions * Utility Functions
******************************************************************* */ ******************************************************************* */
function time() { return new Date().getTime() } function time() { return Date.now() }
/** /**
* call function with all combinations of a1, a2 * call function with all combinations of a1, a2
@ -29,7 +26,7 @@ var gs_base = exports;
* @returns {Object} * @returns {Object}
*/ */
function doCombinations(a1, a2, arg, fn) { function doCombinations(a1, a2, arg, fn) {
var i, j; let i, j;
for (i = 0; i < a1.length; i++) { for (i = 0; i < a1.length; i++) {
for (j = (a1 === a2 ? i + 1 : 0); j < a2.length; j++) { for (j = (a1 === a2 ? i + 1 : 0); j < a2.length; j++) {
fn(a1[i], a2[j], arg); fn(a1[i], a2[j], arg);
@ -151,7 +148,7 @@ var gs_base = exports;
* @returns {boolean} * @returns {boolean}
*/ */
function inRange(value, min, max) { function inRange(value, min, max) {
var val = parseFloat(value); let val = parseFloat(value);
return val >= min && val <= max; return val >= min && val <= max;
} }
@ -162,7 +159,7 @@ var gs_base = exports;
* @returns {number} * @returns {number}
*/ */
function round(v, zeros) { function round(v, zeros) {
var pow = Math.pow(10,zeros || round_decimal_precision); let pow = Math.pow(10,zeros || round_decimal_precision);
return Math.round(v * pow) / pow; return Math.round(v * pow) / pow;
} }
@ -178,7 +175,7 @@ var gs_base = exports;
* @returns {?Point | String} * @returns {?Point | String}
*/ */
function intersect(p1, p2, p3, p4, test, parallelok) { function intersect(p1, p2, p3, p4, test, parallelok) {
var keys = BASE.key, let keys = BASE.key,
p1x = p1.x, p1x = p1.x,
p1y = p1.y, p1y = p1.y,
p2x = p2.x, p2x = p2.x,
@ -199,7 +196,7 @@ var gs_base = exports;
return test && !parallelok ? null : keys.PARALLEL; return test && !parallelok ? null : keys.PARALLEL;
} }
var a = p1y - p3y, // origin dy let a = p1y - p3y, // origin dy
b = p1x - p3x, // origin dx b = p1x - p3x, // origin dx
n1 = (d2x * a) - (d2y * b), n1 = (d2x * a) - (d2y * b),
n2 = (d1x * a) - (d1y * b); n2 = (d1x * a) - (d1y * b);
@ -207,7 +204,7 @@ var gs_base = exports;
a = n1 / d; // roughly distance from l1 origin to l2 intersection a = n1 / d; // roughly distance from l1 origin to l2 intersection
b = n2 / d; // roughly distance from l2 origin to l1 intersection b = n2 / d; // roughly distance from l2 origin to l1 intersection
var ia = a >= -0.0001 && a <= 1.0001, let ia = a >= -0.0001 && a <= 1.0001,
ib = b >= -0.0001 && b <= 1.0001, ib = b >= -0.0001 && b <= 1.0001,
segint = (ia && ib), segint = (ia && ib),
rayint = (a >= 0 && b >= 0); rayint = (a >= 0 && b >= 0);
@ -215,7 +212,7 @@ var gs_base = exports;
if (test === keys.SEGINT && !segint) return null; if (test === keys.SEGINT && !segint) return null;
if (test === keys.RAYINT && !rayint) return null; if (test === keys.RAYINT && !rayint) return null;
var ip = BASE.newPoint( let ip = BASE.newPoint(
p1x + (a * d1x), // x p1x + (a * d1x), // x
p1y + (a * d1y), // y p1y + (a * d1y), // y
p3.z || p4.z, // z p3.z || p4.z, // z
@ -240,7 +237,7 @@ var gs_base = exports;
* @returns {?Point} * @returns {?Point}
*/ */
function intersectRayLine(ro, s1, p1, p2, infinite) { function intersectRayLine(ro, s1, p1, p2, infinite) {
var keys = BASE.key, let keys = BASE.key,
p1x = ro.x, p1x = ro.x,
p1y = ro.y, p1y = ro.y,
s1x = s1.dx, s1x = s1.dx,
@ -253,7 +250,7 @@ var gs_base = exports;
s2y = p4y - p3y, s2y = p4y - p3y,
d = (s2y * s1x) - (s2x * s1y); d = (s2y * s1x) - (s2x * s1y);
var a = p1y - p3y, let a = p1y - p3y,
b = p1x - p3x, b = p1x - p3x,
n1 = (s2x * a) - (s2y * b), n1 = (s2x * a) - (s2y * b),
n2 = (s1x * a) - (s1y * b); n2 = (s1x * a) - (s1y * b);
@ -267,7 +264,7 @@ var gs_base = exports;
b = n2 / d; b = n2 / d;
if (infinite || (inCloseRange(b,0,1) && a >= 0)) { if (infinite || (inCloseRange(b,0,1) && a >= 0)) {
var ip = BASE.newPoint( let ip = BASE.newPoint(
p1x + (a * s1x), p1x + (a * s1x),
p1y + (a * s1y), p1y + (a * s1y),
p2.z || ro.z, p2.z || ro.z,
@ -289,7 +286,7 @@ var gs_base = exports;
* @returns {number} * @returns {number}
*/ */
function determinant(p1, p2, p3, p4) { function determinant(p1, p2, p3, p4) {
var d1x = (p2.x - p1.x), let d1x = (p2.x - p1.x),
d1y = (p2.y - p1.y), d1y = (p2.y - p1.y),
d2x = (p4.x - p3.x), d2x = (p4.x - p3.x),
d2y = (p4.y - p3.y); d2y = (p4.y - p3.y);

View file

@ -2,11 +2,8 @@
"use strict"; "use strict";
var gs_base_bounds = exports;
(function() { (function() {
if (!self.base) self.base = {};
if (self.base.Bounds) return; if (self.base.Bounds) return;
/** /**
@ -21,12 +18,9 @@ var gs_base_bounds = exports;
this.leftMost = null; this.leftMost = null;
} }
var BASE = self.base, const BASE = self.base,
UTIL = BASE.util, UTIL = BASE.util,
CONF = BASE.config, CONF = BASE.config,
ABS = Math.abs,
MIN = Math.min,
MAX = Math.max,
PRO = Bounds.prototype; PRO = Bounds.prototype;
BASE.Bounds = Bounds; BASE.Bounds = Bounds;
@ -40,7 +34,7 @@ var gs_base_bounds = exports;
* @returns {Bounds} * @returns {Bounds}
*/ */
PRO.clone = function() { PRO.clone = function() {
var b = new Bounds(); let b = new Bounds();
b.minx = this.minx; b.minx = this.minx;
b.miny = this.miny; b.miny = this.miny;
b.maxx = this.maxx; b.maxx = this.maxx;
@ -60,20 +54,20 @@ var gs_base_bounds = exports;
* @param {Bounds} b * @param {Bounds} b
*/ */
PRO.merge = function(b) { PRO.merge = function(b) {
this.minx = MIN(this.minx, b.minx); this.minx = Math.min(this.minx, b.minx);
this.maxx = MAX(this.maxx, b.maxx); this.maxx = Math.max(this.maxx, b.maxx);
this.miny = MIN(this.miny, b.miny); this.miny = Math.min(this.miny, b.miny);
this.maxy = MAX(this.maxy, b.maxy); this.maxy = Math.max(this.maxy, b.maxy);
}; };
/** /**
* @param {Point} p * @param {Point} p
*/ */
PRO.update = function(p) { PRO.update = function(p) {
this.minx = MIN(this.minx, p.x); this.minx = Math.min(this.minx, p.x);
this.maxx = MAX(this.maxx, p.x); this.maxx = Math.max(this.maxx, p.x);
this.miny = MIN(this.miny, p.y); this.miny = Math.min(this.miny, p.y);
this.maxy = MAX(this.maxy, p.y); this.maxy = Math.max(this.maxy, p.y);
if (this.minx === p.x) this.leftMost = p; if (this.minx === p.x) this.leftMost = p;
}; };
@ -109,8 +103,8 @@ var gs_base_bounds = exports;
*/ */
PRO.overlaps = function(b, precision) { PRO.overlaps = function(b, precision) {
return ( return (
ABS(this.centerx() - b.centerx()) * 2 - precision < this.width() + b.width() && Math.abs(this.centerx() - b.centerx()) * 2 - precision < this.width() + b.width() &&
ABS(this.centery() - b.centery()) * 2 - precision < this.height() + b.height() Math.abs(this.centery() - b.centery()) * 2 - precision < this.height() + b.height()
); );
}; };

View file

@ -2,21 +2,19 @@
"use strict"; "use strict";
var gs_base_debug = exports;
(function() { (function() {
if (!self.base) self.base = {};
if (self.base.debug) return; if (self.base.debug) return;
var base = self.base, const base = self.base,
enabled = false,
flags = {}, flags = {},
stash = [], stash = [],
size = 20,
next_debug_color = 0,
debug_colors = [0xff0000, 0x00ff00, 0x0000ff, 0x00ffff, 0xff00ff, 0xffff00]; debug_colors = [0xff0000, 0x00ff00, 0x0000ff, 0x00ffff, 0xff00ff, 0xffff00];
let size = 20,
enabled = false,
next_debug_color = 0;
/** ****************************************************************** /** ******************************************************************
* Debug Functions * Debug Functions
******************************************************************* */ ******************************************************************* */
@ -69,7 +67,7 @@ var gs_base_debug = exports;
function set(f, value) { function set(f, value) {
if (Array.isArray(f)) { if (Array.isArray(f)) {
for (var i=0; i<f.length; i++) flags[f[i]] = (value || 1); for (let i=0; i<f.length; i++) flags[f[i]] = (value || 1);
} else { } else {
flags[f] = (value || 1); flags[f] = (value || 1);
} }
@ -77,14 +75,14 @@ var gs_base_debug = exports;
function clear(f) { function clear(f) {
if (Array.isArray(f)) { if (Array.isArray(f)) {
for (var i = 0; i < f.length; i++) delete flags[f[i]]; for (let i = 0; i < f.length; i++) delete flags[f[i]];
} else { } else {
delete flags[f]; delete flags[f];
} }
} }
function test(isSet, isNotSet) { function test(isSet, isNotSet) {
var i; let i;
if (isNotSet) { if (isNotSet) {
if (Array.isArray(isNotSet)) { if (Array.isArray(isNotSet)) {
for (i=0; i<isNotSet.length; i++) { for (i=0; i<isNotSet.length; i++) {
@ -154,7 +152,7 @@ var gs_base_debug = exports;
* @param {boolean} [creep] * @param {boolean} [creep]
*/ */
function xray(poly, z, v, deep, creep) { function xray(poly, z, v, deep, creep) {
var colors = [ let colors = [
0xaa0000, 0xaa0000,
0x0, 0x0,
0xaaaa00, 0xaaaa00,

View file

@ -1,16 +1,13 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen -- All Rights Reserved */
"use strict"; "use strict";
var gs_base_gyroid = exports;
(function() { (function() {
if (!self.base) self.base = {};
if (self.base.gyroid) return; if (self.base.gyroid) return;
var base = self.base; const base = self.base,
PI2 = Math.PI * 2;
let PI2 = Math.PI * 2;
/** /**
* @param off {number} z offset value from 0-1 * @param off {number} z offset value from 0-1

View file

@ -1,14 +1,17 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_base_line = exports;
(function() { (function() {
if (!self.base) self.base = {};
if (self.base.Line) return; if (self.base.Line) return;
const BASE = self.base, PRO = Line.prototype;
BASE.Line = Line;
BASE.newLine = newLine;
BASE.newOrderedLine = newOrderedLine;
/** /**
* *
* @param {Point} p1 * @param {Point} p1
@ -26,13 +29,6 @@ var gs_base_line = exports;
this.del = false; this.del = false;
} }
var BASE = self.base,
PRO = Line.prototype;
BASE.Line = Line;
BASE.newLine = newLine;
BASE.newOrderedLine = newOrderedLine;
/** ****************************************************************** /** ******************************************************************
* Line Prototype Functions * Line Prototype Functions
******************************************************************* */ ******************************************************************* */
@ -62,7 +58,7 @@ var gs_base_line = exports;
* @returns {Line} * @returns {Line}
*/ */
PRO.reverse = function() { PRO.reverse = function() {
var t = this.p1; let t = this.p1;
this.p1 = this.p2; this.p1 = this.p2;
this.p2 = t; this.p2 = t;
return this; return this;
@ -80,7 +76,7 @@ var gs_base_line = exports;
* @returns {boolean} * @returns {boolean}
*/ */
PRO.isCollinear = function(line) { PRO.isCollinear = function(line) {
var p1 = this.p1, let p1 = this.p1,
p2 = this.p2, p2 = this.p2,
p3 = line.p1, p3 = line.p1,
p4 = line.p2, p4 = line.p2,

View file

@ -1,14 +1,21 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_base_point = exports;
(function() { (function() {
if (!self.base) self.base = {};
if (self.base.Point) return; if (self.base.Point) return;
const BASE = self.base,
UTIL = BASE.util,
CONF = BASE.config,
KEYS = BASE.key,
ROUND = UTIL.round,
PRO = Point.prototype;
BASE.Point = Point;
BASE.newPoint = newPoint;
/** /**
* *
* @param {number} x * @param {number} x
@ -44,16 +51,6 @@ var gs_base_point = exports;
this.group = null; // for grouping in slice intersect, offset lines in trace this.group = null; // for grouping in slice intersect, offset lines in trace
} }
var BASE = self.base,
UTIL = BASE.util,
CONF = BASE.config,
KEYS = BASE.key,
ROUND = UTIL.round,
PRO = Point.prototype;
BASE.Point = Point;
BASE.newPoint = newPoint;
/** ****************************************************************** /** ******************************************************************
* Point Prototype Functions * Point Prototype Functions
******************************************************************* */ ******************************************************************* */
@ -64,14 +61,14 @@ var gs_base_point = exports;
} }
PRO.swapXZ = function() { PRO.swapXZ = function() {
var p = this, let p = this,
t = p.x; t = p.x;
p.x = p.z; p.x = p.z;
p.z = t; p.z = t;
}; };
PRO.swapYZ = function() { PRO.swapYZ = function() {
var p = this, let p = this,
t = p.y; t = p.y;
p.y = p.z; p.y = p.z;
p.z = t; p.z = t;
@ -163,10 +160,10 @@ var gs_base_point = exports;
* @returns {number} * @returns {number}
*/ */
PRO.distToLineSq = function(p1, p2) { PRO.distToLineSq = function(p1, p2) {
var p = this, let p = this,
d = UTIL.distSq(p1, p2); d = UTIL.distSq(p1, p2);
var t = ((p.x - p1.x) * (p2.x - p1.x) + (p.y - p1.y) * (p2.y - p1.y)) / d; let t = ((p.x - p1.x) * (p2.x - p1.x) + (p.y - p1.y) * (p2.y - p1.y)) / d;
if (t < 0) return UTIL.distSq(p, p1); if (t < 0) return UTIL.distSq(p, p1);
if (t > 1) return UTIL.distSq(p, p2); if (t > 1) return UTIL.distSq(p, p2);
@ -189,16 +186,16 @@ var gs_base_point = exports;
} }
function p2l(p, l1, l2) { function p2l(p, l1, l2) {
var v = {x: l2.x - l1.x, y: l2.y - l1.y}; let v = {x: l2.x - l1.x, y: l2.y - l1.y};
var w = {x: p.x - l1.x, y: p.y - l1.y}; let w = {x: p.x - l1.x, y: p.y - l1.y};
var c1 = dot(w, v); let c1 = dot(w, v);
var c2 = dot(v, v); let c2 = dot(v, v);
var b = c1 / c2; let b = c1 / c2;
if (isNaN(b)) { if (isNaN(b)) {
// console.log('nan', {p, l1, l2, v, w, c1, c2}); // console.log('nan', {p, l1, l2, v, w, c1, c2});
b = 0; b = 0;
} }
var pb = {x: l1.x + b * v.x, y: l1.y + b * v.y}; let pb = {x: l1.x + b * v.x, y: l1.y + b * v.y};
return d(p, pb); return d(p, pb);
} }
@ -212,7 +209,7 @@ var gs_base_point = exports;
* @returns {boolean} * @returns {boolean}
*/ */
PRO.withinDist2 = function(p1, p2, dist2) { PRO.withinDist2 = function(p1, p2, dist2) {
var ll2 = p1.distToSq2D(p2), let ll2 = p1.distToSq2D(p2),
dp1 = this.distToSq2D(p1), dp1 = this.distToSq2D(p1),
dp2 = this.distToSq2D(p2); dp2 = this.distToSq2D(p2);
// if the line segment described is less than dist2 // if the line segment described is less than dist2
@ -277,7 +274,7 @@ var gs_base_point = exports;
* @param dist * @param dist
*/ */
PRO.offsetPointFrom = function(p2, dist) { PRO.offsetPointFrom = function(p2, dist) {
var p1 = this, let p1 = this,
dx = p2.x - p1.x, dx = p2.x - p1.x,
dy = p2.y - p1.y, dy = p2.y - p1.y,
ls = dist / Math.sqrt(dx * dx + dy * dy), ls = dist / Math.sqrt(dx * dx + dy * dy),
@ -313,7 +310,7 @@ var gs_base_point = exports;
* @returns {Line} * @returns {Line}
*/ */
PRO.offsetLineTo = function(p2, offset) { PRO.offsetLineTo = function(p2, offset) {
var p1 = this, let p1 = this,
dx = p2.x - p1.x, dx = p2.x - p1.x,
dy = p2.y - p1.y, dy = p2.y - p1.y,
ls = offset / Math.sqrt(dx * dx + dy * dy), ls = offset / Math.sqrt(dx * dx + dy * dy),
@ -340,7 +337,7 @@ var gs_base_point = exports;
PRO.inPolygon = function(poly) { PRO.inPolygon = function(poly) {
if (!poly.bounds.containsXY(this.x, this.y)) return false; if (!poly.bounds.containsXY(this.x, this.y)) return false;
var p = poly.points, pl = p.length, p1, p2, i, inside = false; let p = poly.points, pl = p.length, p1, p2, i, inside = false;
for (i=0; i<pl; i++) { for (i=0; i<pl; i++) {
p1 = p[i]; p1 = p[i];
@ -363,14 +360,14 @@ var gs_base_point = exports;
* @return {boolean} true if inside outer but not inner * @return {boolean} true if inside outer but not inner
*/ */
PRO.isInPolygon = function(poly) { PRO.isInPolygon = function(poly) {
var point = this, i; let point = this, i;
if (Array.isArray(poly)) { if (Array.isArray(poly)) {
for (i=0; i<poly.length; i++) { for (i=0; i<poly.length; i++) {
if (point.isInPolygon(poly[i])) return true; if (point.isInPolygon(poly[i])) return true;
} }
return false; return false;
} }
var holes = poly.inner; let holes = poly.inner;
if (point.inPolygon(poly) || point.nearPolygon(poly, CONF.precision_merge_sq)) { if (point.inPolygon(poly) || point.nearPolygon(poly, CONF.precision_merge_sq)) {
for (i=0; holes && i < holes.length; i++) { for (i=0; holes && i < holes.length; i++) {
if (point.inPolygon(holes[i]) && !point.nearPolygon(holes[i], CONF.precision_merge_sq)) return false; if (point.inPolygon(holes[i]) && !point.nearPolygon(holes[i], CONF.precision_merge_sq)) return false;
@ -388,14 +385,14 @@ var gs_base_point = exports;
* @return {boolean} true if inside outer but not inner * @return {boolean} true if inside outer but not inner
*/ */
PRO.isInPolygonOnly = function(poly) { PRO.isInPolygonOnly = function(poly) {
var point = this, i; let point = this, i;
if (Array.isArray(poly)) { if (Array.isArray(poly)) {
for (i=0; i<poly.length; i++) { for (i=0; i<poly.length; i++) {
if (point.isInPolygonOnly(poly[i])) return true; if (point.isInPolygonOnly(poly[i])) return true;
} }
return false; return false;
} }
var holes = poly.inner; let holes = poly.inner;
if (point.inPolygon(poly)) { if (point.inPolygon(poly)) {
for (i=0; holes && i < holes.length; i++) { for (i=0; holes && i < holes.length; i++) {
if (point.inPolygon(holes[i])) return false; if (point.inPolygon(holes[i])) return false;
@ -415,13 +412,13 @@ var gs_base_point = exports;
*/ */
PRO.nearPolygon = function(poly, dist2, inner) { PRO.nearPolygon = function(poly, dist2, inner) {
// throw new Error("nearPolygon"); // throw new Error("nearPolygon");
for (var i=0, p=poly.points, pl=p.length ; i<pl; i++) { for (let i=0, p=poly.points, pl=p.length ; i<pl; i++) {
if (this.withinDist2(p[i], p[(i+1)%pl], dist2)) { if (this.withinDist2(p[i], p[(i+1)%pl], dist2)) {
return true; return true;
} }
} }
if (inner && poly.inner) { if (inner && poly.inner) {
for (var i=0; i<poly.inner.length; i++) { for (let i=0; i<poly.inner.length; i++) {
if (this.nearPolygon(poly.inner[i], dist2)) return true; if (this.nearPolygon(poly.inner[i], dist2)) return true;
} }
} }
@ -449,7 +446,7 @@ var gs_base_point = exports;
* @returns {Point} * @returns {Point}
*/ */
PRO.follow = function(slope, distance) { PRO.follow = function(slope, distance) {
var ls = distance / Math.sqrt(slope.dx * slope.dx + slope.dy * slope.dy); let ls = distance / Math.sqrt(slope.dx * slope.dx + slope.dy * slope.dy);
return newPoint(this.x + slope.dx * ls, this.y + slope.dy * ls, this.z); return newPoint(this.x + slope.dx * ls, this.y + slope.dy * ls, this.z);
}; };
@ -461,7 +458,7 @@ var gs_base_point = exports;
* @returns {Point} * @returns {Point}
*/ */
PRO.intersectZ = function(p, z) { PRO.intersectZ = function(p, z) {
var dx = p.x - this.x, let dx = p.x - this.x,
dy = p.y - this.y, dy = p.y - this.y,
dz = p.z - this.z, dz = p.z - this.z,
pct = 1 - ((p.z - z) / dz); pct = 1 - ((p.z - z) / dz);
@ -525,7 +522,7 @@ var gs_base_point = exports;
* @param {number} [threshold] stop looking if under threshold * @param {number} [threshold] stop looking if under threshold
*/ */
PRO.distToPolySegments = function(poly, threshold) { PRO.distToPolySegments = function(poly, threshold) {
var point = this, let point = this,
mindist = Infinity; mindist = Infinity;
poly.forEachSegment(function(p1, p2) { poly.forEachSegment(function(p1, p2) {
const nextdist = Math.min(mindist, point.distToLine(p1, p2)); const nextdist = Math.min(mindist, point.distToLine(p1, p2));
@ -541,7 +538,7 @@ var gs_base_point = exports;
* @param {number} [threshold] stop looking if under threshold * @param {number} [threshold] stop looking if under threshold
*/ */
PRO.distToPolyPoints = function(poly, threshold) { PRO.distToPolyPoints = function(poly, threshold) {
var point = this, mindist = Infinity; let point = this, mindist = Infinity;
poly.forEachPoint(function(pp) { poly.forEachPoint(function(pp) {
mindist = Math.min(mindist, point.distTo2D(pp)); mindist = Math.min(mindist, point.distTo2D(pp));
if (mindist < threshold) return true; if (mindist < threshold) return true;
@ -556,7 +553,7 @@ var gs_base_point = exports;
*/ */
PRO.nearestTo = function(points, max) { PRO.nearestTo = function(points, max) {
if (!max) throw "missing max"; if (!max) throw "missing max";
var mind = Infinity, let mind = Infinity,
minp = null, minp = null,
i, p, d; i, p, d;
for (i=0; i<points.length; i++) { for (i=0; i<points.length; i++) {
@ -576,7 +573,7 @@ var gs_base_point = exports;
* @return {number} average square dist to cloud of points * @return {number} average square dist to cloud of points
*/ */
PRO.averageDistTo = function(points) { PRO.averageDistTo = function(points) {
var sum = 0.0, count = 0, i; let sum = 0.0, count = 0, i;
for (i = 0; i < points.length; i++) { for (i = 0; i < points.length; i++) {
if (points[i] != this) { if (points[i] != this) {
sum += this.distToSq2D(points[i]); sum += this.distToSq2D(points[i]);
@ -593,7 +590,7 @@ var gs_base_point = exports;
* @returns {number} * @returns {number}
*/ */
PRO.distTo2D = function(p) { PRO.distTo2D = function(p) {
var dx = this.x - p.x, let dx = this.x - p.x,
dy = this.y - p.y; dy = this.y - p.y;
return Math.sqrt(dx * dx + dy * dy); return Math.sqrt(dx * dx + dy * dy);
}; };
@ -605,13 +602,13 @@ var gs_base_point = exports;
* @returns {number} * @returns {number}
*/ */
PRO.distToSq2D = function(p) { PRO.distToSq2D = function(p) {
var dx = this.x - p.x, let dx = this.x - p.x,
dy = this.y - p.y; dy = this.y - p.y;
return dx * dx + dy * dy; return dx * dx + dy * dy;
}; };
PRO.distTo3D = function(p) { PRO.distTo3D = function(p) {
var dx = this.x - p.x, let dx = this.x - p.x,
dy = this.y - p.y, dy = this.y - p.y,
dz = this.z - p.z; dz = this.z - p.z;
return Math.sqrt(dx * dx + dy * dy + dz * dz); return Math.sqrt(dx * dx + dy * dy + dz * dz);
@ -624,7 +621,7 @@ var gs_base_point = exports;
* @returns {number} * @returns {number}
*/ */
PRO.distToSq3D = function(p) { PRO.distToSq3D = function(p) {
var dx = this.x - p.x, let dx = this.x - p.x,
dy = this.y - p.y, dy = this.y - p.y,
dz = this.z - p.z; dz = this.z - p.z;
return dx * dx + dy * dy + dz * dz; return dx * dx + dy * dy + dz * dz;
@ -639,7 +636,7 @@ var gs_base_point = exports;
* @returns {boolean} * @returns {boolean}
*/ */
PRO.inTriangle = function(a, b, c) { PRO.inTriangle = function(a, b, c) {
var as_x = this.x - a.x, let as_x = this.x - a.x,
as_y = this.y - a.y, as_y = this.y - a.y,
s_ab = (b.x - a.x) * as_y - (b.y - a.y) * as_x > 0; s_ab = (b.x - a.x) * as_y - (b.y - a.y) * as_x > 0;
if ((c.x - a.x) * as_y - (c.y - a.y) * as_x > 0 == s_ab) return false; if ((c.x - a.x) * as_y - (c.y - a.y) * as_x > 0 == s_ab) return false;

View file

@ -1,15 +1,12 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_base_polygon = exports;
(function() { (function() {
if (!self.base) self.base = {};
if (self.base.Polygon) return; if (self.base.Polygon) return;
var BASE = self.base, const BASE = self.base,
CONF = BASE.config, CONF = BASE.config,
UTIL = BASE.util, UTIL = BASE.util,
DBUG = BASE.debug, DBUG = BASE.debug,
@ -21,12 +18,11 @@ var gs_base_polygon = exports;
MAX = Math.max, MAX = Math.max,
PI = Math.PI, PI = Math.PI,
DEG2RAD = PI / 180, DEG2RAD = PI / 180,
Bounds = BASE.Bounds,
newPoint = BASE.newPoint, newPoint = BASE.newPoint,
PRO = Polygon.prototype, Bounds = BASE.Bounds,
nest_test_slope = BASE.newSlope(newPoint(0,0,0,KEYS.NONE), newPoint(1,0,0,KEYS.NONE)), PRO = Polygon.prototype;
min_area_mult = 2.0,
seqid = 1; let seqid = 1;
BASE.Polygon = Polygon; BASE.Polygon = Polygon;
BASE.newPolygon = newPolygon; BASE.newPolygon = newPolygon;
@ -97,9 +93,9 @@ var gs_base_polygon = exports;
Polygon.filterChain = function(filters) { Polygon.filterChain = function(filters) {
return function() { return function() {
var f = filters; let f = filters;
return function(p) { return function(p) {
var len = f.length, let len = f.length,
idx = 0; idx = 0;
while (idx < len && (p = f[idx++](p))) while (idx < len && (p = f[idx++](p)))
; ;
@ -213,8 +209,8 @@ var gs_base_polygon = exports;
PRO.createConvexHull = function(points) { PRO.createConvexHull = function(points) {
function removeMiddle(a, b, c) { function removeMiddle(a, b, c) {
var cross = (a.x - b.x) * (c.y - b.y) - (a.y - b.y) * (c.x - b.x); let cross = (a.x - b.x) * (c.y - b.y) - (a.y - b.y) * (c.x - b.x);
var dot = (a.x - b.x) * (c.x - b.x) + (a.y - b.y) * (c.y - b.y); let dot = (a.x - b.x) * (c.x - b.x) + (a.y - b.y) * (c.y - b.y);
return cross < 0 || cross == 0 && dot <= 0; return cross < 0 || cross == 0 && dot <= 0;
} }
@ -222,11 +218,11 @@ var gs_base_polygon = exports;
return a.x != b.x ? a.x - b.x : a.y - b.y; return a.x != b.x ? a.x - b.x : a.y - b.y;
}); });
var n = points.length; let n = points.length;
var hull = []; let hull = [];
for (var i = 0; i < 2 * n; i++) { for (let i = 0; i < 2 * n; i++) {
var j = i < n ? i : 2 * n - 1 - i; let j = i < n ? i : 2 * n - 1 - i;
while (hull.length >= 2 && removeMiddle(hull[hull.length - 2], hull[hull.length - 1], points[j])) while (hull.length >= 2 && removeMiddle(hull[hull.length - 2], hull[hull.length - 1], points[j]))
hull.pop(); hull.pop();
hull.push(points[j]); hull.push(points[j]);
@ -239,7 +235,7 @@ var gs_base_polygon = exports;
}; };
PRO.stepsFromRoot = function() { PRO.stepsFromRoot = function() {
var p = this.parent, steps = 0; let p = this.parent, steps = 0;
while (p) { while (p) {
if (p.inner && p.inner.length > 1) steps++; if (p.inner && p.inner.length > 1) steps++;
p = p.parent; p = p.parent;
@ -256,11 +252,11 @@ var gs_base_polygon = exports;
}; };
PRO.swap = function(x,y) { PRO.swap = function(x,y) {
var poly = this, let poly = this,
points = poly.points, points = poly.points,
length = points.length; length = points.length;
poly.bounds = new Bounds(); poly.bounds = new Bounds();
for (var i=0; i<length; i++) { for (let i=0; i<length; i++) {
let p = points[i]; let p = points[i];
if (x) p.swapXZ(); if (x) p.swapXZ();
else if (y) p.swapYZ(); else if (y) p.swapYZ();
@ -291,7 +287,7 @@ var gs_base_polygon = exports;
* @returns {Polygon|Point} a new polygon centered on x=0, y=0, z=0 * @returns {Polygon|Point} a new polygon centered on x=0, y=0, z=0
*/ */
PRO.center = function(point) { PRO.center = function(point) {
var ap = newPoint(0,0,0,null), np = newPolygon(), pa = this.points; let ap = newPoint(0,0,0,null), np = newPolygon(), pa = this.points;
pa.forEach(function(p) { pa.forEach(function(p) {
ap.x += p.x; ap.x += p.x;
ap.y += p.y; ap.y += p.y;
@ -315,7 +311,7 @@ var gs_base_polygon = exports;
* @returns {Point} center of a polygon assuming it's a circle * @returns {Point} center of a polygon assuming it's a circle
*/ */
PRO.circleCenter = function() { PRO.circleCenter = function() {
var points = this.points, let points = this.points,
length = points.length, length = points.length,
incr = Math.floor(length / 3), incr = Math.floor(length / 3),
A = points[0], A = points[0],
@ -387,7 +383,7 @@ var gs_base_polygon = exports;
* @param {boolean} clockwise * @param {boolean} clockwise
*/ */
PRO.centerCircle = function(center, radius, points, clockwise) { PRO.centerCircle = function(center, radius, points, clockwise) {
var angle = 0, add = 360 / points; let angle = 0, add = 360 / points;
if (clockwise) add = -add; if (clockwise) add = -add;
while (points-- > 0) { while (points-- > 0) {
this.push(newPoint( this.push(newPoint(
@ -406,7 +402,7 @@ var gs_base_polygon = exports;
* @returns {Polygon} * @returns {Polygon}
*/ */
PRO.move = function(offset) { PRO.move = function(offset) {
var scope = this, let scope = this,
bounds = scope.bounds = new Bounds(); bounds = scope.bounds = new Bounds();
scope.points.forEach(function(p) { scope.points.forEach(function(p) {
p.move(offset); p.move(offset);
@ -417,7 +413,7 @@ var gs_base_polygon = exports;
}; };
PRO.scale = function(scale, round) { PRO.scale = function(scale, round) {
var scope = this, let scope = this,
bounds = scope.bounds = new Bounds(); bounds = scope.bounds = new Bounds();
scope.points.forEach(function(p) { scope.points.forEach(function(p) {
p.x *= scale; p.x *= scale;
@ -437,7 +433,7 @@ var gs_base_polygon = exports;
* hint fill angle hinting from longest segment * hint fill angle hinting from longest segment
*/ */
PRO.hintFillAngle = function() { PRO.hintFillAngle = function() {
var index = 0, let index = 0,
points = this.points, points = this.points,
length = points.length, length = points.length,
prev, prev,
@ -471,7 +467,7 @@ var gs_base_polygon = exports;
* @returns {Polygon} * @returns {Polygon}
*/ */
PRO.clone = function(deep) { PRO.clone = function(deep) {
var np = newPolygon(), let np = newPolygon(),
ln = this.length, ln = this.length,
i = 0; i = 0;
@ -495,7 +491,7 @@ var gs_base_polygon = exports;
* @returns {Polygon} this * @returns {Polygon} this
*/ */
PRO.setZ = function(z) { PRO.setZ = function(z) {
var ar = this.points, let ar = this.points,
ln = ar.length, ln = ar.length,
i = 0; i = 0;
while (i < ln) ar[i++].z = z; while (i < ln) ar[i++].z = z;
@ -545,7 +541,7 @@ var gs_base_polygon = exports;
* @returns {Polygon} * @returns {Polygon}
*/ */
PRO.addPoints = function(points) { PRO.addPoints = function(points) {
var poly = this, let poly = this,
length = points.length, length = points.length,
i = 0; i = 0;
while (i < length) { while (i < length) {
@ -667,7 +663,7 @@ var gs_base_polygon = exports;
*/ */
PRO.isNested = function(parent) { PRO.isNested = function(parent) {
if (parent.bounds.contains(this.bounds)) { if (parent.bounds.contains(this.bounds)) {
//var int = POLY().rayIntersect(this.bounds.leftMost, nest_test_slope, [parent], false); //let int = POLY().rayIntersect(this.bounds.leftMost, nest_test_slope, [parent], false);
//return int.length % 2 === 1 || this.isInside(parent, CONF.precision_nested_sq); //return int.length % 2 === 1 || this.isInside(parent, CONF.precision_nested_sq);
return this.isInside(parent, CONF.precision_nested_sq); return this.isInside(parent, CONF.precision_nested_sq);
} }
@ -675,7 +671,7 @@ var gs_base_polygon = exports;
}; };
PRO.forEachPointEaseDown = function(fn, fromPoint) { PRO.forEachPointEaseDown = function(fn, fromPoint) {
var index = this.findClosestPointTo(fromPoint).index, let index = this.findClosestPointTo(fromPoint).index,
fromZ = fromPoint.z, fromZ = fromPoint.z,
offset = 0, offset = 0,
points = this.points, points = this.points,
@ -690,7 +686,7 @@ var gs_base_polygon = exports;
while (true) { while (true) {
next = points[index % length]; next = points[index % length];
if (last && next.z < fromZ) { if (last && next.z < fromZ) {
var deltaZ = fromZ - next.z; let deltaZ = fromZ - next.z;
dist2next = last.distTo2D(next); dist2next = last.distTo2D(next);
if (dist2next > deltaZ * 2) { if (dist2next > deltaZ * 2) {
// too long: synth intermediate // too long: synth intermediate
@ -716,7 +712,7 @@ var gs_base_polygon = exports;
}; };
PRO.forEachPoint = function(fn, close, start) { PRO.forEachPoint = function(fn, close, start) {
var index = start || 0, let index = start || 0,
points = this.points, points = this.points,
length = points.length, length = points.length,
count = close ? length + 1 : length, count = close ? length + 1 : length,
@ -731,7 +727,7 @@ var gs_base_polygon = exports;
}; };
PRO.forEachSegment = function(fn, open, start) { PRO.forEachSegment = function(fn, open, start) {
var index = start || 0, let index = start || 0,
points = this.points, points = this.points,
length = points.length, length = points.length,
count = open ? length - 1 : length, count = open ? length - 1 : length,
@ -749,9 +745,9 @@ var gs_base_polygon = exports;
* returns intersections sorted by closest to lp1 * returns intersections sorted by closest to lp1
*/ */
PRO.intersections = function(lp1, lp2) { PRO.intersections = function(lp1, lp2) {
var list = []; let list = [];
this.forEachSegment(function(pp1, pp2, ip1, ip2) { this.forEachSegment(function(pp1, pp2, ip1, ip2) {
var int = UTIL.intersect(lp1, lp2, pp1, pp2, BASE.key.SEGINT, false); let int = UTIL.intersect(lp1, lp2, pp1, pp2, BASE.key.SEGINT, false);
if (int) { if (int) {
list.push(int); list.push(int);
pp1.pos = ip1; pp1.pos = ip1;
@ -771,9 +767,9 @@ var gs_base_polygon = exports;
PRO.bisect = function(p1, p2) { PRO.bisect = function(p1, p2) {
if (this.isOpen()) return null; if (this.isOpen()) return null;
var copy = this.clone().setClockwise(); let copy = this.clone().setClockwise();
var int = copy.intersections(p1, p2); let int = copy.intersections(p1, p2);
if (!int || int.length !== 2) return null; if (!int || int.length !== 2) return null;
return [ copy.emitSegment(int[0], int[1]), copy.emitSegment(int[1], int[0]).reverse() ]; return [ copy.emitSegment(int[0], int[1]), copy.emitSegment(int[1], int[0]).reverse() ];
@ -784,7 +780,7 @@ var gs_base_polygon = exports;
* used in cam tabs and fdm output perimeter traces on infill * used in cam tabs and fdm output perimeter traces on infill
*/ */
PRO.emitSegment = function(i1, i2) { PRO.emitSegment = function(i1, i2) {
var poly = newPolygon(), let poly = newPolygon(),
start = i1.p2.pos, start = i1.p2.pos,
end = i2.p1.pos; end = i2.p1.pos;
poly.setOpen(); poly.setOpen();
@ -805,7 +801,7 @@ var gs_base_polygon = exports;
PRO.hasPointsInside = function(poly, tolerance) { PRO.hasPointsInside = function(poly, tolerance) {
if (!poly.overlaps(this)) return false; if (!poly.overlaps(this)) return false;
var mid, exit = false; let mid, exit = false;
this.forEachSegment(function(prev, next) { this.forEachSegment(function(prev, next) {
// check midpoint on long lines // check midpoint on long lines
@ -837,7 +833,7 @@ var gs_base_polygon = exports;
this.bounds.isNested(poly.bounds) this.bounds.isNested(poly.bounds)
)) return false; )) return false;
var mid, let mid,
midcheck, midcheck,
exit = true; exit = true;
@ -875,7 +871,7 @@ var gs_base_polygon = exports;
*/ */
PRO.containedBySet = function(polys) { PRO.containedBySet = function(polys) {
if (!polys) return false; if (!polys) return false;
for (var i=0; i<polys.length; i++) { for (let i=0; i<polys.length; i++) {
if (polys[i].contains(this)) return true; if (polys[i].contains(this)) return true;
} }
return false; return false;
@ -919,7 +915,7 @@ var gs_base_polygon = exports;
}; };
PRO.newUndeleted = function() { PRO.newUndeleted = function() {
var poly = newPolygon(); let poly = newPolygon();
this.forEachPoint(function(p) { this.forEachPoint(function(p) {
if (!p.del) poly.push(p); if (!p.del) poly.push(p);
}); });
@ -946,7 +942,7 @@ var gs_base_polygon = exports;
return this.perim; return this.perim;
} }
var len = 0.0; let len = 0.0;
this.forEachSegment(function(prev,next) { this.forEachSegment(function(prev,next) {
len += SQRT(prev.distToSq2D(next)); len += SQRT(prev.distToSq2D(next));
@ -956,7 +952,7 @@ var gs_base_polygon = exports;
}; };
PRO.perimeterDeep = function() { PRO.perimeterDeep = function() {
var len = this.perimeter(); let len = this.perimeter();
if (this.inner) this.inner.forEach(function(p) { len += p.perimeter() }); if (this.inner) this.inner.forEach(function(p) { len += p.perimeter() });
return len; return len;
}; };
@ -972,7 +968,7 @@ var gs_base_polygon = exports;
PRO.area = function(raw) { PRO.area = function(raw) {
if (this.length < 3) return 0; if (this.length < 3) return 0;
if (this.area2 === 0.0) { if (this.area2 === 0.0) {
for (var p=this.points,pl=p.length,pi=0,p1,p2; pi<pl; pi++) { for (let p=this.points,pl=p.length,pi=0,p1,p2; pi<pl; pi++) {
p1 = p[pi]; p1 = p[pi];
p2 = p[(pi+1)%pl]; p2 = p[(pi+1)%pl];
this.area2 += (p2.x - p1.x) * (p2.y + p1.y); this.area2 += (p2.x - p1.x) * (p2.y + p1.y);
@ -989,7 +985,7 @@ var gs_base_polygon = exports;
*/ */
PRO.areaDeep = function() { PRO.areaDeep = function() {
if (!this.inner) return this.area(); if (!this.inner) return this.area();
var i, c = this.inner, a = this.area(); let i, c = this.inner, a = this.area();
for (i=0; i<c.length; i++) { for (i=0; i<c.length; i++) {
a -= c[i].area(); a -= c[i].area();
} }
@ -1011,7 +1007,7 @@ var gs_base_polygon = exports;
* @param {number} [z] * @param {number} [z]
*/ */
PRO.fromXYArray = function(arr,z) { PRO.fromXYArray = function(arr,z) {
var i = 0; let i = 0;
while (i < arr.length) { while (i < arr.length) {
this.add(arr[i++], arr[i++], z || 0); this.add(arr[i++], arr[i++], z || 0);
} }
@ -1019,7 +1015,7 @@ var gs_base_polygon = exports;
}; };
function fromClipperPath(path,z) { function fromClipperPath(path,z) {
var poly = newPolygon(), i = 0, l = path.length; let poly = newPolygon(), i = 0, l = path.length;
while (i < l) poly.push(newPoint(null,null,z,null,path[i++])); while (i < l) poly.push(newPoint(null,null,z,null,path[i++]));
return poly; return poly;
}; };
@ -1042,11 +1038,11 @@ var gs_base_polygon = exports;
}; };
PRO.toClipper = function(inout,debug) { PRO.toClipper = function(inout,debug) {
var poly = this, let poly = this,
cur = [], cur = [],
out = inout || []; out = inout || [];
if (debug) { if (debug) {
var d = [], let d = [],
points = poly.points, points = poly.points,
len = points.length, len = points.length,
i = 0, i = 0,
@ -1101,14 +1097,14 @@ var gs_base_polygon = exports;
this.bounds.equals(poly.bounds, precision || CONF.precision_poly_bounds)) this.bounds.equals(poly.bounds, precision || CONF.precision_poly_bounds))
{ {
// use circularity near 1 to eliminate the extensive check below // use circularity near 1 to eliminate the extensive check below
var c1 = this.circularity(), let c1 = this.circularity(),
c2 = poly.circularity(); c2 = poly.circularity();
if (ABS(c1-c2) < CONF.precision_circularity && ((1-c1) < CONF.precision_circularity)) { if (ABS(c1-c2) < CONF.precision_circularity && ((1-c1) < CONF.precision_circularity)) {
return true; return true;
} }
if (recurse) { if (recurse) {
var i, ai = this.inner, bi = poly.inner; let i, ai = this.inner, bi = poly.inner;
if (ai !== bi) { if (ai !== bi) {
if (ai === null || bi === null || ai.length != bi.length) return false; if (ai === null || bi === null || ai.length != bi.length) return false;
for (i=0; i < ai.length; i++) { for (i=0; i < ai.length; i++) {
@ -1117,7 +1113,7 @@ var gs_base_polygon = exports;
} }
} }
var exit = true, let exit = true,
pointok, pointok,
dist, dist,
min; min;
@ -1153,7 +1149,7 @@ var gs_base_polygon = exports;
* @return {Object} {point:point, distance:distance} * @return {Object} {point:point, distance:distance}
*/ */
PRO.findClosestPointTo = function(target) { PRO.findClosestPointTo = function(target) {
var dist, let dist,
index, index,
closest, closest,
mindist = Infinity; mindist = Infinity;
@ -1181,7 +1177,7 @@ var gs_base_polygon = exports;
}; };
PRO.shortestSegmentLength = function() { PRO.shortestSegmentLength = function() {
var len = Infinity; let len = Infinity;
this.forEachSegment(function(p1, p2) { this.forEachSegment(function(p1, p2) {
len = Math.min(len, p1.distTo2D(p2)); len = Math.min(len, p1.distTo2D(p2));
}); });
@ -1193,7 +1189,7 @@ var gs_base_polygon = exports;
* @returns {?Polygon[]} * @returns {?Polygon[]}
*/ */
PRO.diff = function(poly) { PRO.diff = function(poly) {
var fillang = this.fillang && this.area() > poly.area() ? this.fillang : poly.fillang, let fillang = this.fillang && this.area() > poly.area() ? this.fillang : poly.fillang,
clib = self.ClipperLib, clib = self.ClipperLib,
ctyp = clib.ClipType, ctyp = clib.ClipType,
ptyp = clib.PolyType, ptyp = clib.PolyType,
@ -1222,7 +1218,7 @@ var gs_base_polygon = exports;
* @returns {?Polygon[]} * @returns {?Polygon[]}
*/ */
PRO.mask = function(poly) { PRO.mask = function(poly) {
var fillang = this.fillang && this.area() > poly.area() ? this.fillang : poly.fillang, let fillang = this.fillang && this.area() > poly.area() ? this.fillang : poly.fillang,
clib = self.ClipperLib, clib = self.ClipperLib,
ctyp = clib.ClipType, ctyp = clib.ClipType,
ptyp = clib.PolyType, ptyp = clib.PolyType,
@ -1287,7 +1283,7 @@ var gs_base_polygon = exports;
PRO.union = function(poly, min) { PRO.union = function(poly, min) {
if (!this.overlaps(poly)) return null; if (!this.overlaps(poly)) return null;
var fillang = this.fillang && this.area() > poly.area() ? this.fillang : poly.fillang, let fillang = this.fillang && this.area() > poly.area() ? this.fillang : poly.fillang,
clib = self.ClipperLib, clib = self.ClipperLib,
ctyp = clib.ClipType, ctyp = clib.ClipType,
ptyp = clib.PolyType, ptyp = clib.PolyType,
@ -1318,7 +1314,7 @@ var gs_base_polygon = exports;
* furthest apart and lowest when there is a tie breaker * furthest apart and lowest when there is a tie breaker
*/ */
PRO.spread = function() { PRO.spread = function() {
var poly = this, let poly = this,
points = poly.points, points = poly.points,
plen = points.length, plen = points.length,
i, pp, np, p, mdelta, newmax, max, shift, maxd; i, pp, np, p, mdelta, newmax, max, shift, maxd;

View file

@ -1,15 +1,13 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_base_polygons = exports;
(function() { (function() {
if (!self.base) self.base = {}; if (!self.base) self.base = {};
if (self.base.polygons) return; if (self.base.polygons) return;
var BASE = self.base, const BASE = self.base,
UTIL = BASE.util, UTIL = BASE.util,
CONF = BASE.config, CONF = BASE.config,
DEG2RAD = Math.PI / 180, DEG2RAD = Math.PI / 180,
@ -48,13 +46,13 @@ var gs_base_polygons = exports;
******************************************************************* */ ******************************************************************* */
function toClipper(polys,debug) { function toClipper(polys,debug) {
var out = []; let out = [];
polys.forEach(function(poly) { poly.toClipper(out,debug) }); polys.forEach(function(poly) { poly.toClipper(out,debug) });
return out; return out;
} }
function fromClipperNode(tnode, z) { function fromClipperNode(tnode, z) {
var poly = BASE.newPolygon(); let poly = BASE.newPolygon();
tnode.m_polygon.forEach(function(p) { tnode.m_polygon.forEach(function(p) {
poly.push(newPoint(null, null, z, null, p)); poly.push(newPoint(null, null, z, null, p));
}); });
@ -63,7 +61,7 @@ var gs_base_polygons = exports;
}; };
function fromClipperTree(tnode, z, tops, parent, minarea) { function fromClipperTree(tnode, z, tops, parent, minarea) {
var polys = tops || [], let polys = tops || [],
poly, poly,
min = minarea || 0.1; min = minarea || 0.1;
@ -108,7 +106,7 @@ var gs_base_polygons = exports;
}; };
function cleanClipperTree(tree) { function cleanClipperTree(tree) {
var clib = self.ClipperLib, let clib = self.ClipperLib,
clip = clib.Clipper; clip = clib.Clipper;
if (tree.m_Childs) tree.m_Childs.forEach(function(child) { if (tree.m_Childs) tree.m_Childs.forEach(function(child) {
@ -151,7 +149,7 @@ var gs_base_polygons = exports;
polygons.sort(function (a, b) { polygons.sort(function (a, b) {
return a.area() - b.area(); return a.area() - b.area();
}); });
var i, poly; let i, poly;
// clear parent/child links if they exist // clear parent/child links if they exist
for (i = 0; i < polygons.length; i++) { for (i = 0; i < polygons.length; i++) {
poly = polygons[i]; poly = polygons[i];
@ -162,8 +160,8 @@ var gs_base_polygons = exports;
for (i = 0; i < polygons.length - 1; i++) { for (i = 0; i < polygons.length - 1; i++) {
poly = polygons[i]; poly = polygons[i];
// find the smallest suitable parent // find the smallest suitable parent
for (var j = i + 1; j < polygons.length; j++) { for (let j = i + 1; j < polygons.length; j++) {
var parent = polygons[j]; let parent = polygons[j];
// prevent open polys from having inners // prevent open polys from having inners
if (opentop && parent.isOpen()) continue; if (opentop && parent.isOpen()) continue;
if (poly.isNested(parent)) { if (poly.isNested(parent)) {
@ -173,7 +171,7 @@ var gs_base_polygons = exports;
} }
} }
// tops have an even # depth // tops have an even # depth
var tops = [], let tops = [],
p; p;
// assign a depth level to each group // assign a depth level to each group
for (i = 0; i < polygons.length; i++) { for (i = 0; i < polygons.length; i++) {
@ -207,7 +205,7 @@ var gs_base_polygons = exports;
*/ */
function setWinding(array, CW, recurse) { function setWinding(array, CW, recurse) {
if (!array) return; if (!array) return;
var poly, i = 0; let poly, i = 0;
while (i < array.length) { while (i < array.length) {
poly = array[i++]; poly = array[i++];
if (poly.isClockwise() !== CW) poly.reverse(); if (poly.isClockwise() !== CW) poly.reverse();
@ -223,7 +221,7 @@ var gs_base_polygons = exports;
* @return {boolean} true if aligned clockwise * @return {boolean} true if aligned clockwise
*/ */
function alignWindings(polys) { function alignWindings(polys) {
var len = polys.length, let len = polys.length,
fwd = 0, fwd = 0,
pts = 0, pts = 0,
i = 0, i = 0,
@ -244,7 +242,7 @@ var gs_base_polygons = exports;
} }
function setContains(setA, poly) { function setContains(setA, poly) {
for (var i=0; i<setA.length; i++) { for (let i=0; i<setA.length; i++) {
if (setA[i].contains(poly)) return true; if (setA[i].contains(poly)) return true;
} }
return false; return false;
@ -272,7 +270,7 @@ var gs_base_polygons = exports;
* @returns {Polygon[]} out * @returns {Polygon[]} out
*/ */
function subtract(setA, setB, outA, outB, z, minArea) { function subtract(setA, setB, outA, outB, z, minArea) {
var clib = self.ClipperLib, let clib = self.ClipperLib,
ctyp = clib.ClipType, ctyp = clib.ClipType,
ptyp = clib.PolyType, ptyp = clib.PolyType,
cfil = clib.PolyFillType, cfil = clib.PolyFillType,
@ -333,7 +331,7 @@ var gs_base_polygons = exports;
function union(polys, minarea) { function union(polys, minarea) {
if (polys.length < 2) return polys; if (polys.length < 2) return polys;
var out = polys.slice(), i, j, union, uset = []; let out = polys.slice(), i, j, union, uset = [];
outer: for (i=0; i<out.length; i++) { outer: for (i=0; i<out.length; i++) {
if (!out[i]) continue; if (!out[i]) continue;
@ -361,7 +359,7 @@ var gs_base_polygons = exports;
* @returns {?Polygon[]} * @returns {?Polygon[]}
*/ */
function doDiff(setA, setB, z) { function doDiff(setA, setB, z) {
var clib = self.ClipperLib, let clib = self.ClipperLib,
ctyp = clib.ClipType, ctyp = clib.ClipType,
ptyp = clib.PolyType, ptyp = clib.PolyType,
cfil = clib.PolyFillType, cfil = clib.PolyFillType,
@ -391,7 +389,7 @@ var gs_base_polygons = exports;
// handle null/empty slices // handle null/empty slices
if (setA === setB || setA === null || setB === null) return null; if (setA === setB || setA === null || setB === null) return null;
var out = [], tmp; let out = [], tmp;
UTIL.doCombinations(setA, setB, {}, function(a, b) { UTIL.doCombinations(setA, setB, {}, function(a, b) {
if (tmp = a.mask(b)) { if (tmp = a.mask(b)) {
out.appendAll(tmp); out.appendAll(tmp);
@ -402,7 +400,7 @@ var gs_base_polygons = exports;
} }
function sumCirc(polys) { function sumCirc(polys) {
var sum = 0.0; let sum = 0.0;
polys.forEach(function(poly) { polys.forEach(function(poly) {
sum += poly.circularityDeep(); sum += poly.circularityDeep();
}); });
@ -426,7 +424,7 @@ var gs_base_polygons = exports;
if (poly.inner) setWinding(poly.inner, !poly.isClockwise()); if (poly.inner) setWinding(poly.inner, !poly.isClockwise());
}); });
var fact = CONF.clipper, let fact = CONF.clipper,
clib = self.ClipperLib, clib = self.ClipperLib,
clip = clib.Clipper, clip = clib.Clipper,
cpft = clib.PolyFillType, cpft = clib.PolyFillType,
@ -437,8 +435,8 @@ var gs_base_polygons = exports;
circ = sumCirc(polys); circ = sumCirc(polys);
polys.forEach(function(poly) { polys.forEach(function(poly) {
var clean = clip.CleanPolygons(poly.toClipper(), CONF.clipperClean); let clean = clip.CleanPolygons(poly.toClipper(), CONF.clipperClean);
var simple = clip.SimplifyPolygons(clean, cpft.pftNonZero); let simple = clip.SimplifyPolygons(clean, cpft.pftNonZero);
coff.AddPaths(simple, cjnt.jtMiter, cety.etClosedPolygon); coff.AddPaths(simple, cjnt.jtMiter, cety.etClosedPolygon);
}); });
@ -476,7 +474,7 @@ var gs_base_polygons = exports;
if (poly.inner) setWinding(poly.inner, !poly.isClockwise()); if (poly.inner) setWinding(poly.inner, !poly.isClockwise());
}); });
var fact = CONF.clipper, let fact = CONF.clipper,
clib = self.ClipperLib, clib = self.ClipperLib,
clip = clib.Clipper, clip = clib.Clipper,
cpft = clib.PolyFillType, cpft = clib.PolyFillType,
@ -489,8 +487,8 @@ var gs_base_polygons = exports;
// inset // inset
polys.forEach(function(poly) { polys.forEach(function(poly) {
var clean = clip.CleanPolygons(poly.toClipper(), CONF.clipperClean); let clean = clip.CleanPolygons(poly.toClipper(), CONF.clipperClean);
var simple = clip.SimplifyPolygons(clean, cpft.pftNonZero); let simple = clip.SimplifyPolygons(clean, cpft.pftNonZero);
coff.AddPaths(simple, cjnt.jtMiter, cety.etClosedPolygon); coff.AddPaths(simple, cjnt.jtMiter, cety.etClosedPolygon);
}); });
@ -501,8 +499,8 @@ var gs_base_polygons = exports;
coff = new clib.ClipperOffset(); coff = new clib.ClipperOffset();
ctre = new clib.PolyTree(); ctre = new clib.PolyTree();
polys.forEach(function(poly) { polys.forEach(function(poly) {
var clean = clip.CleanPolygons(poly.toClipper(), CONF.clipperClean); let clean = clip.CleanPolygons(poly.toClipper(), CONF.clipperClean);
var simple = clip.SimplifyPolygons(clean, cpft.pftNonZero); let simple = clip.SimplifyPolygons(clean, cpft.pftNonZero);
coff.AddPaths(simple, cjnt.jtMiter, cety.etClosedPolygon); coff.AddPaths(simple, cjnt.jtMiter, cety.etClosedPolygon);
}); });
coff.Execute(ctre, -over * fact); coff.Execute(ctre, -over * fact);
@ -510,7 +508,7 @@ var gs_base_polygons = exports;
// detect possible thin walls // detect possible thin walls
if (thins) { if (thins) {
var circ1 = sumCirc(orig), let circ1 = sumCirc(orig),
circ2 = sumCirc(polys), circ2 = sumCirc(polys),
diff = Math.abs(1 - (circ1 / circ2)); diff = Math.abs(1 - (circ1 / circ2));
@ -545,7 +543,7 @@ var gs_base_polygons = exports;
} }
// offset polygon to outer traces array // offset polygon to outer traces array
var calcoff = depth === 0 && last ? offset / 2 : offset, let calcoff = depth === 0 && last ? offset / 2 : offset,
outer = poly.offset(calcoff, []), outer = poly.offset(calcoff, []),
inner = [], inner = [],
j; j;
@ -563,7 +561,7 @@ var gs_base_polygons = exports;
}); });
} }
var newouter = [], newinner = []; let newouter = [], newinner = [];
subtract(outer, inner, newouter, newinner, poly.getZ()); subtract(outer, inner, newouter, newinner, poly.getZ());
if (newouter.length > 0) { if (newouter.length > 0) {
@ -596,7 +594,7 @@ var gs_base_polygons = exports;
function fillArea(polys, angle, spacing, output, minLen, maxLen) { function fillArea(polys, angle, spacing, output, minLen, maxLen) {
if (polys.length === 0) return; if (polys.length === 0) return;
var i = 1, let i = 1,
p0 = polys[0], p0 = polys[0],
zpos = p0.getZ(), zpos = p0.getZ(),
bounds = p0.bounds.clone(), bounds = p0.bounds.clone(),
@ -616,7 +614,7 @@ var gs_base_polygons = exports;
while (i < polys.length) bounds.merge(polys[i++].bounds); while (i < polys.length) bounds.merge(polys[i++].bounds);
// ray stepping is an axis from the line perpendicular to the ray // ray stepping is an axis from the line perpendicular to the ray
var rayint = output || [], let rayint = output || [],
stepX = -raySlope.dy, stepX = -raySlope.dy,
stepY = raySlope.dx, stepY = raySlope.dx,
iterX = ABS(ABS(stepX) > 0 ? bounds.width() / stepX : 0), iterX = ABS(ABS(stepX) > 0 ? bounds.width() / stepX : 0),
@ -639,7 +637,7 @@ var gs_base_polygons = exports;
rayint.origin = newPoint(start.x, start.y, start.z); rayint.origin = newPoint(start.x, start.y, start.z);
for (i = 0; i < steps; i++) { for (i = 0; i < steps; i++) {
var p1 = newPoint(start.x - raySlope.dx * 1000, start.y - raySlope.dy * 1000, zpos, NOKEY), let p1 = newPoint(start.x - raySlope.dx * 1000, start.y - raySlope.dy * 1000, zpos, NOKEY),
p2 = newPoint(start.x + raySlope.dx * 1000, start.y + raySlope.dy * 1000, zpos, NOKEY); p2 = newPoint(start.x + raySlope.dx * 1000, start.y + raySlope.dy * 1000, zpos, NOKEY);
lines.push([p1,p2]); lines.push([p1,p2]);
@ -655,13 +653,13 @@ var gs_base_polygons = exports;
if (clip.Execute(ctyp.ctIntersection, ctre, cfil.pftNonZero, cfil.pftEvenOdd)) { if (clip.Execute(ctyp.ctIntersection, ctre, cfil.pftNonZero, cfil.pftEvenOdd)) {
ctre.m_AllPolys.forEach(function(poly) { ctre.m_AllPolys.forEach(function(poly) {
if (minlen || maxlen) { if (minlen || maxlen) {
var plen = clib.JS.PerimeterOfPath(poly.m_polygon, false, 1); let plen = clib.JS.PerimeterOfPath(poly.m_polygon, false, 1);
if (minlen && plen < minlen) return; if (minlen && plen < minlen) return;
if (maxlen && plen > maxlen) return; if (maxlen && plen > maxlen) return;
} }
var p1 = newPoint(null,null,zpos,null,poly.m_polygon[0]); let p1 = newPoint(null,null,zpos,null,poly.m_polygon[0]);
var p2 = newPoint(null,null,zpos,null,poly.m_polygon[1]); let p2 = newPoint(null,null,zpos,null,poly.m_polygon[1]);
var od = rayint.origin.distToLineNew(p1,p2) / spacing; let od = rayint.origin.distToLineNew(p1,p2) / spacing;
lines.push([p1, p2, od]); lines.push([p1, p2, od]);
}); });
} }
@ -671,7 +669,7 @@ var gs_base_polygons = exports;
}) })
lines.forEach(function(line) { lines.forEach(function(line) {
var dist = Math.round(line[2]); let dist = Math.round(line[2]);
line[0].index = dist; line[0].index = dist;
line[1].index = dist; line[1].index = dist;
rayint.push(line[0]); rayint.push(line[0]);
@ -692,7 +690,7 @@ var gs_base_polygons = exports;
* @returns {Point[]} * @returns {Point[]}
*/ */
function rayIntersect(start, slope, polygons, for_fill) { function rayIntersect(start, slope, polygons, for_fill) {
var i = 0, let i = 0,
flat = [], flat = [],
points = [], points = [],
conf = BASE.config, conf = BASE.config,
@ -703,13 +701,13 @@ var gs_base_polygons = exports;
}); });
polygons = flat; polygons = flat;
while (i < polygons.length) { while (i < polygons.length) {
var polygon = polygons[i++], let polygon = polygons[i++],
pp = polygon.points, pp = polygon.points,
pl = pp.length, pl = pp.length,
dbug = BASE.debug, dbug = BASE.debug,
debug = false; debug = false;
for (var j = 0; j < pl; j++) { for (let j = 0; j < pl; j++) {
var j2 = (j + 1) % pl, let j2 = (j + 1) % pl,
ip = UTIL.intersectRayLine(start, slope, pp[j], pp[j2]); ip = UTIL.intersectRayLine(start, slope, pp[j], pp[j2]);
if (ip) { if (ip) {
// add group object to point for cull detection // add group object to point for cull detection
@ -732,12 +730,12 @@ var gs_base_polygons = exports;
} }
} }
if (points.length > 0) { if (points.length > 0) {
var del = false; let del = false;
// sort on distance from ray origin // sort on distance from ray origin
points.sort(function (p1, p2) { points.sort(function (p1, p2) {
// handle passing through line-common end points // handle passing through line-common end points
if (!(p1.del || p2.del) && p1.isNear(p2, merge_dist)) { if (!(p1.del || p2.del) && p1.isNear(p2, merge_dist)) {
var line = []; let line = [];
if (!p1.isNear(p1.p1, merge_dist)) line.push(p1.p1); if (!p1.isNear(p1.p1, merge_dist)) line.push(p1.p1);
if (!p1.isNear(p1.p2, merge_dist)) line.push(p1.p2); if (!p1.isNear(p1.p2, merge_dist)) line.push(p1.p2);
if (!p2.isNear(p2.p1, merge_dist)) line.push(p2.p1); if (!p2.isNear(p2.p1, merge_dist)) line.push(p2.p1);
@ -780,7 +778,7 @@ var gs_base_polygons = exports;
* ok = diff level (even-odd) * ok = diff level (even-odd)
*/ */
if (for_fill) { if (for_fill) {
var p1, p2; let p1, p2;
i = 0; i = 0;
pl = points.length; pl = points.length;
while (i < pl) { while (i < pl) {
@ -789,7 +787,7 @@ var gs_base_polygons = exports;
p2 = points[i++]; p2 = points[i++];
while (p2 && p2.del && i < pl) p2 = points[i++]; while (p2 && p2.del && i < pl) p2 = points[i++];
if (p1 && p2 && p1.group && p1.group) { if (p1 && p2 && p1.group && p1.group) {
var p1g = p1.group, let p1g = p1.group,
p2g = p2.group, p2g = p2.group,
even = (p1g.depth % 2 === 0), // point is on an even depth group even = (p1g.depth % 2 === 0), // point is on an even depth group
same = (p1g === p2g); // points intersect same group same = (p1g === p2g); // points intersect same group
@ -803,7 +801,7 @@ var gs_base_polygons = exports;
//} //}
// check cull co-linear with group edge // check cull co-linear with group edge
if (same && p1.mod && p2.mod) { if (same && p1.mod && p2.mod) {
var diff = ABS(p1.pos - p2.pos); let diff = ABS(p1.pos - p2.pos);
if (diff === 1 || diff === p1.mod - 1) { if (diff === 1 || diff === p1.mod - 1) {
p1.del = true; p1.del = true;
p2.del = true; p2.del = true;
@ -817,9 +815,9 @@ var gs_base_polygons = exports;
} }
// handle deletions, if found // handle deletions, if found
if (del) { if (del) {
var np = []; let np = [];
for (i = 0; i < points.length; i++) { for (i = 0; i < points.length; i++) {
var p = points[i]; let p = points[i];
if (!p.del) { if (!p.del) {
np.push(p); np.push(p);
} }

View file

@ -1,17 +1,15 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_base_render = exports;
(function() { (function() {
if (!self.base) self.base = {}; if (!self.base) self.base = {};
if (self.base.render) return; if (self.base.render) return;
var BASE = self.base, const BASE = self.base,
line_width = 1, materialCache = {},
materialCache = {}; line_width = 1;
BASE.render = { BASE.render = {
wireframe : wireframe wireframe : wireframe
@ -32,11 +30,11 @@ var gs_base_render = exports;
*/ */
function wireframe(group, points, color) { function wireframe(group, points, color) {
if (points.length % 3 != 0) throw "invalid line : "+points.length; if (points.length % 3 != 0) throw "invalid line : "+points.length;
var lines = new THREE.Geometry(), let lines = new THREE.Geometry(),
hash = {}, hash = {},
added = 0; added = 0;
for (var i = 0; i < points.length; i += 3) { for (let i = 0; i < points.length; i += 3) {
var p1 = points[i], let p1 = points[i],
p2 = points[i + 1], p2 = points[i + 1],
p3 = points[i + 2], p3 = points[i + 2],
l1 = newOrderedLine(p1, p2), l1 = newOrderedLine(p1, p2),
@ -59,7 +57,7 @@ var gs_base_render = exports;
} }
} }
lines.verticesNeedUpdate = true; lines.verticesNeedUpdate = true;
var mesh = new THREE.LineSegments(lines, getMaterial(color)); let mesh = new THREE.LineSegments(lines, getMaterial(color));
group.add(mesh); group.add(mesh);
return mesh; return mesh;
} }
@ -73,7 +71,7 @@ var gs_base_render = exports;
* @returns {THREE.LineBasicMaterial} * @returns {THREE.LineBasicMaterial}
*/ */
function getMaterial(color) { function getMaterial(color) {
var material = materialCache[color]; let material = materialCache[color];
if (!material) { if (!material) {
material = new THREE.LineBasicMaterial({ material = new THREE.LineBasicMaterial({
fog:false, fog:false,

View file

@ -1,14 +1,27 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_base_slope = exports;
(function() { (function() {
if (!self.base) self.base = {};
if (self.base.Slope) return; if (self.base.Slope) return;
const BASE = self.base,
CONF = BASE.config,
ABS = Math.abs,
PRO = Slope.prototype,
DEG2RAD = Math.PI / 180,
RAD2DEG = 180 / Math.PI;
BASE.Slope = Slope;
BASE.newSlope = newSlope;
BASE.newSlopeFromAngle = function(angle) {
return newSlope(0,0,
Math.cos(angle * DEG2RAD),
Math.sin(angle * DEG2RAD)
);
};
/** /**
* *
* @param p1 * @param p1
@ -23,23 +36,6 @@ var gs_base_slope = exports;
this.angle = Math.atan2(this.dy, this.dx) * RAD2DEG; this.angle = Math.atan2(this.dy, this.dx) * RAD2DEG;
} }
var BASE = self.base,
CONF = BASE.config,
ABS = Math.abs,
PRO = Slope.prototype,
DEG2RAD = Math.PI / 180,
RAD2DEG = 180 / Math.PI;
BASE.Slope = Slope;
BASE.newSlope = newSlope;
BASE.newSlopeFromAngle = function(angle) {
return newSlope(0,0,
Math.cos(angle * DEG2RAD),
Math.sin(angle * DEG2RAD)
);
};
/** ****************************************************************** /** ******************************************************************
* Slope Prototype Functions * Slope Prototype Functions
******************************************************************* */ ******************************************************************* */
@ -57,7 +53,7 @@ var gs_base_slope = exports;
if (ABS(this.dx) <= CONF.precision_merge && ABS(s.dx) <= CONF.precision_merge) return true; if (ABS(this.dx) <= CONF.precision_merge && ABS(s.dx) <= CONF.precision_merge) return true;
if (ABS(this.dy) <= CONF.precision_merge && ABS(s.dy) <= CONF.precision_merge) return true; if (ABS(this.dy) <= CONF.precision_merge && ABS(s.dy) <= CONF.precision_merge) return true;
// check angle within a range // check angle within a range
var prec = Math.min(1/Math.sqrt(this.dx * this.dx + this.dy * this.dy), CONF.precision_slope_merge); let prec = Math.min(1/Math.sqrt(this.dx * this.dx + this.dy * this.dy), CONF.precision_slope_merge);
return angleWithinDelta(this.angle, s.angle, prec || CONF.precision_slope); return angleWithinDelta(this.angle, s.angle, prec || CONF.precision_slope);
}; };
@ -67,7 +63,7 @@ var gs_base_slope = exports;
* @returns {Slope} * @returns {Slope}
*/ */
PRO.normal = function() { PRO.normal = function() {
var t = this.dx; let t = this.dx;
this.dx = -this.dy; this.dx = -this.dy;
this.dy = t; this.dy = t;
this.angle = Math.atan2(this.dy, this.dx) * RAD2DEG; this.angle = Math.atan2(this.dy, this.dx) * RAD2DEG;
@ -75,7 +71,7 @@ var gs_base_slope = exports;
}; };
PRO.toUnit = function() { PRO.toUnit = function() {
var max = Math.max(ABS(this.dx), ABS(this.dy)); let max = Math.max(ABS(this.dx), ABS(this.dy));
this.dx = this.dx / max; this.dx = this.dx / max;
this.dy = this.dy / max; this.dy = this.dy / max;
return this; return this;

View file

@ -1,10 +1,9 @@
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_wasm = exports;
// only active in workers // only active in workers
if (!self.window) if (!self.window) (function() {
(function() {
if (!self.geo) self.geo = {}; if (!self.geo) self.geo = {};

11
src/kiri.js Normal file
View file

@ -0,0 +1,11 @@
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict";
(function () {
if (self.kiri) return;
self.kiri = { };
})();

View file

@ -1,19 +1,14 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_kiri_codec = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {};
if (self.kiri.codec) return; if (self.kiri.codec) return;
var base = self.base, const BASE = self.base, KIRI = self.kiri, handlers = {};
kiri = self.kiri,
handlers = {};
kiri.codec = { KIRI.codec = {
encode: encode, encode: encode,
decode: decode, decode: decode,
registerDecoder: registerDecoder registerDecoder: registerDecoder
@ -24,7 +19,7 @@ var gs_kiri_codec = exports;
if (o === null) return null; if (o === null) return null;
if (o === undefined) return undefined; if (o === undefined) return undefined;
if (Array.isArray(o)) { if (Array.isArray(o)) {
var arr = new Array(o.length), i=0; let arr = new Array(o.length), i=0;
while (i < o.length) arr[i] = encode(o[i++], state); while (i < o.length) arr[i] = encode(o[i++], state);
return arr; return arr;
} }
@ -44,7 +39,7 @@ var gs_kiri_codec = exports;
if (o === null) return null; if (o === null) return null;
if (o === undefined) return undefined; if (o === undefined) return undefined;
if (Array.isArray(o)) { if (Array.isArray(o)) {
for (var i=0; i < o.length; i++) o[i] = decode(o[i],state); for (let i=0; i < o.length; i++) o[i] = decode(o[i],state);
return o; return o;
} }
switch (typeof(o)) { switch (typeof(o)) {
@ -64,8 +59,8 @@ var gs_kiri_codec = exports;
function genOEncode(o, state) { function genOEncode(o, state) {
if (o instanceof Float32Array) return o; if (o instanceof Float32Array) return o;
var out = {}; let out = {};
for (var k in o) { for (let k in o) {
if (o.hasOwnProperty(k)) out[k] = encode(o[k], state); if (o.hasOwnProperty(k)) out[k] = encode(o[k], state);
} }
return out; return out;
@ -73,8 +68,8 @@ var gs_kiri_codec = exports;
function genODecode(o, state) { function genODecode(o, state) {
if (o instanceof Float32Array) return o; if (o instanceof Float32Array) return o;
var out = {}; let out = {};
for (var k in o) { for (let k in o) {
if (o.hasOwnProperty(k)) out[k] = decode(o[k], state); if (o.hasOwnProperty(k)) out[k] = decode(o[k], state);
} }
return out; return out;
@ -84,7 +79,7 @@ var gs_kiri_codec = exports;
* Object CODEC Functions * Object CODEC Functions
******************************************************************* */ ******************************************************************* */
kiri.Slice.prototype.encode = function(state) { KIRI.Slice.prototype.encode = function(state) {
return { return {
type: 'slice', type: 'slice',
z: this.z, z: this.z,
@ -100,7 +95,7 @@ var gs_kiri_codec = exports;
}; };
registerDecoder('slice', function(v, state) { registerDecoder('slice', function(v, state) {
var slice = kiri.newSlice(v.z, state.mesh ? state.mesh.newGroup() : null); let slice = KIRI.newSlice(v.z, state.mesh ? state.mesh.newGroup() : null);
slice.index = v.index; slice.index = v.index;
slice.camMode = v.camMode; slice.camMode = v.camMode;
@ -114,7 +109,7 @@ var gs_kiri_codec = exports;
return slice; return slice;
}); });
kiri.Top.prototype.encode = function(state) { KIRI.Top.prototype.encode = function(state) {
return { return {
type: 'top', type: 'top',
poly: encode(this.poly, state), poly: encode(this.poly, state),
@ -129,7 +124,7 @@ var gs_kiri_codec = exports;
}; };
registerDecoder('top', function(v, state) { registerDecoder('top', function(v, state) {
var top = kiri.newTop(decode(v.poly, state)); let top = KIRI.newTop(decode(v.poly, state));
top.traces = decode(v.traces, state); top.traces = decode(v.traces, state);
top.inner = decode(v.inner, state); top.inner = decode(v.inner, state);
@ -145,7 +140,7 @@ var gs_kiri_codec = exports;
function encodePointArray(points, state) { function encodePointArray(points, state) {
if (!points) return null; if (!points) return null;
var array = new Float32Array(points.length * 3), let array = new Float32Array(points.length * 3),
pos = 0; pos = 0;
points.forEach(function(point) { points.forEach(function(point) {
@ -174,21 +169,21 @@ var gs_kiri_codec = exports;
function decodePointArray(array) { function decodePointArray(array) {
if (!array) return null; if (!array) return null;
var vid = 0, let vid = 0,
pid = 0, pid = 0,
points = new Array(array.length/3); points = new Array(array.length/3);
while (vid < array.length) { while (vid < array.length) {
points[pid++] = base.newPoint(array[vid++], array[vid++], array[vid++]); points[pid++] = BASE.newPoint(array[vid++], array[vid++], array[vid++]);
} }
return points; return points;
} }
base.Polygon.prototype.encode = function(state) { BASE.Polygon.prototype.encode = function(state) {
if (!state.poly) state.poly = {}; if (!state.poly) state.poly = {};
var cached = state.poly[this.id]; let cached = state.poly[this.id];
if (cached) { if (cached) {
return { return {
@ -216,11 +211,11 @@ var gs_kiri_codec = exports;
if (v.ref) return state.poly[v.ref]; if (v.ref) return state.poly[v.ref];
var poly = base.newPolygon(), let poly = BASE.newPolygon(),
vid = 0; vid = 0;
while (vid < v.array.length) { while (vid < v.array.length) {
poly.push(base.newPoint(v.array[vid++], v.array[vid++], v.array[vid++])); poly.push(BASE.newPoint(v.array[vid++], v.array[vid++], v.array[vid++]));
} }
poly.id = v.id; poly.id = v.id;

View file

@ -1,17 +1,12 @@
/** Copyright Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_conf = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {};
if (self.kiri.conf) return; if (self.kiri.conf) return;
let KIRI = self.kiri, const KIRI = self.kiri, CVER = 185, clone = Object.clone;
CVER = 185,
clone = Object.clone;
function genID() { function genID() {
while (true) { while (true) {

View file

@ -1,18 +1,16 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_kiri_db = exports;
(function() { (function() {
if (!self.kiri) self.kiri = { }; const KIRI = self.kiri, DP = Catalog.prototype;
/** /**
* @constructor * @constructor
*/ */
function Catalog(motodb, decimate) { function Catalog(motodb, decimate) {
var store = this; let store = this;
store.db = motodb; store.db = motodb;
store.files = {}; store.files = {};
store.listeners = []; store.listeners = [];
@ -21,15 +19,12 @@ var gs_kiri_db = exports;
store.refresh(); store.refresh();
} }
var kiri = self.kiri, KIRI.openCatalog = function(motodb,decimate) {
DP = Catalog.prototype;
kiri.openCatalog = function(motodb,decimate) {
return new Catalog(motodb,decimate); return new Catalog(motodb,decimate);
}; };
DP.refresh = function() { DP.refresh = function() {
var store = this; let store = this;
store.db.get('files', function(files) { store.db.get('files', function(files) {
if (files) { if (files) {
store.files = files; store.files = files;
@ -39,7 +34,7 @@ var gs_kiri_db = exports;
}; };
DP.wipe = function() { DP.wipe = function() {
var key, files = this.files; let key, files = this.files;
for (key in files) { for (key in files) {
if (files.hasOwnProperty(key)) this.deleteFile(key); if (files.hasOwnProperty(key)) this.deleteFile(key);
} }
@ -66,14 +61,14 @@ var gs_kiri_db = exports;
} }
function notifyFileListeners(store) { function notifyFileListeners(store) {
for (var i=0; i<store.listeners.length; i++) { for (let i=0; i<store.listeners.length; i++) {
store.listeners[i](store.files); store.listeners[i](store.files);
} }
} }
DP.decimate = function(vertices, callback) { DP.decimate = function(vertices, callback) {
if (vertices.length < 500000) return callback(vertices); if (vertices.length < 500000) return callback(vertices);
kiri.work.decimate(vertices, function(reply) { KIRI.work.decimate(vertices, function(reply) {
callback(reply); callback(reply);
}); });
}; };
@ -96,7 +91,7 @@ var gs_kiri_db = exports;
* @param {Function} [callback] * @param {Function} [callback]
*/ */
DP.putFile = function(name, vertices, callback) { DP.putFile = function(name, vertices, callback) {
var store = this; let store = this;
store.db.put('file-'+name, vertices, function(ok) { store.db.put('file-'+name, vertices, function(ok) {
if (ok) { if (ok) {
store.files[name] = { store.files[name] = {
@ -119,7 +114,7 @@ var gs_kiri_db = exports;
* @param {Function} callback * @param {Function} callback
*/ */
DP.getFile = function(name, callback) { DP.getFile = function(name, callback) {
var store = this, let store = this,
rec = store.files[name]; rec = store.files[name];
if (rec && rec.deferred) { if (rec && rec.deferred) {
if (store.deferredHandler) return store.deferredHandler(rec.deferred, name, callback); if (store.deferredHandler) return store.deferredHandler(rec.deferred, name, callback);
@ -152,7 +147,7 @@ var gs_kiri_db = exports;
* @param {Function} callback * @param {Function} callback
*/ */
DP.deleteFile = function(name, callback) { DP.deleteFile = function(name, callback) {
var store = this; let store = this;
if (store.files[name]) { if (store.files[name]) {
delete store.files[name]; delete store.files[name];
store.db.remove('fdec-'+name); store.db.remove('fdec-'+name);

View file

@ -1,26 +1,24 @@
/** Copyright Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_export = exports;
(function() { (function() {
if (!self.kiri) self.kiri = { };
if (self.kiri.export) return; if (self.kiri.export) return;
let KIRI = self.kiri, const KIRI = self.kiri,
BASE = self.base, BASE = self.base,
UTIL = BASE.util, UTIL = BASE.util,
API = KIRI.api, API = KIRI.api,
SDB = API.sdb, SDB = API.sdb,
UI = API.ui, UI = API.ui,
STATS = API.stats, STATS = API.stats,
MODES = API.const.MODES, MODES = API.const.MODES;
printSeq = parseInt(SDB['kiri-print-seq'] || SDB['print-seq'] || "0") + 1;
KIRI.export = exportPrint; KIRI.export = exportPrint;
let printSeq = parseInt(SDB['kiri-print-seq'] || SDB['print-seq'] || "0") + 1;
function exportPrint() { function exportPrint() {
let currentPrint = API.print.get(); let currentPrint = API.print.get();
if (currentPrint) { if (currentPrint) {

View file

@ -1,15 +1,12 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_kiri_fill = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {};
if (self.kiri.fill) return; if (self.kiri.fill) return;
let KIRI = self.kiri, const KIRI = self.kiri,
BASE = self.base, BASE = self.base,
UTIL = BASE.util, UTIL = BASE.util,
ROUND = UTIL.round, ROUND = UTIL.round,

View file

@ -1,10 +1,9 @@
"use strict"; /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
let gs_kiri_ico = exports; "use strict";
(function() { (function() {
if (!self.kiri) self.kiri = { };
if (!self.kiri.icon) self.kiri.icons = { if (!self.kiri.icon) self.kiri.icons = {
fdm:atob('PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB2aWV3Qm94PSIwIDAgMTcwIDE3MCIgd2lkdGg9Ijc1cHgiIGhlaWdodD0iNzVweCI+PGRlZnM+PHBhdGggZD0iTTE1IDM4LjMzQzE1IDM4LjMzIDE1IDM4LjMzIDE1IDM4LjMzQzE1IDI1LjQ1IDI1LjQ1IDE1IDM4LjMzIDE1QzQ0LjU2IDE1IDc1LjY3IDE1IDEzMS42NyAxNUMxMzEuNjcgMTUgMTMxLjY3IDE1IDEzMS42NyAxNUMxMzcuODUgMTUgMTQzLjc5IDE3LjQ2IDE0OC4xNyAyMS44M0MxNTIuNTQgMjYuMjEgMTU1IDMyLjE1IDE1NSAzOC4zM0MxNTUgNDcuNjcgMTU1IDEyMi4zMyAxNTUgMTMxLjY3QzE1NSAxNDQuNTUgMTQ0LjU1IDE1NSAxMzEuNjcgMTU1QzEyMi4zMyAxNTUgNDcuNjcgMTU1IDM4LjMzIDE1NUMyNS40NSAxNTUgMTUgMTQ0LjU1IDE1IDEzMS42N0MxNSAxMTkuMjIgMTUgODguMTEgMTUgMzguMzNaIiBpZD0iYTE0R2FsdjlVRiI+PC9wYXRoPjxwYXRoIGQ9Ik00NSAxNUwxMjUgMTVMMTI1IDc1TDQ1IDc1TDQ1IDE1WiIgaWQ9ImMzcTgzOUxVMyI+PC9wYXRoPjxwYXRoIGQ9Ik0zNSAxNDEuNDhDNTMuMTEgMTQxLjQ4IDY0LjQzIDE0MS40OCA2OC45NiAxNDEuNDhDNzcuODIgMTQxLjQ4IDg1IDEzNC4zIDg1IDEyNS40NUM4NSAxMjUuNDUgODUgMTI1LjQ1IDg1IDEyNS40NSIgaWQ9ImNoRTB0MXhmTCI+PC9wYXRoPjxwYXRoIGQ9Ik0xMDUgOTVMODUgMTE1TDY1IDk1TDEwNSA5NVoiIGlkPSJhNks5OThGM0dUIj48L3BhdGg+PHBhdGggZD0iTTc1IDc1TDk1IDc1TDk1IDk1TDc1IDk1TDc1IDc1WiIgaWQ9ImUxaWlNRVJxQWgiPjwvcGF0aD48L2RlZnM+PGc+PGc+PGc+PGc+PHVzZSB4bGluazpocmVmPSIjYTE0R2FsdjlVRiIgb3BhY2l0eT0iMSIgZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwIj48L3VzZT48Zz48dXNlIHhsaW5rOmhyZWY9IiNhMTRHYWx2OVVGIiBvcGFjaXR5PSIxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZT0iIzc3Nzc3NyIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2Utb3BhY2l0eT0iMSI+PC91c2U+PC9nPjwvZz48Zz48dXNlIHhsaW5rOmhyZWY9IiNjM3E4MzlMVTMiIG9wYWNpdHk9IjEiIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMCI+PC91c2U+PGc+PHVzZSB4bGluazpocmVmPSIjYzNxODM5TFUzIiBvcGFjaXR5PSIxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZT0iIzc3Nzc3NyIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2Utb3BhY2l0eT0iMSI+PC91c2U+PC9nPjwvZz48Zz48Zz48dXNlIHhsaW5rOmhyZWY9IiNjaEUwdDF4ZkwiIG9wYWNpdHk9IjEiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjNzc3Nzc3IiBzdHJva2Utd2lkdGg9IjguMDEiIHN0cm9rZS1vcGFjaXR5PSIxIj48L3VzZT48L2c+PC9nPjxnPjxnPjx1c2UgeGxpbms6aHJlZj0iI2E2Szk5OEYzR1QiIG9wYWNpdHk9IjEiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjNzc3Nzc3IiBzdHJva2Utd2lkdGg9IjguMDEiIHN0cm9rZS1vcGFjaXR5PSIxIj48L3VzZT48L2c+PC9nPjxnPjx1c2UgeGxpbms6aHJlZj0iI2UxaWlNRVJxQWgiIG9wYWNpdHk9IjEiIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMCI+PC91c2U+PGc+PHVzZSB4bGluazpocmVmPSIjZTFpaU1FUnFBaCIgb3BhY2l0eT0iMSIgZmlsbC1vcGFjaXR5PSIwIiBzdHJva2U9IiM3Nzc3NzciIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLW9wYWNpdHk9IjEiPjwvdXNlPjwvZz48L2c+PC9nPjwvZz48L2c+PC9zdmc+Cg=='), fdm:atob('PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+CjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiB2aWV3Qm94PSIwIDAgMTcwIDE3MCIgd2lkdGg9Ijc1cHgiIGhlaWdodD0iNzVweCI+PGRlZnM+PHBhdGggZD0iTTE1IDM4LjMzQzE1IDM4LjMzIDE1IDM4LjMzIDE1IDM4LjMzQzE1IDI1LjQ1IDI1LjQ1IDE1IDM4LjMzIDE1QzQ0LjU2IDE1IDc1LjY3IDE1IDEzMS42NyAxNUMxMzEuNjcgMTUgMTMxLjY3IDE1IDEzMS42NyAxNUMxMzcuODUgMTUgMTQzLjc5IDE3LjQ2IDE0OC4xNyAyMS44M0MxNTIuNTQgMjYuMjEgMTU1IDMyLjE1IDE1NSAzOC4zM0MxNTUgNDcuNjcgMTU1IDEyMi4zMyAxNTUgMTMxLjY3QzE1NSAxNDQuNTUgMTQ0LjU1IDE1NSAxMzEuNjcgMTU1QzEyMi4zMyAxNTUgNDcuNjcgMTU1IDM4LjMzIDE1NUMyNS40NSAxNTUgMTUgMTQ0LjU1IDE1IDEzMS42N0MxNSAxMTkuMjIgMTUgODguMTEgMTUgMzguMzNaIiBpZD0iYTE0R2FsdjlVRiI+PC9wYXRoPjxwYXRoIGQ9Ik00NSAxNUwxMjUgMTVMMTI1IDc1TDQ1IDc1TDQ1IDE1WiIgaWQ9ImMzcTgzOUxVMyI+PC9wYXRoPjxwYXRoIGQ9Ik0zNSAxNDEuNDhDNTMuMTEgMTQxLjQ4IDY0LjQzIDE0MS40OCA2OC45NiAxNDEuNDhDNzcuODIgMTQxLjQ4IDg1IDEzNC4zIDg1IDEyNS40NUM4NSAxMjUuNDUgODUgMTI1LjQ1IDg1IDEyNS40NSIgaWQ9ImNoRTB0MXhmTCI+PC9wYXRoPjxwYXRoIGQ9Ik0xMDUgOTVMODUgMTE1TDY1IDk1TDEwNSA5NVoiIGlkPSJhNks5OThGM0dUIj48L3BhdGg+PHBhdGggZD0iTTc1IDc1TDk1IDc1TDk1IDk1TDc1IDk1TDc1IDc1WiIgaWQ9ImUxaWlNRVJxQWgiPjwvcGF0aD48L2RlZnM+PGc+PGc+PGc+PGc+PHVzZSB4bGluazpocmVmPSIjYTE0R2FsdjlVRiIgb3BhY2l0eT0iMSIgZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwIj48L3VzZT48Zz48dXNlIHhsaW5rOmhyZWY9IiNhMTRHYWx2OVVGIiBvcGFjaXR5PSIxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZT0iIzc3Nzc3NyIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2Utb3BhY2l0eT0iMSI+PC91c2U+PC9nPjwvZz48Zz48dXNlIHhsaW5rOmhyZWY9IiNjM3E4MzlMVTMiIG9wYWNpdHk9IjEiIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMCI+PC91c2U+PGc+PHVzZSB4bGluazpocmVmPSIjYzNxODM5TFUzIiBvcGFjaXR5PSIxIiBmaWxsLW9wYWNpdHk9IjAiIHN0cm9rZT0iIzc3Nzc3NyIgc3Ryb2tlLXdpZHRoPSI4IiBzdHJva2Utb3BhY2l0eT0iMSI+PC91c2U+PC9nPjwvZz48Zz48Zz48dXNlIHhsaW5rOmhyZWY9IiNjaEUwdDF4ZkwiIG9wYWNpdHk9IjEiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjNzc3Nzc3IiBzdHJva2Utd2lkdGg9IjguMDEiIHN0cm9rZS1vcGFjaXR5PSIxIj48L3VzZT48L2c+PC9nPjxnPjxnPjx1c2UgeGxpbms6aHJlZj0iI2E2Szk5OEYzR1QiIG9wYWNpdHk9IjEiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjNzc3Nzc3IiBzdHJva2Utd2lkdGg9IjguMDEiIHN0cm9rZS1vcGFjaXR5PSIxIj48L3VzZT48L2c+PC9nPjxnPjx1c2UgeGxpbms6aHJlZj0iI2UxaWlNRVJxQWgiIG9wYWNpdHk9IjEiIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMCI+PC91c2U+PGc+PHVzZSB4bGluazpocmVmPSIjZTFpaU1FUnFBaCIgb3BhY2l0eT0iMSIgZmlsbC1vcGFjaXR5PSIwIiBzdHJva2U9IiM3Nzc3NzciIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLW9wYWNpdHk9IjEiPjwvdXNlPjwvZz48L2c+PC9nPjwvZz48L2c+PC9zdmc+Cg=='),

View file

@ -1,15 +1,12 @@
/** Copyright Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_kiri_init = exports;
(function() { (function() {
if (!self.kiri) self.kiri = { };
if (self.kiri.init) return; if (self.kiri.init) return;
let KIRI = self.kiri, const KIRI = self.kiri,
MOTO = self.moto, MOTO = self.moto,
CONF = KIRI.conf, CONF = KIRI.conf,
WIN = self.window, WIN = self.window,
@ -42,11 +39,12 @@ var gs_kiri_init = exports;
GCODE = [MODES.FDM, MODES.LASER, MODES.CAM], GCODE = [MODES.FDM, MODES.LASER, MODES.CAM],
LASER = [MODES.LASER], LASER = [MODES.LASER],
CATALOG = API.catalog, CATALOG = API.catalog,
platform = API.platform,
selection = API.selection,
deviceLock = false,
js2o = API.js2o, js2o = API.js2o,
o2js = API.o2js, o2js = API.o2js,
platform = API.platform,
selection = API.selection;
let deviceLock = false,
selectedTool = null, selectedTool = null,
editTools = null, editTools = null,
maxTool = 0, maxTool = 0,
@ -521,9 +519,8 @@ var gs_kiri_init = exports;
if (isLocalDevice(devicename)) { if (isLocalDevice(devicename)) {
setDeviceCode(settings().devices[devicename], devicename); setDeviceCode(settings().devices[devicename], devicename);
} else { } else {
API.ajax("/kiri/filter/"+API.mode.get()+"/"+devicename, function(code) { let code = devices[API.mode.get_lower()][devicename];
setDeviceCode(code, devicename); setDeviceCode(code, devicename);
});
} }
$('selected-device').innerHTML = devicename; $('selected-device').innerHTML = devicename;
} }
@ -973,10 +970,7 @@ var gs_kiri_init = exports;
function showDevices() { function showDevices() {
if (deviceLock) return; if (deviceLock) return;
API.modal.hide(); API.modal.hide();
API.ajax("/api/filters-"+API.mode.get_lower(), function(flvalue) { renderDevices(Object.keys(devices[API.mode.get_lower()]).sort());
if (!flvalue) return;
renderDevices(js2o(flvalue));
});
} }
function dragOverHandler(evt) { function dragOverHandler(evt) {

1
src/kiri/lang-en.js Symbolic link
View file

@ -0,0 +1 @@
../../web/kiri/lang/en.js

View file

@ -1,17 +1,14 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_lang = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {};
if (self.kiri.lang) return; if (self.kiri.lang) return;
let KIRI = self.kiri, const KIRI = self.kiri, LANG = self.kiri.lang = { current: {} };
LANG = self.kiri.lang = { current: {} },
lset = navigator.language.toLocaleLowerCase(); let lset = navigator.language.toLocaleLowerCase();
LANG.get = function() { LANG.get = function() {
return lset; return lset;

View file

@ -1,15 +1,12 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_layer = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {};
if (self.kiri.Layer) return; if (self.kiri.Layer) return;
let KIRI = self.kiri, const KIRI = self.kiri,
POLY = self.base.polygons, POLY = self.base.polygons,
LP = Layer.prototype, LP = Layer.prototype,
mcache = {}; mcache = {};

View file

@ -1,10 +1,6 @@
/** Copyright Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict";
self.kiri = (self.kiri || {}); "use strict";
self.kiri.version = exports.VERSION;
self.kiri.license = exports.LICENSE;
self.kiri.copyright = exports.COPYRIGHT;
(function () { (function () {

View file

@ -1,14 +1,12 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_print = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {}; if (self.kiri.newPrint) return;
let KIRI = self.kiri, const KIRI = self.kiri,
DRIVERS = KIRI.driver, DRIVERS = KIRI.driver,
LASER = DRIVERS.LASER, LASER = DRIVERS.LASER,
CAM = DRIVERS.CAM, CAM = DRIVERS.CAM,
@ -22,8 +20,9 @@ let gs_kiri_print = exports;
PI = Math.PI, PI = Math.PI,
PRO = Print.prototype, PRO = Print.prototype,
Polygon = BASE.Polygon, Polygon = BASE.Polygon,
newPoint = BASE.newPoint, newPoint = BASE.newPoint;
lastPoint = null,
let lastPoint = null,
lastEmit = null; lastEmit = null;
KIRI.newPrint = function(settings, widgets, id) { KIRI.newPrint = function(settings, widgets, id) {

View file

@ -1,26 +1,21 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_slice = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {};
if (self.kiri.Slice) return; if (self.kiri.Slice) return;
let KIRI = self.kiri, const KIRI = self.kiri,
FILL = KIRI.fill, FILL = KIRI.fill,
FILLFIXED = KIRI.fill_fixed, FILLFIXED = KIRI.fill_fixed,
PRO = Slice.prototype,
BASE = self.base, BASE = self.base,
UTIL = BASE.util, UTIL = BASE.util,
POLY = BASE.polygons, POLY = BASE.polygons,
PRO = Slice.prototype, NOKEY = BASE.key.NONE,
fillArea = POLY.fillArea, fillArea = POLY.fillArea,
newPoint = BASE.newPoint, newPoint = BASE.newPoint,
MIN = Math.min,
MAX = Math.max,
NOKEY = BASE.key.NONE,
outline_colors = [ outline_colors = [
0xeeee00, 0xeeee00,
0xeebb00, 0xeebb00,

View file

@ -1,15 +1,12 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_slicer = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {};
if (self.kiri.slicer) return; if (self.kiri.slicer) return;
let slicer = self.kiri.slicer = { self.kiri.slicer = {
slice: slice, slice: slice,
sliceWidget: sliceWidget, sliceWidget: sliceWidget,
connectLines: connectLines connectLines: connectLines

View file

@ -1,15 +1,12 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_widget = exports;
(function() { (function() {
if (!self.kiri) self.kiri = {};
if (self.kiri.Widget) return; if (self.kiri.Widget) return;
let KIRI = self.kiri, const KIRI = self.kiri,
DRIVERS = KIRI.driver, DRIVERS = KIRI.driver,
BASE = self.base, BASE = self.base,
CONF = BASE.config, CONF = BASE.config,
@ -20,8 +17,9 @@ let gs_kiri_widget = exports;
SQRT = MATH.sqrt, SQRT = MATH.sqrt,
PRO = Widget.prototype, PRO = Widget.prototype,
time = UTIL.time, time = UTIL.time,
solid_opacity = 1.0, solid_opacity = 1.0;
nextId = 0,
let nextId = 0,
groups = []; groups = [];
KIRI.Widget = Widget; KIRI.Widget = Widget;

View file

@ -1,4 +1,5 @@
/** Copyright Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
// this code runs in kiri's main loop // this code runs in kiri's main loop
@ -49,7 +50,7 @@ KIRI.work = {
slicing = {}; slicing = {};
running = {}; running = {};
worker = new Worker(`/code/worker.js?${exports.VERSION}`); worker = new Worker(`/code/worker.js?${self.kiri.version}`);
worker.onmessage = function(e) { worker.onmessage = function(e) {
let now = time(), let now = time(),

View file

@ -1,16 +1,17 @@
/** Copyright Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
importScripts(`/code/work.js${location.search}`); importScripts(`/code/work.js${location.search}`);
let ver = exports.VERSION, const base = self.base,
base = self.base,
moto = self.moto,
util = base.util, util = base.util,
time = util.time, time = util.time,
kiri = self.kiri, kiri = self.kiri,
Widget = kiri.Widget, ver = kiri.version,
currentPrint, Widget = kiri.Widget;
let currentPrint,
currentSnap, currentSnap,
cache = {}; cache = {};

19
src/license.js Normal file
View file

@ -0,0 +1,19 @@
(function() {
let terms = {
COPYRIGHT: "Copyright (C) Stewart Allen <sa@grid.space> - All Rights Reserved",
LICENSE: "See the license.md file included with the source distribution",
VERSION: "3.0.0-dev"
};
if (typeof(module) === 'object') {
module.exports = terms;
} else if (self.kiri) {
// self.exports = terms;
self.kiri.license = terms.LICENSE;
self.kiri.version = terms.VERSION;
self.kiri.copyright = terms.COPYRIGHT;
self.module = { exports: terms };
}
})();

View file

@ -1,16 +1,13 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
var gs_kiri_cam = exports;
(function() { (function() {
if (!self.kiri) self.kiri = { };
if (!self.kiri.driver) self.kiri.driver = { }; if (!self.kiri.driver) self.kiri.driver = { };
if (self.kiri.driver.CAM) return; if (self.kiri.driver.CAM) return;
let KIRI = self.kiri, const KIRI = self.kiri,
BASE = self.base, BASE = self.base,
UTIL = BASE.util, UTIL = BASE.util,
POLY = BASE.polygons, POLY = BASE.polygons,

View file

@ -1,16 +1,13 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_fdm = exports;
(function() { (function() {
if (!self.kiri) self.kiri = { };
if (!self.kiri.driver) self.kiri.driver = { }; if (!self.kiri.driver) self.kiri.driver = { };
if (self.kiri.driver.FDM) return; if (self.kiri.driver.FDM) return;
let KIRI = self.kiri, const KIRI = self.kiri,
BASE = self.base, BASE = self.base,
DBUG = BASE.debug, DBUG = BASE.debug,
UTIL = BASE.util, UTIL = BASE.util,

View file

@ -1,16 +1,13 @@
/** Copyright 2014-2019 Stewart Allen -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
"use strict"; "use strict";
let gs_kiri_laser = exports;
(function() { (function() {
if (!self.kiri) self.kiri = { };
if (!self.kiri.driver) self.kiri.driver = { }; if (!self.kiri.driver) self.kiri.driver = { };
if (self.kiri.driver.LASER) return; if (self.kiri.driver.LASER) return;
let KIRI = self.kiri, const KIRI = self.kiri,
BASE = self.base, BASE = self.base,
UTIL = BASE.util, UTIL = BASE.util,
POLY = BASE.polygons, POLY = BASE.polygons,

Some files were not shown because too many files have changed in this diff Show more