@jscad/core 2.6.6 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +9 -228
  2. package/README.md +1 -1
  3. package/dist/jscad-core.min.js +465 -477
  4. package/package.json +15 -16
  5. package/src/code-evaluation/index.js +4 -6
  6. package/src/code-evaluation/instanciateDesign.js +5 -9
  7. package/src/code-evaluation/rebuildGeometry.js +4 -6
  8. package/src/code-evaluation/rebuildGeometryCli.js +14 -11
  9. package/src/code-evaluation/rebuildGeometryWorker.js +3 -5
  10. package/src/code-evaluation/serializeSolids.js +2 -4
  11. package/src/code-loading/index.js +2 -4
  12. package/src/code-loading/isCommonJsModule.js +1 -3
  13. package/src/code-loading/loadDesign.js +8 -10
  14. package/src/code-loading/makeFakeFs.js +2 -3
  15. package/src/code-loading/modulifySource.js +6 -24
  16. package/src/code-loading/normalizeDesignModule.js +1 -3
  17. package/src/code-loading/requireDesignFromModule.js +4 -9
  18. package/src/code-loading/requireDesignUtilsFs.js +5 -9
  19. package/src/code-loading/transformSources.js +2 -4
  20. package/src/code-loading/validateDesignModule.js +1 -3
  21. package/src/code-loading/vtreeApi.js +1 -1
  22. package/src/code-loading/webRequire.js +36 -28
  23. package/src/code-loading/webRequire.test.js +8 -9
  24. package/src/index.js +14 -7
  25. package/src/io/index.js +2 -4
  26. package/src/io/registerExtensions.js +5 -9
  27. package/src/parameters/applyParameterDefinitions.js +1 -4
  28. package/src/parameters/getParameterDefinitionsAndValues.js +5 -6
  29. package/src/parameters/getParameterDefinitionsFromSource.js +10 -12
  30. package/src/parameters/getParameterDefinitionsFromSource.test.js +2 -3
  31. package/src/parameters/getParameterValuesFromParameters.js +2 -4
  32. package/src/parameters/getParameterValuesFromUIControls.js +2 -4
  33. package/src/parameters/index.js +4 -6
  34. package/src/utils/getFileExtensionFromString.js +1 -3
  35. package/src/utils/index.js +2 -4
  36. package/src/utils/version.js +1 -3
  37. package/src/web/index.js +1 -3
  38. package/src/web/walkFileTree.js +7 -9
@@ -18,7 +18,7 @@ function normalizeArray(r,t){for(var e=0,n=r.length-1;n>=0;n--){var o=r[n];"."==
18
18
  var cachedSetTimeout,cachedClearTimeout,process=module.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(e){if(cachedSetTimeout===setTimeout)return setTimeout(e,0);if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout)return cachedSetTimeout=setTimeout,setTimeout(e,0);try{return cachedSetTimeout(e,0)}catch(t){try{return cachedSetTimeout.call(null,e,0)}catch(t){return cachedSetTimeout.call(this,e,0)}}}function runClearTimeout(e){if(cachedClearTimeout===clearTimeout)return clearTimeout(e);if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout)return cachedClearTimeout=clearTimeout,clearTimeout(e);try{return cachedClearTimeout(e)}catch(t){try{return cachedClearTimeout.call(null,e)}catch(t){return cachedClearTimeout.call(this,e)}}}!function(){try{cachedSetTimeout="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){cachedSetTimeout=defaultSetTimout}try{cachedClearTimeout="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){cachedClearTimeout=defaultClearTimeout}}();var currentQueue,queue=[],draining=!1,queueIndex=-1;function cleanUpNextTick(){draining&&currentQueue&&(draining=!1,currentQueue.length?queue=currentQueue.concat(queue):queueIndex=-1,queue.length&&drainQueue())}function drainQueue(){if(!draining){var e=runTimeout(cleanUpNextTick);draining=!0;for(var t=queue.length;t;){for(currentQueue=queue,queue=[];++queueIndex<t;)currentQueue&&currentQueue[queueIndex].run();queueIndex=-1,t=queue.length}currentQueue=null,draining=!1,runClearTimeout(e)}}function Item(e,t){this.fun=e,this.array=t}function noop(){}process.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];queue.push(new Item(e,t)),1!==queue.length||draining||runTimeout(drainQueue)},Item.prototype.run=function(){this.fun.apply(null,this.array)},process.title="browser",process.browser=!0,process.env={},process.argv=[],process.version="",process.versions={},process.on=noop,process.addListener=noop,process.once=noop,process.off=noop,process.removeListener=noop,process.removeAllListeners=noop,process.emit=noop,process.prependListener=noop,process.prependOnceListener=noop,process.listeners=function(e){return[]},process.binding=function(e){throw new Error("process.binding is not supported")},process.cwd=function(){return"/"},process.chdir=function(e){throw new Error("process.chdir is not supported")},process.umask=function(){return 0};
19
19
 
20
20
  },{}],6:[function(require,module,exports){
21
- !function(u,D){"object"==typeof exports&&"undefined"!=typeof module?module.exports=D():"function"==typeof define&&define.amd?define(D):u.JSON5=D()}(this,function(){"use strict";function u(u,D){return u(D={exports:{}},D.exports),D.exports}var D=u(function(u){var D=u.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=D)}),e=u(function(u){var D=u.exports={version:"2.6.5"};"number"==typeof __e&&(__e=D)}),r=(e.version,function(u){return"object"==typeof u?null!==u:"function"==typeof u}),t=function(u){if(!r(u))throw TypeError(u+" is not an object!");return u},n=function(u){try{return!!u()}catch(u){return!0}},F=!n(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),C=D.document,A=r(C)&&r(C.createElement),i=!F&&!n(function(){return 7!=Object.defineProperty((u="div",A?C.createElement(u):{}),"a",{get:function(){return 7}}).a;var u}),E=Object.defineProperty,o={f:F?Object.defineProperty:function(u,D,e){if(t(u),D=function(u,D){if(!r(u))return u;var e,t;if(D&&"function"==typeof(e=u.toString)&&!r(t=e.call(u)))return t;if("function"==typeof(e=u.valueOf)&&!r(t=e.call(u)))return t;if(!D&&"function"==typeof(e=u.toString)&&!r(t=e.call(u)))return t;throw TypeError("Can't convert object to primitive value")}(D,!0),t(e),i)try{return E(u,D,e)}catch(u){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(u[D]=e.value),u}},a=F?function(u,D,e){return o.f(u,D,function(u,D){return{enumerable:!(1&u),configurable:!(2&u),writable:!(4&u),value:D}}(1,e))}:function(u,D,e){return u[D]=e,u},c={}.hasOwnProperty,B=function(u,D){return c.call(u,D)},s=0,f=Math.random(),l=u(function(u){var r=D["__core-js_shared__"]||(D["__core-js_shared__"]={});(u.exports=function(u,D){return r[u]||(r[u]=void 0!==D?D:{})})("versions",[]).push({version:e.version,mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})("native-function-to-string",Function.toString),d=u(function(u){var r,t="Symbol(".concat(void 0===(r="src")?"":r,")_",(++s+f).toString(36)),n=(""+l).split("toString");e.inspectSource=function(u){return l.call(u)},(u.exports=function(u,e,r,F){var C="function"==typeof r;C&&(B(r,"name")||a(r,"name",e)),u[e]!==r&&(C&&(B(r,t)||a(r,t,u[e]?""+u[e]:n.join(String(e)))),u===D?u[e]=r:F?u[e]?u[e]=r:a(u,e,r):(delete u[e],a(u,e,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||l.call(this)})}),v=function(u,D,e){if(function(u){if("function"!=typeof u)throw TypeError(u+" is not a function!")}(u),void 0===D)return u;switch(e){case 1:return function(e){return u.call(D,e)};case 2:return function(e,r){return u.call(D,e,r)};case 3:return function(e,r,t){return u.call(D,e,r,t)}}return function(){return u.apply(D,arguments)}},p=function(u,r,t){var n,F,C,A,i=u&p.F,E=u&p.G,o=u&p.S,c=u&p.P,B=u&p.B,s=E?D:o?D[r]||(D[r]={}):(D[r]||{}).prototype,f=E?e:e[r]||(e[r]={}),l=f.prototype||(f.prototype={});for(n in E&&(t=r),t)C=((F=!i&&s&&void 0!==s[n])?s:t)[n],A=B&&F?v(C,D):c&&"function"==typeof C?v(Function.call,C):C,s&&d(s,n,C,u&p.U),f[n]!=C&&a(f,n,A),c&&l[n]!=C&&(l[n]=C)};D.core=e,p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,p.U=64,p.R=128;var h,m=p,g=Math.ceil,y=Math.floor,w=function(u){return isNaN(u=+u)?0:(u>0?y:g)(u)},b=(h=!1,function(u,D){var e,r,t=String(function(u){if(null==u)throw TypeError("Can't call method on "+u);return u}(u)),n=w(D),F=t.length;return n<0||n>=F?h?"":void 0:(e=t.charCodeAt(n))<55296||e>56319||n+1===F||(r=t.charCodeAt(n+1))<56320||r>57343?h?t.charAt(n):e:h?t.slice(n,n+2):r-56320+(e-55296<<10)+65536});m(m.P,"String",{codePointAt:function(u){return b(this,u)}});e.String.codePointAt;var S=Math.max,x=Math.min,N=String.fromCharCode,P=String.fromCodePoint;m(m.S+m.F*(!!P&&1!=P.length),"String",{fromCodePoint:function(u){for(var D,e,r,t=arguments,n=[],F=arguments.length,C=0;F>C;){if(D=+t[C++],r=1114111,((e=w(e=D))<0?S(e+r,0):x(e,r))!==D)throw RangeError(D+" is not a valid code point");n.push(D<65536?N(D):N(55296+((D-=65536)>>10),D%1024+56320))}return n.join("")}});e.String.fromCodePoint;var _,O,j,I,V,J,M,k,L,T,z,H,$,R,G={Space_Separator:/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,ID_Start:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,ID_Continue:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},U={isSpaceSeparator:function(u){return"string"==typeof u&&G.Space_Separator.test(u)},isIdStartChar:function(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||G.ID_Start.test(u))},isIdContinueChar:function(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||G.ID_Continue.test(u))},isDigit:function(u){return"string"==typeof u&&/[0-9]/.test(u)},isHexDigit:function(u){return"string"==typeof u&&/[0-9A-Fa-f]/.test(u)}};function Z(){for(T="default",z="",H=!1,$=1;;){R=q();var u=X[T]();if(u)return u}}function q(){if(_[I])return String.fromCodePoint(_.codePointAt(I))}function W(){var u=q();return"\n"===u?(V++,J=0):u?J+=u.length:J++,u&&(I+=u.length),u}var X={default:function(){switch(R){case"\t":case"\v":case"\f":case" ":case" ":case"\ufeff":case"\n":case"\r":case"\u2028":case"\u2029":return void W();case"/":return W(),void(T="comment");case void 0:return W(),K("eof")}if(!U.isSpaceSeparator(R))return X[O]();W()},comment:function(){switch(R){case"*":return W(),void(T="multiLineComment");case"/":return W(),void(T="singleLineComment")}throw ru(W())},multiLineComment:function(){switch(R){case"*":return W(),void(T="multiLineCommentAsterisk");case void 0:throw ru(W())}W()},multiLineCommentAsterisk:function(){switch(R){case"*":return void W();case"/":return W(),void(T="default");case void 0:throw ru(W())}W(),T="multiLineComment"},singleLineComment:function(){switch(R){case"\n":case"\r":case"\u2028":case"\u2029":return W(),void(T="default");case void 0:return W(),K("eof")}W()},value:function(){switch(R){case"{":case"[":return K("punctuator",W());case"n":return W(),Q("ull"),K("null",null);case"t":return W(),Q("rue"),K("boolean",!0);case"f":return W(),Q("alse"),K("boolean",!1);case"-":case"+":return"-"===W()&&($=-1),void(T="sign");case".":return z=W(),void(T="decimalPointLeading");case"0":return z=W(),void(T="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return z=W(),void(T="decimalInteger");case"I":return W(),Q("nfinity"),K("numeric",1/0);case"N":return W(),Q("aN"),K("numeric",NaN);case'"':case"'":return H='"'===W(),z="",void(T="string")}throw ru(W())},identifierNameStartEscape:function(){if("u"!==R)throw ru(W());W();var u=Y();switch(u){case"$":case"_":break;default:if(!U.isIdStartChar(u))throw nu()}z+=u,T="identifierName"},identifierName:function(){switch(R){case"$":case"_":case"‌":case"‍":return void(z+=W());case"\\":return W(),void(T="identifierNameEscape")}if(!U.isIdContinueChar(R))return K("identifier",z);z+=W()},identifierNameEscape:function(){if("u"!==R)throw ru(W());W();var u=Y();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!U.isIdContinueChar(u))throw nu()}z+=u,T="identifierName"},sign:function(){switch(R){case".":return z=W(),void(T="decimalPointLeading");case"0":return z=W(),void(T="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return z=W(),void(T="decimalInteger");case"I":return W(),Q("nfinity"),K("numeric",$*(1/0));case"N":return W(),Q("aN"),K("numeric",NaN)}throw ru(W())},zero:function(){switch(R){case".":return z+=W(),void(T="decimalPoint");case"e":case"E":return z+=W(),void(T="decimalExponent");case"x":case"X":return z+=W(),void(T="hexadecimal")}return K("numeric",0*$)},decimalInteger:function(){switch(R){case".":return z+=W(),void(T="decimalPoint");case"e":case"E":return z+=W(),void(T="decimalExponent")}if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},decimalPointLeading:function(){if(U.isDigit(R))return z+=W(),void(T="decimalFraction");throw ru(W())},decimalPoint:function(){switch(R){case"e":case"E":return z+=W(),void(T="decimalExponent")}return U.isDigit(R)?(z+=W(),void(T="decimalFraction")):K("numeric",$*Number(z))},decimalFraction:function(){switch(R){case"e":case"E":return z+=W(),void(T="decimalExponent")}if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},decimalExponent:function(){switch(R){case"+":case"-":return z+=W(),void(T="decimalExponentSign")}if(U.isDigit(R))return z+=W(),void(T="decimalExponentInteger");throw ru(W())},decimalExponentSign:function(){if(U.isDigit(R))return z+=W(),void(T="decimalExponentInteger");throw ru(W())},decimalExponentInteger:function(){if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},hexadecimal:function(){if(U.isHexDigit(R))return z+=W(),void(T="hexadecimalInteger");throw ru(W())},hexadecimalInteger:function(){if(!U.isHexDigit(R))return K("numeric",$*Number(z));z+=W()},string:function(){switch(R){case"\\":return W(),void(z+=function(){switch(q()){case"b":return W(),"\b";case"f":return W(),"\f";case"n":return W(),"\n";case"r":return W(),"\r";case"t":return W(),"\t";case"v":return W(),"\v";case"0":if(W(),U.isDigit(q()))throw ru(W());return"\0";case"x":return W(),function(){var u="",D=q();if(!U.isHexDigit(D))throw ru(W());if(u+=W(),D=q(),!U.isHexDigit(D))throw ru(W());return u+=W(),String.fromCodePoint(parseInt(u,16))}();case"u":return W(),Y();case"\n":case"\u2028":case"\u2029":return W(),"";case"\r":return W(),"\n"===q()&&W(),"";case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case void 0:throw ru(W())}return W()}());case'"':return H?(W(),K("string",z)):void(z+=W());case"'":return H?void(z+=W()):(W(),K("string",z));case"\n":case"\r":throw ru(W());case"\u2028":case"\u2029":!function(u){console.warn("JSON5: '"+Fu(u)+"' in strings is not valid ECMAScript; consider escaping")}(R);break;case void 0:throw ru(W())}z+=W()},start:function(){switch(R){case"{":case"[":return K("punctuator",W())}T="value"},beforePropertyName:function(){switch(R){case"$":case"_":return z=W(),void(T="identifierName");case"\\":return W(),void(T="identifierNameStartEscape");case"}":return K("punctuator",W());case'"':case"'":return H='"'===W(),void(T="string")}if(U.isIdStartChar(R))return z+=W(),void(T="identifierName");throw ru(W())},afterPropertyName:function(){if(":"===R)return K("punctuator",W());throw ru(W())},beforePropertyValue:function(){T="value"},afterPropertyValue:function(){switch(R){case",":case"}":return K("punctuator",W())}throw ru(W())},beforeArrayValue:function(){if("]"===R)return K("punctuator",W());T="value"},afterArrayValue:function(){switch(R){case",":case"]":return K("punctuator",W())}throw ru(W())},end:function(){throw ru(W())}};function K(u,D){return{type:u,value:D,line:V,column:J}}function Q(u){for(var D=0,e=u;D<e.length;D+=1){var r=e[D];if(q()!==r)throw ru(W());W()}}function Y(){for(var u="",D=4;D-- >0;){var e=q();if(!U.isHexDigit(e))throw ru(W());u+=W()}return String.fromCodePoint(parseInt(u,16))}var uu={start:function(){if("eof"===M.type)throw tu();Du()},beforePropertyName:function(){switch(M.type){case"identifier":case"string":return k=M.value,void(O="afterPropertyName");case"punctuator":return void eu();case"eof":throw tu()}},afterPropertyName:function(){if("eof"===M.type)throw tu();O="beforePropertyValue"},beforePropertyValue:function(){if("eof"===M.type)throw tu();Du()},beforeArrayValue:function(){if("eof"===M.type)throw tu();"punctuator"!==M.type||"]"!==M.value?Du():eu()},afterPropertyValue:function(){if("eof"===M.type)throw tu();switch(M.value){case",":return void(O="beforePropertyName");case"}":eu()}},afterArrayValue:function(){if("eof"===M.type)throw tu();switch(M.value){case",":return void(O="beforeArrayValue");case"]":eu()}},end:function(){}};function Du(){var u;switch(M.type){case"punctuator":switch(M.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=M.value}if(void 0===L)L=u;else{var D=j[j.length-1];Array.isArray(D)?D.push(u):Object.defineProperty(D,k,{value:u,writable:!0,enumerable:!0,configurable:!0})}if(null!==u&&"object"==typeof u)j.push(u),O=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{var e=j[j.length-1];O=null==e?"end":Array.isArray(e)?"afterArrayValue":"afterPropertyValue"}}function eu(){j.pop();var u=j[j.length-1];O=null==u?"end":Array.isArray(u)?"afterArrayValue":"afterPropertyValue"}function ru(u){return Cu(void 0===u?"JSON5: invalid end of input at "+V+":"+J:"JSON5: invalid character '"+Fu(u)+"' at "+V+":"+J)}function tu(){return Cu("JSON5: invalid end of input at "+V+":"+J)}function nu(){return Cu("JSON5: invalid identifier character at "+V+":"+(J-=5))}function Fu(u){var D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){var e=u.charCodeAt(0).toString(16);return"\\x"+("00"+e).substring(e.length)}return u}function Cu(u){var D=new SyntaxError(u);return D.lineNumber=V,D.columnNumber=J,D}return{parse:function(u,D){_=String(u),O="start",j=[],I=0,V=1,J=0,M=void 0,k=void 0,L=void 0;do{M=Z(),uu[O]()}while("eof"!==M.type);return"function"==typeof D?function u(D,e,r){var t=D[e];if(null!=t&&"object"==typeof t)if(Array.isArray(t))for(var n=0;n<t.length;n++){var F=String(n),C=u(t,F,r);void 0===C?delete t[F]:Object.defineProperty(t,F,{value:C,writable:!0,enumerable:!0,configurable:!0})}else for(var A in t){var i=u(t,A,r);void 0===i?delete t[A]:Object.defineProperty(t,A,{value:i,writable:!0,enumerable:!0,configurable:!0})}return r.call(D,e,t)}({"":L},"",D):L},stringify:function(u,D,e){var r,t,n,F=[],C="",A="";if(null==D||"object"!=typeof D||Array.isArray(D)||(e=D.space,n=D.quote,D=D.replacer),"function"==typeof D)t=D;else if(Array.isArray(D)){r=[];for(var i=0,E=D;i<E.length;i+=1){var o=E[i],a=void 0;"string"==typeof o?a=o:("number"==typeof o||o instanceof String||o instanceof Number)&&(a=String(o)),void 0!==a&&r.indexOf(a)<0&&r.push(a)}}return e instanceof Number?e=Number(e):e instanceof String&&(e=String(e)),"number"==typeof e?e>0&&(e=Math.min(10,Math.floor(e)),A=" ".substr(0,e)):"string"==typeof e&&(A=e.substr(0,10)),c("",{"":u});function c(u,D){var e=D[u];switch(null!=e&&("function"==typeof e.toJSON5?e=e.toJSON5(u):"function"==typeof e.toJSON&&(e=e.toJSON(u))),t&&(e=t.call(D,u,e)),e instanceof Number?e=Number(e):e instanceof String?e=String(e):e instanceof Boolean&&(e=e.valueOf()),e){case null:return"null";case!0:return"true";case!1:return"false"}return"string"==typeof e?B(e):"number"==typeof e?String(e):"object"==typeof e?Array.isArray(e)?function(u){if(F.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");F.push(u);var D=C;C+=A;for(var e,r=[],t=0;t<u.length;t++){var n=c(String(t),u);r.push(void 0!==n?n:"null")}if(0===r.length)e="[]";else if(""===A){var i=r.join(",");e="["+i+"]"}else{var E=",\n"+C,o=r.join(E);e="[\n"+C+o+",\n"+D+"]"}return F.pop(),C=D,e}(e):function(u){if(F.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");F.push(u);var D=C;C+=A;for(var e,t,n=r||Object.keys(u),i=[],E=0,o=n;E<o.length;E+=1){var a=o[E],B=c(a,u);if(void 0!==B){var f=s(a)+":";""!==A&&(f+=" "),f+=B,i.push(f)}}if(0===i.length)e="{}";else if(""===A)t=i.join(","),e="{"+t+"}";else{var l=",\n"+C;t=i.join(l),e="{\n"+C+t+",\n"+D+"}"}return F.pop(),C=D,e}(e):void 0}function B(u){for(var D={"'":.1,'"':.2},e={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"},r="",t=0;t<u.length;t++){var F=u[t];switch(F){case"'":case'"':D[F]++,r+=F;continue;case"\0":if(U.isDigit(u[t+1])){r+="\\x00";continue}}if(e[F])r+=e[F];else if(F<" "){var C=F.charCodeAt(0).toString(16);r+="\\x"+("00"+C).substring(C.length)}else r+=F}var A=n||Object.keys(D).reduce(function(u,e){return D[u]<D[e]?u:e});return A+(r=r.replace(new RegExp(A,"g"),e[A]))+A}function s(u){if(0===u.length)return B(u);var D=String.fromCodePoint(u.codePointAt(0));if(!U.isIdStartChar(D))return B(u);for(var e=D.length;e<u.length;e++)if(!U.isIdContinueChar(String.fromCodePoint(u.codePointAt(e))))return B(u);return u}}}});
21
+ !function(u,D){"object"==typeof exports&&"undefined"!=typeof module?module.exports=D():"function"==typeof define&&define.amd?define(D):u.JSON5=D()}(this,function(){"use strict";function u(u,D){return u(D={exports:{}},D.exports),D.exports}var D=u(function(u){var D=u.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=D)}),e=u(function(u){var D=u.exports={version:"2.6.5"};"number"==typeof __e&&(__e=D)}),t=(e.version,function(u){return"object"==typeof u?null!==u:"function"==typeof u}),r=function(u){if(!t(u))throw TypeError(u+" is not an object!");return u},F=function(u){try{return!!u()}catch(u){return!0}},n=!F(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),C=D.document,A=t(C)&&t(C.createElement),i=!n&&!F(function(){return 7!=Object.defineProperty((u="div",A?C.createElement(u):{}),"a",{get:function(){return 7}}).a;var u}),E=Object.defineProperty,o={f:n?Object.defineProperty:function(u,D,e){if(r(u),D=function(u,D){if(!t(u))return u;var e,r;if(D&&"function"==typeof(e=u.toString)&&!t(r=e.call(u)))return r;if("function"==typeof(e=u.valueOf)&&!t(r=e.call(u)))return r;if(!D&&"function"==typeof(e=u.toString)&&!t(r=e.call(u)))return r;throw TypeError("Can't convert object to primitive value")}(D,!0),r(e),i)try{return E(u,D,e)}catch(u){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(u[D]=e.value),u}},a=n?function(u,D,e){return o.f(u,D,function(u,D){return{enumerable:!(1&u),configurable:!(2&u),writable:!(4&u),value:D}}(1,e))}:function(u,D,e){return u[D]=e,u},c={}.hasOwnProperty,B=function(u,D){return c.call(u,D)},s=0,f=Math.random(),l=u(function(u){var t=D["__core-js_shared__"]||(D["__core-js_shared__"]={});(u.exports=function(u,D){return t[u]||(t[u]=void 0!==D?D:{})})("versions",[]).push({version:e.version,mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})("native-function-to-string",Function.toString),d=u(function(u){var t,r="Symbol(".concat(void 0===(t="src")?"":t,")_",(++s+f).toString(36)),F=(""+l).split("toString");e.inspectSource=function(u){return l.call(u)},(u.exports=function(u,e,t,n){var C="function"==typeof t;C&&(B(t,"name")||a(t,"name",e)),u[e]!==t&&(C&&(B(t,r)||a(t,r,u[e]?""+u[e]:F.join(String(e)))),u===D?u[e]=t:n?u[e]?u[e]=t:a(u,e,t):(delete u[e],a(u,e,t)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[r]||l.call(this)})}),v=function(u,D,e){if(function(u){if("function"!=typeof u)throw TypeError(u+" is not a function!")}(u),void 0===D)return u;switch(e){case 1:return function(e){return u.call(D,e)};case 2:return function(e,t){return u.call(D,e,t)};case 3:return function(e,t,r){return u.call(D,e,t,r)}}return function(){return u.apply(D,arguments)}},p=function(u,t,r){var F,n,C,A,i=u&p.F,E=u&p.G,o=u&p.S,c=u&p.P,B=u&p.B,s=E?D:o?D[t]||(D[t]={}):(D[t]||{}).prototype,f=E?e:e[t]||(e[t]={}),l=f.prototype||(f.prototype={});for(F in E&&(r=t),r)C=((n=!i&&s&&void 0!==s[F])?s:r)[F],A=B&&n?v(C,D):c&&"function"==typeof C?v(Function.call,C):C,s&&d(s,F,C,u&p.U),f[F]!=C&&a(f,F,A),c&&l[F]!=C&&(l[F]=C)};D.core=e,p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,p.U=64,p.R=128;var h,m=p,g=Math.ceil,y=Math.floor,w=function(u){return isNaN(u=+u)?0:(u>0?y:g)(u)},S=(h=!1,function(u,D){var e,t,r=String(function(u){if(null==u)throw TypeError("Can't call method on "+u);return u}(u)),F=w(D),n=r.length;return F<0||F>=n?h?"":void 0:(e=r.charCodeAt(F))<55296||e>56319||F+1===n||(t=r.charCodeAt(F+1))<56320||t>57343?h?r.charAt(F):e:h?r.slice(F,F+2):t-56320+(e-55296<<10)+65536});m(m.P,"String",{codePointAt:function(u){return S(this,u)}});e.String.codePointAt;var b=Math.max,x=Math.min,N=String.fromCharCode,P=String.fromCodePoint;m(m.S+m.F*(!!P&&1!=P.length),"String",{fromCodePoint:function(u){for(var D,e,t,r=arguments,F=[],n=arguments.length,C=0;n>C;){if(D=+r[C++],t=1114111,((e=w(e=D))<0?b(e+t,0):x(e,t))!==D)throw RangeError(D+" is not a valid code point");F.push(D<65536?N(D):N(55296+((D-=65536)>>10),D%1024+56320))}return F.join("")}});e.String.fromCodePoint;var _,I,O,j,V,J,M,k,L,T,z,H,$,R,G={Space_Separator:/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,ID_Start:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,ID_Continue:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},U={isSpaceSeparator:function(u){return"string"==typeof u&&G.Space_Separator.test(u)},isIdStartChar:function(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||G.ID_Start.test(u))},isIdContinueChar:function(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||G.ID_Continue.test(u))},isDigit:function(u){return"string"==typeof u&&/[0-9]/.test(u)},isHexDigit:function(u){return"string"==typeof u&&/[0-9A-Fa-f]/.test(u)}};function Z(){for(T="default",z="",H=!1,$=1;;){R=q();var u=X[T]();if(u)return u}}function q(){if(_[j])return String.fromCodePoint(_.codePointAt(j))}function W(){var u=q();return"\n"===u?(V++,J=0):u?J+=u.length:J++,u&&(j+=u.length),u}var X={default:function(){switch(R){case"\t":case"\v":case"\f":case" ":case" ":case"\ufeff":case"\n":case"\r":case"\u2028":case"\u2029":return void W();case"/":return W(),void(T="comment");case void 0:return W(),K("eof")}if(!U.isSpaceSeparator(R))return X[I]();W()},comment:function(){switch(R){case"*":return W(),void(T="multiLineComment");case"/":return W(),void(T="singleLineComment")}throw tu(W())},multiLineComment:function(){switch(R){case"*":return W(),void(T="multiLineCommentAsterisk");case void 0:throw tu(W())}W()},multiLineCommentAsterisk:function(){switch(R){case"*":return void W();case"/":return W(),void(T="default");case void 0:throw tu(W())}W(),T="multiLineComment"},singleLineComment:function(){switch(R){case"\n":case"\r":case"\u2028":case"\u2029":return W(),void(T="default");case void 0:return W(),K("eof")}W()},value:function(){switch(R){case"{":case"[":return K("punctuator",W());case"n":return W(),Q("ull"),K("null",null);case"t":return W(),Q("rue"),K("boolean",!0);case"f":return W(),Q("alse"),K("boolean",!1);case"-":case"+":return"-"===W()&&($=-1),void(T="sign");case".":return z=W(),void(T="decimalPointLeading");case"0":return z=W(),void(T="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return z=W(),void(T="decimalInteger");case"I":return W(),Q("nfinity"),K("numeric",1/0);case"N":return W(),Q("aN"),K("numeric",NaN);case'"':case"'":return H='"'===W(),z="",void(T="string")}throw tu(W())},identifierNameStartEscape:function(){if("u"!==R)throw tu(W());W();var u=Y();switch(u){case"$":case"_":break;default:if(!U.isIdStartChar(u))throw Fu()}z+=u,T="identifierName"},identifierName:function(){switch(R){case"$":case"_":case"‌":case"‍":return void(z+=W());case"\\":return W(),void(T="identifierNameEscape")}if(!U.isIdContinueChar(R))return K("identifier",z);z+=W()},identifierNameEscape:function(){if("u"!==R)throw tu(W());W();var u=Y();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!U.isIdContinueChar(u))throw Fu()}z+=u,T="identifierName"},sign:function(){switch(R){case".":return z=W(),void(T="decimalPointLeading");case"0":return z=W(),void(T="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return z=W(),void(T="decimalInteger");case"I":return W(),Q("nfinity"),K("numeric",$*(1/0));case"N":return W(),Q("aN"),K("numeric",NaN)}throw tu(W())},zero:function(){switch(R){case".":return z+=W(),void(T="decimalPoint");case"e":case"E":return z+=W(),void(T="decimalExponent");case"x":case"X":return z+=W(),void(T="hexadecimal")}return K("numeric",0*$)},decimalInteger:function(){switch(R){case".":return z+=W(),void(T="decimalPoint");case"e":case"E":return z+=W(),void(T="decimalExponent")}if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},decimalPointLeading:function(){if(U.isDigit(R))return z+=W(),void(T="decimalFraction");throw tu(W())},decimalPoint:function(){switch(R){case"e":case"E":return z+=W(),void(T="decimalExponent")}return U.isDigit(R)?(z+=W(),void(T="decimalFraction")):K("numeric",$*Number(z))},decimalFraction:function(){switch(R){case"e":case"E":return z+=W(),void(T="decimalExponent")}if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},decimalExponent:function(){switch(R){case"+":case"-":return z+=W(),void(T="decimalExponentSign")}if(U.isDigit(R))return z+=W(),void(T="decimalExponentInteger");throw tu(W())},decimalExponentSign:function(){if(U.isDigit(R))return z+=W(),void(T="decimalExponentInteger");throw tu(W())},decimalExponentInteger:function(){if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},hexadecimal:function(){if(U.isHexDigit(R))return z+=W(),void(T="hexadecimalInteger");throw tu(W())},hexadecimalInteger:function(){if(!U.isHexDigit(R))return K("numeric",$*Number(z));z+=W()},string:function(){switch(R){case"\\":return W(),void(z+=function(){switch(q()){case"b":return W(),"\b";case"f":return W(),"\f";case"n":return W(),"\n";case"r":return W(),"\r";case"t":return W(),"\t";case"v":return W(),"\v";case"0":if(W(),U.isDigit(q()))throw tu(W());return"\0";case"x":return W(),function(){var u="",D=q();if(!U.isHexDigit(D))throw tu(W());if(u+=W(),D=q(),!U.isHexDigit(D))throw tu(W());return u+=W(),String.fromCodePoint(parseInt(u,16))}();case"u":return W(),Y();case"\n":case"\u2028":case"\u2029":return W(),"";case"\r":return W(),"\n"===q()&&W(),"";case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case void 0:throw tu(W())}return W()}());case'"':return H?(W(),K("string",z)):void(z+=W());case"'":return H?void(z+=W()):(W(),K("string",z));case"\n":case"\r":throw tu(W());case"\u2028":case"\u2029":!function(u){console.warn("JSON5: '"+nu(u)+"' in strings is not valid ECMAScript; consider escaping")}(R);break;case void 0:throw tu(W())}z+=W()},start:function(){switch(R){case"{":case"[":return K("punctuator",W())}T="value"},beforePropertyName:function(){switch(R){case"$":case"_":return z=W(),void(T="identifierName");case"\\":return W(),void(T="identifierNameStartEscape");case"}":return K("punctuator",W());case'"':case"'":return H='"'===W(),void(T="string")}if(U.isIdStartChar(R))return z+=W(),void(T="identifierName");throw tu(W())},afterPropertyName:function(){if(":"===R)return K("punctuator",W());throw tu(W())},beforePropertyValue:function(){T="value"},afterPropertyValue:function(){switch(R){case",":case"}":return K("punctuator",W())}throw tu(W())},beforeArrayValue:function(){if("]"===R)return K("punctuator",W());T="value"},afterArrayValue:function(){switch(R){case",":case"]":return K("punctuator",W())}throw tu(W())},end:function(){throw tu(W())}};function K(u,D){return{type:u,value:D,line:V,column:J}}function Q(u){for(var D=0,e=u;D<e.length;D+=1){var t=e[D];if(q()!==t)throw tu(W());W()}}function Y(){for(var u="",D=4;D-- >0;){var e=q();if(!U.isHexDigit(e))throw tu(W());u+=W()}return String.fromCodePoint(parseInt(u,16))}var uu={start:function(){if("eof"===M.type)throw ru();Du()},beforePropertyName:function(){switch(M.type){case"identifier":case"string":return k=M.value,void(I="afterPropertyName");case"punctuator":return void eu();case"eof":throw ru()}},afterPropertyName:function(){if("eof"===M.type)throw ru();I="beforePropertyValue"},beforePropertyValue:function(){if("eof"===M.type)throw ru();Du()},beforeArrayValue:function(){if("eof"===M.type)throw ru();"punctuator"!==M.type||"]"!==M.value?Du():eu()},afterPropertyValue:function(){if("eof"===M.type)throw ru();switch(M.value){case",":return void(I="beforePropertyName");case"}":eu()}},afterArrayValue:function(){if("eof"===M.type)throw ru();switch(M.value){case",":return void(I="beforeArrayValue");case"]":eu()}},end:function(){}};function Du(){var u;switch(M.type){case"punctuator":switch(M.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=M.value}if(void 0===L)L=u;else{var D=O[O.length-1];Array.isArray(D)?D.push(u):D[k]=u}if(null!==u&&"object"==typeof u)O.push(u),I=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{var e=O[O.length-1];I=null==e?"end":Array.isArray(e)?"afterArrayValue":"afterPropertyValue"}}function eu(){O.pop();var u=O[O.length-1];I=null==u?"end":Array.isArray(u)?"afterArrayValue":"afterPropertyValue"}function tu(u){return Cu(void 0===u?"JSON5: invalid end of input at "+V+":"+J:"JSON5: invalid character '"+nu(u)+"' at "+V+":"+J)}function ru(){return Cu("JSON5: invalid end of input at "+V+":"+J)}function Fu(){return Cu("JSON5: invalid identifier character at "+V+":"+(J-=5))}function nu(u){var D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){var e=u.charCodeAt(0).toString(16);return"\\x"+("00"+e).substring(e.length)}return u}function Cu(u){var D=new SyntaxError(u);return D.lineNumber=V,D.columnNumber=J,D}return{parse:function(u,D){_=String(u),I="start",O=[],j=0,V=1,J=0,M=void 0,k=void 0,L=void 0;do{M=Z(),uu[I]()}while("eof"!==M.type);return"function"==typeof D?function u(D,e,t){var r=D[e];if(null!=r&&"object"==typeof r)for(var F in r){var n=u(r,F,t);void 0===n?delete r[F]:r[F]=n}return t.call(D,e,r)}({"":L},"",D):L},stringify:function(u,D,e){var t,r,F,n=[],C="",A="";if(null==D||"object"!=typeof D||Array.isArray(D)||(e=D.space,F=D.quote,D=D.replacer),"function"==typeof D)r=D;else if(Array.isArray(D)){t=[];for(var i=0,E=D;i<E.length;i+=1){var o=E[i],a=void 0;"string"==typeof o?a=o:("number"==typeof o||o instanceof String||o instanceof Number)&&(a=String(o)),void 0!==a&&t.indexOf(a)<0&&t.push(a)}}return e instanceof Number?e=Number(e):e instanceof String&&(e=String(e)),"number"==typeof e?e>0&&(e=Math.min(10,Math.floor(e)),A=" ".substr(0,e)):"string"==typeof e&&(A=e.substr(0,10)),c("",{"":u});function c(u,D){var e=D[u];switch(null!=e&&("function"==typeof e.toJSON5?e=e.toJSON5(u):"function"==typeof e.toJSON&&(e=e.toJSON(u))),r&&(e=r.call(D,u,e)),e instanceof Number?e=Number(e):e instanceof String?e=String(e):e instanceof Boolean&&(e=e.valueOf()),e){case null:return"null";case!0:return"true";case!1:return"false"}return"string"==typeof e?B(e):"number"==typeof e?String(e):"object"==typeof e?Array.isArray(e)?function(u){if(n.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");n.push(u);var D=C;C+=A;for(var e,t=[],r=0;r<u.length;r++){var F=c(String(r),u);t.push(void 0!==F?F:"null")}if(0===t.length)e="[]";else if(""===A){var i=t.join(",");e="["+i+"]"}else{var E=",\n"+C,o=t.join(E);e="[\n"+C+o+",\n"+D+"]"}return n.pop(),C=D,e}(e):function(u){if(n.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");n.push(u);var D=C;C+=A;for(var e,r,F=t||Object.keys(u),i=[],E=0,o=F;E<o.length;E+=1){var a=o[E],B=c(a,u);if(void 0!==B){var f=s(a)+":";""!==A&&(f+=" "),f+=B,i.push(f)}}if(0===i.length)e="{}";else if(""===A)r=i.join(","),e="{"+r+"}";else{var l=",\n"+C;r=i.join(l),e="{\n"+C+r+",\n"+D+"}"}return n.pop(),C=D,e}(e):void 0}function B(u){for(var D={"'":.1,'"':.2},e={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"},t="",r=0;r<u.length;r++){var n=u[r];switch(n){case"'":case'"':D[n]++,t+=n;continue;case"\0":if(U.isDigit(u[r+1])){t+="\\x00";continue}}if(e[n])t+=e[n];else if(n<" "){var C=n.charCodeAt(0).toString(16);t+="\\x"+("00"+C).substring(C.length)}else t+=n}var A=F||Object.keys(D).reduce(function(u,e){return D[u]<D[e]?u:e});return A+(t=t.replace(new RegExp(A,"g"),e[A]))+A}function s(u){if(0===u.length)return B(u);var D=String.fromCodePoint(u.codePointAt(0));if(!U.isIdStartChar(D))return B(u);for(var e=D.length;e<u.length;e++)if(!U.isIdContinueChar(String.fromCodePoint(u.codePointAt(e))))return B(u);return u}}}});
22
22
 
23
23
  },{}],7:[function(require,module,exports){
24
24
  "use strict";module.exports=(e=>{if("string"!=typeof e)throw new TypeError(`Expected a string, got ${typeof e}`);return 65279===e.charCodeAt(0)?e.slice(1):e});
@@ -26,7 +26,7 @@ var cachedSetTimeout,cachedClearTimeout,process=module.exports={};function defau
26
26
  },{}],8:[function(require,module,exports){
27
27
  module.exports={
28
28
  "name": "@jscad/core",
29
- "version": "2.6.6",
29
+ "version": "2.6.4",
30
30
  "description": "Core functionality for JSCAD Applications",
31
31
  "homepage": "https://openjscad.xyz/",
32
32
  "repository": "https://github.com/jscad/OpenJSCAD.org",
@@ -62,10 +62,10 @@ module.exports={
62
62
  "license": "MIT",
63
63
  "dependencies": {
64
64
  "@jscad/array-utils": "2.1.4",
65
- "@jscad/io": "2.4.5",
66
- "@jscad/io-utils": "2.0.24",
67
- "@jscad/modeling": "2.11.1",
68
- "json5": "2.2.3",
65
+ "@jscad/io": "2.4.3",
66
+ "@jscad/io-utils": "2.0.22",
67
+ "@jscad/modeling": "2.10.0",
68
+ "json5": "2.2.0",
69
69
  "strip-bom": "4.0.0"
70
70
  },
71
71
  "devDependencies": {
@@ -88,19 +88,19 @@ module.exports={rebuildGeometry:require("./rebuildGeometry"),rebuildGeometryCli:
88
88
  },{"./rebuildGeometry":11,"./rebuildGeometryCli":12,"./rebuildGeometryWorker":13,"./serializeSolids":14}],10:[function(require,module,exports){
89
89
  const isGeom2=require("@jscad/modeling").geometries.geom2.isA,isGeom3=require("@jscad/modeling").geometries.geom3.isA,isPath2=require("@jscad/modeling").geometries.path2.isA,{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),serializeSolids=require("./serializeSolids"),isResultGeometry=e=>!!(Array.isArray(e)&&e.length>0)&&e.reduce((e,i)=>e||isGeom3(i)||isGeom2(i)||isPath2(i),!1),instanciateDesign=(e,i,r)=>{const{serialize:s}=r;let t;const o=flatten(toArray(e.main(i)));if(isResultGeometry(o))return{solids:t=s?serializeSolids(o):o};throw new Error("bad output from script: expected geom3/geom2/path2 objects")};module.exports=instanciateDesign;
90
90
 
91
- },{"./serializeSolids":14,"@jscad/array-utils":529,"@jscad/modeling":215}],11:[function(require,module,exports){
91
+ },{"./serializeSolids":14,"@jscad/array-utils":525,"@jscad/modeling":212}],11:[function(require,module,exports){
92
92
  const loadDesign=require("../code-loading/loadDesign"),instanciateDesign=require("./instanciateDesign"),applyParameterDefinitions=require("../parameters/applyParameterDefinitions"),rebuildSolids=(e,a)=>{let{mainPath:i,apiMainPath:n,serialize:s,lookup:o,lookupCounts:r,parameterValues:l}=Object.assign({},{mainPath:"",apiMainPath:"@jscad/modeling",serialize:!1,lookup:null,lookupCounts:null,parameterValues:{}},e);try{const t=e.filesAndFolders,u=loadDesign(i,n,t,l);a(null,{type:"params",parameterDefaults:u.parameterValues,parameterDefinitions:u.parameterDefinitions}),l=applyParameterDefinitions(l,u.parameterDefinitions),l=Object.assign({},u.parameterValues,l);const m={lookup:o,lookupCounts:r,serialize:s},p=instanciateDesign(u.rootModule,l,m);a(null,{type:"solids",solids:p.solids,lookup:p.lookup,lookupCounts:p.lookupCounts})}catch(e){a({type:"errors",name:e.name?e.name:"Error",message:e.message?e.message:e.toString(),description:e.description?e.description:"",number:e.number?e.number:"",fileName:e.fileName?e.fileName:"",lineNumber:e.lineNumber?e.lineNumber:"",columnNumber:e.columnNumber?e.columnNumber:"",stack:e.stack?e.stack:""},null)}};module.exports=rebuildSolids;
93
93
 
94
94
  },{"../code-loading/loadDesign":16,"../parameters/applyParameterDefinitions":27,"./instanciateDesign":10}],12:[function(require,module,exports){
95
95
  const path=require("path"),{toArray:toArray}=require("@jscad/array-utils"),requireDesignFromModule=require("../code-loading/requireDesignFromModule"),getAllParameterDefintionsAndValues=require("../parameters/getParameterDefinitionsAndValues"),makeWebRequire=require("../code-loading/webRequire"),rebuildSolids=e=>{let{apiMainPath:r,mainPath:a,parameterValues:i,useFakeFs:t}=Object.assign({},{apiMainPath:"@jscad/modeling"},e),s=require;if(t){const i=path.parse(a),t=`${i.name}.js`,u=`/${i.name}.js`,n=[{ext:"js",fullPath:u,name:t,source:e.source}];s=makeWebRequire(n,{apiMainPath:r}),a=u}const u=requireDesignFromModule(a,s),n=getAllParameterDefintionsAndValues(u,i);return toArray(u.main(n.parameterValues))};module.exports=rebuildSolids;
96
96
 
97
- },{"../code-loading/requireDesignFromModule":19,"../code-loading/webRequire":23,"../parameters/getParameterDefinitionsAndValues":28,"@jscad/array-utils":529,"path":4}],13:[function(require,module,exports){
97
+ },{"../code-loading/requireDesignFromModule":19,"../code-loading/webRequire":23,"../parameters/getParameterDefinitionsAndValues":28,"@jscad/array-utils":525,"path":4}],13:[function(require,module,exports){
98
98
  const rebuildGeometryWorker=e=>{const o=require("./rebuildGeometry");e.onmessage=function(t){if(t.data instanceof Object){const{data:r}=t;"generate"===r.cmd&&o(r,(o,t)=>{t&&e.postMessage(t),o&&e.postMessage(o)})}}};module.exports=rebuildGeometryWorker;
99
99
 
100
100
  },{"./rebuildGeometry":11}],14:[function(require,module,exports){
101
101
  const{geom2:geom2,geom3:geom3,path2:path2}=require("@jscad/modeling").geometries,serializeSolids=e=>e=e.map(e=>(geom2.isA(e)&&geom2.toSides(e),geom3.isA(e)&&geom3.toPolygons(e),path2.isA(e)&&path2.toPoints(e),e));module.exports=serializeSolids;
102
102
 
103
- },{"@jscad/modeling":215}],15:[function(require,module,exports){
103
+ },{"@jscad/modeling":212}],15:[function(require,module,exports){
104
104
  module.exports={makeFakeFs:require("./makeFakeFs.js"),requireDesignUtilsFs:require("./requireDesignUtilsFs")};
105
105
 
106
106
  },{"./makeFakeFs.js":17,"./requireDesignUtilsFs":20}],16:[function(require,module,exports){
@@ -118,7 +118,7 @@ const validateDesignModule=require("./validateDesignModule"),normalizeDesignModu
118
118
  },{"./normalizeDesignModule":18,"./validateDesignModule":22}],20:[function(require,module,exports){
119
119
  const path=require("path"),{toArray:toArray}=require("@jscad/array-utils"),splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/,splitPath=e=>splitPathRe.exec(e).slice(1),parsePath=e=>{assertPath(e);const t=splitPath(e);if(!t||4!==t.length)throw new TypeError("Invalid path '"+e+"'");return t[1]=t[1]||"",t[2]=t[2]||"",t[3]=t[3]||"",{root:t[0],dir:t[0]+t[1].slice(0,t[1].length-1),base:t[2],ext:t[3],name:t[2].slice(0,t[2].length-t[3].length)}},assertPath=e=>{if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+e)},getDesignEntryPoint=(e,t)=>{if(!t)return;const a=toArray(t)[0];let r;const n=e.statSync(a);if(n.isFile())return a;if(n.isDirectory()){const t=path.join(a,"package.json");if(e.existsSync(t)){const r=JSON.parse(e.readFileSync(t)).main;if(r)return path.join(a,r)}const n=e.readdirSync(a),i=["main","index",parsePath(path.basename(a)).name],s=i.map(e=>e+".js"),o=i.map(e=>e+".jscad"),c=n.filter(e=>s.concat(o).includes(e));return c.length>0&&(r=path.join(a,c[0])),r}return a},packageNameFromDir=(e,t,a)=>{const r=path.join(t,"package.json");if(e.existsSync(r)){const t=JSON.parse(e.readFileSync(r)).name;if(t)return t}return a?parsePath(path.basename(a)).name:path.basename(t)},getDesignName=(e,t)=>{if(!t)return"undefined";const a=toArray(t)[0],r=e.statSync(a);if(r.isFile()){const t=path.dirname(a);return packageNameFromDir(e,t,a)}return r.isDirectory()?packageNameFromDir(e,a):void 0};module.exports={getDesignEntryPoint:getDesignEntryPoint,getDesignName:getDesignName};
120
120
 
121
- },{"@jscad/array-utils":529,"path":4}],21:[function(require,module,exports){
121
+ },{"@jscad/array-utils":525,"path":4}],21:[function(require,module,exports){
122
122
  const{deserializers:deserializers}=require("@jscad/io"),modulifyTransform=(e,r)=>Object.assign({},r,{source:r.source}),createJscadEntry=(e,r)=>{const s=e.name.substring(0,e.name.lastIndexOf(".")+1)+"jscad",t="/"+s;return Object.assign({},e,{ext:"jscad",name:s,fullPath:t,source:r})},transformSources=(e,r)=>{if(r&&r.length>1)return r;const s={js:[modulifyTransform],jscad:[modulifyTransform]};return r&&(r=r.map(r=>(r=>{if(r.source&&r.ext){const t=Object.assign({},e,{filename:r.name,output:"script"});if(r.ext in deserializers){const e=(0,deserializers[r.ext])(t,r.source);return createJscadEntry(r,e)}if(r.ext in s)return s[r.ext].reduce((e,r)=>r(t,e),r)}return r})(r))),r};module.exports=transformSources;
123
123
 
124
124
  },{"@jscad/io":74}],22:[function(require,module,exports){
@@ -127,7 +127,7 @@ const validateDesignModule=n=>{if(!n)throw new Error("undefined root module pass
127
127
  },{}],23:[function(require,module,exports){
128
128
  const path=require("path"),posix=path.posix?path.posix:path,getFileExtensionFromString=require("../utils/getFileExtensionFromString"),{combineParameterDefinitions:combineParameterDefinitions,getParameterDefinitionsFromSource:getParameterDefinitionsFromSource}=require("../parameters/getParameterDefinitionsFromSource"),findMatch=(e,t)=>{for(let r=0;r<t.length;r++){const n=t[r];if(e===n.fullPath||"/"+e===n.fullPath)return n;if(n.children){const t=findMatch(e,n.children);if(void 0!==t)return t}}},registerJsExtension=(e,t)=>{const r=require("strip-bom");t.extensions[".js"]=((t,n)=>{const i=e.readFileSync(n,"utf8");t._compile(r(i),n)})},registerJsonExtension=(e,t)=>{t.extensions[".json"]=((t,r)=>{const n=e.readFileSync(r,"utf8");t.exports=JSON.parse(n)})},makeWebRequire=(e,t)=>{const r={apiMainPath:"@jscad/modeling",fakeFs:require("./makeFakeFs")(e)},{apiMainPath:n,fakeFs:i}=Object.assign({},r,t),s="@jscad/modeling"===n?require("@jscad/modeling"):require(n),o={"@jscad/io":{exports:require("@jscad/io")},"@jscad/array-utils":{exports:require("@jscad/array-utils")},"@jscad/modeling":{exports:s},fs:{exports:i}},a={},l={},u=(t,r)=>{const n=o[r];if(n)return n.exports;t&&!r.startsWith("/")||(t="/");const i=t=>{let r=getFileExtensionFromString(t);r||(r="js",t+=".js"),r="."+r;const n=findMatch(t,e);if(!n)return null;if(n.children)return null;if(a[r]){if(l[t])return l[t];const e={exports:{},_compile:(t,r)=>{try{new Function("require","module",t)(u.bind(null,n.fullPath),e)}catch(e){const t=e.message;r=r.replace("/","");const n=e.lineNumber?e.lineNumber-2:0,i=e.columnNumber?e.columnNumber:0;throw e.stack.startsWith("Object")?e.stack=`${e.stack}\nObject.<anonymous> (${r}:${n}:${i})`:((e=new SyntaxError(t,r,n)).columnNumber=i,e.stack=`Object.<anonymous> (${r}:${n}:${i})`),e}const i=t.includes("@jscad-params")?getParameterDefinitionsFromSource(t,r):[],s=e.exports.getParameterDefinitions;e.exports.getParameterDefinitions=(()=>combineParameterDefinitions(i,s&&s()||[]))}};return a[r](e,n.fullPath),l[t]=e.exports,l[t]}return null},s=t=>{if(!findMatch(t,e))return null;"/"===t&&(t="");let r=t+"/index.js",n=i(r);return n||((n=i(r=t+"/index.json"))||null)},c=t=>{let r,n=findMatch(t,e);if(!n)return null;if(!n.children)return null;if(n=findMatch(t+"/package.json",e)){const e=JSON.parse(n.source).main;if(e){const n=posix.normalize(t+"/"+e);return(r=i(n))?r:(r=s(n))||null}}return(r=s(t))||null};if(r.startsWith("./")||r.startsWith("/")||r.startsWith("../")){r=posix.normalize(posix.dirname(t)+posix.sep+r);let e=i(r);if(e)return e;if(e=c(r))return e;throw new Error(`Cannot find relative path to module ${r}`)}const m=((e,t)=>{const r=(e=>{const t=e.split("/"),r=[];for(let e=t.length-1;e>0;e--){if("node_modules"===t[e])continue;const n=posix.sep+posix.join(...t.slice(1,e+1),"node_modules");r.push(n)}return r})(t);for(let t=0;t<r.length;t++){const n=r[t],s=posix.join(n,e);let o=i(s);if(o)return o;if(o=c(s))return o}return null})(r,posix.dirname(t));if(m)return m;throw new Error(`Cannot find module ${r}`)},c=u.bind(null,"/");return c.extensions=a,c.resolve=(()=>{}),registerJsExtension(i,c),registerJsonExtension(i,c),c};module.exports=makeWebRequire;
129
129
 
130
- },{"../parameters/getParameterDefinitionsFromSource":29,"../utils/getFileExtensionFromString":33,"./makeFakeFs":17,"@jscad/array-utils":529,"@jscad/io":74,"@jscad/modeling":215,"path":4,"strip-bom":7}],24:[function(require,module,exports){
130
+ },{"../parameters/getParameterDefinitionsFromSource":29,"../utils/getFileExtensionFromString":33,"./makeFakeFs":17,"@jscad/array-utils":525,"@jscad/io":74,"@jscad/modeling":212,"path":4,"strip-bom":7}],24:[function(require,module,exports){
131
131
  module.exports={evaluation:require("./code-evaluation"),io:require("./io"),loading:require("./code-loading"),parameters:require("./parameters"),utils:require("./utils"),web:require("./web")};
132
132
 
133
133
  },{"./code-evaluation":9,"./code-loading":15,"./io":25,"./parameters":32,"./utils":34,"./web":36}],25:[function(require,module,exports){
@@ -169,7 +169,7 @@ module.exports={walkFileTree:require("./walkFileTree")};
169
169
  },{"./walkFileTree":37}],37:[function(require,module,exports){
170
170
  const{flatten:flatten}=require("@jscad/array-utils"),{formats:formats}=require("@jscad/io/formats"),getFileExtensionFromString=require("../utils/getFileExtensionFromString"),binaryMimetypes={bmp:"image/bmp",gif:"image/gif",jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",tif:"image/tiff",tiff:"image/tiff",otc:"font/otf",otf:"font/otf",ttc:"font/ttf",ttf:"font/ttf",woff:"font/woff",woff2:"font/woff",stl:"application/sla"},readFileAsync=(e,t)=>{const r=e.fullPath?e.fullPath:t.fullPath?t.fullPath:"",i=getFileExtensionFromString(e.name),n=e.mimetype;return new Promise((t,s)=>{const o=new FileReader;o.onload=(s=>{const o=s.target.result;o.byteLength?t({name:e.name,ext:i,fullPath:r,mimetype:n,source:o}):"string"==typeof o&&t({name:e.name,ext:i,fullPath:r,mimetype:n,source:o})}),o.onerror=(e=>{s(new Error(`Failed to load file: ${r} [${o.error}]`))}),binaryMimetypes[i]?o.readAsArrayBuffer(e):o.readAsText(e)})},isSupportedFormat=e=>{const t=getFileExtensionFromString(e.name),r=formats[t]?formats[t].mimetype:binaryMimetypes[t];return e.mimetype=e.type&&e.type.length?e.type:r,e.mimetype&&e.mimetype.length},pseudoArraytoArray=e=>{const t=[];for(let r=0;r<e.length;r++){const i=e[r];i&&t.push(i.webkitGetAsEntry?i.webkitGetAsEntry():i)}return t},isEmpty=e=>null!=e,processEntries=e=>{const t=pseudoArraytoArray(e.filter(isEmpty)).filter(isEmpty).reduce((e,t)=>{if(t.name.startsWith("."))return e;if(t.isFile)e.push(processFile(t));else if(t.isDirectory)e.push(processDirectory(t));else if(t instanceof File){const r=t.webkitRelativePath?t.webkitRelativePath:void 0,i=isSupportedFormat(t)?readFileAsync(t,{fullPath:r}):void 0;if(!i)throw new Error("Unsuported format (or folder in Safari)!");e.push(i)}return e},[]);return Promise.all(t).then(e=>e.filter(e=>null!=e))},processFile=e=>{return new Promise((t,r)=>{e.file(r=>{isSupportedFormat(r)?t(readFileAsync(r,e)):t(void 0)},t=>{const i=`${t.message} (${t.code})`;r(new Error(`Failed to load file: ${e.fullPath} [${i}]`))})})},processDirectory=e=>{return new Promise((t,r)=>{if(e.entries)e.entries.length?processEntries(e.entries).then(t):t([]);else{e.createReader().readEntries(e=>{e.length?processEntries(e).then(t):t([])},r)}}).then(flatten).then(t=>({children:t=t.map(t=>(t.fullPath.startsWith("/")||(t.fullPath=e.fullPath+"/"+t.name),t)),fullPath:e.fullPath,name:e.name}))},transformFileList=e=>{const t=require("path");if(1===e.length){const r=e[0],i=r.webkitRelativePath?r.webkitRelativePath:r.name;if(i.split(t.sep).length<2){const e=t.sep,n={fullPath:e,name:e,isDirectory:!0,entries:[]};return r.fullPath=t.normalize(e+i),n.entries.push(r),[n]}}let r;const i=new Map,n=(e,n)=>{if(!i.has(e)){const s={fullPath:e,name:n,isDirectory:!0,entries:[]};r||(r=s),i.set(e,s);const o=e.split(t.sep);if(o.length>1){const e=t.sep+t.join(...o.slice(0,-1)),r=i.get(e);r&&r.entries.push(s)}}};for(let r=0;r<e.length;r++){const s=e[r],o=(s.webkitRelativePath?s.webkitRelativePath:s.name).split(t.sep);if(o.reduce((e,t)=>e||t.startsWith("."),!1))continue;if(!isSupportedFormat(s))continue;const l=o.slice(0,-1);for(let e=0;e<l.length;e++){n(t.sep+t.join(...l.slice(0,e+1)),l[e])}const a=t.sep+t.join(...l),f=i.get(a);f&&f.entries.push(s)}return i.clear(),[r]},walkFileTree=e=>{let t=e;return e.length&&e[0]instanceof File&&(t=transformFileList(e)),processEntries(t)};module.exports=walkFileTree;
171
171
 
172
- },{"../utils/getFileExtensionFromString":33,"@jscad/array-utils":529,"@jscad/io/formats":73,"path":4}],38:[function(require,module,exports){
172
+ },{"../utils/getFileExtensionFromString":33,"@jscad/array-utils":525,"@jscad/io/formats":73,"path":4}],38:[function(require,module,exports){
173
173
  "use strict";var node_worker_1=require("./node-worker.cjs"),u8=Uint8Array,u16=Uint16Array,u32=Uint32Array,fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(t,n){for(var e=new u16(31),r=0;r<31;++r)e[r]=n+=1<<t[r-1];var i=new u32(e[30]);for(r=1;r<30;++r)for(var s=e[r];s<e[r+1];++s)i[s]=s-e[r]<<5|r;return[e,i]},_a=freb(fleb,2),fl=_a[0],revfl=_a[1];fl[28]=258,revfl[258]=28;for(var _b=freb(fdeb,0),fd=_b[0],revfd=_b[1],rev=new u16(32768),i=0;i<32768;++i){var x=(43690&i)>>>1|(21845&i)<<1;x=(61680&(x=(52428&x)>>>2|(13107&x)<<2))>>>4|(3855&x)<<4,rev[i]=((65280&x)>>>8|(255&x)<<8)>>>1}var hMap=function(t,n,e){for(var r=t.length,i=0,s=new u16(n);i<r;++i)t[i]&&++s[t[i]-1];var o,a=new u16(n);for(i=0;i<n;++i)a[i]=a[i-1]+s[i-1]<<1;if(e){o=new u16(1<<n);var f=15-n;for(i=0;i<r;++i)if(t[i])for(var u=i<<4|t[i],l=n-t[i],c=a[t[i]-1]++<<l,h=c|(1<<l)-1;c<=h;++c)o[rev[c]>>>f]=u}else for(o=new u16(r),i=0;i<r;++i)t[i]&&(o[i]=rev[a[t[i]-1]++]>>>15-t[i]);return o},flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;for(i=144;i<256;++i)flt[i]=9;for(i=256;i<280;++i)flt[i]=7;for(i=280;i<288;++i)flt[i]=8;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var flm=hMap(flt,9,0),flrm=hMap(flt,9,1),fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1),max=function(t){for(var n=t[0],e=1;e<t.length;++e)t[e]>n&&(n=t[e]);return n},bits=function(t,n,e){var r=n/8|0;return(t[r]|t[r+1]<<8)>>(7&n)&e},bits16=function(t,n){var e=n/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(7&n)},shft=function(t){return(t+7)/8|0},slc=function(t,n,e){(null==n||n<0)&&(n=0),(null==e||e>t.length)&&(e=t.length);var r=new(2==t.BYTES_PER_ELEMENT?u16:4==t.BYTES_PER_ELEMENT?u32:u8)(e-n);return r.set(t.subarray(n,e)),r};exports.FlateErrorCode={UnexpectedEOF:0,InvalidBlockType:1,InvalidLengthLiteral:2,InvalidDistance:3,StreamFinished:4,NoStreamHandler:5,InvalidHeader:6,NoCallback:7,InvalidUTF8:8,ExtraFieldTooLong:9,InvalidDate:10,FilenameTooLong:11,StreamFinishing:12,InvalidZipData:13,UnknownCompressionMethod:14};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],err=function(t,n,e){var r=new Error(n||ec[t]);if(r.code=t,Error.captureStackTrace&&Error.captureStackTrace(r,err),!e)throw r;return r},inflt=function(t,n,e){var r=t.length;if(!r||e&&e.f&&!e.l)return n||new u8(0);var i=!n||e,s=!e||e.i;e||(e={}),n||(n=new u8(3*r));var o=function(t){var e=n.length;if(t>e){var r=new u8(Math.max(2*e,t));r.set(n),n=r}},a=e.f||0,f=e.p||0,u=e.b||0,l=e.l,c=e.d,h=e.m,p=e.n,v=8*r;do{if(!l){a=bits(t,f,1);var d=bits(t,f+1,3);if(f+=3,!d){var b=t[(A=shft(f)+4)-4]|t[A-3]<<8,y=A+b;if(y>r){s&&err(0);break}i&&o(u+b),n.set(t.subarray(A,y),u),e.b=u+=b,e.p=f=8*y,e.f=a;continue}if(1==d)l=flrm,c=fdrm,h=9,p=5;else if(2==d){var g=bits(t,f,31)+257,m=bits(t,f+10,15)+4,z=g+bits(t,f+5,31)+1;f+=14;for(var w=new u8(z),x=new u8(19),S=0;S<m;++S)x[clim[S]]=bits(t,f+3*S,7);f+=3*m;var U=max(x),D=(1<<U)-1,T=hMap(x,U,1);for(S=0;S<z;){var A,k=T[bits(t,f,D)];if(f+=15&k,(A=k>>>4)<16)w[S++]=A;else{var I=0,M=0;for(16==A?(M=3+bits(t,f,3),f+=2,I=w[S-1]):17==A?(M=3+bits(t,f,7),f+=3):18==A&&(M=11+bits(t,f,127),f+=7);M--;)w[S++]=I}}var Z=w.subarray(0,g),C=w.subarray(g);h=max(Z),p=max(C),l=hMap(Z,h,1),c=hMap(C,p,1)}else err(1);if(f>v){s&&err(0);break}}i&&o(u+131072);for(var G=(1<<h)-1,E=(1<<p)-1,F=f;;F=f){var _=(I=l[bits16(t,f)&G])>>>4;if((f+=15&I)>v){s&&err(0);break}if(I||err(2),_<256)n[u++]=_;else{if(256==_){F=f,l=null;break}var P=_-254;if(_>264){var O=fleb[S=_-257];P=bits(t,f,(1<<O)-1)+fl[S],f+=O}var L=c[bits16(t,f)&E],N=L>>>4;L||err(3),f+=15&L;C=fd[N];if(N>3){O=fdeb[N];C+=bits16(t,f)&(1<<O)-1,f+=O}if(f>v){s&&err(0);break}i&&o(u+131072);for(var q=u+P;u<q;u+=4)n[u]=n[u-C],n[u+1]=n[u+1-C],n[u+2]=n[u+2-C],n[u+3]=n[u+3-C];u=q}}e.l=l,e.p=F,e.b=u,e.f=a,l&&(a=1,e.m=h,e.d=c,e.n=p)}while(!a);return u==n.length?n:slc(n,0,u)},wbits=function(t,n,e){e<<=7&n;var r=n/8|0;t[r]|=e,t[r+1]|=e>>>8},wbits16=function(t,n,e){e<<=7&n;var r=n/8|0;t[r]|=e,t[r+1]|=e>>>8,t[r+2]|=e>>>16},hTree=function(t,n){for(var e=[],r=0;r<t.length;++r)t[r]&&e.push({s:r,f:t[r]});var i=e.length,s=e.slice();if(!i)return[et,0];if(1==i){var o=new u8(e[0].s+1);return o[e[0].s]=1,[o,1]}e.sort(function(t,n){return t.f-n.f}),e.push({s:-1,f:25001});var a=e[0],f=e[1],u=0,l=1,c=2;for(e[0]={s:-1,f:a.f+f.f,l:a,r:f};l!=i-1;)a=e[e[u].f<e[c].f?u++:c++],f=e[u!=l&&e[u].f<e[c].f?u++:c++],e[l++]={s:-1,f:a.f+f.f,l:a,r:f};var h=s[0].s;for(r=1;r<i;++r)s[r].s>h&&(h=s[r].s);var p=new u16(h+1),v=ln(e[l-1],p,0);if(v>n){r=0;var d=0,b=v-n,y=1<<b;for(s.sort(function(t,n){return p[n.s]-p[t.s]||t.f-n.f});r<i;++r){var g=s[r].s;if(!(p[g]>n))break;d+=y-(1<<v-p[g]),p[g]=n}for(d>>>=b;d>0;){var m=s[r].s;p[m]<n?d-=1<<n-p[m]++-1:++r}for(;r>=0&&d;--r){var z=s[r].s;p[z]==n&&(--p[z],++d)}v=n}return[new u8(p),v]},ln=function(t,n,e){return-1==t.s?Math.max(ln(t.l,n,e+1),ln(t.r,n,e+1)):n[t.s]=e},lc=function(t){for(var n=t.length;n&&!t[--n];);for(var e=new u16(++n),r=0,i=t[0],s=1,o=function(t){e[r++]=t},a=1;a<=n;++a)if(t[a]==i&&a!=n)++s;else{if(!i&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(i),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(i);s=1,i=t[a]}return[e.subarray(0,r),n]},clen=function(t,n){for(var e=0,r=0;r<n.length;++r)e+=t[r]*n[r];return e},wfblk=function(t,n,e){var r=e.length,i=shft(n+2);t[i]=255&r,t[i+1]=r>>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var s=0;s<r;++s)t[i+s+4]=e[s];return 8*(i+4+r)},wblk=function(t,n,e,r,i,s,o,a,f,u,l){wbits(n,l++,e),++i[256];for(var c=hTree(i,15),h=c[0],p=c[1],v=hTree(s,15),d=v[0],b=v[1],y=lc(h),g=y[0],m=y[1],z=lc(d),w=z[0],x=z[1],S=new u16(19),U=0;U<g.length;++U)S[31&g[U]]++;for(U=0;U<w.length;++U)S[31&w[U]]++;for(var D=hTree(S,7),T=D[0],A=D[1],k=19;k>4&&!T[clim[k-1]];--k);var I,M,Z,C,G=u+5<<3,E=clen(i,flt)+clen(s,fdt)+o,F=clen(i,h)+clen(s,d)+o+14+3*k+clen(S,T)+(2*S[16]+3*S[17]+7*S[18]);if(G<=E&&G<=F)return wfblk(n,l,t.subarray(f,f+u));if(wbits(n,l,1+(F<E)),l+=2,F<E){I=hMap(h,p,0),M=h,Z=hMap(d,b,0),C=d;var _=hMap(T,A,0);wbits(n,l,m-257),wbits(n,l+5,x-1),wbits(n,l+10,k-4),l+=14;for(U=0;U<k;++U)wbits(n,l+3*U,T[clim[U]]);l+=3*k;for(var P=[g,w],O=0;O<2;++O){var L=P[O];for(U=0;U<L.length;++U){var N=31&L[U];wbits(n,l,_[N]),l+=T[N],N>15&&(wbits(n,l,L[U]>>>5&127),l+=L[U]>>>12)}}}else I=flm,M=flt,Z=fdm,C=fdt;for(U=0;U<a;++U)if(r[U]>255){N=r[U]>>>18&31;wbits16(n,l,I[N+257]),l+=M[N+257],N>7&&(wbits(n,l,r[U]>>>23&31),l+=fleb[N]);var q=31&r[U];wbits16(n,l,Z[q]),l+=C[q],q>3&&(wbits16(n,l,r[U]>>>5&8191),l+=fdeb[q])}else wbits16(n,l,I[r[U]]),l+=M[r[U]];return wbits16(n,l,I[256]),l+M[256]},deo=new u32([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),et=new u8(0),dflt=function(t,n,e,r,i,s){var o=t.length,a=new u8(r+o+5*(1+Math.ceil(o/7e3))+i),f=a.subarray(r,a.length-i),u=0;if(!n||o<8)for(var l=0;l<=o;l+=65535){var c=l+65535;c>=o&&(f[u>>3]=s),u=wfblk(f,u+1,t.subarray(l,c))}else{for(var h=deo[n-1],p=h>>>13,v=8191&h,d=(1<<e)-1,b=new u16(32768),y=new u16(d+1),g=Math.ceil(e/3),m=2*g,z=function(n){return(t[n]^t[n+1]<<g^t[n+2]<<m)&d},w=new u32(25e3),x=new u16(288),S=new u16(32),U=0,D=0,T=(l=0,0),A=0,k=0;l<o;++l){var I=z(l),M=32767&l,Z=y[I];if(b[M]=Z,y[I]=M,A<=l){var C=o-l;if((U>7e3||T>24576)&&C>423){u=wblk(t,f,0,w,x,S,D,T,k,l-k,u),T=U=D=0,k=l;for(var G=0;G<286;++G)x[G]=0;for(G=0;G<30;++G)S[G]=0}var E=2,F=0,_=v,P=M-Z&32767;if(C>2&&I==z(l-P))for(var O=Math.min(p,C)-1,L=Math.min(32767,l),N=Math.min(258,C);P<=L&&--_&&M!=Z;){if(t[l+E]==t[l+E-P]){for(var q=0;q<N&&t[l+q]==t[l+q-P];++q);if(q>E){if(E=q,F=P,q>O)break;var B=Math.min(P,q-2),H=0;for(G=0;G<B;++G){var Y=l-P+G+32768&32767,j=Y-b[Y]+32768&32767;j>H&&(H=j,Z=Y)}}}P+=(M=Z)-(Z=b[M])+32768&32767}if(F){w[T++]=268435456|revfl[E]<<18|revfd[F];var R=31&revfl[E],J=31&revfd[F];D+=fleb[R]+fdeb[J],++x[257+R],++S[J],A=l+E,++U}else w[T++]=t[l],++x[t[l]]}}u=wblk(t,f,s,w,x,S,D,T,k,l-k,u),!s&&7&u&&(u=wfblk(f,u+1,et))}return slc(a,0,r+shft(u)+i)},crct=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var e=n,r=9;--r;)e=(1&e&&-306674912)^e>>>1;t[n]=e}return t}(),crc=function(){var t=-1;return{p:function(n){for(var e=t,r=0;r<n.length;++r)e=crct[255&e^n[r]]^e>>>8;t=e},d:function(){return~t}}},adler=function(){var t=1,n=0;return{p:function(e){for(var r=t,i=n,s=0|e.length,o=0;o!=s;){for(var a=Math.min(o+2655,s);o<a;++o)i+=r+=e[o];r=(65535&r)+15*(r>>16),i=(65535&i)+15*(i>>16)}t=r,n=i},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(n%=65521))<<8|n>>>8}}},dopt=function(t,n,e,r,i){return dflt(t,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(t.length)))):12+n.mem,e,r,!i)},mrg=function(t,n){var e={};for(var r in t)e[r]=t[r];for(var r in n)e[r]=n[r];return e},wcln=function(t,n,e){for(var r=t(),i=t.toString(),s=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\s+/g,"").split(","),o=0;o<r.length;++o){var a=r[o],f=s[o];if("function"==typeof a){n+=";"+f+"=";var u=a.toString();if(a.prototype)if(-1!=u.indexOf("[native code]")){var l=u.indexOf(" ",8)+1;n+=u.slice(l,u.indexOf("(",l))}else for(var c in n+=u,a.prototype)n+=";"+f+".prototype."+c+"="+a.prototype[c].toString();else n+=u}else e[f]=a}return[n,e]},ch=[],cbfs=function(t){var n=[];for(var e in t)t[e].buffer&&n.push((t[e]=new t[e].constructor(t[e])).buffer);return n},wrkr=function(t,n,e,r){var i;if(!ch[e]){for(var s="",o={},a=t.length-1,f=0;f<a;++f)s=(i=wcln(t[f],s,o))[0],o=i[1];ch[e]=wcln(t[a],s,o)}var u=mrg({},ch[e][1]);return node_worker_1.default(ch[e][0]+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+n.toString()+"}",e,u,cbfs(u),r)},bInflt=function(){return[u8,u16,u32,fleb,fdeb,clim,fl,fd,flrm,fdrm,rev,ec,hMap,max,bits,bits16,shft,slc,err,inflt,inflateSync,pbf,gu8]},bDflt=function(){return[u8,u16,u32,fleb,fdeb,clim,revfl,revfd,flm,flt,fdm,fdt,rev,deo,et,hMap,wbits,wbits16,hTree,ln,lc,clen,wfblk,wblk,shft,slc,dflt,dopt,deflateSync,pbf]},gze=function(){return[gzh,gzhl,wbytes,crc,crct]},guze=function(){return[gzs,gzl]},zle=function(){return[zlh,wbytes,adler]},zule=function(){return[zlv]},pbf=function(t){return postMessage(t,[t.buffer])},gu8=function(t){return t&&t.size&&new u8(t.size)},cbify=function(t,n,e,r,i,s){var o=wrkr(e,r,i,function(t,n){o.terminate(),s(t,n)});return o.postMessage([t,n],n.consume?[t.buffer]:[]),function(){o.terminate()}},astrm=function(t){return t.ondata=function(t,n){return postMessage([t,n],[t.buffer])},function(n){return t.push(n.data[0],n.data[1])}},astrmify=function(t,n,e,r,i){var s,o=wrkr(t,r,i,function(t,e){t?(o.terminate(),n.ondata.call(n,t)):(e[1]&&o.terminate(),n.ondata.call(n,t,e[0],e[1]))});o.postMessage(e),n.push=function(t,e){n.ondata||err(5),s&&n.ondata(err(4,0,1),null,!!e),o.postMessage([t,s=e],[t.buffer])},n.terminate=function(){o.terminate()}},b2=function(t,n){return t[n]|t[n+1]<<8},b4=function(t,n){return(t[n]|t[n+1]<<8|t[n+2]<<16|t[n+3]<<24)>>>0},b8=function(t,n){return b4(t,n)+4294967296*b4(t,n+4)},wbytes=function(t,n,e){for(;e;++n)t[n]=e,e>>>=8},gzh=function(t,n){var e=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&wbytes(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){t[3]=8;for(var r=0;r<=e.length;++r)t[r+10]=e.charCodeAt(r)}},gzs=function(t){31==t[0]&&139==t[1]&&8==t[2]||err(6,"invalid gzip data");var n=t[3],e=10;4&n&&(e+=t[10]|2+(t[11]<<8));for(var r=(n>>3&1)+(n>>4&1);r>0;r-=!t[e++]);return e+(2&n)},gzl=function(t){var n=t.length;return(t[n-4]|t[n-3]<<8|t[n-2]<<16|t[n-1]<<24)>>>0},gzhl=function(t){return 10+(t.filename&&t.filename.length+1||0)},zlh=function(t,n){var e=n.level,r=0==e?0:e<6?1:9==e?3:2;t[0]=120,t[1]=r<<6|(r?32-2*r:1)},zlv=function(t){(8!=(15&t[0])||t[0]>>>4>7||(t[0]<<8|t[1])%31)&&err(6,"invalid zlib data"),32&t[1]&&err(6,"invalid zlib data: preset dictionaries not supported")};function AsyncCmpStrm(t,n){return n||"function"!=typeof t||(n=t,t={}),this.ondata=n,t}var Deflate=function(){function t(t,n){n||"function"!=typeof t||(n=t,t={}),this.ondata=n,this.o=t||{}}return t.prototype.p=function(t,n){this.ondata(dopt(t,this.o,0,0,!n),n)},t.prototype.push=function(t,n){this.ondata||err(5),this.d&&err(4),this.d=n,this.p(t,n||!1)},t}();exports.Deflate=Deflate;var AsyncDeflate=function(){return function(t,n){astrmify([bDflt,function(){return[astrm,Deflate]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Deflate(t.data);onmessage=astrm(n)},6)}}();function deflate(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt],function(t){return pbf(deflateSync(t.data[0],t.data[1]))},0,e)}function deflateSync(t,n){return dopt(t,n||{},0,0)}exports.AsyncDeflate=AsyncDeflate,exports.deflate=deflate,exports.deflateSync=deflateSync;var Inflate=function(){function t(t){this.s={},this.p=new u8(0),this.ondata=t}return t.prototype.e=function(t){this.ondata||err(5),this.d&&err(4);var n=this.p.length,e=new u8(n+t.length);e.set(this.p),e.set(t,n),this.p=e},t.prototype.c=function(t){this.d=this.s.i=t||!1;var n=this.s.b,e=inflt(this.p,this.o,this.s);this.ondata(slc(e,n,this.s.b),this.d),this.o=slc(e,this.s.b-32768),this.s.b=this.o.length,this.p=slc(this.p,this.s.p/8|0),this.s.p&=7},t.prototype.push=function(t,n){this.e(t),this.c(n)},t}();exports.Inflate=Inflate;var AsyncInflate=function(){return function(t){this.ondata=t,astrmify([bInflt,function(){return[astrm,Inflate]}],this,0,function(){var t=new Inflate;onmessage=astrm(t)},7)}}();function inflate(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt],function(t){return pbf(inflateSync(t.data[0],gu8(t.data[1])))},1,e)}function inflateSync(t,n){return inflt(t,n)}exports.AsyncInflate=AsyncInflate,exports.inflate=inflate,exports.inflateSync=inflateSync;var Gzip=function(){function t(t,n){this.c=crc(),this.l=0,this.v=1,Deflate.call(this,t,n)}return t.prototype.push=function(t,n){Deflate.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){this.c.p(t),this.l+=t.length;var e=dopt(t,this.o,this.v&&gzhl(this.o),n&&8,!n);this.v&&(gzh(e,this.o),this.v=0),n&&(wbytes(e,e.length-8,this.c.d()),wbytes(e,e.length-4,this.l)),this.ondata(e,n)},t}();exports.Gzip=Gzip,exports.Compress=Gzip;var AsyncGzip=function(){return function(t,n){astrmify([bDflt,gze,function(){return[astrm,Deflate,Gzip]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Gzip(t.data);onmessage=astrm(n)},8)}}();function gzip(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt,gze,function(){return[gzipSync]}],function(t){return pbf(gzipSync(t.data[0],t.data[1]))},2,e)}function gzipSync(t,n){n||(n={});var e=crc(),r=t.length;e.p(t);var i=dopt(t,n,gzhl(n),8),s=i.length;return gzh(i,n),wbytes(i,s-8,e.d()),wbytes(i,s-4,r),i}exports.AsyncGzip=AsyncGzip,exports.AsyncCompress=AsyncGzip,exports.gzip=gzip,exports.compress=gzip,exports.gzipSync=gzipSync,exports.compressSync=gzipSync;var Gunzip=function(){function t(t){this.v=1,Inflate.call(this,t)}return t.prototype.push=function(t,n){if(Inflate.prototype.e.call(this,t),this.v){var e=this.p.length>3?gzs(this.p):4;if(e>=this.p.length&&!n)return;this.p=this.p.subarray(e),this.v=0}n&&(this.p.length<8&&err(6,"invalid gzip data"),this.p=this.p.subarray(0,-8)),Inflate.prototype.c.call(this,n)},t}();exports.Gunzip=Gunzip;var AsyncGunzip=function(){return function(t){this.ondata=t,astrmify([bInflt,guze,function(){return[astrm,Inflate,Gunzip]}],this,0,function(){var t=new Gunzip;onmessage=astrm(t)},9)}}();function gunzip(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt,guze,function(){return[gunzipSync]}],function(t){return pbf(gunzipSync(t.data[0]))},3,e)}function gunzipSync(t,n){return inflt(t.subarray(gzs(t),-8),n||new u8(gzl(t)))}exports.AsyncGunzip=AsyncGunzip,exports.gunzip=gunzip,exports.gunzipSync=gunzipSync;var Zlib=function(){function t(t,n){this.c=adler(),this.v=1,Deflate.call(this,t,n)}return t.prototype.push=function(t,n){Deflate.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){this.c.p(t);var e=dopt(t,this.o,this.v&&2,n&&4,!n);this.v&&(zlh(e,this.o),this.v=0),n&&wbytes(e,e.length-4,this.c.d()),this.ondata(e,n)},t}();exports.Zlib=Zlib;var AsyncZlib=function(){return function(t,n){astrmify([bDflt,zle,function(){return[astrm,Deflate,Zlib]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Zlib(t.data);onmessage=astrm(n)},10)}}();function zlib(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt,zle,function(){return[zlibSync]}],function(t){return pbf(zlibSync(t.data[0],t.data[1]))},4,e)}function zlibSync(t,n){n||(n={});var e=adler();e.p(t);var r=dopt(t,n,2,4);return zlh(r,n),wbytes(r,r.length-4,e.d()),r}exports.AsyncZlib=AsyncZlib,exports.zlib=zlib,exports.zlibSync=zlibSync;var Unzlib=function(){function t(t){this.v=1,Inflate.call(this,t)}return t.prototype.push=function(t,n){if(Inflate.prototype.e.call(this,t),this.v){if(this.p.length<2&&!n)return;this.p=this.p.subarray(2),this.v=0}n&&(this.p.length<4&&err(6,"invalid zlib data"),this.p=this.p.subarray(0,-4)),Inflate.prototype.c.call(this,n)},t}();exports.Unzlib=Unzlib;var AsyncUnzlib=function(){return function(t){this.ondata=t,astrmify([bInflt,zule,function(){return[astrm,Inflate,Unzlib]}],this,0,function(){var t=new Unzlib;onmessage=astrm(t)},11)}}();function unzlib(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt,zule,function(){return[unzlibSync]}],function(t){return pbf(unzlibSync(t.data[0],gu8(t.data[1])))},5,e)}function unzlibSync(t,n){return inflt((zlv(t),t.subarray(2,-4)),n)}exports.AsyncUnzlib=AsyncUnzlib,exports.unzlib=unzlib,exports.unzlibSync=unzlibSync;var Decompress=function(){function t(t){this.G=Gunzip,this.I=Inflate,this.Z=Unzlib,this.ondata=t}return t.prototype.push=function(t,n){if(this.ondata||err(5),this.s)this.s.push(t,n);else{if(this.p&&this.p.length){var e=new u8(this.p.length+t.length);e.set(this.p),e.set(t,this.p.length)}else this.p=t;if(this.p.length>2){var r=this,i=function(){r.ondata.apply(r,arguments)};this.s=31==this.p[0]&&139==this.p[1]&&8==this.p[2]?new this.G(i):8!=(15&this.p[0])||this.p[0]>>4>7||(this.p[0]<<8|this.p[1])%31?new this.I(i):new this.Z(i),this.s.push(this.p,n),this.p=null}}},t}();exports.Decompress=Decompress;var AsyncDecompress=function(){function t(t){this.G=AsyncGunzip,this.I=AsyncInflate,this.Z=AsyncUnzlib,this.ondata=t}return t.prototype.push=function(t,n){Decompress.prototype.push.call(this,t,n)},t}();function decompress(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),31==t[0]&&139==t[1]&&8==t[2]?gunzip(t,n,e):8!=(15&t[0])||t[0]>>4>7||(t[0]<<8|t[1])%31?inflate(t,n,e):unzlib(t,n,e)}function decompressSync(t,n){return 31==t[0]&&139==t[1]&&8==t[2]?gunzipSync(t,n):8!=(15&t[0])||t[0]>>4>7||(t[0]<<8|t[1])%31?inflateSync(t,n):unzlibSync(t,n)}exports.AsyncDecompress=AsyncDecompress,exports.decompress=decompress,exports.decompressSync=decompressSync;var fltn=function(t,n,e,r){for(var i in t){var s=t[i],o=n+i,a=r;Array.isArray(s)&&(a=mrg(r,s[1]),s=s[0]),s instanceof u8?e[o]=[s,a]:(e[o+="/"]=[new u8(0),a],fltn(s,o,e,r))}},te="undefined"!=typeof TextEncoder&&new TextEncoder,td="undefined"!=typeof TextDecoder&&new TextDecoder,tds=0;try{td.decode(et,{stream:!0}),tds=1}catch(t){}var dutf8=function(t){for(var n="",e=0;;){var r=t[e++],i=(r>127)+(r>223)+(r>239);if(e+i>t.length)return[n,slc(t,e-1)];i?3==i?(r=((15&r)<<18|(63&t[e++])<<12|(63&t[e++])<<6|63&t[e++])-65536,n+=String.fromCharCode(55296|r>>10,56320|1023&r)):n+=1&i?String.fromCharCode((31&r)<<6|63&t[e++]):String.fromCharCode((15&r)<<12|(63&t[e++])<<6|63&t[e++]):n+=String.fromCharCode(r)}},DecodeUTF8=function(){function t(t){this.ondata=t,tds?this.t=new TextDecoder:this.p=et}return t.prototype.push=function(t,n){if(this.ondata||err(5),n=!!n,this.t)return this.ondata(this.t.decode(t,{stream:!0}),n),void(n&&(this.t.decode().length&&err(8),this.t=null));this.p||err(4);var e=new u8(this.p.length+t.length);e.set(this.p),e.set(t,this.p.length);var r=dutf8(e),i=r[0],s=r[1];n?(s.length&&err(8),this.p=null):this.p=s,this.ondata(i,n)},t}();exports.DecodeUTF8=DecodeUTF8;var EncodeUTF8=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||err(5),this.d&&err(4),this.ondata(strToU8(t),this.d=n||!1)},t}();function strToU8(t,n){if(n){for(var e=new u8(t.length),r=0;r<t.length;++r)e[r]=t.charCodeAt(r);return e}if(te)return te.encode(t);var i=t.length,s=new u8(t.length+(t.length>>1)),o=0,a=function(t){s[o++]=t};for(r=0;r<i;++r){if(o+5>s.length){var f=new u8(o+8+(i-r<<1));f.set(s),s=f}var u=t.charCodeAt(r);u<128||n?a(u):u<2048?(a(192|u>>6),a(128|63&u)):u>55295&&u<57344?(a(240|(u=65536+(1047552&u)|1023&t.charCodeAt(++r))>>18),a(128|u>>12&63),a(128|u>>6&63),a(128|63&u)):(a(224|u>>12),a(128|u>>6&63),a(128|63&u))}return slc(s,0,o)}function strFromU8(t,n){if(n){for(var e="",r=0;r<t.length;r+=16384)e+=String.fromCharCode.apply(null,t.subarray(r,r+16384));return e}if(td)return td.decode(t);var i=dutf8(t),s=i[0];return i[1].length&&err(8),s}exports.EncodeUTF8=EncodeUTF8,exports.strToU8=strToU8,exports.strFromU8=strFromU8;var dbf=function(t){return 1==t?3:t<6?2:9==t?1:0},slzh=function(t,n){return n+30+b2(t,n+26)+b2(t,n+28)},zh=function(t,n,e){var r=b2(t,n+28),i=strFromU8(t.subarray(n+46,n+46+r),!(2048&b2(t,n+8))),s=n+46+r,o=b4(t,n+20),a=e&&4294967295==o?z64e(t,s):[o,b4(t,n+24),b4(t,n+42)],f=a[0],u=a[1],l=a[2];return[b2(t,n+10),f,u,i,s+b2(t,n+30)+b2(t,n+32),l]},z64e=function(t,n){for(;1!=b2(t,n);n+=4+b2(t,n+2));return[b8(t,n+12),b8(t,n+4),b8(t,n+20)]},exfl=function(t){var n=0;if(t)for(var e in t){var r=t[e].length;r>65535&&err(9),n+=r+4}return n},wzh=function(t,n,e,r,i,s,o,a){var f=r.length,u=e.extra,l=a&&a.length,c=exfl(u);wbytes(t,n,null!=o?33639248:67324752),n+=4,null!=o&&(t[n++]=20,t[n++]=e.os),t[n]=20,n+=2,t[n++]=e.flag<<1|(null==s&&8),t[n++]=i&&8,t[n++]=255&e.compression,t[n++]=e.compression>>8;var h=new Date(null==e.mtime?Date.now():e.mtime),p=h.getFullYear()-1980;if((p<0||p>119)&&err(10),wbytes(t,n,p<<25|h.getMonth()+1<<21|h.getDate()<<16|h.getHours()<<11|h.getMinutes()<<5|h.getSeconds()>>>1),n+=4,null!=s&&(wbytes(t,n,e.crc),wbytes(t,n+4,s),wbytes(t,n+8,e.size)),wbytes(t,n+12,f),wbytes(t,n+14,c),n+=16,null!=o&&(wbytes(t,n,l),wbytes(t,n+6,e.attrs),wbytes(t,n+10,o),n+=14),t.set(r,n),n+=f,c)for(var v in u){var d=u[v],b=d.length;wbytes(t,n,+v),wbytes(t,n+2,b),t.set(d,n+4),n+=4+b}return l&&(t.set(a,n),n+=l),n},wzf=function(t,n,e,r,i){wbytes(t,n,101010256),wbytes(t,n+8,e),wbytes(t,n+10,e),wbytes(t,n+12,r),wbytes(t,n+16,i)},ZipPassThrough=function(){function t(t){this.filename=t,this.c=crc(),this.size=0,this.compression=0}return t.prototype.process=function(t,n){this.ondata(null,t,n)},t.prototype.push=function(t,n){this.ondata||err(5),this.c.p(t),this.size+=t.length,n&&(this.crc=this.c.d()),this.process(t,n||!1)},t}();exports.ZipPassThrough=ZipPassThrough;var ZipDeflate=function(){function t(t,n){var e=this;n||(n={}),ZipPassThrough.call(this,t),this.d=new Deflate(n,function(t,n){e.ondata(null,t,n)}),this.compression=8,this.flag=dbf(n.level)}return t.prototype.process=function(t,n){try{this.d.push(t,n)}catch(t){this.ondata(t,null,n)}},t.prototype.push=function(t,n){ZipPassThrough.prototype.push.call(this,t,n)},t}();exports.ZipDeflate=ZipDeflate;var AsyncZipDeflate=function(){function t(t,n){var e=this;n||(n={}),ZipPassThrough.call(this,t),this.d=new AsyncDeflate(n,function(t,n,r){e.ondata(t,n,r)}),this.compression=8,this.flag=dbf(n.level),this.terminate=this.d.terminate}return t.prototype.process=function(t,n){this.d.push(t,n)},t.prototype.push=function(t,n){ZipPassThrough.prototype.push.call(this,t,n)},t}();exports.AsyncZipDeflate=AsyncZipDeflate;var Zip=function(){function t(t){this.ondata=t,this.u=[],this.d=1}return t.prototype.add=function(t){var n=this;if(this.ondata||err(5),2&this.d)this.ondata(err(4+8*(1&this.d),0,1),null,!1);else{var e=strToU8(t.filename),r=e.length,i=t.comment,s=i&&strToU8(i),o=r!=t.filename.length||s&&i.length!=s.length,a=r+exfl(t.extra)+30;r>65535&&this.ondata(err(11,0,1),null,!1);var f=new u8(a);wzh(f,0,t,e,o);var u=[f],l=function(){for(var t=0,e=u;t<e.length;t++){var r=e[t];n.ondata(null,r,!1)}u=[]},c=this.d;this.d=0;var h=this.u.length,p=mrg(t,{f:e,u:o,o:s,t:function(){t.terminate&&t.terminate()},r:function(){if(l(),c){var t=n.u[h+1];t?t.r():n.d=1}c=1}}),v=0;t.ondata=function(e,r,i){if(e)n.ondata(e,r,i),n.terminate();else if(v+=r.length,u.push(r),i){var s=new u8(16);wbytes(s,0,134695760),wbytes(s,4,t.crc),wbytes(s,8,v),wbytes(s,12,t.size),u.push(s),p.c=v,p.b=a+v+16,p.crc=t.crc,p.size=t.size,c&&p.r(),c=1}else c&&l()},this.u.push(p)}},t.prototype.end=function(){var t=this;2&this.d?this.ondata(err(4+8*(1&this.d),0,1),null,!0):(this.d?this.e():this.u.push({r:function(){1&t.d&&(t.u.splice(-1,1),t.e())},t:function(){}}),this.d=3)},t.prototype.e=function(){for(var t=0,n=0,e=0,r=0,i=this.u;r<i.length;r++){e+=46+(f=i[r]).f.length+exfl(f.extra)+(f.o?f.o.length:0)}for(var s=new u8(e+22),o=0,a=this.u;o<a.length;o++){var f=a[o];wzh(s,t,f,f.f,f.u,f.c,n,f.o),t+=46+f.f.length+exfl(f.extra)+(f.o?f.o.length:0),n+=f.b}wzf(s,t,this.u.length,e,n),this.ondata(null,s,!0),this.d=2},t.prototype.terminate=function(){for(var t=0,n=this.u;t<n.length;t++){n[t].t()}this.d=2},t}();function zip(t,n,e){e||(e=n,n={}),"function"!=typeof e&&err(7);var r={};fltn(t,"",r,n);var i=Object.keys(r),s=i.length,o=0,a=0,f=s,u=new Array(s),l=[],c=function(){for(var t=0;t<l.length;++t)l[t]()},h=function(t,n){mt(function(){e(t,n)})};mt(function(){h=e});var p=function(){var t=new u8(a+22),n=o,e=a-o;a=0;for(var r=0;r<f;++r){var i=u[r];try{var s=i.c.length;wzh(t,a,i,i.f,i.u,s);var l=30+i.f.length+exfl(i.extra),c=a+l;t.set(i.c,c),wzh(t,o,i,i.f,i.u,s,a,i.m),o+=16+l+(i.m?i.m.length:0),a=c+s}catch(t){return h(t,null)}}wzf(t,o,u.length,e,n),h(null,t)};s||p();for(var v=function(t){var n=i[t],e=r[n],f=e[0],v=e[1],d=crc(),b=f.length;d.p(f);var y=strToU8(n),g=y.length,m=v.comment,z=m&&strToU8(m),w=z&&z.length,x=exfl(v.extra),S=0==v.level?0:8,U=function(e,r){if(e)c(),h(e,null);else{var i=r.length;u[t]=mrg(v,{size:b,crc:d.d(),c:r,f:y,m:z,u:g!=n.length||z&&m.length!=w,compression:S}),o+=30+g+x+i,a+=76+2*(g+x)+(w||0)+i,--s||p()}};if(g>65535&&U(err(11,0,1),null),S)if(b<16e4)try{U(null,deflateSync(f,v))}catch(t){U(t,null)}else l.push(deflate(f,v,U));else U(null,f)},d=0;d<f;++d)v(d);return c}function zipSync(t,n){n||(n={});var e={},r=[];fltn(t,"",e,n);var i=0,s=0;for(var o in e){var a=e[o],f=a[0],u=a[1],l=0==u.level?0:8,c=(S=strToU8(o)).length,h=u.comment,p=h&&strToU8(h),v=p&&p.length,d=exfl(u.extra);c>65535&&err(11);var b=l?deflateSync(f,u):f,y=b.length,g=crc();g.p(f),r.push(mrg(u,{size:f.length,crc:g.d(),c:b,f:S,m:p,u:c!=o.length||p&&h.length!=v,o:i,compression:l})),i+=30+c+d+y,s+=76+2*(c+d)+(v||0)+y}for(var m=new u8(s+22),z=i,w=s-i,x=0;x<r.length;++x){var S=r[x];wzh(m,S.o,S,S.f,S.u,S.c.length);var U=30+S.f.length+exfl(S.extra);m.set(S.c,S.o+U),wzh(m,i,S,S.f,S.u,S.c.length,S.o,S.m),i+=16+U+(S.m?S.m.length:0)}return wzf(m,i,r.length,w,z),m}exports.Zip=Zip,exports.zip=zip,exports.zipSync=zipSync;var UnzipPassThrough=function(){function t(){}return t.prototype.push=function(t,n){this.ondata(null,t,n)},t.compression=0,t}();exports.UnzipPassThrough=UnzipPassThrough;var UnzipInflate=function(){function t(){var t=this;this.i=new Inflate(function(n,e){t.ondata(null,n,e)})}return t.prototype.push=function(t,n){try{this.i.push(t,n)}catch(t){this.ondata(t,null,n)}},t.compression=8,t}();exports.UnzipInflate=UnzipInflate;var AsyncUnzipInflate=function(){function t(t,n){var e=this;n<32e4?this.i=new Inflate(function(t,n){e.ondata(null,t,n)}):(this.i=new AsyncInflate(function(t,n,r){e.ondata(t,n,r)}),this.terminate=this.i.terminate)}return t.prototype.push=function(t,n){this.i.terminate&&(t=slc(t,0)),this.i.push(t,n)},t.compression=8,t}();exports.AsyncUnzipInflate=AsyncUnzipInflate;var Unzip=function(){function t(t){this.onfile=t,this.k=[],this.o={0:UnzipPassThrough},this.p=et}return t.prototype.push=function(t,n){var e=this;if(this.onfile||err(5),this.p||err(4),this.c>0){var r=Math.min(this.c,t.length),i=t.subarray(0,r);if(this.c-=r,this.d?this.d.push(i,!this.c):this.k[0].push(i),(t=t.subarray(r)).length)return this.push(t,n)}else{var s=0,o=0,a=void 0,f=void 0;this.p.length?t.length?((f=new u8(this.p.length+t.length)).set(this.p),f.set(t,this.p.length)):f=this.p:f=t;for(var u=f.length,l=this.c,c=l&&this.d,h=function(){var t,n=b4(f,o);if(67324752==n){s=1,a=o,p.d=null,p.c=0;var r=b2(f,o+6),i=b2(f,o+8),c=2048&r,h=8&r,v=b2(f,o+26),d=b2(f,o+28);if(u>o+30+v+d){var b=[];p.k.unshift(b),s=2;var y,g=b4(f,o+18),m=b4(f,o+22),z=strFromU8(f.subarray(o+30,o+=30+v),!c);4294967295==g?(t=h?[-2]:z64e(f,o),g=t[0],m=t[1]):h&&(g=-1),o+=d,p.c=g;var w={name:z,compression:i,start:function(){if(w.ondata||err(5),g){var t=e.o[i];t||w.ondata(err(14,"unknown compression type "+i,1),null,!1),(y=g<0?new t(z):new t(z,g,m)).ondata=function(t,n,e){w.ondata(t,n,e)};for(var n=0,r=b;n<r.length;n++){var s=r[n];y.push(s,!1)}e.k[0]==b&&e.c?e.d=y:y.push(et,!0)}else w.ondata(null,et,!0)},terminate:function(){y&&y.terminate&&y.terminate()}};g>=0&&(w.size=g,w.originalSize=m),p.onfile(w)}return"break"}if(l){if(134695760==n)return a=o+=12+(-2==l&&8),s=3,p.c=0,"break";if(33639248==n)return a=o-=4,s=3,p.c=0,"break"}},p=this;o<u-4;++o){if("break"===h())break}if(this.p=et,l<0){var v=s?f.subarray(0,a-12-(-2==l&&8)-(134695760==b4(f,a-16)&&4)):f.subarray(0,o);c?c.push(v,!!s):this.k[+(2==s)].push(v)}if(2&s)return this.push(f.subarray(o),n);this.p=f.subarray(o)}n&&(this.c&&err(13),this.p=null)},t.prototype.register=function(t){this.o[t.compression]=t},t}();exports.Unzip=Unzip;var mt="function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout?setTimeout:function(t){t()};function unzip(t,n,e){e||(e=n,n={}),"function"!=typeof e&&err(7);var r=[],i=function(){for(var t=0;t<r.length;++t)r[t]()},s={},o=function(t,n){mt(function(){e(t,n)})};mt(function(){o=e});for(var a=t.length-22;101010256!=b4(t,a);--a)if(!a||t.length-a>65558)return o(err(13,0,1),null),i;var f=b2(t,a+8);if(f){var u=f,l=b4(t,a+16),c=4294967295==l;if(c){if(a=b4(t,a-12),101075792!=b4(t,a))return o(err(13,0,1),null),i;u=f=b4(t,a+32),l=b4(t,a+48)}for(var h=n&&n.filter,p=function(n){var e=zh(t,l,c),a=e[0],u=e[1],p=e[2],v=e[3],d=e[4],b=e[5],y=slzh(t,b);l=d;var g=function(t,n){t?(i(),o(t,null)):(n&&(s[v]=n),--f||o(null,s))};if(!h||h({name:v,size:u,originalSize:p,compression:a}))if(a)if(8==a){var m=t.subarray(y,y+u);if(u<32e4)try{g(null,inflateSync(m,new u8(p)))}catch(t){g(t,null)}else r.push(inflate(m,{size:p},g))}else g(err(14,"unknown compression type "+a,1),null);else g(null,slc(t,y,y+u));else g(null,null)},v=0;v<u;++v)p()}else o(null,{});return i}function unzipSync(t,n){for(var e={},r=t.length-22;101010256!=b4(t,r);--r)(!r||t.length-r>65558)&&err(13);var i=b2(t,r+8);if(!i)return{};var s=b4(t,r+16),o=4294967295==s;o&&(r=b4(t,r-12),101075792!=b4(t,r)&&err(13),i=b4(t,r+32),s=b4(t,r+48));for(var a=n&&n.filter,f=0;f<i;++f){var u=zh(t,s,o),l=u[0],c=u[1],h=u[2],p=u[3],v=u[4],d=u[5],b=slzh(t,d);s=v,a&&!a({name:p,size:c,originalSize:h,compression:l})||(l?8==l?e[p]=inflateSync(t.subarray(b,b+c),new u8(h)):err(14,"unknown compression type "+l):e[p]=slc(t,b,b+c))}return e}exports.unzip=unzip,exports.unzipSync=unzipSync;
174
174
 
175
175
  },{"./node-worker.cjs":39}],39:[function(require,module,exports){
@@ -181,7 +181,7 @@ const{flatten:flatten}=require("@jscad/array-utils"),{formats:formats}=require("
181
181
  },{}],41:[function(require,module,exports){
182
182
  const zipSync=require("fflate").zipSync,strToU8=require("fflate").strToU8,stringify=require("onml/lib/stringify"),{colors:colors,geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="model/3mf",fileExtension="3mf",serialize=(e,...t)=>{e=Object.assign({},{unit:"millimeter",metadata:!0,defaultcolor:[1,160/255,0,1],compress:!0},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to 3MF");t.length!==o.length&&console.warn("some objects could not be serialized to 3MF"),t=toArray(modifiers.generalize({snap:!0,triangulate:!0},o));const r=["model",{unit:e.unit,"xml:lang":"und"},["metadata",{name:"Application"},"JSCAD"]];e.metadata&&r.push(["metadata",{name:"CreationDate"},(new Date).toISOString()]),r.push(translateResources(t,e)),r.push(translateBuild(t,e));const n=`<?xml version="1.0" encoding="UTF-8"?>\n${stringify(r,2)}`;if(e.compress){const e={"3D":{"3dmodel.model":strToU8(n)},_rels:{".rels":strToU8(rels)},"[Content_Types].xml":strToU8(contenttype)};return[zipSync(e,{comment:"created by JSCAD"}).buffer]}return[n]},contenttype='<?xml version="1.0" encoding="UTF-8" ?>\n<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">\n <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml">\n </Default>\n <Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml">\n </Default>\n</Types>',rels='<?xml version="1.0" encoding="UTF-8" ?>\n<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">\n <Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel">\n </Relationship>\n</Relationships>',translateResources=(e,t)=>{let o=["resources",{},translateMaterials(e,t)];return o=o.concat(translateObjects(e,t))},translateMaterials=(e,t)=>{let o=["basematerials",{id:"0"}];const r=[];return e.forEach((e,o)=>{let n=colors.rgbToHex(t.defaultcolor).toUpperCase();e.color&&(n=colors.rgbToHex(e.color).toUpperCase()),r.push(["base",{name:`mat${o}`,displaycolor:n}])}),o=o.concat(r)},translateObjects=(e,t)=>{const o=[];return e.forEach((e,r)=>{if(geometries.geom3.isA(e)){geometries.geom3.toPolygons(e).length>0&&(t.id=r,o.push(convertToObject(e,t)))}}),o},translateBuild=(e,t)=>{let o=["build",{}];const r=[];return e.forEach((e,t)=>{r.push(["item",{objectid:`${t+1}`}])}),o=o.concat(r)},convertToObject=(e,t)=>{const o=e.name?e.name:`Part ${t.id}`;return["object",{id:`${t.id+1}`,type:"model",pid:"0",pindex:`${t.id}`,name:o},convertToMesh(e,t)]},convertToMesh=(e,t)=>{return["mesh",{},convertToVertices(e,t),convertToVolumes(e,t)]},convertToVertices=(e,t)=>{const o=[];return geometries.geom3.toPolygons(e).forEach(e=>{for(let r=0;r<e.vertices.length;r++)o.push(convertToVertex(e.vertices[r],t))}),["vertices",{}].concat(o)},convertToVertex=(e,t)=>{return["vertex",{x:e[0],y:e[1],z:e[2]}]},convertToVolumes=(e,t)=>{let o=0;const r=geometries.geom3.toPolygons(e);let n=["triangles",{}];return r.forEach(e=>{if(e.vertices.length<3)return;const t=convertToTriangles(e,o);n=n.concat(t),o+=e.vertices.length}),n},convertToTriangles=(e,t)=>{const o=[];for(let r=0;r<e.vertices.length-2;r++){const e=["triangle",{v1:t,v2:t+r+1,v3:t+r+2}];o.push(e)}return o};module.exports={serialize:serialize,mimeType:mimeType,fileExtension:"3mf"};
183
183
 
184
- },{"@jscad/array-utils":529,"@jscad/modeling":215,"fflate":38,"onml/lib/stringify":40}],42:[function(require,module,exports){
184
+ },{"@jscad/array-utils":525,"@jscad/modeling":212,"fflate":38,"onml/lib/stringify":40}],42:[function(require,module,exports){
185
185
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="\t\n\r -퟿-�𐀀-􏿿",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=SPACE&&e<=55295||e===NL||e===CR||e===TAB||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar;
186
186
 
187
187
  },{}],43:[function(require,module,exports){
@@ -196,7 +196,7 @@ const zipSync=require("fflate").zipSync,strToU8=require("fflate").strToU8,string
196
196
  },{"xmlchars/xml/1.0/ed5":42,"xmlchars/xml/1.1/ed2":43,"xmlchars/xmlns/1.0/ed3":44}],46:[function(require,module,exports){
197
197
  module.exports={
198
198
  "name": "@jscad/amf-deserializer",
199
- "version": "2.3.4",
199
+ "version": "2.3.2",
200
200
  "description": "AMF Deserializer for JSCAD",
201
201
  "repository": "https://github.com/jscad/OpenJSCAD.org/",
202
202
  "main": "src/index.js",
@@ -227,7 +227,7 @@ module.exports={
227
227
  ],
228
228
  "license": "MIT",
229
229
  "dependencies": {
230
- "@jscad/modeling": "2.11.1",
230
+ "@jscad/modeling": "2.10.0",
231
231
  "saxes": "5.0.1"
232
232
  },
233
233
  "devDependencies": {
@@ -252,7 +252,7 @@ const version=require("../package.json").version,translate=require("./translate"
252
252
  },{"../package.json":46,"./deserialize":48,"./translate":53}],51:[function(require,module,exports){
253
253
  const{maths:maths,geometries:geometries}=require("@jscad/modeling");let lastmaterial;const findMaterial=(e,t)=>{if(lastmaterial&&lastmaterial.id===t)return lastmaterial;for(let o=0;o<e.length;o++)if(e[o].id&&e[o].id===t)return lastmaterial=e[o];return null},getValue=(e,t)=>{for(let o=0;o<e.length;o++)if(e[o].type===t)return e[o].value;return null},getColor=e=>{for(let t=0;t<e.length;t++){const o=e[t];if("color"===o.type){let e=parseFloat(getValue(o.objects,"r")),t=parseFloat(getValue(o.objects,"g")),s=parseFloat(getValue(o.objects,"b")),l=parseFloat(getValue(o.objects,"a"));return Number.isNaN(e)&&(e=1),Number.isNaN(t)&&(t=1),Number.isNaN(s)&&(s=1),Number.isNaN(l)&&(l=1),[e,t,s,l]}}return null},findColorByMaterial=(e,t)=>{const o=findMaterial(e,t);return o?getColor(o.objects):null},createObject=(e,t,o,s)=>{const l=[],a=[],r=[],n=o.amfMaterials,c=(e,t)=>{if("coordinates"===e.type){const t=parseFloat(getValue(e.objects,"x")),o=parseFloat(getValue(e.objects,"y")),s=parseFloat(getValue(e.objects,"z"));l.push([t,o,s])}},i=(e,t)=>{"vertex"===e.type&&e.objects.forEach(c)},g=(e,t)=>{if("triangle"===e.type){const t=parseInt(getValue(e.objects,"v1")),o=parseInt(getValue(e.objects,"v2")),s=parseInt(getValue(e.objects,"v3"));a.push([t,o,s]);const l=getColor(e.objects);l?r.push(l):r.push(u)}};let u=null;const p=(e,t)=>{switch(e.type){case"vertices":e.objects.forEach(i);break;case"volume":u=getColor(e.objects),e.materialid&&(u=findColorByMaterial(n,e.materialid)),e.objects.forEach(g)}},h=(e,t)=>{"mesh"===e.type&&e.objects.forEach(p)};if(!0===s.instantiate){const t=s.amf.scale,o=1!==t?([e,o,s])=>maths.vec3.fromValues(e*t,o*t,s*t):e=>maths.vec3.clone(e);e.objects.forEach(h);const n=getColor(e.objects),c=a.length,i=l.length,g=[];for(let e=0;e<c;e++){const t=[];for(let s=0;s<a[e].length;s++)a[e][s]<0||a[e][s]>=i||t.push(o(l[a[e][s]]));const s=geometries.poly3.fromPoints(t),n=r[e]?r[e]:void 0;n&&(s.color=n),g.push(s)}let u=geometries.geom3.create(g);return n&&(u=u.color=n),u}let m="";if(e.objects.length>0){e.objects.forEach(h);const t=getColor(e.objects),o=a.length,n=l.length;m+=`\n// Object ${e.id}\n// faces : ${o}\n// vertices: ${n}\nconst createObject${e.id} = () => {\n let polygons = []\n let polygon\n`;for(let e=0;e<o;e++){m+=" polygon = geometries.poly3.fromPoints([\n";for(let t=0;t<a[e].length;t++)a[e][t]<0||a[e][t]>=n||(m+=` [${l[a[e][t]]}],\n`);m+=" ])\n";const t=r[e];t&&(m+=` polygon.color = [${t}]\n`),m+=" polygons.push(polygon)\n"}m+=" let shape = geometries.geom3.create(polygons)\n";const c=s.scale?s.scale:1;1!==c&&(m+=` shape = transforms.scale([${c},${c},${c}], shape)\n`),t&&(m+=` shape = colors.colorize([${t}], shape)\n`),m+=" return shape\n}\n"}return m};module.exports=createObject;
254
254
 
255
- },{"@jscad/modeling":215}],52:[function(require,module,exports){
255
+ },{"@jscad/modeling":212}],52:[function(require,module,exports){
256
256
  const saxes=require("saxes"),{amfMesh:amfMesh,amfVertices:amfVertices,amfCoordinates:amfCoordinates,amfX:amfX,amfY:amfY,amfZ:amfZ,amfNormal:amfNormal,amfVolume:amfVolume,amfTriangle:amfTriangle,amfV1:amfV1,amfV2:amfV2,amfV3:amfV3,amfVertex:amfVertex,amfEdge:amfEdge,amfMetadata:amfMetadata,amfMaterial:amfMaterial,amfColor:amfColor,amfR:amfR,amfG:amfG,amfB:amfB,amfA:amfA,amfMap:amfMap,amfU1:amfU1,amfU2:amfU2,amfU3:amfU3}=require("./helpers"),{inchMM:inchMM}=require("./constants");let amfLast=null,amfDefinition=0;const amfObjects=[],amfMaterials=[],amfTextures=[],amfConstels=[];let amfObj=null;const amfAmf=a=>{const e={type:"amf",unit:"mm",scale:1};switch(a.unit&&(e.unit=a.unit.toLowerCase()),e.unit.toLowerCase()){case"inch":e.scale=inchMM;break;case"foot":e.scale=12*inchMM;break;case"meter":e.scale=1e3;break;case"micron":e.scale=.001}return e.objects=[],e},amfObject=a=>{const e={type:"object",id:`JSCAD${amfObjects.length}`};return a.id&&(e.id=a.id),e.objects=[],e},createAmfParser=(a,e)=>{const f=new saxes.SaxesParser;f.on("error",a=>{console.log(`ERROR: AMF file line ${a.line}, column ${a.column}, bad character [${a.c}]`)}),f.on("opentag",a=>{const e={AMF:amfAmf,OBJECT:a=>{const e=amfObject(a);return 0===amfDefinition&&(amfDefinition=1),e},MESH:amfMesh,VERTICES:amfVertices,VERTEX:amfVertex,EDGE:amfEdge,VOLUME:amfVolume,MATERIAL:a=>{const e=amfMaterial(a);return 0===amfDefinition&&(amfDefinition=2),e},TEXTURE:a=>{0===amfDefinition&&(amfDefinition=3)},CONSTELLATION:a=>{0===amfDefinition&&(amfDefinition=4)},METADATA:a=>{const e=amfMetadata(a);return 0===amfDefinition&&(amfDefinition=5),e},COORDINATES:amfCoordinates,NORMAL:amfNormal,NX:amfX,X:amfX,NY:amfY,Y:amfY,NZ:amfZ,Z:amfZ,TRIANGLE:amfTriangle,V1:amfV1,VTEX1:amfV1,V2:amfV2,VTEX2:amfV2,V3:amfV3,VTEX3:amfV3,COLOR:amfColor,R:amfR,G:amfG,B:amfB,A:amfA,MAP:amfMap,TEXMAP:amfMap,U1:amfU1,UTEX1:amfU1,WTEX1:amfU1,U2:amfU2,UTEX2:amfU2,WTEX2:amfU2,U3:amfU3,UTEX3:amfU3,WTEX3:amfU3,COMPOSITE:()=>void 0,undefined:()=>console.log(`WARNING: unsupported AMF element: ${a.name}`)},f=a.name.toUpperCase(),m=e[f]?e[f](a.attributes,{amfObjects:amfObjects}):null;if(m){switch(amfDefinition){case 0:"objects"in m&&amfObjects.push(m);break;case 1:if(amfObjects.length>0){const a=amfObjects.pop();"objects"in a&&a.objects.push(m),amfObjects.push(a),"objects"in m&&amfObjects.push(m)}break;case 2:if("material"===m.type)amfMaterials.push(m);else if(amfMaterials.length>0){const a=amfMaterials.pop();"objects"in a&&a.objects.push(m),amfMaterials.push(a),"objects"in m&&amfMaterials.push(m)}break;case 3:case 4:case 5:break;default:console.log("WARNING: invalid AMF definition")}amfLast=m}}),f.on("closetag",a=>{switch(a.name.toUpperCase()){case"AMF":case"OBJECT":case"MESH":case"VERTICES":case"VERTEX":case"EDGE":case"COORDINATES":case"NORMAL":case"VOLUME":case"TRIANGLE":case"MATERIAL":case"COLOR":case"MAP":case"TEXMAP":break;case"TEXTURE":return void(3===amfDefinition&&(amfDefinition=0));case"CONSTELLATION":return void(4===amfDefinition&&(amfDefinition=0));case"METADATA":return void(5===amfDefinition&&(amfDefinition=0));default:return}let e=null;switch(amfDefinition){case 0:case 1:amfObjects.length>0&&"object"===(e=amfObjects.pop()).type&&(amfDefinition=0),0===amfObjects.length&&(amfObj=e);break;case 2:amfMaterials.length>0&&"material"===(e=amfMaterials.pop()).type&&(amfMaterials.push(e),amfDefinition=0);break;case 3:case 4:case 5:amfDefinition=0}}),f.on("text",a=>{null!==a&&(a=a.trim()).length>0&&amfLast&&0!==amfDefinition&&(amfLast.value=a,amfLast=null)}),f.on("end",()=>{}),f.write(a).close()},parse=(a,e)=>(createAmfParser(a),{amfObj:amfObj,amfMaterials:amfMaterials,amfTextures:amfTextures,amfConstels:amfConstels});module.exports=parse;
257
257
 
258
258
  },{"./constants":47,"./helpers":49,"saxes":45}],53:[function(require,module,exports){
@@ -261,7 +261,7 @@ const createObject=require("./objectBuilder"),parse=require("./parse"),translate
261
261
  },{"./constants":47,"./objectBuilder":51,"./parse":52}],54:[function(require,module,exports){
262
262
  const stringify=require("onml/lib/stringify"),{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="application/amf+xml",serialize=(e,...t)=>{e=Object.assign({},{statusCallback:null,unit:"millimeter"},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to AMF");t.length!==o.length&&console.warn("some objects could not be serialized to AMF"),o=toArray(modifiers.generalize({snap:!0,triangulate:!0},o)),e.statusCallback&&e.statusCallback({progress:0});let r=["amf",{unit:e.unit,version:"1.1"},["metadata",{type:"author"},"Created by JSCAD"]];r=r.concat(translateObjects(o,e));const n=`<?xml version="1.0" encoding="UTF-8"?>\n${stringify(r,2)}`;return e&&e.statusCallback&&e.statusCallback({progress:100}),[n]},translateObjects=(e,t)=>{const o=[];return e.forEach((e,r)=>{geometries.geom3.toPolygons(e).length>0&&(t.id=r,o.push(convertToObject(e,t)))}),o},convertToObject=(e,t)=>{return["object",{id:t.id},convertToMesh(e,t)]},convertToMesh=(e,t)=>{let o=["mesh",{},convertToVertices(e,t)];return o=o.concat(convertToVolumes(e,t))},convertToVertices=(e,t)=>{const o=[];return geometries.geom3.toPolygons(e).forEach(e=>{for(let r=0;r<e.vertices.length;r++)o.push(convertToVertex(e.vertices[r],t))}),["vertices",{}].concat(o)},convertToVertex=(e,t)=>{return["vertex",{},convertToCoordinates(e,t)]},convertToCoordinates=(e,t)=>{return["coordinates",{},["x",{},e[0]],["y",{},e[1]],["z",{},e[2]]]},convertToVolumes=(e,t)=>{const o=convertColor(e.color),r=geometries.geom3.toPolygons(e),n=[];let s=["volume",{}];o&&s.push(o);let l=0;return r.forEach(e=>{if(e.vertices.length<3)return;const o=convertToTriangles(e,l,t);s=s.concat(o),l+=e.vertices.length}),n.push(s),n},convertColor=e=>e?(e.length<4&&e.push(1),["color",{},["r",{},e[0]],["g",{},e[1]],["b",{},e[2]],["a",{},e[3]]]):null,convertToColor=(e,t)=>{const o=e.color;return convertColor(o)},convertToTriangles=(e,t,o)=>{const r=convertToColor(e),n=[];for(let o=0;o<e.vertices.length-2;o++)r?n.push(["triangle",{},r,["v1",{},t],["v2",{},t+o+1],["v3",{},t+o+2]]):n.push(["triangle",{},["v1",{},t],["v2",{},t+o+1],["v3",{},t+o+2]]);return n};module.exports={serialize:serialize,mimeType:mimeType};
263
263
 
264
- },{"@jscad/array-utils":529,"@jscad/modeling":215,"onml/lib/stringify":55}],55:[function(require,module,exports){
264
+ },{"@jscad/array-utils":525,"@jscad/modeling":212,"onml/lib/stringify":55}],55:[function(require,module,exports){
265
265
  "use strict";const isObject=t=>t&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+"</"+e[0]+">"+n:i+n+r(o)+"</"+e[0]+">"+n}(t)}module.exports=stringify;
266
266
 
267
267
  },{}],56:[function(require,module,exports){
@@ -282,10 +282,10 @@ const version=require("./package.json").version,{BYLAYER:BYLAYER,getTLA:getTLA}=
282
282
  },{"./DxfReader":56,"./autocad":57,"./colorindex2017":58,"./instantiate":61,"./package.json":62,"./translate":63}],61:[function(require,module,exports){
283
283
  const{geometries:geometries,maths:maths,primitives:primitives}=require("@jscad/modeling"),EPS=1e-5,{getColor:getColor,getColorNumber:getColorNumber}=require("./helpers"),instantiatePolygon=(e,t,s)=>{const n=[];if(n.push(maths.vec3.fromValues(e.pptx,e.ppty,e.pptz)),n.push(maths.vec3.fromValues(e.sptx,e.spty,e.sptz)),n.push(maths.vec3.fromValues(e.tptx,e.tpty,e.tptz)),e.fptx){let t=!1;e.tptx!==e.fptx&&(t=!0),e.tpty!==e.fpty&&(t=!0),e.tptz!==e.fptz&&(t=!0),t&&n.push(maths.vec3.fromValues(e.fptx,e.fpty,e.fptz))}const r=getColorNumber(e,t),a=getColor(r,s.colorindex),o=geometries.poly3.create(n);return a&&(o.color=a),o},instantiateLine=(e,t,s)=>{if(e.pptz===e.sptz&&0===e.pptz){const t=maths.vec2.fromValues(e.pptx,e.ppty),s=maths.vec2.fromValues(e.sptx,e.spty);return primitives.line([t,s])}const n=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),r=maths.vec3.fromValues(e.sptx,e.spty,e.sptz);return primitives.line([n,r])},instantiateVector=e=>{const t=parseInt("00000000000100000",2),s=parseInt("00000000001000000",2),n=parseInt("00000000010000000",2),r=e.lflg,a={};return(r&t)===t?a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz):(r&s)===s?a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz):(r&n)===n?(a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),a.fvia=e.fvia,a.fvib=e.fvib,a.fvic=e.fvic,a.fvid=e.fvid):(a.vec=maths.vec2.fromValues(e.pptx,e.ppty),a.bulg=e.bulg),a},addSection=(e,t,s,n)=>{if(0===n)e=geometries.path2.appendPoints([[t,s]],e);else{const r=geometries.path2.toPoints(e),a=r[r.length-1],o=maths.vec2.fromValues(t,s),i=maths.vec2.distance(a,o)*((1+Math.pow(n,2))/(4*n)),p=n<0,l=!1,c=4*Math.atan(n),m=16;e=geometries.path2.appendArc({endpoint:[t,s],radius:[i,i],xaxisrotation:c,clockwise:p,large:l,segments:m},e)}return e},instantiatePath2D=(e,t,s)=>{const n=parseInt("00000000000000001",2),r=e.vlen,a=e.pptxs,o=e.pptys,i=e.bulgs,p=e.lflg;let l=geometries.path2.create();const c=(p&n)===n;return r!==a.length||r!==o.length||r!==i.length?l:(a.forEach((e,t,s)=>{let n=0;t>0&&(n=i[t-1]),l=addSection(l,a[t],o[t],n)}),c&&!l.isClosed&&(l=addSection(l,a[0],o[0],i[r-1]),l=geometries.path2.close(l)),l)},instantiateArc=(e,t,s)=>{e.lthk;const n=e.pptx,r=e.ppty,a=e.swid;let o=e.ang0;o*=.017453292519943295;let i=e.ang1;i*=.017453292519943295;return primitives.arc({center:[n,r],radius:a,startAngle:o,endAngle:i,segments:16})},instantiateCircle=(e,t,s)=>{const n=e.lthk,r=e.pptx,a=e.ppty,o=e.swid,i=getColorNumber(e,t),p=getColor(i,s.colorindex);if(0===n){const e=primitives.circle({center:[r,a],radius:o,segments:16});return p&&(e.color=p),e}const l=primitives.circle({center:[r,a],radius:o,segments:16}).extrude({offset:[0,0,n]});return p&&(l.color=p),l},instantiateEllipse=(e,t,s)=>{const n=e.pptx,r=e.ppty,a=e.pptz,o=e.sptx,i=e.spty,p=e.sptz,l=e.swid;if(0===a&&0===p){const e=maths.vec2.fromValues(0,0),t=maths.vec2.fromValues(o,i),s=maths.vec2.distance(e,t),a=s*l;let p=180*Math.atan2(i,o)/Math.PI;p<EPS&&(p=0),p*=.017453292519943295;const c=primitives.ellipse({center:[0,0],radius:[s,a],segments:16}),m=maths.mat4.fromZRotation(maths.mat4.create(),p);return maths.mat4.multiply(m,m,maths.mat4.fromTranslation(maths.mat4.create(),[n,r,0])),geometries.geom2.transform(m,c)}},instantiateFaces=e=>{const t=[];let s=0;for(;s<e.length;){let n=e[s++];const r=[];for(;n>0;)r.push(e[s++]),n--;t.push(r)}return t},instantiatePoints=(e,t,s)=>{const n=[];let r=0;for(;r<e.length;){const a=e[r],o=t[r],i=s[r];n.push([a,o,i]),r++}return n},instantiateMesh=(e,t,s)=>{const n=e.vlen,r=e.pptxs,a=e.pptys,o=e.pptzs,i=e.flen,p=e.fvals,l=getColorNumber(e,t),c=getColor(l,s.colorindex),m=[];if(n===r.length&&n===a.length&&n===o.length&&i===p.length){const e=instantiateFaces(p),t=instantiatePoints(r,a,o);let n=0;for(;n<e.length;){const r=e[n];let a=[],o=0;for(;o<r.length;){const e=r[o],s=maths.vec3.clone(t[e]);a.push(s),o++}1===s.dxf.angdir&&(a=a.reverse());const i=geometries.poly3.create(a);c&&(i.color=c),m.push(i),n++}}return geometries.geom3.create(m)},getPolyType=e=>{const t=parseInt("00000000000000001",2),s=parseInt("00000000000001000",2),n=parseInt("00000000000010000",2),r=parseInt("00000000000100000",2),a=parseInt("00000000001000000",2),o=e.lflg;let i=null;return(o&s)===s?i=null:(o&n)===n?((i=geometries.geom3.create()).closedM=(o&t)===t,i.closedN=(o&r)===r):(o&a)===a?((i=geometries.geom3.create()).closedM=(o&t)===t,i.closedN=(o&r)===r):(i=geometries.path2.create()).closedM=(o&t)===t,"cnmb"in e&&(i.cnmb=e.cnmb),i},completeCurrent=(e,t,s,n,r)=>{if(geometries.path2.isA(t)){const s=n.map(e=>e.vec);e.push(geometries.path2.fromPoints({closed:t.closed},s))}return geometries.geom3.isA(t)&&e.push(geometries.geom3.create(s)),null},instantiateAsciiDxf=(e,t)=>{const s=[];let n=null;const r=[],a=[],o=[];let i=null;for(const p of e.objstack)if(i=null,"type"in p){switch(p.type){case"dxf":break;case"layer":n=completeCurrent(a,n,r,o),s.push(p);break;case"variable":n=completeCurrent(a,n,r,o);break;case"3dface":i=instantiatePolygon(p,s,t),null===n&&(n=geometries.geom3.create());break;case"mesh":n=completeCurrent(a,n,r,o),a.push(instantiateMesh(p,s,t));break;case"arc":n=completeCurrent(a,n,r,o),a.push(instantiateArc(p));break;case"circle":n=completeCurrent(a,n,r,o),a.push(instantiateCircle(p,s,t));break;case"ellipse":n=completeCurrent(a,n,r,o),a.push(instantiateEllipse(p));break;case"line":n=completeCurrent(a,n,r,o),a.push(instantiateLine(p));break;case"polyline":null===(n=completeCurrent(a,n,r,o))&&(n=getPolyType(p));break;case"vertex":i=instantiateVector(p);break;case"seqend":n=completeCurrent(a,n,r,o);break;case"lwpolyline":n=completeCurrent(a,n,r,o),a.push(instantiatePath2D(p))}geometries.poly3.isA(i)&&r.push(i),i&&"vec"in i&&3===i.vec.length&&o.push(i),i&&"vec"in i&&2===i.vec.length&&o.push(i)}return n=completeCurrent(a,n,r,o),a};module.exports={instantiatePolygon:instantiatePolygon,instantiateVector:instantiateVector,instantiateAsciiDxf:instantiateAsciiDxf};
284
284
 
285
- },{"./helpers":59,"@jscad/modeling":215}],62:[function(require,module,exports){
285
+ },{"./helpers":59,"@jscad/modeling":212}],62:[function(require,module,exports){
286
286
  module.exports={
287
287
  "name": "@jscad/dxf-deserializer",
288
- "version": "2.3.21",
288
+ "version": "2.3.19",
289
289
  "description": "DXF Deserializer for JSCAD",
290
290
  "homepage": "https://openjscad.xyz/",
291
291
  "repository": "https://github.com/jscad/OpenJSCAD.org",
@@ -313,7 +313,7 @@ module.exports={
313
313
  ],
314
314
  "license": "MIT",
315
315
  "dependencies": {
316
- "@jscad/modeling": "2.11.1"
316
+ "@jscad/modeling": "2.10.0"
317
317
  },
318
318
  "devDependencies": {
319
319
  "ava": "3.15.0",
@@ -325,7 +325,7 @@ module.exports={
325
325
  },{}],63:[function(require,module,exports){
326
326
  const{maths:maths,geometries:geometries}=require("@jscad/modeling"),{instantiatePolygon:instantiatePolygon,instantiateVector:instantiateVector}=require("./instantiate"),{findLayer:findLayer,getColor:getColor,getColorNumber:getColorNumber}=require("./helpers"),translateVector2D=e=>{return`${e[0]},${e[1]}`},translateVector3D=e=>{return`${e[0]},${e[1]},${e[2]}`},translatePolygon=e=>{const t=geometries.poly3.toPoints(e);let n="createPolygon([";return t.forEach(e=>{n+=`[${translateVector3D(e)}],`}),n+=`],${translateColor(e)})`},translateColor=e=>{let t="null";if("color"in e){const n=e.color;t=`[${n[0]},${n[1]},${n[2]},${n[3]}]`}return t},translateLine=(e,t,n)=>{const r=e.name,s=getColorNumber(e,t),a=getColor(s,n.colorindex);let l="";if(!e.pptz||e.pptz===e.sptz&&0===e.pptz){const t=maths.vec2.fromValues(e.pptx,e.ppty),n=maths.vec2.fromValues(e.sptx,e.spty);l=` let ${r} = primitives.line([[${translateVector2D(t)}],[${translateVector2D(n)}]])\n`}else{const t=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),n=maths.vec3.fromValues(e.sptx,e.spty,e.sptz);l=` let ${r} = primitives.line([[${translateVector3D(t)}],[${translateVector3D(n)}]])\n`}a&&(l+=` ${r} = colors.colorize([${a[0]}, ${a[1]}, ${a[2]}, 1], ${r})\n`),e.script=l,addToLayer(e,t)},translateSection=(e,t,n,r,s,a)=>{if(0===r)return`geometries.path2.appendPoints([[${t},${n}]], ${e})\n`;const l=maths.vec2.fromValues(s,a),o=maths.vec2.fromValues(t,n),i=maths.vec2.distance(l,o)*((1+Math.pow(r,2))/(4*r)),c=r<0;return`geometries.path2.appendArc({endpoint: [${t},${n}],radius: [${i},${i}],xaxisrotation: ${4*Math.atan(r)},clockwise: ${c},large: false,segments: 16}, ${e})\n`},translatePath2D=(e,t,n)=>{const r=parseInt("00000000000000001",2),s=e.vlen,a=e.pptxs,l=e.pptys,o=e.bulgs,i=e.lflg,c=e.name,p=getColorNumber(e,t),m=getColor(p,n.colorindex);let $=` let ${c} = geometries.path2.create()\n`;const u=(i&r)===r;if(s===a.length&&s===l.length&&s===o.length){$+=` ${c} = geometries.path2.appendPoints([[${a[0]}, ${l[0]}]], ${c})\n`;for(let e=0;e<a.length;e++){const t=(e+1)%a.length,n=a[t],r=l[t],s=a[e],i=l[e],p=o[e];0!==t?$+=` ${c} = ${translateSection(c,n,r,p,s,i)}`:0!==p&&($+=` ${c} = ${translateSection(c,n,r,p,s,i)}`)}$+=u?` ${c} = geometries.path2.close(${c})\n`:"\n",m&&($+=` ${c} = colors.colorize([${m[0]}, ${m[1]}, ${m[2]}, 1], ${c})\n`),e.script=$,addToLayer(e,t)}},translateArc=(e,t,n)=>{const r=e.lthk,s=e.pptx,a=e.ppty,l=e.swid;let o=e.ang0,i=e.ang1;const c=e.name,p=getColorNumber(e,t),m=getColor(p,n.colorindex);o*=.017453292519943295,i*=.017453292519943295;if(0===r){let n=` let ${c} = primitives.arc({center: [${s}, ${a}], radius: ${l}, startAngle: ${o}, endAngle: ${i}, segements: 16})\n`;return m&&(n+=` ${c} = colors.colorize([${m[0]}, ${m[1]}, ${m[2]}, 1], ${c})\n`),e.script=n,void addToLayer(e,t)}let $=` let ${c} = primitives.arc({center: [${s}, ${a}], radius: ${l}, startAngle: ${o}, endAngle: ${i}, segements: 16})\n`;m&&($+=` ${c} = colors.colorize([${m[0]}, ${m[1]}, ${m[2]}, 1], ${c})\n`),e.script=$,addToLayer(e,t)},translateCircle=(e,t,n)=>{const r=e.lthk,s=e.pptx,a=e.ppty,l=e.swid,o=e.name,i=getColorNumber(e,t),c=getColor(i,n.colorindex);if(0===r){let n=` let ${o} = primitives.circle({center: [${s}, ${a}], radius: ${l}, segments: 16})\n`;return c&&(n+=` ${o} = colors.colorize([${c[0]}, ${c[1]}, ${c[2]}, 1], ${o})\n`),e.script=n,void addToLayer(e,t)}let p=` let ${o} = primitives.circle({center: [${s}, ${a}], radius: ${l}, segments: 16}).extrude({offset: [0,0,${r}]}))\n`;c&&(p+=` ${o} = colors.colorize([${c[0]}, ${c[1]}, ${c[2]}, 1], ${o})\n`),e.script=p,addToLayer(e,t)},translateEllipse=(e,t,n)=>{const r=e.pptx,s=e.ppty,a=e.pptz,l=e.sptx,o=e.spty,i=e.sptz,c=e.swid,p=e.name,m=getColorNumber(e,t),$=getColor(m,n.colorindex);if(0===a&&0===i){const n=maths.vec2.fromValues(0,0),a=maths.vec2.fromValues(l,o),i=maths.vec2.distance(n,a);let m=` let ${p} = primitives.ellipse({center: [0, 0, 0], radius: [${i}, ${i*c}], segments: 16})\n let ${p}matrix = maths.mat4.multiply(maths.mat4.create(), maths.mat4.fromTranslation(maths.mat4.create(), [${r}, ${s}, 0]), maths.mat4.fromZRotation(maths.mat4.create(), ${Math.atan2(o,l)}))\n ${p} = geometries.geom2.transform(${p}matrix, ${p})\n`;$&&(m+=` ${p} = colors.colorize([${$[0]}, ${$[1]}, ${$[2]}, 1], ${p})\n`),e.script=m,addToLayer(e,t)}},instantiateFaces=e=>{const t=[];let n=0;for(;n<e.length;){let r=e[n++];const s=[];for(;r>0;)s.push(e[n++]),r--;t.push(s)}return t},instantiatePoints=(e,t,n)=>{const r=[];let s=0;for(;s<e.length;){const a=e[s],l=t[s],o=n[s];r.push([a,l,o]),s++}return r},translateMesh=(e,t,n)=>{const r=e.vlen,s=e.pptxs,a=e.pptys,l=e.pptzs,o=e.flen,i=e.fvals,c=getColorNumber(e,t),p=getColor(c,n.colorindex),m=[];if(r===s.length&&r===a.length&&r===l.length)if(o===i.length){const e=instantiateFaces(i),t=instantiatePoints(s,a,l);let r=0;for(;r<e.length;){const s=e[r];let a=[],l=0;for(;l<s.length;){const e=s[l],n=maths.vec3.clone(t[e]);a.push(n),l++}1===n.dxf.angdir&&(a=a.reverse());const o=geometries.poly3.create(a);p&&(o.color=p),m.push(o),r++}}else console.warn("invalid mesh: faces");else console.warn("invalid mesh: vertices");const $=e.name;let u=` const ${$}_polygons = [\n`;for(const e of m)u+=" "+translatePolygon(e)+",\n";return u+=` ]\n let ${$} = geometries.geom3.create(${$}_polygons)\n`,e.script=u,addToLayer(e,t),null},findLayer0=e=>{for(const t of e)if("0"===t.name)return t;const t={type:"layer",lnam:"layer0",name:"0",lscl:1,visb:0,spac:0,objects:[]};return e.push(t),t},addToLayer=(e,t)=>{let n=findLayer(e,t);null===n&&(n=findLayer0(t)),"objects"in n||(n.objects=[]),n.objects.push(e)},getPolyType=e=>{const t=parseInt("00000000000000001",2),n=parseInt("00000000000001000",2),r=parseInt("00000000000010000",2),s=parseInt("00000000000100000",2),a=parseInt("00000000001000000",2),l=e.lflg;let o=null;if((l&n)===n){o={type:"3dline",isclosed:(l&t)===t}}else if((l&r)===r)(o={type:"3dpolymesh"}).fvia=e.fvia,o.fvib=e.fvib,o.closedM=(l&t)===t,o.closedN=(l&s)===s;else if((l&a)===a)(o={type:"3dpolyfaces"}).fvia=e.fvia,o.fvib=e.fvib;else{o={type:"2dline",isclosed:(l&t)===t}}return"cnmb"in e&&(o.cnmb=e.cnmb),"lnam"in e&&(o.lnam=e.lnam),o},instantiateFacets=(e,t,n,r,s)=>{const a=(e,r)=>{return n[(e-1)*t+(r-1)].vec},l=[];if(e*t!==n.length)return l;if(e<2|t<2)return l;let o=1;for(;o<e;){let e=1;for(;e<t;){let t=[a(o,e),a(o+1,e),a(o+1,e+1),a(o,e+1)];1===s.dxf.angdir&&(t=t.reverse());const n=geometries.poly3.create(t),i=geometries.poly3.plane(n);Number.isFinite(i[3])&&(r&&(n.color=r),l.push(n)),e++}o++}return l},instantiatePolyFaces=(e,t,n,r,s)=>{const a=[];if(e+t!==n.length)return a;let l=e;for(;l<n.length;){let e=n[l];const t=[Math.abs(e.fvia),Math.abs(e.fvib),Math.abs(e.fvic),Math.abs(e.fvid)];let r=[];if(t[0]>0&&(e=n[t[0]-1],r.push(e.vec),t[1]>0&&(e=n[t[1]-1],r.push(e.vec),t[2]>0&&(e=n[t[2]-1],r.push(e.vec),t[3]>0&&(e=n[t[3]-1],r.push(e.vec))))),r.length>2){1===s.dxf.angdir&&(r=r.reverse());const e=geometries.poly3.create(r);a.push(e)}l++}return a},translateAs2Dline=(e,t,n,r)=>{e.vlen=n.length,e.pptxs=[],e.pptys=[],e.bulgs=[];for(const t of n)e.pptxs.push(t.vec[0]),e.pptys.push(t.vec[1]),e.bulgs.push(t.bulg);return e.isclosed?e.lflg=parseInt("00000000000000001",2):e.lflg=0,translatePath2D(e,t,r),null},translateCurrent=(e,t,n,r)=>{if(null===e)return null;const s=e.type,a=getColorNumber(e,t),l=getColor(a,r.colorindex);if("2dline"===s)return translateAs2Dline(e,t,n,r);if("3dline"===s)return null;if("3dpolymesh"===s){const t=e.fvia,s=e.fvib;n=instantiateFacets(t,s,n,l,r)}if("3dpolyfaces"===s&&"fvia"in e){const t=e.fvia,s=e.fvib;n=instantiatePolyFaces(t,s,n,0,r)}const o=e.name;let i=` const ${o}_polygons = [\n`;for(const e of n)i+=" "+translatePolygon(e)+",\n";return i+=` ]\n let ${o} = geometries.geom3.create(${o}_polygons)\n`,l&&(i+=` ${o}.color = [${l}]\n`),e.script=i,addToLayer(e,t),null},translateLayer=e=>{let t=`function ${e.lnam||"Unknown"}() {\n`;for(const n of e.objects)t+=n.script;t+=" return [";for(const n of e.objects)t+=n.name+",";return t+="]\n}\n"},saveVariable=(e,t)=>{switch(e.name||"Unknown"){case"$ANGDIR":"lflg"in e&&(t.dxf.angdir=e.lflg)}},translateAsciiDxf=(e,t)=>{const n=[];let r=null,s=[],a=0,l=null;for(const o of e.objstack)if(l=null,"type"in o){if("name"in o){let e=o.name;e=(e=(e=e.replace(/ /g,"_")).replace(/-/g,"_")).replace(/\./g,"_"),o.name=e}else o.name="jscad"+a,a+=1;switch(o.type){case"dxf":break;case"layer":r=translateCurrent(r,n,s,t),s=[],o.objects=[],o.lnam="layer"+n.length,n.push(o);break;case"variable":r=translateCurrent(r,n,s,t),s=[],saveVariable(o,t);break;case"3dface":l=instantiatePolygon(o,n,t),null===r&&((r={type:"3dfaces"}).name="jscad"+a,a+=1);break;case"mesh":r=translateCurrent(r,n,s,t),s=[],translateMesh(o,n,t);break;case"arc":r=translateCurrent(r,n,s,t),s=[],translateArc(o,n,t);break;case"circle":r=translateCurrent(r,n,s,t),s=[],translateCircle(o,n,t);break;case"ellipse":r=translateCurrent(r,n,s,t),s=[],translateEllipse(o,n,t);break;case"line":r=translateCurrent(r,n,s,t),s=[],translateLine(o,n,t);break;case"polyline":r=translateCurrent(r,n,s,t),s=[],null===r&&((r=getPolyType(o)).name="jscad"+a,a+=1);break;case"vertex":l=instantiateVector(o);break;case"seqend":r=translateCurrent(r,n,s,t),s=[];break;case"lwpolyline":r=translateCurrent(r,n,s,t),s=[],translatePath2D(o,n,t)}geometries.poly3.isA(l)&&s.push(l),l&&"vec"in l&&3===l.vec.length&&s.push(l),l&&"vec"in l&&2===l.vec.length&&s.push(l)}r=translateCurrent(r,n,s,t);let o="const {colors, geometries, maths, primitives, transforms} = require('@jscad/modeling')\n\nconst main = () => {\n let layers = []\n return layers.concat(";return n.forEach(e=>{const t=e.lnam||"Unknown";o+=`${t}(),`}),o+="[])\n}\n",o+="\nfunction createPolygon(listofpoints, color) {\n let polygon = geometries.poly3.fromPoints(listofpoints)\n if (color) polygon.color = color\n return polygon\n}\n",n.forEach(e=>{o+=translateLayer(e)}),o+="module.exports = {main}\n"};module.exports=translateAsciiDxf;
327
327
 
328
- },{"./helpers":59,"./instantiate":61,"@jscad/modeling":215}],64:[function(require,module,exports){
328
+ },{"./helpers":59,"./instantiate":61,"@jscad/modeling":212}],64:[function(require,module,exports){
329
329
  const dxfHeaders=function(){return" 0\nSECTION\n 2\nHEADER\n 9\n$ACADVER\n 1\nAC1027\n 9\n$ACADMAINTVER\n 70\n8\n 9\n$DWGCODEPAGE\n 3\nANSI_1252\n 9\n$LASTSAVEDBY\n 1\nunknown\n 9\n$REQUIREDVERSIONS\n160\n0\n 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n 10\n1e+20\n 20\n1e+20\n 30\n1e+20\n 9\n$EXTMAX\n 10\n-1e+20\n 20\n-1e+20\n 30\n-1e+20\n 9\n$LIMMIN\n 10\n0.0\n 20\n0.0\n 9\n$LIMMAX\n 10\n12.0\n 20\n9.0\n 9\n$ORTHOMODE\n 70\n0\n 9\n$REGENMODE\n 70\n1\n 9\n$FILLMODE\n 70\n1\n 9\n$QTEXTMODE\n 70\n0\n 9\n$MIRRTEXT\n 70\n0\n 9\n$LTSCALE\n 40\n1.0\n 9\n$ATTMODE\n 70\n1\n 9\n$TEXTSIZE\n 40\n0.2\n 9\n$TRACEWID\n 40\n0.05\n 9\n$TEXTSTYLE\n 7\nNotes\n 9\n$CLAYER\n 8\n0\n 9\n$CELTYPE\n 6\nByLayer\n 9\n$CECOLOR\n 62\n256\n 9\n$CELTSCALE\n 40\n1.0\n 9\n$DISPSILH\n 70\n0\n 9\n$DIMSCALE\n 40\n1.0\n 9\n$DIMASZ\n 40\n3.0\n 9\n$DIMEXO\n 40\n1.5\n 9\n$DIMDLI\n 40\n6.0\n 9\n$DIMRND\n 40\n0.0\n 9\n$DIMDLE\n 40\n0.0\n 9\n$DIMEXE\n 40\n3.0\n 9\n$DIMTP\n 40\n0.0\n 9\n$DIMTM\n 40\n0.0\n 9\n$DIMTXT\n 40\n3.0\n 9\n$DIMCEN\n 40\n3.0\n 9\n$DIMTSZ\n 40\n0.0\n 9\n$DIMTOL\n 70\n0\n 9\n$DIMLIM\n 70\n0\n 9\n$DIMTIH\n 70\n0\n 9\n$DIMTOH\n 70\n0\n 9\n$DIMSE1\n 70\n0\n 9\n$DIMSE2\n 70\n0\n 9\n$DIMTAD\n 70\n1\n 9\n$DIMZIN\n 70\n3\n 9\n$DIMBLK\n 1\n\n 9\n$DIMASO\n 70\n1\n 9\n$DIMSHO\n 70\n1\n 9\n$DIMPOST\n 1\n\n 9\n$DIMAPOST\n 1\n\n 9\n$DIMALT\n 70\n0\n 9\n$DIMALTD\n 70\n2\n 9\n$DIMALTF\n 40\n25.4\n 9\n$DIMLFAC\n 40\n1.0\n 9\n$DIMTOFL\n 70\n0\n 9\n$DIMTVP\n 40\n0.0\n 9\n$DIMTIX\n 70\n0\n 9\n$DIMSOXD\n 70\n0\n 9\n$DIMSAH\n 70\n0\n 9\n$DIMBLK1\n 1\n\n 9\n$DIMBLK2\n 1\n\n 9\n$DIMSTYLE\n 2\nCivil-Metric\n 9\n$DIMCLRD\n 70\n0\n 9\n$DIMCLRE\n 70\n0\n 9\n$DIMCLRT\n 70\n0\n 9\n$DIMTFAC\n 40\n1.0\n 9\n$DIMGAP\n 40\n2.0\n 9\n$DIMJUST\n 70\n0\n 9\n$DIMSD1\n 70\n0\n 9\n$DIMSD2\n 70\n0\n 9\n$DIMTOLJ\n 70\n1\n 9\n$DIMTZIN\n 70\n0\n 9\n$DIMALTZ\n 70\n0\n 9\n$DIMALTTZ\n 70\n0\n 9\n$DIMUPT\n 70\n0\n 9\n$DIMDEC\n 70\n2\n 9\n$DIMTDEC\n 70\n2\n 9\n$DIMALTU\n 70\n2\n 9\n$DIMALTTD\n 70\n2\n 9\n$DIMTXSTY\n 7\nStandard\n 9\n$DIMAUNIT\n 70\n0\n 9\n$DIMADEC\n 70\n2\n 9\n$DIMALTRND\n 40\n0.0\n 9\n$DIMAZIN\n 70\n2\n 9\n$DIMDSEP\n 70\n46\n 9\n$DIMATFIT\n 70\n3\n 9\n$DIMFRAC\n 70\n1\n 9\n$DIMLDRBLK\n 1\n\n 9\n$DIMLUNIT\n 70\n2\n 9\n$DIMLWD\n 70\n-2\n 9\n$DIMLWE\n 70\n-2\n 9\n$DIMTMOVE\n 70\n0\n 9\n$DIMFXL\n 40\n1.0\n 9\n$DIMFXLON\n 70\n0\n 9\n$DIMJOGANG\n 40\n0.785398163397\n 9\n$DIMTFILL\n 70\n0\n 9\n$DIMTFILLCLR\n 70\n0\n 9\n$DIMARCSYM\n 70\n0\n 9\n$DIMLTYPE\n 6\n\n 9\n$DIMLTEX1\n 6\n\n 9\n$DIMLTEX2\n 6\n\n 9\n$DIMTXTDIRECTION\n 70\n0\n 9\n$LUNITS\n 70\n2\n 9\n$LUPREC\n 70\n4\n 9\n$SKETCHINC\n 40\n0.1\n 9\n$FILLETRAD\n 40\n0.0\n 9\n$AUNITS\n 70\n4\n 9\n$AUPREC\n 70\n5\n 9\n$MENU\n 1\n.\n 9\n$ELEVATION\n 40\n0.0\n 9\n$PELEVATION\n 40\n0.0\n 9\n$THICKNESS\n 40\n0.0\n 9\n$LIMCHECK\n 70\n0\n 9\n$CHAMFERA\n 40\n0.0\n 9\n$CHAMFERB\n 40\n0.0\n 9\n$CHAMFERC\n 40\n0.0\n 9\n$CHAMFERD\n 40\n0.0\n 9\n$SKPOLY\n 70\n0\n 9\n$TDCREATE\n 40\n2457986.69756\n 9\n$TDUCREATE\n 40\n2455631.2632\n 9\n$TDUPDATE\n 40\n2457986.69756\n 9\n$TDUUPDATE\n 40\n2456436.43179\n 9\n$TDINDWG\n 40\n0.0003490741\n 9\n$TDUSRTIMER\n 40\n0.0003487153\n 9\n$USRTIMER\n 70\n1\n 9\n$ANGBASE\n 50\n0.0\n 9\n$ANGDIR\n 70\n0\n 9\n$PDMODE\n 70\n0\n 9\n$PDSIZE\n 40\n0.0\n 9\n$PLINEWID\n 40\n0.0\n 9\n$SPLFRAME\n 70\n0\n 9\n$SPLINETYPE\n 70\n6\n 9\n$SPLINESEGS\n 70\n8\n 9\n$HANDSEED\n 5\n5C7\n 9\n$SURFTAB1\n 70\n6\n 9\n$SURFTAB2\n 70\n6\n 9\n$SURFTYPE\n 70\n6\n 9\n$SURFU\n 70\n6\n 9\n$SURFV\n 70\n6\n 9\n$UCSBASE\n 2\n\n 9\n$UCSNAME\n 2\n\n 9\n$UCSORG\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSXDIR\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSYDIR\n 10\n0.0\n 20\n1.0\n 30\n0.0\n 9\n$UCSORTHOREF\n 2\n\n 9\n$UCSORTHOVIEW\n 70\n0\n 9\n$UCSORGTOP\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGBOTTOM\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGLEFT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGRIGHT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGFRONT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGBACK\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSBASE\n 2\n\n 9\n$PUCSNAME\n 2\n\n 9\n$PUCSORG\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSXDIR\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSYDIR\n 10\n0.0\n 20\n1.0\n 30\n0.0\n 9\n$PUCSORTHOREF\n 2\n\n 9\n$PUCSORTHOVIEW\n 70\n0\n 9\n$PUCSORGTOP\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGBOTTOM\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGLEFT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGRIGHT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGFRONT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGBACK\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$USERI1\n 70\n0\n 9\n$USERI2\n 70\n0\n 9\n$USERI3\n 70\n0\n 9\n$USERI4\n 70\n0\n 9\n$USERI5\n 70\n0\n 9\n$USERR1\n 40\n0.0\n 9\n$USERR2\n 40\n0.0\n 9\n$USERR3\n 40\n0.0\n 9\n$USERR4\n 40\n0.0\n 9\n$USERR5\n 40\n0.0\n 9\n$WORLDVIEW\n 70\n1\n 9\n$SHADEDGE\n 70\n3\n 9\n$SHADEDIF\n 70\n70\n 9\n$TILEMODE\n 70\n1\n 9\n$MAXACTVP\n 70\n64\n 9\n$PINSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PLIMCHECK\n 70\n0\n 9\n$PEXTMIN\n 10\n0.628866766397\n 20\n0.799999952316\n 30\n0.0\n 9\n$PEXTMAX\n 10\n9.02886638493\n 20\n7.19999957085\n 30\n0.0\n 9\n$PLIMMIN\n 10\n-0.700541819174\n 20\n-0.228100386192\n 9\n$PLIMMAX\n 10\n10.2994579405\n 20\n8.27189937351\n 9\n$UNITMODE\n 70\n0\n 9\n$VISRETAIN\n 70\n1\n 9\n$PLINEGEN\n 70\n0\n 9\n$PSLTSCALE\n 70\n1\n 9\n$TREEDEPTH\n 70\n3020\n 9\n$CMLSTYLE\n 2\nStandard\n 9\n$CMLJUST\n 70\n0\n 9\n$CMLSCALE\n 40\n1.0\n 9\n$PROXYGRAPHICS\n 70\n1\n 9\n$MEASUREMENT\n 70\n1\n 9\n$CELWEIGHT\n370\n-1\n 9\n$ENDCAPS\n280\n0\n 9\n$JOINSTYLE\n280\n0\n 9\n$LWDISPLAY\n290\n0\n 9\n$INSUNITS\n 70\n4\n 9\n$HYPERLINKBASE\n 1\n\n 9\n$STYLESHEET\n 1\n\n 9\n$XEDIT\n290\n1\n 9\n$CEPSNTYPE\n380\n0\n 9\n$PSTYLEMODE\n290\n1\n 9\n$FINGERPRINTGUID\n 2\n{39DB1BDD-BC6C-46D3-A333-DFCC0DC4782D}\n 9\n$VERSIONGUID\n 2\n{69EEBB2D-7039-498F-9366-3F994E4A07E7}\n 9\n$EXTNAMES\n290\n1\n 9\n$PSVPSCALE\n 40\n0.0\n 9\n$OLESTARTUP\n290\n0\n 9\n$SORTENTS\n280\n127\n 9\n$INDEXCTL\n280\n0\n 9\n$HIDETEXT\n280\n1\n 9\n$XCLIPFRAME\n280\n0\n 9\n$HALOGAP\n280\n0\n 9\n$OBSCOLOR\n 70\n257\n 9\n$OBSLTYPE\n280\n0\n 9\n$INTERSECTIONDISPLAY\n280\n0\n 9\n$INTERSECTIONCOLOR\n 70\n257\n 9\n$DIMASSOC\n280\n2\n 9\n$PROJECTNAME\n 1\n\n 9\n$CAMERADISPLAY\n290\n0\n 9\n$LENSLENGTH\n 40\n50.0\n 9\n$CAMERAHEIGHT\n 40\n0.0\n 9\n$STEPSPERSEC\n 40\n2.0\n 9\n$STEPSIZE\n 40\n6.0\n 9\n$3DDWFPREC\n 40\n2.0\n 9\n$PSOLWIDTH\n 40\n0.25\n 9\n$PSOLHEIGHT\n 40\n4.0\n 9\n$LOFTANG1\n 40\n1.57079632679\n 9\n$LOFTANG2\n 40\n1.57079632679\n 9\n$LOFTMAG1\n 40\n0.0\n 9\n$LOFTMAG2\n 40\n0.0\n 9\n$LOFTPARAM\n 70\n7\n 9\n$LOFTNORMALS\n280\n1\n 9\n$LATITUDE\n 40\n37.795\n 9\n$LONGITUDE\n 40\n-122.394\n 9\n$NORTHDIRECTION\n 40\n0.0\n 9\n$TIMEZONE\n 70\n-8000\n 9\n$LIGHTGLYPHDISPLAY\n280\n1\n 9\n$TILEMODELIGHTSYNCH\n280\n1\n 9\n$CMATERIAL\n347\n96\n 9\n$SOLIDHIST\n280\n1\n 9\n$SHOWHIST\n280\n1\n 9\n$DWFFRAME\n280\n2\n 9\n$DGNFRAME\n280\n0\n 9\n$REALWORLDSCALE\n290\n1\n 9\n$INTERFERECOLOR\n 62\n1\n 9\n$INTERFEREOBJVS\n345\nA3\n 9\n$INTERFEREVPVS\n346\nA0\n 9\n$CSHADOW\n280\n0\n 9\n$SHADOWPLANELOCATION\n 40\n0.0\n 0\nENDSEC"},dxfClasses=function(){return' 0\nSECTION\n 2\nCLASSES\n 0\nCLASS\n 1\nACDBDICTIONARYWDFLT\n 2\nAcDbDictionaryWithDefault\n 3\nObjectDBX Classes\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nDICTIONARYVAR\n 2\nAcDbDictionaryVar\n 3\nObjectDBX Classes\n 90\n0\n 91\n15\n280\n0\n281\n0\n 0\nCLASS\n 1\nTABLESTYLE\n 2\nAcDbTableStyle\n 3\nObjectDBX Classes\n 90\n4095\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nMATERIAL\n 2\nAcDbMaterial\n 3\nObjectDBX Classes\n 90\n1153\n 91\n3\n280\n0\n281\n0\n 0\nCLASS\n 1\nVISUALSTYLE\n 2\nAcDbVisualStyle\n 3\nObjectDBX Classes\n 90\n4095\n 91\n26\n280\n0\n281\n0\n 0\nCLASS\n 1\nSCALE\n 2\nAcDbScale\n 3\nObjectDBX Classes\n 90\n1153\n 91\n17\n280\n0\n281\n0\n 0\nCLASS\n 1\nMLEADERSTYLE\n 2\nAcDbMLeaderStyle\n 3\nACDB_MLEADERSTYLE_CLASS\n 90\n4095\n 91\n3\n280\n0\n281\n0\n 0\nCLASS\n 1\nCELLSTYLEMAP\n 2\nAcDbCellStyleMap\n 3\nObjectDBX Classes\n 90\n1152\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nEXACXREFPANELOBJECT\n 2\nExAcXREFPanelObject\n 3\nEXAC_ESW\n 90\n1025\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nNPOCOLLECTION\n 2\nAcDbImpNonPersistentObjectsCollection\n 3\nObjectDBX Classes\n 90\n1153\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nLAYER_INDEX\n 2\nAcDbLayerIndex\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nSPATIAL_INDEX\n 2\nAcDbSpatialIndex\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nIDBUFFER\n 2\nAcDbIdBuffer\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nDIMASSOC\n 2\nAcDbDimAssoc\n 3\n"AcDbDimAssoc|Product Desc: AcDim ARX App For Dimension|Company: Autodesk, Inc.|WEB Address: www.autodesk.com"\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nACDBSECTIONVIEWSTYLE\n 2\nAcDbSectionViewStyle\n 3\nObjectDBX Classes\n 90\n1025\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nACDBDETAILVIEWSTYLE\n 2\nAcDbDetailViewStyle\n 3\nObjectDBX Classes\n 90\n1025\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGEDEF\n 2\nAcDbRasterImageDef\n 3\nISM\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nRASTERVARIABLES\n 2\nAcDbRasterVariables\n 3\nISM\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGEDEF_REACTOR\n 2\nAcDbRasterImageDefReactor\n 3\nISM\n 90\n1\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGE\n 2\nAcDbRasterImage\n 3\nISM\n 90\n2175\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nPDFDEFINITION\n 2\nAcDbPdfDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nPDFUNDERLAY\n 2\nAcDbPdfReference\n 3\nObjectDBX Classes\n 90\n4095\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nDWFDEFINITION\n 2\nAcDbDwfDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nDWFUNDERLAY\n 2\nAcDbDwfReference\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nDGNDEFINITION\n 2\nAcDbDgnDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nDGNUNDERLAY\n 2\nAcDbDgnReference\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n1\n 0\nENDSEC'},dxfTables=function(){return" 0\nSECTION\n 2\nTABLES\n 0\nTABLE\n 2\nVPORT\n 5\n8\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nLTYPE\n 5\n5F\n330\n0\n100\nAcDbSymbolTable\n 70\n7\n 0\nLTYPE\n 5\n14\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nByBlock\n 70\n0\n 3\n\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n15\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nByLayer\n 70\n0\n 3\n\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n16\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nContinuous\n 70\n0\n 3\nSolid line\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n1B1\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nCENTER\n 70\n0\n 3\nCenter ____ _ ____ _ ____ _ ____ _ ____ _ ____\n 72\n65\n 73\n4\n 40\n2.0\n 49\n1.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n1B2\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nDASHED\n 70\n0\n 3\nDashed __ __ __ __ __ __ __ __ __ __ __ __ __ _\n 72\n65\n 73\n2\n 40\n0.75\n 49\n0.5\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n1B3\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nPHANTOM\n 70\n0\n 3\nPhantom ______ __ __ ______ __ __ ______\n 72\n65\n 73\n6\n 40\n2.5\n 49\n1.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n39E\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nHIDDEN\n 70\n0\n 3\nHidden __ __ __ __ __ __ __ __ __ __ __ __ __ __\n 72\n65\n 73\n2\n 40\n9.525\n 49\n6.35\n 74\n0\n 49\n-3.175\n 74\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nLAYER\n 5\n2\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n 0\nLAYER\n 5\n10\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\n0\n 70\n0\n 6\nContinuous\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nLAYER\n 5\n1B4\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\nView Port\n 70\n0\n 6\nContinuous\n290\n0\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nLAYER\n 5\n21D\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\nDefpoints\n 70\n0\n 6\nContinuous\n290\n0\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nSTYLE\n 5\n3\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n 0\nSTYLE\n 5\n11\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nStandard\n 70\n0\n 40\n0.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nSTYLE\n 5\nDC\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nAnnotative\n 70\n0\n 40\n0.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nSTYLE\n 5\n178\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nNotes\n 70\n0\n 40\n3.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nENDTAB\n 0\nTABLE\n 2\nVIEW\n 5\n6\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nUCS\n 5\n7\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nAPPID\n 5\n9\n330\n0\n100\nAcDbSymbolTable\n 70\n12\n 0\nAPPID\n 5\n12\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD\n 70\n0\n 0\nAPPID\n 5\nDD\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcadAnnoPO\n 70\n0\n 0\nAPPID\n 5\nDE\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcadAnnotative\n 70\n0\n 0\nAPPID\n 5\nDF\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMJAG\n 70\n0\n 0\nAPPID\n 5\nE0\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMTALN\n 70\n0\n 0\nAPPID\n 5\n107\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_MLEADERVER\n 70\n0\n 0\nAPPID\n 5\n1B5\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcAecLayerStandard\n 70\n0\n 0\nAPPID\n 5\n1BA\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_EXEMPT_FROM_CAD_STANDARDS\n 70\n0\n 0\nAPPID\n 5\n237\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMBREAK\n 70\n0\n 0\nAPPID\n 5\n28E\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_PSEXT\n 70\n0\n 0\nAPPID\n 5\n4B0\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_NAV_VCDISPLAY\n 70\n0\n 0\nAPPID\n 5\n4E3\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nHATCHBACKGROUNDCOLOR\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nDIMSTYLE\n 5\nA\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n100\nAcDbDimStyleTable\n 71\n3\n340\n242\n340\n27\n340\nE1\n 0\nDIMSTYLE\n105\n27\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nStandard\n 70\n0\n 41\n3.0\n 42\n2.0\n 43\n9.0\n 44\n5.0\n140\n3.0\n141\n2.0\n147\n2.0\n340\n11\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n90.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nDIMSTYLE\n105\nE1\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nAnnotative\n 70\n0\n 40\n0.0\n 41\n3.0\n 42\n2.5\n 43\n10.0\n 44\n5.0\n140\n3.0\n141\n2.0\n147\n2.0\n340\n11\n1001\nAcadAnnotative\n1000\nAnnotativeData\n1002\n{\n1070\n1\n1070\n1\n1002\n}\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n90.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nDIMSTYLE\n105\n242\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nCivil-Metric\n 70\n0\n 41\n3.0\n 42\n1.5\n 43\n6.0\n 44\n3.0\n 73\n0\n 74\n0\n 77\n1\n 78\n3\n 79\n2\n140\n3.0\n141\n3.0\n147\n2.0\n179\n2\n271\n2\n272\n2\n276\n1\n340\n11\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n3.0\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nBLOCK_RECORD\n 5\n1\n330\n0\n100\nAcDbSymbolTable\n 70\n4\n 0\nBLOCK_RECORD\n 5\n1F\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n*Model_Space\n340\n530\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n58\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n*Paper_Space\n340\n531\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n238\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n_ArchTick\n340\n0\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n23C\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n_Open30\n340\n0\n 70\n0\n280\n1\n281\n0\n 0\nENDTAB\n 0\nENDSEC"},dxfBlocks=function(){return" 0\nSECTION\n 2\nBLOCKS\n 0\nBLOCK\n 5\n23A\n330\n238\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n_ArchTick\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n_ArchTick\n 1\n\n 0\nENDBLK\n 5\n23B\n330\n238\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n20\n330\n1F\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n*Model_Space\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n*Model_Space\n 1\n\n 0\nENDBLK\n 5\n21\n330\n1F\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n5A\n330\n58\n100\nAcDbEntity\n 67\n1\n 8\n0\n100\nAcDbBlockBegin\n 2\n*Paper_Space\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n*Paper_Space\n 1\n\n 0\nENDBLK\n 5\n5B\n330\n58\n100\nAcDbEntity\n 67\n1\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n240\n330\n23C\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n_Open30\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n_Open30\n 1\n\n 0\nENDBLK\n 5\n241\n330\n23C\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nENDSEC"},dxfObjects=function(){return" 0\nSECTION\n 2\nOBJECTS\n 0\nDICTIONARY\n 5\nC\n330\n0\n100\nAcDbDictionary\n281\n1\n 3\nACAD_COLOR\n350\n524\n 3\nACAD_GROUP\n350\n525\n 3\nACAD_LAYOUT\n350\n526\n 3\nACAD_MATERIAL\n350\n527\n 3\nACAD_MLEADERSTYLE\n350\n528\n 3\nACAD_MLINESTYLE\n350\n529\n 3\nACAD_PLOTSETTINGS\n350\n52A\n 3\nACAD_PLOTSTYLENAME\n350\n52C\n 3\nACAD_SCALELIST\n350\n52D\n 3\nACAD_TABLESTYLE\n350\n52E\n 3\nACAD_VISUALSTYLE\n350\n52F\n 0\nDICTIONARY\n 5\n524\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n525\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n526\n330\nC\n100\nAcDbDictionary\n281\n1\n 3\nModel\n350\n530\n 3\nLayout1\n350\n531\n 0\nDICTIONARY\n 5\n527\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n528\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n529\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52A\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nACDBPLACEHOLDER\n 5\n52B\n330\n52C\n 0\nACDBDICTIONARYWDFLT\n 5\n52C\n330\nC\n100\nAcDbDictionary\n281\n1\n 3\nNormal\n350\n52B\n100\nAcDbDictionaryWithDefault\n340\n52B\n 0\nDICTIONARY\n 5\n52D\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52E\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52F\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nLAYOUT\n 5\n530\n330\n526\n100\nAcDbPlotSettings\n 1\n\n 2\nDWFx ePlot (XPS Compatible).pc3\n 4\nANSI_A_(8.50_x_11.00_Inches)\n 6\n\n 40\n5.8\n 41\n17.8\n 42\n5.8\n 43\n17.8\n 44\n215.9\n 45\n279.4\n 46\n0.0\n 47\n0.0\n 48\n0.0\n 49\n0.0\n140\n0.0\n141\n0.0\n142\n1.0\n143\n14.53\n 70\n11952\n 72\n0\n 73\n1\n 74\n0\n 7\n\n 75\n0\n147\n0.069\n148\n114.98\n149\n300.29\n100\nAcDbLayout\n 1\nModel\n 70\n1\n 71\n0\n 10\n0.0\n 20\n0.0\n 11\n12.0\n 21\n9.0\n 12\n0.0\n 22\n0.0\n 32\n0.0\n 14\n0.0\n 24\n0.0\n 34\n0.0\n 15\n0.0\n 25\n0.0\n 35\n0.0\n146\n0.0\n 13\n0.0\n 23\n0.0\n 33\n0.0\n 16\n1.0\n 26\n0.0\n 36\n0.0\n 17\n0.0\n 27\n1.0\n 37\n0.0\n 76\n0\n330\n1F\n 0\nLAYOUT\n 5\n531\n330\n526\n100\nAcDbPlotSettings\n 1\n\n 2\nDWFx ePlot (XPS Compatible).pc3\n 4\nANSI_A_(8.50_x_11.00_Inches)\n 6\n\n 40\n5.8\n 41\n17.8\n 42\n5.8\n 43\n17.8\n 44\n215.9\n 45\n279.4\n 46\n0.0\n 47\n0.0\n 48\n0.0\n 49\n0.0\n140\n0.0\n141\n0.0\n142\n1.0\n143\n1.0\n 70\n688\n 72\n0\n 73\n1\n 74\n5\n 7\nacad.ctb\n 75\n16\n147\n1.0\n148\n0.0\n149\n0.0\n100\nAcDbLayout\n 1\nLayout1\n 70\n1\n 71\n1\n 10\n-0.7\n 20\n-0.23\n 11\n10.3\n 21\n8.27\n 12\n0.0\n 22\n0.0\n 32\n0.0\n 14\n0.63\n 24\n0.8\n 34\n0.0\n 15\n9.0\n 25\n7.2\n 35\n0.0\n146\n0.0\n 13\n0.0\n 23\n0.0\n 33\n0.0\n 16\n1.0\n 26\n0.0\n 36\n0.0\n 17\n0.0\n 27\n1.0\n 37\n0.0\n 76\n0\n330\n58\n 0\nENDSEC"};module.exports={dxfHeaders:dxfHeaders,dxfClasses:dxfClasses,dxfTables:dxfTables,dxfBlocks:dxfBlocks,dxfObjects:dxfObjects};
330
330
 
331
331
  },{}],65:[function(require,module,exports){
@@ -334,7 +334,7 @@ const colorIndex=[[0,0,0,255],[255,0,0,255],[255,255,0,255],[0,255,0,255],[0,255
334
334
  },{}],66:[function(require,module,exports){
335
335
  const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{geom3:geom3,geom2:geom2,path2:path2}=geometries,{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{dxfHeaders:dxfHeaders,dxfClasses:dxfClasses,dxfTables:dxfTables,dxfBlocks:dxfBlocks,dxfObjects:dxfObjects}=require("./autocad_AC2017"),colorindex2017=require("./colorindex2017"),mimeType="application/dxf",serialize=(n,...e)=>{const t={geom2To:"lwpolyline",geom3To:"3dface",pathTo:"lwpolyline",statusCallback:null,colorIndex:colorindex2017};if((n=Object.assign({},t,n)).entityId=0,0===(e=(e=flatten(e)).filter(n=>geom3.isA(n)||geom2.isA(n)||path2.isA(n))).length)throw new Error("only JSCAD geometries can be serialized to DXF");return e=toArray(modifiers.generalize({snap:!0,triangulate:!0},e)),[`999\nCreated by JSCAD\n${dxfHeaders(n)}\n${dxfClasses(n)}\n${dxfTables(n)}\n${dxfBlocks(n)}\n${dxfEntities(e,n)}\n${dxfObjects(n)}\n 0\nEOF\n`]},dxfEntities=(n,e)=>{const t=n.map((n,t)=>{if(geom2.isA(n)){const t=n.color,o=n.name,s=geom2.toOutlines(n).map(n=>({closed:!0,points:n,color:t,name:o}));return"polyline"===e.geom2To?PathsToPolyine(s,e):PathsToLwpolyline(s,e)}if(geom3.isA(n))return"polyline"===e.geom3To?PolygonsToPolyline(n,e):PolygonsTo3DFaces(n,e);if(path2.isA(n)){const t=n.color,o=n.name,s={closed:n.isClosed,points:path2.toPoints(n),color:t,name:o};return PathsToLwpolyline([s],e)}return""});let o=" 0\nSECTION\n 2\nENTITIES\n";return t.forEach(n=>{n&&(o+=n)}),o+=" 0\nENDSEC"},PathsToLwpolyline=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";return n.forEach((o,s)=>{if(o.points.length<1)return;const l=o.points.length+(o.closed?1:0);t+=` 0\nLWPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(o,e)}\n 8\n0\n 67\n0\n 62\n${getColorNumber(o,e)}\n 100\nAcDbPolyline\n 90\n${l}\n 70\n${o.closed?1:0}\n`;for(let n=0;n<l;n++){let e=n;e>=o.points.length&&(e-=o.points.length);const s=o.points[e];t+=` 10\n${s[0]}\n 20\n${s[1]}\n`}e.statusCallback&&e.statusCallback({progress:100*s/n.length})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},PathsToPolyine=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";return n.forEach((o,s)=>{const l=o.points.length+(o.closed?1:0);t+=` 0\nPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(o,e)}\n 8\n0\n 62\n${getColorNumber(o,e)}\n 100\nAcDb2dPolyline\n`;for(let n=0;n<l;n++){let s=n;s>=o.points.length&&(s-=o.points.length);const l=o.points[s];t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb2dVertex\n 10\n${l[0]}\n 20\n${l[1]}\n`}t+=` 0\nSEQEND\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n`,e.statusCallback&&e.statusCallback({progress:100*s/n.length})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},PolygonsTo3DFaces=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";const o=geom3.toPolygons(n),s=getColorNumber(n,e);return o.forEach((n,o)=>{const l=n.color?getColorNumber(n,e):s;polygonToTriangles(n).forEach((n,o)=>{t+=triangleTo3DFaces(n,e,l)})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},polygonToTriangles=n=>{const e=n.vertices.length-2;if(e<1)return[];const t=n.vertices[0],o=[];for(let s=0;s<e;s++)o.push([t,n.vertices[s+1],n.vertices[s+2]]);return o},triangleTo3DFaces=(n,e,t)=>{const o=n[0],s=n[1],l=n[2],r=n[2];return` 0\n3DFACE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 62\n${t}\n 100\nAcDbFace\n 70\n0\n 10\n${o[0]}\n 20\n${o[1]}\n 30\n${o[2]}\n 11\n${s[0]}\n 21\n${s[1]}\n 31\n${s[2]}\n 12\n${l[0]}\n 22\n${l[1]}\n 32\n${l[2]}\n 13\n${r[0]}\n 23\n${r[1]}\n 33\n${r[2]}\n`},PolygonsToPolyline=(n,e)=>{let t="";const o=polygons2polyfaces(geom3.toPolygons(n));return o.faces.length>0&&(t+=` 0\nPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(n,e)}\n 8\n0\n 62\n${getColorNumber(n,e)}\n 100\nAcDb3dPolyline\n 70\n64\n 71\n${o.vertices.length}\n 72\n${o.faces.length}\n`,o.vertices.forEach(n=>{t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb3dPolylineVertex\n 10\n${n[0]}\n 20\n${n[1]}\n 30\n${n[2]}\n 70\n192\n`}),o.faces.forEach(n=>{t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb3dPolylineVertex\n 10\n0\n 20\n0\n 30\n0\n 70\n128\n 71\n${n[0]}\n 72\n${n[1]}\n 73\n${n[2]}\n 74\n${n[3]}\n`})),[t]},polygons2polyfaces=n=>{const e=[],t=[];for(let o=0;o<n.length;++o){const s=n[o],l=[];for(let n=0;n<s.vertices.length;++n){const e=s.vertices[n];t.push([e[0],e[1],e[2]]),l.push(t.length)}for(;l.length<4;)l.push(0);e.push(l)}return{faces:e,vertices:t}},getEntityId=n=>{n.entityId++;const e="00000"+n.entityId.toString(16).toUpperCase();return"CAD"+e.substr(e.length-5)},getName=(n,e)=>{if(n.name)return n.name;const t="00000"+e.entityId.toString(16).toUpperCase();return"CAD"+t.substr(t.length-5)},getColorNumber=(n,e)=>{let t=256;if(n.color){const o=Math.floor(255*n.color[0]),s=Math.floor(255*n.color[1]),l=Math.floor(255*n.color[2]),r=e.colorIndex;let a=765;for(let n=1;n<r.length;n++){const e=r[n],i=Math.abs(o-e[0])+Math.abs(s-e[1])+Math.abs(l-e[2]);if(i<a){if(t=n,0===i)break;a=i}}}return t};module.exports={serialize:serialize,mimeType:mimeType};
336
336
 
337
- },{"./autocad_AC2017":64,"./colorindex2017":65,"@jscad/array-utils":529,"@jscad/modeling":215}],67:[function(require,module,exports){
337
+ },{"./autocad_AC2017":64,"./colorindex2017":65,"@jscad/array-utils":525,"@jscad/modeling":212}],67:[function(require,module,exports){
338
338
  class BinaryReader{constructor(t){this._buffer=t,this._pos=0}readInt8(){return this._decodeInt(8,!0)}readUInt8(){return this._decodeInt(8,!1)}readInt16(){return this._decodeInt(16,!0)}readUInt16(){return this._decodeInt(16,!1)}readInt32(){return this._decodeInt(32,!0)}readUInt32(){return this._decodeInt(32,!1)}readFloat(){return this._decodeFloat(23,8)}readDouble(){return this._decodeFloat(52,11)}readChar(){return this.readString(1)}readString(t){this._checkSize(8*t);const e=this._buffer.substr(this._pos,t);return this._pos+=t,e}seek(t){this._pos=t,this._checkSize(0)}getPosition(){return this._pos}getSize(){return this._buffer.length}_decodeFloat(t,e){const r=t+e+1,s=r>>3;this._checkSize(r);const i=Math.pow(2,e-1)-1,h=this._readBits(t+e,1,s),d=this._readBits(t,e,s);let o=0,n=2,_=0,a=0;do{const e=this._readByte(++_,s);let r=1<<(a=t%8||8);for(;r>>=1;)e&r&&(o+=1/n),n*=2}while(t-=a);return this._pos+=s,d===1+(i<<1)?o?NaN:h?-1/0:1/0:(1+-2*h)*(d||o?d?Math.pow(2,d-i)*(1+o):Math.pow(2,1-i)*o:0)}_decodeInt(t,e){const r=this._readBits(0,t,t/8),s=Math.pow(2,t),i=e&&r>=s/2?r-s:r;return this._pos+=t/8,i}_shl(t,e){for(++e;--e;t=1073741824==(1073741824&(t%=2147483648))?2*t:2*(t-1073741824)+2147483647+1);return t}_readByte(t,e){return 255&this._buffer.charCodeAt(this._pos+e-t-1)}_readBits(t,e,r){const s=(t+e)%8,i=t%8,h=r-(t>>3)-1;let d=r+(-(t+e)>>3),o=h-d,n=this._readByte(h,r)>>i&(1<<(o?8-i:e))-1;for(o&&s&&(n+=(this._readByte(d++,r)&(1<<s)-1)<<(o--<<3)-i);o;)n+=this._shl(this._readByte(d++,r),(o--<<3)-i);return n}_checkSize(t){this._pos,Math.ceil(t/8),this._buffer.length}}module.exports=BinaryReader;
339
339
 
340
340
  },{}],68:[function(require,module,exports){
@@ -357,19 +357,19 @@ const amfDeSerializer=require("@jscad/amf-deserializer"),dxfDeSerializer=require
357
357
  },{"@jscad/amf-deserializer":50,"@jscad/dxf-deserializer":60,"@jscad/json-deserializer":76,"@jscad/obj-deserializer":79,"@jscad/stl-deserializer":82,"@jscad/svg-deserializer":94,"@jscad/x3d-deserializer":109}],73:[function(require,module,exports){
358
358
  const{geometries:geometries}=require("@jscad/modeling"),formats={stl:{displayName:"STL (Binary)",description:"STereoLithography, Binary",extension:"stl",mimetype:"application/sla",deserializable:!0,convertGeom3:!1,convertGeom2:!1},stla:{displayName:"STL (ASCII)",description:"STereoLithography, ASCII",extension:"stl",mimetype:"application/sla",deserializable:!1,convertGeom3:!0,convertGeom2:!1},stlb:{displayName:"STL (Binary)",description:"STereoLithography, Binary",extension:"stl",mimetype:"application/sla",deserializable:!1,convertGeom3:!0,convertGeom2:!1},amf:{displayName:"AMF (experimental)",description:"Additive Manufacturing File Format",extension:"amf",mimetype:"application/amf+xml",deserializable:!0,convertGeom3:!0,convertGeom2:!1},dxf:{displayName:"DXF (ASCII)",description:"AutoCAD Drawing Exchange Format",extension:"dxf",mimetype:"application/dxf",deserializable:!0,convertGeom3:!0,convertGeom2:!0},jscad:{displayName:"JSCAD",description:"JSCAD Design Source",extension:"jscad",mimetype:"application/javascript",deserializable:!0,convertGeom3:!0,convertGeom2:!0},json:{displayName:"json",description:"JavaScript Object Notation Format",extension:"json",mimetype:"application/json",deserializable:!0,convertGeom3:!0,convertGeom2:!0},js:{displayName:"js",description:"JavaScript Source",extension:"js",mimetype:"application/javascript",deserializable:!0,convertGeom3:!0,convertGeom2:!0},obj:{displayName:"OBJ",description:"Wavefront OBJ File",extension:"obj",mimetype:"text/plain",deserializable:!0,convertGeom3:!0,convertGeom2:!1},svg:{displayName:"SVG",description:"Scalable Vector Graphics Format",extension:"svg",mimetype:"image/svg+xml",deserializable:!0,convertGeom3:!1,convertGeom2:!0},x3d:{displayName:"X3D",description:"X3D File Format",extension:"x3d",mimetype:"model/x3d+xml",deserializable:!0,convertGeom3:!0,convertGeom2:!0},"3mf":{displayName:"3MF",description:"3D Manufacturing Format",extension:"3mf",mimetype:"model/3mf",deserializable:!1,convertGeom3:!0,convertGeom2:!1}},conversionFormats=["amf","js","jscad","obj","scad","stl","dxf","svg","ttf","woff"],supportedFormatsForObjects=e=>{const o=[];let t=!1,s=!1;for(let o=0;o<e.length;o++)geometries.geom3.isA(e[o])&&(t=!0),(geometries.geom2.isA(e[o])||geometries.path2.isA(e[o]))&&(s=!0);for(const e in formats)t&&!0===formats[e].convertGeom3?o[o.length]=e:s&&!0===formats[e].convertGeom2&&(o[o.length]=e);return o},supportedOutputExtensions=()=>{const e=[];for(const o in formats)!0!==formats[o].convertGeom3&&!0!==formats[o].convertGeom2||e.indexOf(formats[o].extension)<0&&e.push(formats[o].extension);return e},supportedOutputFormats=()=>{const e=[];for(const o in formats)!0!==formats[o].convertGeom3&&!0!==formats[o].convertGeom2||e.push(o);return e},supportedInputExtensions=()=>{const e=[];for(const o in formats)!0===formats[o].deserializable&&e.push(formats[o].extension);return e};module.exports={formats:formats,conversionFormats:conversionFormats,supportedInputExtensions:supportedInputExtensions,supportedOutputExtensions:supportedOutputExtensions,supportedOutputFormats:supportedOutputFormats,supportedFormatsForObjects:supportedFormatsForObjects};
359
359
 
360
- },{"@jscad/modeling":215}],74:[function(require,module,exports){
360
+ },{"@jscad/modeling":212}],74:[function(require,module,exports){
361
361
  const{makeBlob:makeBlob,convertToBlob:convertToBlob}=require("@jscad/io-utils"),amfSerializer=require("@jscad/amf-serializer"),dxfSerializer=require("@jscad/dxf-serializer"),jsonSerializer=require("@jscad/json-serializer"),objSerializer=require("@jscad/obj-serializer"),stlSerializer=require("@jscad/stl-serializer"),svgSerializer=require("@jscad/svg-serializer"),x3dSerializer=require("@jscad/x3d-serializer"),m3fSerializer=require("@jscad/3mf-serializer"),prepareOutput=require("./prepareOutput"),deserializers=require("./deserializers"),solidsAsBlob=(e,r)=>convertToBlob(prepareOutput(e,r));module.exports={makeBlob:makeBlob,solidsAsBlob:solidsAsBlob,amfSerializer:amfSerializer,dxfSerializer:dxfSerializer,jsonSerializer:jsonSerializer,objSerializer:objSerializer,stlSerializer:stlSerializer,svgSerializer:svgSerializer,x3dSerializer:x3dSerializer,m3fSerializer:m3fSerializer,deserializers:deserializers};
362
362
 
363
363
  },{"./deserializers":72,"./prepareOutput":75,"@jscad/3mf-serializer":41,"@jscad/amf-serializer":54,"@jscad/dxf-serializer":66,"@jscad/io-utils":70,"@jscad/json-serializer":78,"@jscad/obj-serializer":81,"@jscad/stl-serializer":86,"@jscad/svg-serializer":98,"@jscad/x3d-serializer":124}],75:[function(require,module,exports){
364
364
  const{toArray:toArray}=require("@jscad/array-utils"),{formats:formats}=require("./formats"),amfSerializer=require("@jscad/amf-serializer"),dxfSerializer=require("@jscad/dxf-serializer"),jsonSerializer=require("@jscad/json-serializer"),objSerializer=require("@jscad/obj-serializer"),stlSerializer=require("@jscad/stl-serializer"),svgSerializer=require("@jscad/svg-serializer"),x3dSerializer=require("@jscad/x3d-serializer"),m3fSerializer=require("@jscad/3mf-serializer"),prepareOutput=(e,r)=>{const i={format:void 0,version:"0.0.0"},{format:a,version:s}=Object.assign({},i,r),l={producer:"JSCAD "+s,date:new Date,version:s},t={amf:amfSerializer,stl:stlSerializer,stla:{mimeType:stlSerializer.mimeType,serialize:(e,r)=>stlSerializer.serialize(Object.assign({},{binary:!1},e),r)},stlb:stlSerializer,dxf:dxfSerializer,obj:objSerializer,svg:svgSerializer,x3d:x3dSerializer,"3mf":m3fSerializer,json:jsonSerializer,js:{mimeType:formats.js.mimetype,serialize:(e,r)=>toArray(r)},jscad:{mimeType:formats.jscad.mimetype,serialize:(e,r)=>toArray(r)},undefined:()=>{throw new Error("Not supported : only jscad, stl, amf, dxf, svg or json as output format")}},o=Object.assign({},l,r);return{data:t[a].serialize(o,e),mimeType:t[a].mimeType}};module.exports=prepareOutput;
365
365
 
366
- },{"./formats":73,"@jscad/3mf-serializer":41,"@jscad/amf-serializer":54,"@jscad/array-utils":529,"@jscad/dxf-serializer":66,"@jscad/json-serializer":78,"@jscad/obj-serializer":81,"@jscad/stl-serializer":86,"@jscad/svg-serializer":98,"@jscad/x3d-serializer":124}],76:[function(require,module,exports){
366
+ },{"./formats":73,"@jscad/3mf-serializer":41,"@jscad/amf-serializer":54,"@jscad/array-utils":525,"@jscad/dxf-serializer":66,"@jscad/json-serializer":78,"@jscad/obj-serializer":81,"@jscad/stl-serializer":86,"@jscad/svg-serializer":98,"@jscad/x3d-serializer":124}],76:[function(require,module,exports){
367
367
  const{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"json",output:"script",version:version,addMetaData:!0};e=Object.assign({},n,e);let r=JSON.parse(t);return r=flatten(toArray(r)),"script"===e.output?translate(e,r):r},translate=(e,t)=>{const{addMetaData:n,filename:r,version:s}=e;let a=n?`//\n// Produced by JSCAD IO Library : JSON Deserializer (${s})\n// date: ${new Date}\n// source: ${r}\n//\n`:"";return a+=`\nconst { geometries } = require('@jscad/modeling')\n\nconst main = () => {\n const objects = [${translateToList(t)} ]\n return objects\n}\n\n${translateToObjects(t)}\n\nmodule.exports = { main }\n`},translateToList=e=>e.reduce((e,t,n)=>e+` json${n},`,""),translateToObjects=e=>e.reduce((e,t,n)=>e+translateToObject(t,n),""),translateToObject=(e,t)=>`const json${t} = ${JSON.stringify(e)}\n`,extension="json";module.exports={deserialize:deserialize,extension:"json"};
368
368
 
369
- },{"./package.json":77,"@jscad/array-utils":529}],77:[function(require,module,exports){
369
+ },{"./package.json":77,"@jscad/array-utils":525}],77:[function(require,module,exports){
370
370
  module.exports={
371
371
  "name": "@jscad/json-deserializer",
372
- "version": "2.0.25",
372
+ "version": "2.0.23",
373
373
  "description": "JSON Deserializer for JSCAD",
374
374
  "homepage": "https://openjscad.xyz/",
375
375
  "repository": "https://github.com/jscad/OpenJSCAD.org",
@@ -400,7 +400,7 @@ module.exports={
400
400
  "@jscad/array-utils": "2.1.4"
401
401
  },
402
402
  "devDependencies": {
403
- "@jscad/modeling": "2.11.1",
403
+ "@jscad/modeling": "2.10.0",
404
404
  "ava": "3.15.0",
405
405
  "nyc": "15.1.0"
406
406
  },
@@ -410,13 +410,13 @@ module.exports={
410
410
  },{}],78:[function(require,module,exports){
411
411
  const{utils:utils}=require("@jscad/modeling"),replacer=(r,s)=>{switch(r){case"transforms":case"plane":return Array.from(s);case"points":case"vertices":return s.map(r=>Array.from(r));case"sides":return s.map(r=>[Array.from(r[0]),Array.from(r[1])])}return s},serialize=(r,...s)=>{r=Object.assign({},{statusCallback:null},r),s=utils.flatten(s),r.statusCallback&&r.statusCallback({progress:0});const e=JSON.stringify(s,replacer);return r.statusCallback&&r.statusCallback({progress:100}),[e]},mimeType="application/json";module.exports={serialize:serialize,mimeType:mimeType};
412
412
 
413
- },{"@jscad/modeling":215}],79:[function(require,module,exports){
413
+ },{"@jscad/modeling":212}],79:[function(require,module,exports){
414
414
  const{colors:colors,primitives:primitives}=require("@jscad/modeling"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"obj",output:"script",orientation:"outward",version:version,addMetaData:!0};e=Object.assign({},n,e);const{output:s}=e;e&&e.statusCallback&&e.statusCallback({progress:0});const{positions:o,groups:r}=getGroups(t,e),a="script"===s?stringify(o,r,e):objectify(o,r,e);return e&&e.statusCallback&&e.statusCallback({progress:100}),a},getGroups=(e,t)=>{let n=[];const s=[];let o=null;n.push({faces:[],colors:[],name:"default",line:0});const r=(e,t)=>{const s={faces:[],colors:[],name:""};t&&t.length>0&&(s.name=t.join(" ")),n.push(s)},a=(e,t)=>{const n=parseFloat(t[0]),o=parseFloat(t[1]),r=parseFloat(t[2]);s.push([n,o,r])},l=(e,t)=>{const r=t.map(e=>{const t=e.match(/[0-9+\-eE]+/g);let n=parseInt(t[0]);return n<0?n=s.length+n:n--,n}),a=n.pop();a.faces.push(r),a.colors.push(o),n.push(a)},i=(e,t)=>{if(o=null,t&&t.length>0){const e=colors.colorNameToRgb(t[0]);e&&(o=[e[0],e[1],e[2],1])}},c=e.split(/\n/);for(let e=0;e<c.length;e++){const t=c[e].trim();if(t&&t.length>0){let e=t.match(/\S+/g);if(e){const t=e[0];switch(e=e.slice(1),t){case"g":r(0,e);break;case"v":a(0,e);break;case"f":l(0,e);break;case"usemtl":i(0,e)}}}}return n=n.filter(e=>e.faces.length>0),{positions:s,groups:n}},objectify=(e,t,n)=>{return t.map(t=>primitives.polyhedron({orientation:n.orientation,points:e,faces:t.faces,colors:t.colors}))},translatePoints=e=>{let t=" let points = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateFaces=e=>{let t=" let faces = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateColors=e=>{let t=" let colors = [\n";return e.forEach(e=>{t+=e?` [${e}],\n`:" null,\n"}),t+=" ]"},translateGroupsToCalls=e=>{let t="";return e.forEach((e,n)=>t+=` group${n}(points), // ${e.name}\n`),t},translateGroupsToFunctions=(e,t)=>{let n="";return e.forEach((e,s)=>{const o=e.faces,r=e.colors;n+=`\n// group : ${e.name}\n// faces: ${o.length}\n`,n+=`const group${s} = (points) => {\n${translateFaces(o)}\n${translateColors(r)}\n return primitives.polyhedron({ orientation: '${t.orientation}', points, faces, colors })\n}\n`}),n},stringify=(e,t,n)=>{const{filename:s,addMetaData:o,version:r}=n;let a=o?`//\n// Produced by JSCAD IO Library : OBJ Deserializer (${r})\n// date: ${new Date}\n// source: ${s}\n//\n `:"";return a+=`const {primitives} = require('@jscad/modeling')\n\n// groups: ${t.length}\n// points: ${e.length}\nconst main = () => {\n // points are common to all geometries\n${translatePoints(e)}\n\n let geometries = [\n${translateGroupsToCalls(t)} ]\n return geometries\n}\n\n${translateGroupsToFunctions(t,n)}\nmodule.exports = {main}\n`},extension="obj";module.exports={deserialize:deserialize,extension:"obj"};
415
415
 
416
- },{"./package.json":80,"@jscad/modeling":215}],80:[function(require,module,exports){
416
+ },{"./package.json":80,"@jscad/modeling":212}],80:[function(require,module,exports){
417
417
  module.exports={
418
418
  "name": "@jscad/obj-deserializer",
419
- "version": "2.0.24",
419
+ "version": "2.0.22",
420
420
  "description": "OBJ Deserializer for JSCAD",
421
421
  "homepage": "https://openjscad.xyz/",
422
422
  "repository": "https://github.com/jscad/OpenJSCAD.org",
@@ -448,7 +448,7 @@ module.exports={
448
448
  ],
449
449
  "license": "MIT",
450
450
  "dependencies": {
451
- "@jscad/modeling": "2.11.1"
451
+ "@jscad/modeling": "2.10.0"
452
452
  },
453
453
  "devDependencies": {
454
454
  "ava": "3.15.0",
@@ -460,13 +460,13 @@ module.exports={
460
460
  },{}],81:[function(require,module,exports){
461
461
  const{colors:colors,geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="application/object",serialize=(e,...t)=>{e=Object.assign({},{statusCallback:null,triangulate:!0},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to OBJ");t.length!==o.length&&console.warn("some objects could not be serialized to OBJ"),o=toArray(modifiers.generalize({snap:!0,triangulate:e.triangulate},o)),e.statusCallback&&e.statusCallback({progress:0});let r="# Wavefront OBJ file generated by JSCAD\n";const s=[];let a="default";return o.forEach((t,l)=>{e.statusCallback&&e.statusCallback({progress:100*l/o.length}),r+="\n";const i=getColorName(t),n=geometries.geom3.toPolygons(t).filter(e=>e.vertices.length>=3);n.forEach(e=>{e.vertices.forEach(e=>{const t=convertVertex(e);s.indexOf(t)<0&&(s.push(t),r+=`${t}\n`)})}),r+="\n",n.forEach(e=>{const t=e.vertices.map(e=>s.indexOf(convertVertex(e))+1),o=getColorName(e)||i||"default";o!==a&&(r+=`usemtl ${o}\n`,a=o),r+=`f ${t.join(" ")}\n`})}),e.statusCallback&&e.statusCallback({progress:100}),[r]},convertVertex=e=>`v ${e[0]} ${e[1]} ${e[2]}`,getColorName=e=>{let t;if(e.color){const o=e.color[0],r=e.color[1],s=e.color[2];let a=765;for(const e in colors.cssColors){const l=colors.cssColors[e],i=Math.abs(o-l[0])+Math.abs(r-l[1])+Math.abs(s-l[2]);if(i<a){if(t=e,0===i)break;a=i}}}return t};module.exports={serialize:serialize,mimeType:mimeType};
462
462
 
463
- },{"@jscad/array-utils":529,"@jscad/modeling":215}],82:[function(require,module,exports){
463
+ },{"@jscad/array-utils":525,"@jscad/modeling":212}],82:[function(require,module,exports){
464
464
  const{maths:maths,primitives:primitives}=require("@jscad/modeling"),{BinaryReader:BinaryReader}=require("@jscad/io-utils"),packageVersion=require("./package.json").version,deserialize=(e,s)=>{const t={filename:"stl",version:packageVersion,addMetaData:!0,output:"script"};(e=Object.assign({},t,e))&&e.statusCallback&&e.statusCallback({progress:0});const{filename:r,version:a,output:n,addMetaData:o}=e;s=isBuffer(s)?bufferToBinaryString(s):s;const l=isDataBinaryRobust(s);e&&e.statusCallback&&e.statusCallback({progress:33});e&&e.statusCallback&&e.statusCallback({progress:66});const i=("script"===n?formatAsJscad:formatAsCsg)((l?deserializeBinarySTL:deserializeAsciiSTL)(s,r,a,"script"===n?({vertices:e,triangles:s,normals:t,colors:r,index:a})=>toScript(e,s,null,r,a):({vertices:e,triangles:s,normals:t,colors:r})=>toPolyhedron(e,s,null,r)),o,a,r);return e&&e.statusCallback&&e.statusCallback({progress:100}),i},bufferToBinaryString=e=>{let s="";const t=new Uint8Array(e),r=t.byteLength;for(let e=0;e<r;e++)s+=String.fromCharCode(t[e]);return s},isBuffer=e=>void 0!==e.byteLength&&"function"==typeof e.slice,ensureString=e=>{if("string"!=typeof e){const s=new Uint8Array(e);let t="";for(let r=0;r<e.byteLength;r++)t+=String.fromCharCode(s[r]);return t}return e},isDataBinaryRobust=e=>{const s=ensureString(e);return null===/vertex[\s]+([-+]?[0-9]+\.?[0-9]*([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+/g.exec(s)},formatAsJscad=(e,s,t,r)=>{let a="";return s&&(a=`\n //\n // producer: JSCAD STL Deserializer ${t}\n // date: ${new Date}\n // source: ${r}\n // objects: ${e.length}\n //\n `),a+="const {primitives} = require('@jscad/modeling')\n",a+=e.join("\n"),a+=`\nconst main = () => {\n return [${e.map((e,s)=>`solid${s+1}()`)}]\n}\n\nmodule.exports = {main}\n`},formatAsCsg=e=>e,deserializeBinarySTL=(e,s,t,r)=>{const a=[],n=[],o=[],l=[];let i=0,c=0,u=null;const p=parseInt("01000000000000000",2),h=parseInt("00000000000011111",2),d=parseInt("00000001111100000",2),g=parseInt("00111110000000000",2),m=new BinaryReader(e);let f=0,v=0,b=0,S=0,F=0,y=0;for(let e=0;e<80;e++)switch(f){case 6:b=m.readUInt8(),f+=1;continue;case 7:S=m.readUInt8(),f+=1;continue;case 8:F=m.readUInt8(),f+=1;continue;case 9:y=m.readUInt8(),f+=1;continue;default:switch(v=m.readChar()){case"C":case"O":case"L":case"R":case"=":f+=1}}10===f&&(u=[b/255,S/255,F/255,y/255]);const C=m.readUInt32();for(let e=0;e<C;e++){const e=[];e.push(m.readFloat()),e.push(m.readFloat()),e.push(m.readFloat());let s=[];s.push(m.readFloat()),s.push(m.readFloat()),s.push(m.readFloat());const t=[];t.push(m.readFloat()),t.push(m.readFloat()),t.push(m.readFloat());let r=[];r.push(m.readFloat()),r.push(m.readFloat()),r.push(m.readFloat());let v=0;for(let a=0;a<3;a++)isNaN(s[a])&&v++,isNaN(t[a])&&v++,isNaN(r[a])&&v++,isNaN(e[a])&&v++;v>0&&console.log("bad triangle vertice coords/normal: ",v),c+=v;const b=[];b.push(i++),b.push(i++),b.push(i++);const S=m.readUInt16();let F=null;if(10===f){const e=(S&h)/31,s=((S&d)>>>5)/31,t=((S&g)>>>10)/31,r=255;F=0===(S&p)?[e,s,t,r]:u,l.push(F)}if(0===v){const a=maths.vec3.subtract(maths.vec3.create(),t,s),n=maths.vec3.subtract(maths.vec3.create(),r,s),o=maths.vec3.cross(maths.vec3.create(),a,n);if(maths.vec3.dot(e,o)>0){const e=r;r=s,s=e}}a.push(s),a.push(t),a.push(r),n.push(b),o.push(e)}return c&&console.warn(`WARNING: import errors: ${c} (some triangles might be misaligned or missing)`),[r({vertices:a,triangles:n,normals:o,colors:l,index:1})]},deserializeAsciiSTL=(e,s,t,r)=>{let a=0;const n=e.split("endsolid"),o=[];for(let s=1;s<n.length;s++){const t=/\bfacet[\s\S]*?endloop/gim,n=[],l=[],i=[],c=[];let u=0,p=0;const h=e.match(t);if(null!=h){for(let e=0;e<h.length;e++){const s=/\bfacet\s+normal\s+(\S+)\s+(\S+)\s+(\S+)\s+outer\s+loop\s+vertex\s+(\S+)\s+(\S+)\s+(\S+)\s+vertex\s+(\S+)\s+(\S+)\s+(\S+)\s+vertex\s+(\S+)\s+(\S+)\s+(\S+)\s*/gim.exec(h[e]);if(null==s)continue;if(13!==s.length){console.log("Failed to parse "+h[e]);break}let t=0;for(let e=0;e<s.length;e++)"NaN"===s[e]&&(console.log("bad normal or triangle vertice #"+a+" "+e+": '"+s[e]+"', skipped"),t++);if(p+=t,t)continue;let r=1;const o=[];o.push(parseFloat(s[r++])),o.push(parseFloat(s[r++])),o.push(parseFloat(s[r++]));let c=[];c.push(parseFloat(s[r++])),c.push(parseFloat(s[r++])),c.push(parseFloat(s[r++]));const d=[];d.push(parseFloat(s[r++])),d.push(parseFloat(s[r++])),d.push(parseFloat(s[r++]));let g=[];g.push(parseFloat(s[r++])),g.push(parseFloat(s[r++])),g.push(parseFloat(s[r++]));const m=[];if(m.push(u++),m.push(u++),m.push(u++),0===t){const e=maths.vec3.subtract(maths.vec3.create(),d,c),s=maths.vec3.subtract(maths.vec3.create(),g,c),t=maths.vec3.cross(maths.vec3.create(),e,s);if(maths.vec3.dot(o,t)>0){const e=g;g=c,c=e}}n.push(c),n.push(d),n.push(g),i.push(o),l.push(m),a++}p&&console.warn(`WARNING: import errors: ${p} (some triangles might be misaligned or missing)`),o.push(r({vertices:n,triangles:l,colors:c,index:s}))}}return o},toPolyhedron=(e,s,t,r)=>{r&&s.length!==r.length&&(r=void 0);const a={orientation:"inward",points:e,faces:s,colors:r};return primitives.polyhedron(a)},toScript=(e,s,t,r,a)=>{let n=`\n//\n// solid ${a} : ${e.length} points, ${s.length} faces, ${r.length} colors\n//\nconst solid${a} = () => {\n`;n+=" const points = [\n";for(let s=0;s<e.length;s++)n+=` [${e[s]}],\n`;n+=" ]\n",n+=" const faces = [\n";for(let e=0;e<s.length;e++)n+=` [${s[e]}],\n`;if(n+=" ]\n",r&&s.length===r.length){n+=" const colors = [\n";for(let e=0;e<r.length;e++)n+=` [${r[e]}],\n`;n+=" ]\n"}else n+=" const colors = null\n";return n+=" return primitives.polyhedron({points, faces, colors, orientation: 'inside'})\n}\n"},extension="stl";module.exports={deserialize:deserialize,extension:"stl"};
465
465
 
466
- },{"./package.json":83,"@jscad/io-utils":70,"@jscad/modeling":215}],83:[function(require,module,exports){
466
+ },{"./package.json":83,"@jscad/io-utils":70,"@jscad/modeling":212}],83:[function(require,module,exports){
467
467
  module.exports={
468
468
  "name": "@jscad/stl-deserializer",
469
- "version": "2.1.21",
469
+ "version": "2.1.19",
470
470
  "description": "STL Deserializer for JSCAD",
471
471
  "homepage": "https://openjscad.xyz/",
472
472
  "repository": "https://github.com/jscad/OpenJSCAD.org",
@@ -498,8 +498,8 @@ module.exports={
498
498
  ],
499
499
  "license": "MIT",
500
500
  "dependencies": {
501
- "@jscad/io-utils": "2.0.24",
502
- "@jscad/modeling": "2.11.1"
501
+ "@jscad/io-utils": "2.0.22",
502
+ "@jscad/modeling": "2.10.0"
503
503
  },
504
504
  "devDependencies": {
505
505
  "ava": "3.15.0",
@@ -511,13 +511,13 @@ module.exports={
511
511
  },{}],84:[function(require,module,exports){
512
512
  const{geometries:geometries}=require("@jscad/modeling"),serializeText=(t,e)=>{e.statusCallback&&e.statusCallback({progress:0});const o=`solid JSCAD\n${convertToStl(t,e)}\nendsolid JSCAD\n`;return e.statusCallback&&e.statusCallback({progress:100}),[o]},convertToStl=(t,e)=>{const o=[];return t.forEach((r,n)=>{o.push(convertToFacets(r,e)),e.statusCallback&&e.statusCallback({progress:100*n/t.length})}),o.join("\n")},convertToFacets=(t,e)=>{const o=[];return geometries.geom3.toPolygons(t).forEach((t,e)=>{o.push(convertToFacet(t))}),o.join("\n")},vector3DtoStlString=t=>`${t[0]} ${t[1]} ${t[2]}`,vertextoStlString=t=>`vertex ${vector3DtoStlString(t)}`,convertToFacet=t=>{const e=[];if(t.vertices.length>=3){const o=vertextoStlString(t.vertices[0]);for(let r=0;r<t.vertices.length-2;r++){const n=`facet normal ${vector3DtoStlString(geometries.poly3.plane(t))}\nouter loop\n${o}\n${vertextoStlString(t.vertices[r+1])}\n${vertextoStlString(t.vertices[r+2])}\nendloop\nendfacet`;e.push(n)}}return e.join("\n")};module.exports={serializeText:serializeText};
513
513
 
514
- },{"@jscad/modeling":215}],85:[function(require,module,exports){
514
+ },{"@jscad/modeling":212}],85:[function(require,module,exports){
515
515
  const{geometries:geometries}=require("@jscad/modeling"),serializeBinary=(e,r)=>{r.statusCallback&&r.statusCallback({progress:0});const t=new ArrayBuffer(4),s=new Int32Array(t,0,1),a=new Int8Array(t,0,4);if(s[0]=287454020,68!==a[0])throw new Error("Binary STL output is currently only supported on little-endian (Intel) processors");let n=0,o=0;e.forEach((e,r)=>{geometries.geom3.toPolygons(e).forEach(e=>{const r=e.vertices.length;n+=r>=3?r-2:0,o+=1})});const l=new Uint8Array(80);for(let e=0;e<80;e++)l[e]=65;const i=new Uint32Array(1);i[0]=n;const c=new ArrayBuffer(50*n),y=new Int8Array(c),f=new ArrayBuffer(50),u=new Int8Array(f),g=new Float32Array(f,0,12),w=new Uint16Array(f,48,1);let A=0;return e.forEach(e=>{geometries.geom3.toPolygons(e).forEach((e,t)=>{const s=e.vertices,a=s.length,n=geometries.poly3.plane(e);for(let e=0;e<a-2;e++){g[0]=n[0],g[1]=n[1],g[2]=n[2];let r=3;for(let t=0;t<3;t++){const a=s[t+(t>0?e:0)];g[r++]=a[0],g[r++]=a[1],g[r++]=a[2]}w[0]=0,y.set(u,A),A+=50}r.statusCallback&&r.statusCallback({progress:100*t/o})})}),r.statusCallback&&r.statusCallback({progress:100}),[l.buffer,i.buffer,c]};module.exports={serializeBinary:serializeBinary};
516
516
 
517
- },{"@jscad/modeling":215}],86:[function(require,module,exports){
517
+ },{"@jscad/modeling":212}],86:[function(require,module,exports){
518
518
  const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{serializeBinary:serializeBinary}=require("./CSGToStlb"),{serializeText:serializeText}=require("./CSGToStla"),mimeType="application/sla",serialize=(e,...i)=>{e=Object.assign({},{binary:!0,statusCallback:null},e);let r=(i=flatten(i)).filter(e=>geometries.geom3.isA(e));if(0===r.length)throw new Error("only 3D geometries can be serialized to STL");return i.length!==r.length&&console.warn("some objects could not be serialized to STL"),r=toArray(modifiers.generalize({snap:!0,triangulate:!0},r)),e.binary?serializeBinary(r,e):serializeText(r,e)};module.exports={mimeType:mimeType,serialize:serialize};
519
519
 
520
- },{"./CSGToStla":84,"./CSGToStlb":85,"@jscad/array-utils":529,"@jscad/modeling":215}],87:[function(require,module,exports){
520
+ },{"./CSGToStla":84,"./CSGToStlb":85,"@jscad/array-utils":525,"@jscad/modeling":212}],87:[function(require,module,exports){
521
521
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="\t\n\r -퟿-�𐀀-􏿿",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=SPACE&&e<=55295||e===NL||e===CR||e===TAB||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar;
522
522
 
523
523
  },{}],88:[function(require,module,exports){
@@ -532,7 +532,7 @@ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{fla
532
532
  },{"xmlchars/xml/1.0/ed5":87,"xmlchars/xml/1.1/ed2":88,"xmlchars/xmlns/1.0/ed3":89}],91:[function(require,module,exports){
533
533
  module.exports={
534
534
  "name": "@jscad/svg-deserializer",
535
- "version": "2.5.5",
535
+ "version": "2.5.3",
536
536
  "description": "SVG Deserializer for JSCAD",
537
537
  "homepage": "https://openjscad.xyz/",
538
538
  "repository": "https://github.com/jscad/OpenJSCAD.org",
@@ -565,7 +565,7 @@ module.exports={
565
565
  "license": "MIT",
566
566
  "dependencies": {
567
567
  "@jscad/array-utils": "2.1.4",
568
- "@jscad/modeling": "2.11.1",
568
+ "@jscad/modeling": "2.10.0",
569
569
  "saxes": "5.0.1"
570
570
  },
571
571
  "devDependencies": {
@@ -579,16 +579,16 @@ module.exports={
579
579
  const pxPmm=1/.2822222,inchMM=.03937,ptMM=1/(1/.03937/72),pcMM=.23622,cssPxUnit=.2822222,svgColors={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};module.exports={pxPmm:pxPmm,inchMM:.03937,ptMM:ptMM,pcMM:pcMM,cssPxUnit:.2822222,svgColors:svgColors};
580
580
 
581
581
  },{}],93:[function(require,module,exports){
582
- const{inchMM:inchMM,ptMM:ptMM,pcMM:pcMM,svgColors:svgColors}=require("./constants"),svg2cag=(e,s)=>[e[0]/s[0],0-e[1]/s[1]],cagLengthX=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[0]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[0],Math.round(1e5*t)/1e5)},cagLengthY=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[1]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[1],Math.round(1e5*t)/1e5)},cagLengthP=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[1]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[0])},css2cag=(e,s)=>{let r=parseFloat(e);return isNaN(r)?0:0===r?r:(e.search(/EM/i)>0||e.search(/EX/i)>0||e.search(/MM/i)>0||(e.search(/CM/i)>0?r*=10:e.search(/IN/i)>0?r/=inchMM:e.search(/PT/i)>0?r/=ptMM:e.search(/PC/i)>0?r/=pcMM:r/=s),r)},cagColor=e=>{let s;if((e=e.toLowerCase())in svgColors)s=[(s=svgColors[e])[0]/255,s[1]/255,s[2]/255];else if("#"===e[0])4===e.length&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]),7===e.length&&(s=[parseInt("0x"+e.slice(1,3))/255,parseInt("0x"+e.slice(3,5))/255,parseInt("0x"+e.slice(5,7))/255]);else{let r=/rgb\(.+,.+,.+\)/.exec(e);null!==r&&(s=(r=(r=r[0]).slice(r.indexOf("(")+1,r.indexOf(")"))).split(","),s=r.indexOf("%")>0?[(s=[parseInt(s[0]),parseInt(s[1]),parseInt(s[2])])[0]/100,s[1]/100,s[2]/100]:[(s=[parseInt(s[0]),parseInt(s[1]),parseInt(s[2])])[0]/255,s[1]/255,s[2]/255])}return s},cssStyle=(e,s)=>{if("style"in e){const r=e.style+";";let t=new RegExp(s+"\\s*:\\s*(\\S+);","i").exec(r);if(null!==t){let e=(t=t[0]).indexOf(":")+1;for(;" "===t[e];)e++;return t=t.slice(e,t.indexOf(";"))}}},reflect=(e,s,r,t)=>{const l=e-r,a=s-t;return e===r&&s===r?[e,s]:e===r?[e,t+-a]:s===t?[r+-l,s]:[r+-l,t+-a]},groupValue=(e,s)=>{let r=e.length;for(;r>0;){const t=e[r-1];if(s in t)return t[s];r--}},svgColorForTarget=(e,s)=>{let r=null;return"path"===e?s.stroke?r=[s.stroke[0],s.stroke[1],s.stroke[2],1]:s.fill&&(r=[s.fill[0],s.fill[1],s.fill[2],1]):s.fill?r=[s.fill[0],s.fill[1],s.fill[2],1]:s.stroke&&(r=[s.stroke[0],s.stroke[1],s.stroke[2],1]),r};module.exports={svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,css2cag:css2cag,cagColor:cagColor,cssStyle:cssStyle,reflect:reflect,groupValue:groupValue,svgColorForTarget:svgColorForTarget};
582
+ const{inchMM:inchMM,ptMM:ptMM,pcMM:pcMM,svgColors:svgColors}=require("./constants"),svg2cagX=(e,s)=>e/s[0],svg2cagY=(e,s)=>0-e/s[1],cagLengthX=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[0]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[0],Math.round(1e5*t)/1e5)},cagLengthY=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[1]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[1],Math.round(1e5*t)/1e5)},cagLengthP=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[1]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[0])},css2cag=(e,s)=>{let r=parseFloat(e);return isNaN(r)?0:0===r?r:(e.search(/EM/i)>0||e.search(/EX/i)>0||e.search(/MM/i)>0||(e.search(/CM/i)>0?r*=10:e.search(/IN/i)>0?r/=inchMM:e.search(/PT/i)>0?r/=ptMM:e.search(/PC/i)>0?r/=pcMM:r/=s),r)},cagColor=e=>{let s;if((e=e.toLowerCase())in svgColors)s=[(s=svgColors[e])[0]/255,s[1]/255,s[2]/255];else if("#"===e[0])4===e.length&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]),7===e.length&&(s=[parseInt("0x"+e.slice(1,3))/255,parseInt("0x"+e.slice(3,5))/255,parseInt("0x"+e.slice(5,7))/255]);else{let r=/rgb\(.+,.+,.+\)/.exec(e);null!==r&&(s=(r=(r=r[0]).slice(r.indexOf("(")+1,r.indexOf(")"))).split(","),s=r.indexOf("%")>0?[(s=[parseInt(s[0]),parseInt(s[1]),parseInt(s[2])])[0]/100,s[1]/100,s[2]/100]:[(s=[parseInt(s[0]),parseInt(s[1]),parseInt(s[2])])[0]/255,s[1]/255,s[2]/255])}return s},cssStyle=(e,s)=>{if("style"in e){const r=e.style+";";let t=new RegExp(s+"\\s*:\\s*(\\S+);","i").exec(r);if(null!==t){let e=(t=t[0]).indexOf(":")+1;for(;" "===t[e];)e++;return t=t.slice(e,t.indexOf(";"))}}},reflect=(e,s,r,t)=>{const l=e-r,a=s-t;return e===r&&s===r?[e,s]:e===r?[e,t+-a]:s===t?[r+-l,s]:[r+-l,t+-a]},groupValue=(e,s)=>{let r=e.length;for(;r>0;){const t=e[r-1];if(s in t)return t[s];r--}},svgColorForTarget=(e,s)=>{let r=null;return"path"===e?s.stroke?r=[s.stroke[0],s.stroke[1],s.stroke[2],1]:s.fill&&(r=[s.fill[0],s.fill[1],s.fill[2],1]):s.fill?r=[s.fill[0],s.fill[1],s.fill[2],1]:s.stroke&&(r=[s.stroke[0],s.stroke[1],s.stroke[2],1]),r};module.exports={svg2cagX:svg2cagX,svg2cagY:svg2cagY,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,css2cag:css2cag,cagColor:cagColor,cssStyle:cssStyle,reflect:reflect,groupValue:groupValue,svgColorForTarget:svgColorForTarget};
583
583
 
584
584
  },{"./constants":92}],94:[function(require,module,exports){
585
585
  const saxes=require("saxes"),{colors:colors,transforms:transforms}=require("@jscad/modeling"),{toArray:toArray}=require("@jscad/array-utils"),version=require("../package.json").version,{cagLengthX:cagLengthX,cagLengthY:cagLengthY,svgColorForTarget:svgColorForTarget}=require("./helpers"),{svgSvg:svgSvg,svgRect:svgRect,svgCircle:svgCircle,svgGroup:svgGroup,svgLine:svgLine,svgPath:svgPath,svgEllipse:svgEllipse,svgPolygon:svgPolygon,svgPolyline:svgPolyline,svgUse:svgUse}=require("./svgElementHelpers"),shapesMapGeometry=require("./shapesMapGeometry"),shapesMapJscad=require("./shapesMapJscad"),deserialize=(s,e)=>{const t={addMetaData:!0,filename:"svg",output:"script",pxPmm:require("./constants").pxPmm,segments:32,target:"path",pathSelfClosed:"error",version:version};return"script"===(s=Object.assign({},t,s)).output?translate(e,s):instantiate(e,s)},instantiate=(s,e)=>{const{pxPmm:t}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,t),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");e&&e.statusCallback&&e.statusCallback({progress:50});const n=objectify(e,svgObj);return e&&e.statusCallback&&e.statusCallback({progress:100}),n},translate=(s,e)=>{const{filename:t,version:n,pxPmm:r,addMetaData:o}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,r),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");let a=o?`//\n // producer: JSCAD SVG Deserializer ${n}\n // date: ${new Date}\n // source: ${t}\n //\n`:"";return a+="const { colors, geometries, primitives, transforms } = require('@jscad/modeling')\n\n",e&&e.statusCallback&&e.statusCallback({progress:50}),a+=codify(e,svgObj),a+="\nmodule.exports = { main }",e&&e.statusCallback&&e.statusCallback({progress:100}),a};let svgUnitsX,svgUnitsY,svgUnitsV;const svgObjects=[],svgGroups=[],svgDefs=[];let svgObj,svgInDefs=!1,svgUnitsPmm=[1,1];const objectify=(s,e)=>{const{target:t,segments:n,pathSelfClosed:r}=s,o=svgGroups.length;svgGroups.push(e);let a=o;for(;a>0;)a--;let g=[];const l={svgUnitsPmm:svgUnitsPmm,svgUnitsX:svgUnitsX,svgUnitsY:svgUnitsY,svgUnitsV:svgUnitsV,level:o,target:t,svgGroups:svgGroups,segments:n,pathSelfClosed:r};for(a=0;a<e.objects.length;a++){const s=e.objects[a];let n=toArray(shapesMapGeometry(s,objectify,l));n=n.map(e=>{if("transforms"in s){let t=null,n=null,r=null;for(let e=0;e<s.transforms.length;e++){const o=s.transforms[e];"rotate"in o&&(t=o),"scale"in o&&(n=o),"translate"in o&&(r=o)}if(null!==n){let s=Math.abs(n.scale[0]),t=Math.abs(n.scale[1]);e=transforms.scale([s,t,1],e),s=n.scale[0],t=n.scale[1],s<0&&(e=transforms.mirrorX(e)),t<0&&(e=transforms.mirrorY(e))}if(null!==t){const s=0-.017453292519943295*t.rotate;e=transforms.rotateZ(s,e)}if(null!==r){const s=cagLengthX(r.translate[0],svgUnitsPmm,svgUnitsX),t=0-cagLengthY(r.translate[1],svgUnitsPmm,svgUnitsY);e=transforms.translate([s,t,0],e)}}const n=svgColorForTarget(t,s);return n&&(e=colors.colorize(n,e)),e}),g=g.concat(n)}return svgGroups.pop(),g},codify=(s,e)=>{const{target:t,segments:n}=s,r=svgGroups.length;svgGroups.push(e);let o=" ",a=r;for(;a>0;)o+=" ",a--;let g="";0===r&&(g+="function main(params) {\n let levels = {}\n let paths = {}\n let parts\n");const l="levels.l"+r;for(g+=`${o}${l} = []\n`,a=0;a<e.objects.length;a++){const s=e.objects[a],i="paths.p"+a;if(g+=shapesMapJscad(s,codify,{level:r,indent:o,ln:l,on:i,svgUnitsPmm:svgUnitsPmm,svgUnitsX:svgUnitsX,svgUnitsY:svgUnitsY,svgUnitsV:svgUnitsV,svgGroups:svgGroups,target:t,segments:n}),"transforms"in s){let e=null,t=null,n=null;for(let r=0;r<s.transforms.length;r++){const o=s.transforms[r];"rotate"in o&&(e=o),"scale"in o&&(t=o),"translate"in o&&(n=o)}if(null!==t){let s=Math.abs(t.scale[0]),e=Math.abs(t.scale[1]);g+=`${o}${i} = transforms.scale([${s}, ${e}, 1], ${i})\n`,(s=t.scale[0])<0&&(g+=`${o}${i} = transforms.mirrorX(${i})\n`),(e=t.scale[1])<0&&(g+=`${o}${i} = transforms.mirrorY(${i})\n`)}if(null!==e){g+=`${o}${i} = transforms.rotateZ(${0-.017453292519943295*e.rotate}, ${i})\n`}if(null!==n){g+=`${o}${i} = transforms.translate([${cagLengthX(n.translate[0],svgUnitsPmm,svgUnitsX)}, ${0-cagLengthY(n.translate[1],svgUnitsPmm,svgUnitsY)}, 0], ${i})\n`}}const v=svgColorForTarget(t,s);v&&(g+=`${o}${i} = colors.colorize([${v}], ${i})\n`),g+=`${o}${l} = ${l}.concat(${i})\n\n`}return 0===r&&(g+=o+"return "+l+"\n",g+="}\n"),svgGroups.pop(),g},createSvgParser=(s,e)=>{const t=new saxes.SaxesParser;return void 0!==e&&e>t.pxPmm&&(t.pxPmm=e),t.on("error",s=>{console.log(`ERROR: SVG file, line ${t.line}, column ${t.column}`),console.log(s)}),t.on("opentag",s=>{const n={SVG:svgSvg,G:svgGroup,RECT:svgRect,CIRCLE:svgCircle,ELLIPSE:svgEllipse,LINE:svgLine,POLYLINE:svgPolyline,POLYGON:svgPolygon,PATH:svgPath,USE:svgUse,DEFS:()=>{svgInDefs=!0},DESC:()=>void 0,TITLE:()=>void 0,STYLE:()=>void 0,undefined:()=>console.log("WARNING: unsupported SVG element: "+s.name)};s.attributes.position=[t.line+1,t.column+1];const r=s.name.toUpperCase(),o=n[r]?n[r](s.attributes,{svgObjects:svgObjects,customPxPmm:e}):void 0;if(o)if("id"in o&&(svgObjects[o.id]=o),"svg"===o.type)svgGroups.push(o),svgUnitsPmm=o.unitsPmm,svgUnitsX=o.viewW,svgUnitsY=o.viewH,svgUnitsV=o.viewP;else if(!0===svgInDefs){if(svgDefs.length>0){const s=svgDefs.pop();"objects"in s&&s.objects.push(o),svgDefs.push(s)}"group"===o.type&&svgDefs.push(o)}else{if(svgGroups.length>0){const s=svgGroups.pop();"objects"in s&&s.objects.push(o),svgGroups.push(s)}"group"===o.type&&svgGroups.push(o)}}),t.on("closetag",s=>{const e=()=>!0===svgInDefs?svgDefs.pop():svgGroups.pop(),t={SVG:e,DEFS:()=>{svgInDefs=!1},USE:e,G:e,undefined:()=>{}},n=s.name.toUpperCase(),r=t[n]?t[n]():void 0;0===svgGroups.length&&(svgObj=r)}),t.on("end",()=>{}),t.write(s).close(),t},extension="svg";module.exports={deserialize:deserialize,extension:"svg"};
586
586
 
587
- },{"../package.json":91,"./constants":92,"./helpers":93,"./shapesMapGeometry":95,"./shapesMapJscad":96,"./svgElementHelpers":97,"@jscad/array-utils":529,"@jscad/modeling":215,"saxes":90}],95:[function(require,module,exports){
588
- const{geometries:geometries,primitives:primitives}=require("@jscad/modeling"),{svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,reflect:reflect}=require("./helpers"),shapesMapGeometry=(e,t,s)=>{const{svgUnitsPmm:a,svgUnitsX:o,svgUnitsY:r,svgUnitsV:n,svgGroups:g,target:c,segments:p,pathSelfClosed:i}=s;return{group:e=>t({target:c,segments:p},e),rect:(e,t,s,a,o,r,n)=>{let g=cagLengthX(e.x,t,s),p=0-cagLengthY(e.y,t,a);const i=cagLengthX(e.width,t,s),l=cagLengthY(e.height,t,a),h=cagLengthX(e.rx,t,s);let m;return i>0&&l>0&&(g+=i/2,p-=l/2,m=0===h?primitives.rectangle({center:[g,p],size:[i,l]}):primitives.roundedRectangle({center:[g,p],segments:n,size:[i,l],roundRadius:h}),"path"===c&&(m=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(m)))),m},circle:(e,t,s,a,o,r,n)=>{const g=cagLengthX(e.x,t,s),p=0-cagLengthY(e.y,t,a),i=cagLengthP(e.radius,t,o);let l;return i>0&&(l=primitives.circle({center:[g,p],segments:n,radius:i}),"path"===c&&(l=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(l)))),l},ellipse:(e,t,s,a,o,r,n)=>{const g=cagLengthX(e.rx,t,s),p=cagLengthY(e.ry,t,a),i=cagLengthX(e.cx,t,s),l=0-cagLengthY(e.cy,t,a);let h;return g>0&&p>0&&(h=primitives.ellipse({center:[i,l],segments:n,radius:[g,p]}),"path"===c&&(h=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(h)))),h},line:(e,t,s,a,o)=>{const r=cagLengthX(e.x1,t,s),n=0-cagLengthY(e.y1,t,a),g=cagLengthX(e.x2,t,s),c=0-cagLengthY(e.y2,t,a);return primitives.line([[r,n],[g,c]])},polygon:(e,t,s,a)=>{const o=[];for(let r=0;r<e.points.length;r++){const n=e.points[r];if("x"in n&&"y"in n){const e=cagLengthX(n.x,t,s),r=0-cagLengthY(n.y,t,a);o.push([e,r])}}return"geom2"===c?geometries.geom2.fromPoints(o):geometries.path2.fromPoints({},o)},polyline:(e,t,s,a,o)=>{const r=[];for(let o=0;o<e.points.length;o++){const n=e.points[o];if("x"in n&&"y"in n){const e=cagLengthX(n.x,t,s),o=0-cagLengthY(n.y,t,a);r.push([e,o])}}return primitives.line(r)},path:(e,t,s,a,o,r,n)=>{const g=expandPath(e,t,s,a,o,r,n,i);return Object.entries(g).sort((e,t)=>e[0].localeCompare(t[0])).map(e=>{const t=e[1];if("geom2"===c&&t.isClosed){const e=geometries.path2.toPoints(t).slice();return e.push(e[0]),geometries.geom2.fromPoints(e)}return t})}}[e.type](e,a,o,r,n,g,p)};module.exports=shapesMapGeometry;const appendPoints=(e,t)=>t?geometries.path2.appendPoints(e,t):geometries.path2.fromPoints({},e),expandPath=(e,t,s,a,o,r,n,g)=>{const c={};let p=0,i=0,l=0,h=0,m=0,F="path"+m,v=!1,d=0,f=0,P=0,u=0;const L=()=>{F="path"+ ++m,v=!1},k=()=>{c[F]||(c[F]=geometries.path2.fromPoints({},[]))};for(let s=0;s<e.commands.length;s++){const a=e.commands[s],o=a.p;let r=0;switch(a.c){case"m":for(0===s&&(l=0,h=0),o.length>=r+2&&(l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),L(),c[F]=appendPoints([svg2cag([l,h],t)]),p=l,i=h);o.length>=r+2;)l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"M":for(o.length>=r+2&&(l=parseFloat(o[r++]),h=parseFloat(o[r++]),L(),c[F]=appendPoints([svg2cag([l,h],t)]),p=l,i=h);o.length>=r+2;)l=parseFloat(o[r++]),h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"a":for(;o.length>=r+7;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]),a=0-.017453292519943295*parseFloat(o[r++]),g="1"===o[r++],p="1"===o[r++];l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendArc({segments:n,endpoint:svg2cag([l,h],t),radius:svg2cag([e,s],t),xaxisrotation:a,clockwise:p,large:g},c[F])}break;case"A":for(;o.length>=r+7;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]),a=0-.017453292519943295*parseFloat(o[r++]),g="1"===o[r++],p="1"===o[r++];l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendArc({segments:n,endpoint:svg2cag([l,h],t),radius:svg2cag([e,s],t),xaxisrotation:a,clockwise:p,large:g},c[F])}break;case"c":for(;o.length>=r+6;){const e=l+parseFloat(o[r++]),s=h+parseFloat(o[r++]);d=l+parseFloat(o[r++]),f=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"C":for(;o.length>=r+6;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]);d=parseFloat(o[r++]),f=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"q":for(;o.length>=r+4;){const e=[l,h];P=l+parseFloat(o[r++]),u=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"Q":for(;o.length>=r+4;){const e=[l,h];P=parseFloat(o[r++]),u=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"t":for(;o.length>=r+2;){const e=[l,h];l+=parseFloat(o[r++]),h+=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"T":for(;o.length>=r+2;){const e=[l,h];l=parseFloat(o[r++]),h=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"s":for(;o.length>=r+4;){const e=d,s=f;d=l+parseFloat(o[r++]),f=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"S":for(;o.length>=r+4;){const e=d,s=f;d=parseFloat(o[r++]),f=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"h":for(;o.length>=r+1;)l+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"H":for(;o.length>=r+1;)l=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"l":for(;o.length>=r+2;)l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"L":for(;o.length>=r+2;)l=parseFloat(o[r++]),h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"v":for(;o.length>=r+1;)h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"V":for(;o.length>=r+1;)h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"z":case"Z":c[F]=geometries.path2.close(c[F]),l=p,h=i,v=!0;break;default:console.log("Warning: Unknow PATH command ["+a.c+"]")}const m=e=>"z"===e||"Z"===e;if(!0!==v&&c[F]&&c[F].isClosed){let t=e.commands[s+1];if(t&&!m(t.c))if("trim"===g)for(;t&&!m(t.c);)s++,t=e.commands[s+1];else{if("split"!==g)throw new Error(`Malformed svg path at ${e.position[0]}:${a.pos}. Path closed itself with command #${s} ${a.c}${o.join(" ")}`);L()}}}return c};
587
+ },{"../package.json":91,"./constants":92,"./helpers":93,"./shapesMapGeometry":95,"./shapesMapJscad":96,"./svgElementHelpers":97,"@jscad/array-utils":525,"@jscad/modeling":212,"saxes":90}],95:[function(require,module,exports){
588
+ const{geometries:geometries,primitives:primitives}=require("@jscad/modeling"),{svg2cagX:svg2cagX,svg2cagY:svg2cagY,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,reflect:reflect}=require("./helpers"),shapesMapGeometry=(e,s,a)=>{const{svgUnitsPmm:t,svgUnitsX:g,svgUnitsY:o,svgUnitsV:r,svgGroups:n,target:c,segments:p,pathSelfClosed:i}=a;return{group:e=>s({target:c,segments:p},e),rect:(e,s,a,t,g,o,r)=>{let n=cagLengthX(e.x,s,a),p=0-cagLengthY(e.y,s,t);const i=cagLengthX(e.width,s,a),l=cagLengthY(e.height,s,t),v=cagLengthX(e.rx,s,a);let h;return i>0&&l>0&&(n+=i/2,p-=l/2,h=0===v?primitives.rectangle({center:[n,p],size:[i,l]}):primitives.roundedRectangle({center:[n,p],segments:r,size:[i,l],roundRadius:v}),"path"===c&&(h=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(h)))),h},circle:(e,s,a,t,g,o,r)=>{const n=cagLengthX(e.x,s,a),p=0-cagLengthY(e.y,s,t),i=cagLengthP(e.radius,s,g);let l;return i>0&&(l=primitives.circle({center:[n,p],segments:r,radius:i}),"path"===c&&(l=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(l)))),l},ellipse:(e,s,a,t,g,o,r)=>{const n=cagLengthX(e.rx,s,a),p=cagLengthY(e.ry,s,t),i=cagLengthX(e.cx,s,a),l=0-cagLengthY(e.cy,s,t);let v;return n>0&&p>0&&(v=primitives.ellipse({center:[i,l],segments:r,radius:[n,p]}),"path"===c&&(v=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(v)))),v},line:(e,s,a,t,g)=>{const o=cagLengthX(e.x1,s,a),r=0-cagLengthY(e.y1,s,t),n=cagLengthX(e.x2,s,a),c=0-cagLengthY(e.y2,s,t);return primitives.line([[o,r],[n,c]])},polygon:(e,s,a,t)=>{const g=[];for(let o=0;o<e.points.length;o++){const r=e.points[o];if("x"in r&&"y"in r){const e=cagLengthX(r.x,s,a),o=0-cagLengthY(r.y,s,t);g.push([e,o])}}return"geom2"===c?geometries.geom2.fromPoints(g):geometries.path2.fromPoints({},g)},polyline:(e,s,a,t,g)=>{const o=[];for(let g=0;g<e.points.length;g++){const r=e.points[g];if("x"in r&&"y"in r){const e=cagLengthX(r.x,s,a),g=0-cagLengthY(r.y,s,t);o.push([e,g])}}return primitives.line(o)},path:(e,s,a,t,g,o,r)=>{const n=expandPath(e,s,a,t,g,o,r,i);return Object.entries(n).sort((e,s)=>e[0].localeCompare(s[0])).map(e=>{const s=e[1];if("geom2"===c&&s.isClosed){const e=geometries.path2.toPoints(s).slice();return e.push(e[0]),geometries.geom2.fromPoints(e)}return s})}}[e.type](e,t,g,o,r,n,p)};module.exports=shapesMapGeometry;const appendPoints=(e,s)=>s?geometries.path2.appendPoints(e,s):geometries.path2.fromPoints({},e),expandPath=(e,s,a,t,g,o,r,n)=>{const c={};let p=0,i=0,l=0,v=0,h=0,m="path"+h,F=!1,d=0,X=0,f=0,Y=0;const P=()=>{m="path"+ ++h,F=!1},u=()=>{c[m]||(c[m]=geometries.path2.fromPoints({},[]))};for(let a=0;a<e.commands.length;a++){const t=e.commands[a],g=t.p;let o=0;switch(t.c){case"m":for(0===a&&(l=0,v=0),g.length>=o+2&&(l+=parseFloat(g[o++]),v+=parseFloat(g[o++]),P(),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]]),p=l,i=v);g.length>=o+2;)l+=parseFloat(g[o++]),v+=parseFloat(g[o++]),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]],c[m]);break;case"M":for(g.length>=o+2&&(l=parseFloat(g[o++]),v=parseFloat(g[o++]),P(),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]]),p=l,i=v);g.length>=o+2;)l=parseFloat(g[o++]),v=parseFloat(g[o++]),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]],c[m]);break;case"a":for(;g.length>=o+7;){const e=parseFloat(g[o++]),a=parseFloat(g[o++]),t=0-.017453292519943295*parseFloat(g[o++]),n="1"===g[o++],p="1"===g[o++];l+=parseFloat(g[o++]),v+=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendArc({segments:r,endpoint:[svg2cagX(l,s),svg2cagY(v,s)],radius:[svg2cagX(e,s),svg2cagY(a,s)],xaxisrotation:t,clockwise:p,large:n},c[m])}break;case"A":for(;g.length>=o+7;){const e=parseFloat(g[o++]),a=parseFloat(g[o++]),t=0-.017453292519943295*parseFloat(g[o++]),n="1"===g[o++],p="1"===g[o++];l=parseFloat(g[o++]),v=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendArc({segments:r,endpoint:[svg2cagX(l,s),svg2cagY(v,s)],radius:[svg2cagX(e,s),svg2cagY(a,s)],xaxisrotation:t,clockwise:p,large:n},c[m])}break;case"c":for(;g.length>=o+6;){const e=l+parseFloat(g[o++]),a=v+parseFloat(g[o++]);d=l+parseFloat(g[o++]),X=v+parseFloat(g[o++]),l+=parseFloat(g[o++]),v+=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendBezier({segments:r,controlPoints:[[svg2cagX(e,s),svg2cagY(a,s)],[svg2cagX(d,s),svg2cagY(X,s)],[svg2cagX(l,s),svg2cagY(v,s)]]},c[m]);const t=reflect(d,X,l,v);d=t[0],X=t[1]}break;case"C":for(;g.length>=o+6;){const e=parseFloat(g[o++]),a=parseFloat(g[o++]);d=parseFloat(g[o++]),X=parseFloat(g[o++]),l=parseFloat(g[o++]),v=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendBezier({segments:r,controlPoints:[[svg2cagX(e,s),svg2cagY(a,s)],[svg2cagX(d,s),svg2cagY(X,s)],[svg2cagX(l,s),svg2cagY(v,s)]]},c[m]);const t=reflect(d,X,l,v);d=t[0],X=t[1]}break;case"q":for(;g.length>=o+4;){f=l+parseFloat(g[o++]),Y=v+parseFloat(g[o++]),l+=parseFloat(g[o++]),v+=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendBezier({segments:r,controlPoints:[[svg2cagX(f,s),svg2cagY(Y,s)],[svg2cagX(f,s),svg2cagY(Y,s)],[svg2cagX(l,s),svg2cagY(v,s)]]},c[m]);const e=reflect(f,Y,l,v);f=e[0],Y=e[1]}break;case"Q":for(;g.length>=o+4;){f=parseFloat(g[o++]),Y=parseFloat(g[o++]),l=parseFloat(g[o++]),v=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendBezier({segments:r,controlPoints:[[svg2cagX(f,s),svg2cagY(Y,s)],[svg2cagX(f,s),svg2cagY(Y,s)],[svg2cagX(l,s),svg2cagY(v,s)]]},c[m]);const e=reflect(f,Y,l,v);f=e[0],Y=e[1]}break;case"t":for(;g.length>=o+2;){l+=parseFloat(g[o++]),v+=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendBezier({segments:r,controlPoints:[[svg2cagX(f,s),svg2cagY(Y,s)],[svg2cagX(f,s),svg2cagY(Y,s)],[l,v]]},c[m]);const e=reflect(f,Y,l,v);f=e[0],Y=e[1]}break;case"T":for(;g.length>=o+2;){l=parseFloat(g[o++]),v=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendBezier({segments:r,controlPoints:[[svg2cagX(f,s),svg2cagY(Y,s)],[svg2cagX(f,s),svg2cagY(Y,s)],[svg2cagX(l,s),svg2cagY(v,s)]]},c[m]);const e=reflect(f,Y,l,v);f=e[0],Y=e[1]}break;case"s":for(;g.length>=o+4;){const e=d,a=X;d=l+parseFloat(g[o++]),X=v+parseFloat(g[o++]),l+=parseFloat(g[o++]),v+=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendBezier({segments:r,controlPoints:[[svg2cagX(e,s),svg2cagY(a,s)],[svg2cagX(d,s),svg2cagY(X,s)],[svg2cagX(l,s),svg2cagY(v,s)]]},c[m]);const t=reflect(d,X,l,v);d=t[0],X=t[1]}break;case"S":for(;g.length>=o+4;){const e=d,a=X;d=parseFloat(g[o++]),X=parseFloat(g[o++]),l=parseFloat(g[o++]),v=parseFloat(g[o++]),u(),c[m]=geometries.path2.appendBezier({segments:r,controlPoints:[[svg2cagX(e,s),svg2cagY(a,s)],[svg2cagX(d,s),svg2cagY(X,s)],[svg2cagX(l,s),svg2cagY(v,s)]]},c[m]);const t=reflect(d,X,l,v);d=t[0],X=t[1]}break;case"h":for(;g.length>=o+1;)l+=parseFloat(g[o++]),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]],c[m]);break;case"H":for(;g.length>=o+1;)l=parseFloat(g[o++]),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]],c[m]);break;case"l":for(;g.length>=o+2;)l+=parseFloat(g[o++]),v+=parseFloat(g[o++]),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]],c[m]);break;case"L":for(;g.length>=o+2;)l=parseFloat(g[o++]),v=parseFloat(g[o++]),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]],c[m]);break;case"v":for(;g.length>=o+1;)v+=parseFloat(g[o++]),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]],c[m]);break;case"V":for(;g.length>=o+1;)v=parseFloat(g[o++]),c[m]=appendPoints([[svg2cagX(l,s),svg2cagY(v,s)]],c[m]);break;case"z":case"Z":c[m]=geometries.path2.close(c[m]),l=p,v=i,F=!0;break;default:console.log("Warning: Unknow PATH command ["+t.c+"]")}const h=e=>"z"===e||"Z"===e;if(!0!==F&&c[m]&&c[m].isClosed){let s=e.commands[a+1];if(s&&!h(s.c))if("trim"===n)for(;s&&!h(s.c);)a++,s=e.commands[a+1];else{if("split"!==n)throw new Error(`Malformed svg path at ${e.position[0]}:${t.pos}. Path closed itself with command #${a} ${t.c}${g.join(" ")}`);P()}}}return c};
589
589
 
590
- },{"./helpers":93,"@jscad/modeling":215}],96:[function(require,module,exports){
591
- const{svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,reflect:reflect}=require("./helpers"),shapesMap=(e,t,s)=>{const{level:a,indent:n,on:o,svgUnitsPmm:r,svgUnitsX:g,svgUnitsY:i,svgUnitsV:$,svgGroups:p,target:c,segments:h}=s;return{group:e=>{let s=t({target:c,segments:h},e);return s+=`${n}${o} = levels.l${a+1}\n`},rect:(e,t,s,a,r,g,i,$)=>{let p=cagLengthX(e.x,t,s),h=0-cagLengthY(e.y,t,a);const l=cagLengthX(e.width,t,s),f=cagLengthY(e.height,t,a),m=cagLengthX(e.rx,t,s);let F;return l>0&&f>0&&(p=(p+l/2).toFixed(4),h=(h-f/2).toFixed(4),F=0===m?`${n}${o} = primitives.rectangle({center: [${p}, ${h}], size: [${l}, ${f}]}) // line ${e.position}\n`:`${n}${o} = primitives.roundedRectangle({center: [${p}, ${h}], segments: ${$}, size: [${l}, ${f}], roundRadius: ${m}}) // line ${e.position}\n`,"path"===c&&(F+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),F},circle:(e,t,s,a,r,g,i,$)=>{const p=cagLengthX(e.x,t,s),h=0-cagLengthY(e.y,t,a),l=cagLengthP(e.radius,t,r);let f;return l>0&&(f=`${n}${o} = primitives.circle({center: [${p}, ${h}], segments: ${$}, radius: ${l}}) // line ${e.position}\n`,"path"===c&&(f+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),f},ellipse:(e,t,s,a,r,g,i,$)=>{const p=cagLengthX(e.rx,t,s),h=cagLengthY(e.ry,t,a),l=cagLengthX(e.cx,t,s),f=0-cagLengthY(e.cy,t,a);let m;return p>0&&h>0&&(m=`${n}${o} = primitives.ellipse({center: [${l}, ${f}], segments: ${$}, radius: [${p}, ${h}]}) // line ${e.position}\n`,"path"===c&&(m+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),m},line:(e,t,s,a,r)=>{const g=cagLengthX(e.x1,t,s),i=0-cagLengthY(e.y1,t,a),$=cagLengthX(e.x2,t,s),p=0-cagLengthY(e.y2,t,a);return`${n}${o} = primitives.line([[${g}, ${i}], [${$}, ${p}]]) // line ${e.position}\n`},polygon:(e,t,s,a)=>{let r=`${n}${o} = primitives.polygon({points: [\n`;for(let o=0;o<e.points.length;o++){const g=e.points[o];if("x"in g&&"y"in g){const e=cagLengthX(g.x,t,s),o=0-cagLengthY(g.y,t,a);r+=`${n} [${e}, ${o}],\n`}}return r+=`${n}]}) // line ${e.position}\n`,"path"===c&&(r+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`),r},polyline:(e,t,s,a,r)=>{let g=`${n}${o} = geometries.path2.fromPoints({}, [\n`;for(let o=0;o<e.points.length;o++){const r=e.points[o];if("x"in r&&"y"in r){const e=cagLengthX(r.x,t,s),o=0-cagLengthY(r.y,t,a);g+=`${n} [${e}, ${o}],\n`}}return g+=`${n}]) // line ${e.position}\n`},path:path}[e.type](e,r,g,i,$,s,p,h)};module.exports=shapesMap;const path=(e,t,s,a,n,o,r,g)=>{const{indent:i,on:$,target:p}=o;let c=`${i}parts = [] // line ${e.position}\n`,h=0,l=0,f=0,m=0,F=0,v=$+F,d=!1,P=0,u=0,L=0,k=0;for(let s=0;s<e.commands.length;s++){const a=e.commands[s],n=a.p;switch(a.c){case"m":for(0===s&&(f=0,m=0),F>0&&!1===d&&(c+=`${i}parts.push(${v})\n`),n.length>=2&&(f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),d=!1,c+=`${i}${v=$+ ++F} = geometries.path2.fromPoints({}, [[${svg2cag([f,m],t)}]])\n`,h=f,l=m);n.length>=2;)f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([${svg2cag([f,m],t)}], ${v})\n`;break;case"M":for(F>0&&!1===d&&(c+=`${i}parts.push(${v})\n`),n.length>=2&&(f=parseFloat(n.shift()),m=parseFloat(n.shift()),d=!1,c+=`${i}${v=$+ ++F} = geometries.path2.fromPoints({}, [[${svg2cag([f,m],t)}]])\n`,h=f,l=m);n.length>=2;)f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([${svg2cag([f,m],t)}], ${v})\n`;break;case"a":for(;n.length>=7;){const e=parseFloat(n.shift()),s=parseFloat(n.shift()),a=0-.017453292519943295*parseFloat(n.shift()),o="1"===n.shift(),r="1"===n.shift();f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendArc({segments: ${g}, endpoint: [${svg2cag([f,m],t)}], radius: [${svg2cag([e,s],t)}], xaxisrotation: ${a}, clockwise: ${r}, large: ${o}}, ${v})\n`}break;case"A":for(;n.length>=7;){const e=parseFloat(n.shift()),s=parseFloat(n.shift()),a=0-.017453292519943295*parseFloat(n.shift()),o="1"===n.shift(),r="1"===n.shift();f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendArc({segments: ${g}, endpoint: [${svg2cag([f,m],t)}], radius: [${svg2cag([e,s],t)}], xaxisrotation: ${a}, clockwise: ${r}, large: ${o}}, ${v})\n`}break;case"c":for(;n.length>=6;){const e=f+parseFloat(n.shift()),s=m+parseFloat(n.shift());P=f+parseFloat(n.shift()),u=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"C":for(;n.length>=6;){const e=parseFloat(n.shift()),s=parseFloat(n.shift());P=parseFloat(n.shift()),u=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"q":for(;n.length>=4;){const e=[f,m];L=f+parseFloat(n.shift()),k=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"Q":for(;n.length>=4;){const e=[f,m];L=parseFloat(n.shift()),k=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"t":for(;n.length>=2;){const e=[f,m];f+=parseFloat(n.shift()),m+=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"T":for(;n.length>=2;){const e=[f,m];f=parseFloat(n.shift()),m=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"s":for(;n.length>=4;){const e=P,s=u;P=f+parseFloat(n.shift()),u=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"S":for(;n.length>=4;){const e=P,s=u;P=parseFloat(n.shift()),u=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"h":for(;n.length>=1;)f+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"H":for(;n.length>=1;)f=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"l":for(;n.length>=2;)f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"L":for(;n.length>=2;)f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"v":for(;n.length>=1;)m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"V":for(;n.length>=1;)m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"z":case"Z":c+=`${i}${v} = geometries.path2.close(${v})\n`,"geom2"===p&&(c+=`${i}${v} = geometries.geom2.fromPoints(geometries.path2.toPoints(${v}))\n`),c+=`${i}parts.push(${v})\n`,f=h,m=l,d=!0;break;default:console.log("Warning: Unknow PATH command ["+a.c+"]")}}return F>0&&!1===d&&(c+=`${i}parts.push(${v})\n`),c+=`${i}${$} = parts\n`};
590
+ },{"./helpers":93,"@jscad/modeling":212}],96:[function(require,module,exports){
591
+ const{svg2cagX:svg2cagX,svg2cagY:svg2cagY,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,reflect:reflect}=require("./helpers"),shapesMap=(e,t,s)=>{const{level:a,indent:g,on:n,svgUnitsPmm:o,svgUnitsX:r,svgUnitsY:$,svgUnitsV:i,svgGroups:c,target:p,segments:h}=s;return{group:e=>{let s=t({target:p,segments:h},e);return s+=`${g}${n} = levels.l${a+1}\n`},rect:(e,t,s,a,o,r,$,i)=>{let c=cagLengthX(e.x,t,s),h=0-cagLengthY(e.y,t,a);const l=cagLengthX(e.width,t,s),f=cagLengthY(e.height,t,a),v=cagLengthX(e.rx,t,s);let m;return l>0&&f>0&&(c=(c+l/2).toFixed(4),h=(h-f/2).toFixed(4),m=0===v?`${g}${n} = primitives.rectangle({center: [${c}, ${h}], size: [${l}, ${f}]}) // line ${e.position}\n`:`${g}${n} = primitives.roundedRectangle({center: [${c}, ${h}], segments: ${i}, size: [${l}, ${f}], roundRadius: ${v}}) // line ${e.position}\n`,"path"===p&&(m+=`${g}${n} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${n}))\n`)),m},circle:(e,t,s,a,o,r,$,i)=>{const c=cagLengthX(e.x,t,s),h=0-cagLengthY(e.y,t,a),l=cagLengthP(e.radius,t,o);let f;return l>0&&(f=`${g}${n} = primitives.circle({center: [${c}, ${h}], segments: ${i}, radius: ${l}}) // line ${e.position}\n`,"path"===p&&(f+=`${g}${n} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${n}))\n`)),f},ellipse:(e,t,s,a,o,r,$,i)=>{const c=cagLengthX(e.rx,t,s),h=cagLengthY(e.ry,t,a),l=cagLengthX(e.cx,t,s),f=0-cagLengthY(e.cy,t,a);let v;return c>0&&h>0&&(v=`${g}${n} = primitives.ellipse({center: [${l}, ${f}], segments: ${i}, radius: [${c}, ${h}]}) // line ${e.position}\n`,"path"===p&&(v+=`${g}${n} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${n}))\n`)),v},line:(e,t,s,a,o)=>{const r=cagLengthX(e.x1,t,s),$=0-cagLengthY(e.y1,t,a),i=cagLengthX(e.x2,t,s),c=0-cagLengthY(e.y2,t,a);return`${g}${n} = primitives.line([[${r}, ${$}], [${i}, ${c}]]) // line ${e.position}\n`},polygon:(e,t,s,a)=>{let o=`${g}${n} = primitives.polygon({points: [\n`;for(let n=0;n<e.points.length;n++){const r=e.points[n];if("x"in r&&"y"in r){const e=cagLengthX(r.x,t,s),n=0-cagLengthY(r.y,t,a);o+=`${g} [${e}, ${n}],\n`}}return o+=`${g}]}) // line ${e.position}\n`,"path"===p&&(o+=`${g}${n} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${n}))\n`),o},polyline:(e,t,s,a,o)=>{let r=`${g}${n} = geometries.path2.fromPoints({}, [\n`;for(let n=0;n<e.points.length;n++){const o=e.points[n];if("x"in o&&"y"in o){const e=cagLengthX(o.x,t,s),n=0-cagLengthY(o.y,t,a);r+=`${g} [${e}, ${n}],\n`}}return r+=`${g}]) // line ${e.position}\n`},path:path}[e.type](e,o,r,$,i,s,c,h)};module.exports=shapesMap;const path=(e,t,s,a,g,n,o,r)=>{const{indent:$,on:i,target:c}=n;let p=`${$}parts = [] // line ${e.position}\n`,h=0,l=0,f=0,v=0,m=0,F=i+m,X=!1,Y=0,d=0,P=0,u=0;for(let s=0;s<e.commands.length;s++){const a=e.commands[s],g=a.p;switch(a.c){case"m":for(0===s&&(f=0,v=0),m>0&&!1===X&&(p+=`${$}parts.push(${F})\n`),g.length>=2&&(f+=parseFloat(g.shift()),v+=parseFloat(g.shift()),X=!1,p+=`${$}${F=i+ ++m} = geometries.path2.fromPoints({}, [[${svg2cagX(f,t)}, ${svg2cagY(v,t)}]])\n`,h=f,l=v);g.length>=2;)f+=parseFloat(g.shift()),v+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendPoints([${svg2cagX(f,t)}, ${svg2cagY(v,t)}], ${F})\n`;break;case"M":for(m>0&&!1===X&&(p+=`${$}parts.push(${F})\n`),g.length>=2&&(f=parseFloat(g.shift()),v=parseFloat(g.shift()),X=!1,p+=`${$}${F=i+ ++m} = geometries.path2.fromPoints({}, [[${svg2cagX(f,t)}, ${svg2cagY(v,t)}]])\n`,h=f,l=v);g.length>=2;)f=parseFloat(g.shift()),v=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendPoints([${svg2cagX(f,t)}, ${svg2cagY(v,t)}], ${F})\n`;break;case"a":for(;g.length>=7;){const e=parseFloat(g.shift()),s=parseFloat(g.shift()),a=0-.017453292519943295*parseFloat(g.shift()),n="1"===g.shift(),o="1"===g.shift();f+=parseFloat(g.shift()),v+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendArc({segments: ${r}, endpoint: [${svg2cagX(f,t)}, ${svg2cagY(v,t)}], radius: [${svg2cagX(e,t)}, ${svg2cagY(s,t)}], xaxisrotation: ${a}, clockwise: ${o}, large: ${n}}, ${F})\n`}break;case"A":for(;g.length>=7;){const e=parseFloat(g.shift()),s=parseFloat(g.shift()),a=0-.017453292519943295*parseFloat(g.shift()),n="1"===g.shift(),o="1"===g.shift();f=parseFloat(g.shift()),v=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendArc({segments: ${r}, endpoint: [${svg2cagX(f,t)}, ${svg2cagY(v,t)}], radius: [${svg2cagX(e,t)}, ${svg2cagY(s,t)}], xaxisrotation: ${a}, clockwise: ${o}, large: ${n}}, ${F})\n`}break;case"c":for(;g.length>=6;){const e=f+parseFloat(g.shift()),s=v+parseFloat(g.shift());Y=f+parseFloat(g.shift()),d=v+parseFloat(g.shift()),f+=parseFloat(g.shift()),v+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendBezier({segments: ${r}, controlPoints: [[${svg2cagX(e,t)}, ${svg2cagY(s,t)}], [${svg2cagX(Y,t)}, ${svg2cagY(d,t)}], [${svg2cagX(f,t)}, ${svg2cagY(v,t)}]]}, ${F})\n`;const a=reflect(Y,d,f,v);Y=a[0],d=a[1]}break;case"C":for(;g.length>=6;){const e=parseFloat(g.shift()),s=parseFloat(g.shift());Y=parseFloat(g.shift()),d=parseFloat(g.shift()),f=parseFloat(g.shift()),v=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendBezier({segments: ${r}, controlPoints: [[${svg2cagX(e,t)}, ${svg2cagY(s,t)}], [${svg2cagX(Y,t)}, ${svg2cagY(d,t)}], [${svg2cagX(f,t)}, ${svg2cagY(v,t)}]]}, ${F})\n`;const a=reflect(Y,d,f,v);Y=a[0],d=a[1]}break;case"q":for(;g.length>=4;){P=f+parseFloat(g.shift()),u=v+parseFloat(g.shift()),f+=parseFloat(g.shift()),v+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendBezier({segments: ${r}, controlPoints: [[${svg2cagX(P,t)}, ${svg2cagY(u,t)}], [${svg2cagX(f,t)}, ${svg2cagY(v,t)}]]}, ${F})\n`;const e=reflect(P,u,f,v);P=e[0],u=e[1]}break;case"Q":for(;g.length>=4;){P=parseFloat(g.shift()),u=parseFloat(g.shift()),f=parseFloat(g.shift()),v=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendBezier({segments: ${r}, controlPoints: [[${svg2cagX(P,t)}, ${svg2cagY(u,t)}], [${svg2cagX(f,t)}, ${svg2cagY(v,t)}]]}, ${F})\n`;const e=reflect(P,u,f,v);P=e[0],u=e[1]}break;case"t":for(;g.length>=2;){f+=parseFloat(g.shift()),v+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendBezier({segments: ${r}, controlPoints: [[${svg2cagX(P,t)}, ${svg2cagY(u,t)}], [${svg2cagX(f,t)}, ${svg2cagY(v,t)}]]}, ${F})\n`;const e=reflect(P,u,f,v);P=e[0],u=e[1]}break;case"T":for(;g.length>=2;){f=parseFloat(g.shift()),v=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendBezier({segments: ${r}, controlPoints: [[${svg2cagX(P,t)}, ${svg2cagY(u,t)}], [${svg2cagX(f,t)}, ${svg2cagY(v,t)}]]}, ${F})\n`;const e=reflect(P,u,f,v);P=e[0],u=e[1]}break;case"s":for(;g.length>=4;){const e=Y,s=d;Y=f+parseFloat(g.shift()),d=v+parseFloat(g.shift()),f+=parseFloat(g.shift()),v+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendBezier({segments: ${r}, controlPoints: [[${svg2cagX(e,t)}, ${svg2cagY(s,t)}], [${svg2cagX(Y,t)}, ${svg2cagY(d,t)}], [${svg2cagX(f,t)}, ${svg2cagY(v,t)}]]}, ${F})\n`;const a=reflect(Y,d,f,v);Y=a[0],d=a[1]}break;case"S":for(;g.length>=4;){const e=Y,s=d;Y=parseFloat(g.shift()),d=parseFloat(g.shift()),f=parseFloat(g.shift()),v=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendBezier({segments: ${r}, controlPoints: [[${svg2cagX(e,t)}, ${svg2cagY(s,t)}], [${svg2cagX(Y,t)}, ${svg2cagY(d,t)}], [${svg2cagX(f,t)}, ${svg2cagY(v,t)}]]}, ${F})\n`;const a=reflect(Y,d,f,v);Y=a[0],d=a[1]}break;case"h":for(;g.length>=1;)f+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendPoints([[${svg2cagX(f,t)}, ${svg2cagY(v,t)}]], ${F})\n`;break;case"H":for(;g.length>=1;)f=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendPoints([[${svg2cagX(f,t)}, ${svg2cagY(v,t)}]], ${F})\n`;break;case"l":for(;g.length>=2;)f+=parseFloat(g.shift()),v+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendPoints([[${svg2cagX(f,t)}, ${svg2cagY(v,t)}]], ${F})\n`;break;case"L":for(;g.length>=2;)f=parseFloat(g.shift()),v=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendPoints([[${svg2cagX(f,t)}, ${svg2cagY(v,t)}]], ${F})\n`;break;case"v":for(;g.length>=1;)v+=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendPoints([[${svg2cagX(f,t)}, ${svg2cagY(v,t)}]], ${F})\n`;break;case"V":for(;g.length>=1;)v=parseFloat(g.shift()),p+=`${$}${F} = geometries.path2.appendPoints([[${svg2cagX(f,t)}, ${svg2cagY(v,t)}]], ${F})\n`;break;case"z":case"Z":p+=`${$}${F} = geometries.path2.close(${F})\n`,"geom2"===c&&(p+=`${$}${F} = geometries.geom2.fromPoints(geometries.path2.toPoints(${F}))\n`),p+=`${$}parts.push(${F})\n`,f=h,v=l,X=!0;break;default:console.log("Warning: Unknow PATH command ["+a.c+"]")}}return m>0&&!1===X&&(p+=`${$}parts.push(${F})\n`),p+=`${$}${i} = parts\n`};
592
592
 
593
593
  },{"./helpers":93}],97:[function(require,module,exports){
594
594
  const{cagColor:cagColor,cssStyle:cssStyle,css2cag:css2cag}=require("./helpers"),{pxPmm:pxPmm}=require("./constants"),svgCore=(s,e)=>{"id"in e&&(s.id=e.id),"position"in e&&(s.position=e.position)},svgPresentation=(s,e)=>{if("display"in e&&(s.visible=e.display),"color"in e&&(s.fill=cagColor(e.color),s.stroke=s.fill),"opacity"in e&&(s.opacity=e.opacity),"fill"in e)s.fill=cagColor(e.fill);else{const t=cssStyle(e,"fill");t&&(s.fill=cagColor(t))}if("fill-opacity"in e&&(s.opacity=e["fill-opacity"]),"stroke-width"in e)s.strokeWidth=e["stroke-width"];else{const t=cssStyle(e,"stroke-width");t&&(s.strokeWidth=t)}if("stroke"in e)s.stroke=cagColor(e.stroke);else{const t=cssStyle(e,"stroke");t&&(s.stroke=cagColor(t))}"stroke-opacity"in e&&(s.strokeOpacity=e["stroke-opacity"])},svgTransformsRegExp=/\w+\(.+\)/i,svgTransforms=(s,e)=>{let t=null;if("transform"in e)t=e.transform;else{const s=cssStyle(e,"transform");s&&(t=s)}if(null!==t){s.transforms=[];let e=svgTransformsRegExp.exec(t);for(;null!==e;){const i=svgTransformsRegExp.lastIndex,n=t.indexOf(")")+1;let r=t.slice(i,n);const o=(r=r.trim()).slice(0,r.indexOf("("));let a,c=r.slice(r.indexOf("(")+1,r.indexOf(")")).trim();switch(c=c.indexOf(",")>0?c.split(","):c.split(" "),o){case"translate":1===c.length&&c.push(0),a={translate:[c[0],c[1]]},s.transforms.push(a);break;case"scale":1===c.length&&c.push(c[0]),a={scale:[c[0],c[1]]},s.transforms.push(a);break;case"rotate":a={rotate:c},s.transforms.push(a)}t=t.slice(n,t.length),e=svgTransformsRegExp.exec(t)}}},viewBoxRegExp=/([\d.-]+)[\s,]+([\d.-]+)[\s,]+([\d.-]+)[\s,]+([\d.-]+)/i,svgSvg=(s,{customPxPmm:e})=>{const t={type:"svg",x:0,y:0,width:"100%",height:"100%",strokeWidth:"1"};if(t.unitsPmm=[pxPmm,pxPmm],"pxpmm"in s&&(t.pxPmm=s.pxpmm,t.unitsPmm=[t.pxPmm,t.pxPmm]),"width"in s&&(t.width=s.width),"height"in s&&(t.height=s.height),"viewBox"in s){const i=s.viewBox.trim(),n=viewBoxRegExp.exec(i);if(null!==n&&(t.viewX=parseFloat(n[1]),t.viewY=parseFloat(n[2]),t.viewW=parseFloat(n[3]),t.viewH=parseFloat(n[4])),t.width.indexOf("%")<0){let s=css2cag(t.width,e);s=t.viewW/s,t.unitsPmm[0]=s}else{const s=t.unitsPmm[0]*(parseFloat(t.width)/100);t.unitsPmm[0]=s}if(t.height.indexOf("%")<0){let s=css2cag(t.height,pxPmm);s=t.viewH/s,t.unitsPmm[1]=s}else{const s=t.unitsPmm[1]*(parseFloat(t.height)/100);t.unitsPmm[1]=s}}else t.viewX=0,t.viewY=0,t.viewW=1920/t.unitsPmm[0],t.viewH=1080/t.unitsPmm[1];return t.viewP=Math.sqrt(t.viewW*t.viewW+t.viewH*t.viewH)/Math.SQRT2,svgCore(t,s),svgPresentation(t,s),t.objects=[],t},svgEllipse=s=>{const e={type:"ellipse",cx:"0",cy:"0",rx:"0",ry:"0"};return"cx"in s&&(e.cx=s.cx),"cy"in s&&(e.cy=s.cy),"rx"in s&&(e.rx=s.rx),"ry"in s&&(e.ry=s.ry),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgLine=s=>{const e={type:"line",x1:"0",y1:"0",x2:"0",y2:"0"};return"x1"in s&&(e.x1=s.x1),"y1"in s&&(e.y1=s.y1),"x2"in s&&(e.x2=s.x2),"y2"in s&&(e.y2=s.y2),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgListOfPoints=s=>{const e=[],t=/([\d\-+.]+)[\s,]+([\d\-+.]+)[\s,]*/i;s=s.trim();let i=t.exec(s);for(;null!==i;){let n=i[0];const r=t.lastIndex+n.length;n={x:i[1],y:i[2]},e.push(n),s=s.slice(r,s.length),i=t.exec(s)}return e},svgPolyline=s=>{const e={type:"polyline"};return svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"points"in s&&(e.points=svgListOfPoints(s.points)),e},svgPolygon=s=>{const e={type:"polygon"};return svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"points"in s&&(e.points=svgListOfPoints(s.points)),e},svgRect=s=>{const e={type:"rect",x:"0",y:"0",rx:"0",ry:"0",width:"0",height:"0"};return"x"in s&&(e.x=s.x),"y"in s&&(e.y=s.y),"rx"in s&&(e.rx=s.rx,"ry"in s||(e.ry=e.rx)),"ry"in s&&(e.ry=s.ry,"rx"in s||(e.rx=e.ry)),e.rx!==e.ry&&console.log("Warning: Unsupported RECT with rx and ry radius"),"width"in s&&(e.width=s.width),"height"in s&&(e.height=s.height),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgCircle=s=>{const e={type:"circle",x:"0",y:"0",radius:"0"};return"cx"in s&&(e.x=s.cx),"cy"in s&&(e.y=s.cy),"r"in s&&(e.radius=s.r),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgGroup=s=>{const e={type:"group"};if(svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"x"in s||"y"in s){let t="0",i="0";"x"in s&&(t=s.x),"y"in s&&(i=s.y),"transforms"in e||(e.transforms=[]);const n={translate:[t,i]};e.transforms.push(n)}return e.objects=[],e},svgPath=s=>{const e={type:"path"};if(svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e.commands=[],"d"in s){let t=null,i="",n=0;const r=s.d.length,o=s.position[1]-r-2;for(;n<r;){const r=s.d[n];switch(r){case"-":i.length>0&&(t.p.push(i),i=""),i+=r;break;case".":i.length>0&&i.indexOf(".")>=0&&(t.p.push(i),i=""),i+=r;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":i+=r;break;case"a":case"A":case"c":case"C":case"h":case"H":case"l":case"L":case"v":case"V":case"m":case"M":case"q":case"Q":case"s":case"S":case"t":case"T":case"z":case"Z":null!==t&&(i.length>0&&(t.p.push(i),i=""),e.commands.push(t)),t={c:r,p:[],pos:n+o};break;case",":case" ":case"\n":null!==t&&i.length>0&&(t.p.push(i),i="")}n++}n===r&&null!==t&&(i.length>0&&t.p.push(i),e.commands.push(t))}return e},svgUse=(s,{svgObjects:e})=>{const t={type:"group"};if(svgTransforms(t,s),svgCore(t,s),svgPresentation(t,s),"x"in s||"y"in s){let e="0",i="0";"x"in s&&(e=s.x),"y"in s&&(i=s.y),"transforms"in t||(t.transforms=[]);const n={translate:[e,i]};t.transforms.push(n)}if(t.objects=[],"xlink:href"in s){let i=s["xlink:href"];"#"===i[0]&&(i=i.slice(1,i.length)),void 0!==e[i]&&(i=e[i],i=JSON.parse(JSON.stringify(i)),t.objects.push(i))}return t};module.exports={svgCore:svgCore,svgPresentation:svgPresentation,svgSvg:svgSvg,svgRect:svgRect,svgCircle:svgCircle,svgEllipse:svgEllipse,svgLine:svgLine,svgPolyline:svgPolyline,svgPolygon:svgPolygon,svgGroup:svgGroup,svgPath:svgPath,svgUse:svgUse};
@@ -596,13 +596,13 @@ const{cagColor:cagColor,cssStyle:cssStyle,css2cag:css2cag}=require("./helpers"),
596
596
  },{"./constants":92,"./helpers":93}],98:[function(require,module,exports){
597
597
  const{geometries:geometries,maths:maths,measurements:measurements,utils:utils}=require("@jscad/modeling"),stringify=require("onml/lib/stringify"),version=require("./package.json").version,mimeType="image/svg+xml",serialize=(e,...t)=>{const s={unit:"mm",decimals:1e4,version:version,statusCallback:null};e=Object.assign({},s,e);const o=(t=utils.flatten(t)).filter(e=>geometries.geom2.isA(e)||geometries.path2.isA(e));if(0===o.length)throw new Error("only 2D geometries can be serialized to SVG");t.length!==o.length&&console.warn("some objects could not be serialized to SVG"),e.statusCallback&&e.statusCallback({progress:0});const r=getBounds(o);let n=0,l=0;r&&(n=Math.round((r[1][0]-r[0][0])*e.decimals)/e.decimals,l=Math.round((r[1][1]-r[0][1])*e.decimals)/e.decimals);let i=["svg",{width:n+e.unit,height:l+e.unit,viewBox:"0 0 "+n+" "+l,fill:"none","fill-rule":"evenodd","stroke-width":"0.1px",version:"1.1",baseProfile:"tiny",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}];r&&(i=i.concat(convertObjects(o,r,e)));const a=`<?xml version="1.0" encoding="UTF-8"?>\n\x3c!-- Created by JSCAD SVG Serializer --\x3e\n<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">\n${stringify(i,2)}`;return e.statusCallback&&e.statusCallback({progress:100}),[a]},getBounds=e=>{const t=measurements.measureBoundingBox(e);return 1===e.length?t:t.reduce((e,t)=>(maths.vec3.min(e[0],e[0],t[0]),maths.vec3.max(e[1],e[1],t[1]),e),[[0,0,0],[0,0,0]])},convertObjects=(e,t,s)=>{const o=0-t[0][0],r=0-t[1][1],n=[];return e.forEach((t,l)=>{s.statusCallback&&s.statusCallback({progress:100*l/e.length}),geometries.geom2.isA(t)&&n.push(convertGeom2(t,[o,r],s)),geometries.path2.isA(t)&&n.push(convertPaths([t],[o,r],s))}),n},reflect=(e,t,s,o)=>{const r=e-s,n=t-o;return e===s&&t===s?[e,t]:e===s?[e,o-n]:t===o?[s- -r,t]:[s- -r,o-n]},convertGeom2=(e,t,s)=>{const o=geometries.geom2.toOutlines(e).map(e=>geometries.path2.fromPoints({closed:!0},e));return s.color="black",e.color&&(s.color=convertColor(e.color)),s.id=null,e.id&&(s.id=e.id),s.class=null,e.class&&(s.class=e.class),convertToContinousPath(o,t,s)},convertToContinousPath=(e,t,s)=>{let o="";e.forEach(e=>o+=convertPath(e,t,s));const r={fill:s.color,d:o};return s.id&&(r.id=s.id),s.class&&(r.class=s.class),["g",["path",r]]},convertPaths=(e,t,s)=>e.reduce((e,o,r)=>{const n={d:convertPath(o,t,s)};return o.color&&(n.stroke=convertColor(o.color)),o.id&&(n.id=o.id),o.class&&(n.class=o.class),e.concat([["path",n]])},["g"]),convertPath=(e,t,s)=>{let o="";const r=e.points.length+(e.isClosed?1:0);for(let n=0;n<r;n++){let r=n;r>=e.points.length&&(r-=e.points.length);const l=e.points[r],i=[l[0]+t[0],l[1]+t[1]],a=reflect(i[0],i[1],0,0),c=Math.round(a[0]*s.decimals)/s.decimals,m=Math.round(a[1]*s.decimals)/s.decimals;o+=n>0?`L${c} ${m}`:`M${c} ${m}`}return o},convertColor=e=>`rgb(${255*e[0]},${255*e[1]},${255*e[2]},${255*e[3]})`;module.exports={serialize:serialize,mimeType:mimeType};
598
598
 
599
- },{"./package.json":100,"@jscad/modeling":215,"onml/lib/stringify":99}],99:[function(require,module,exports){
599
+ },{"./package.json":100,"@jscad/modeling":212,"onml/lib/stringify":99}],99:[function(require,module,exports){
600
600
  "use strict";const isObject=t=>t&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+"</"+e[0]+">"+n:i+n+r(o)+"</"+e[0]+">"+n}(t)}module.exports=stringify;
601
601
 
602
602
  },{}],100:[function(require,module,exports){
603
603
  module.exports={
604
604
  "name": "@jscad/svg-serializer",
605
- "version": "2.3.12",
605
+ "version": "2.3.10",
606
606
  "description": "SVG Serializer for JSCAD",
607
607
  "homepage": "https://openjscad.xyz/",
608
608
  "repository": "https://github.com/jscad/OpenJSCAD.org",
@@ -634,7 +634,7 @@ module.exports={
634
634
  ],
635
635
  "license": "MIT",
636
636
  "dependencies": {
637
- "@jscad/modeling": "2.11.1",
637
+ "@jscad/modeling": "2.10.0",
638
638
  "onml": "1.3.0"
639
639
  },
640
640
  "devDependencies": {
@@ -659,7 +659,7 @@ module.exports={
659
659
  },{"xmlchars/xml/1.0/ed5":101,"xmlchars/xml/1.1/ed2":102,"xmlchars/xmlns/1.0/ed3":103}],105:[function(require,module,exports){
660
660
  module.exports={
661
661
  "name": "@jscad/x3d-deserializer",
662
- "version": "2.2.4",
662
+ "version": "2.2.2",
663
663
  "description": "X3D Deserializer for JSCAD",
664
664
  "repository": "https://github.com/jscad/OpenJSCAD.org/",
665
665
  "main": "src/index.js",
@@ -686,7 +686,7 @@ module.exports={
686
686
  },
687
687
  "dependencies": {
688
688
  "@jscad/array-utils": "2.1.4",
689
- "@jscad/modeling": "2.11.1",
689
+ "@jscad/modeling": "2.10.0",
690
690
  "saxes": "5.0.1"
691
691
  },
692
692
  "devDependencies": {
@@ -701,31 +701,31 @@ const inchMM=1/.03937;module.exports={inchMM:inchMM};
701
701
  },{}],107:[function(require,module,exports){
702
702
  const{maths:maths}=require("@jscad/modeling"),createTransform=(t,a,m,s,e)=>{const r=maths.mat4.create(),o=maths.mat4.create();return maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,e)),maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,t)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,a[3],a)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,s[3],s)),maths.mat4.multiply(r,r,maths.mat4.fromScaling(o,m)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,s[3],maths.vec3.negate(maths.vec3.create(),s))),maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,maths.vec3.negate(maths.vec3.create(),t))),r};module.exports=createTransform;
703
703
 
704
- },{"@jscad/modeling":215}],108:[function(require,module,exports){
704
+ },{"@jscad/modeling":212}],108:[function(require,module,exports){
705
705
  const{extrusions:extrusions,geometries:geometries,maths:maths}=require("@jscad/modeling"),{mat4:mat4,vec3:vec3,utils:utils}=maths,{extrudeFromSlices:extrudeFromSlices,slice:slice}=extrusions,calculateYaxes=e=>{const t=e.length,a=vec3.equals(e[0],e[t-1]),c=[];for(let r=0;r<t;r++){const s=vec3.create();0===r?a?vec3.normalize(s,vec3.subtract(s,e[1],e[t-2])):vec3.normalize(s,vec3.subtract(s,e[1],e[0])):r===t-1?a?vec3.normalize(s,vec3.subtract(s,e[1],e[t-2])):vec3.normalize(s,vec3.subtract(s,e[t-1],e[t-2])):vec3.normalize(s,vec3.subtract(s,e[r+1],e[r-1])),c.push(s)}return c},isZeroVector=e=>e[0]+0===0&&e[1]+0===0&&e[2]+0===0,calculateZaxis=(e,t,a,c)=>{const r=vec3.subtract(vec3.create(),c,a),s=vec3.subtract(vec3.create(),t,a);return vec3.normalize(e,vec3.cross(e,r,s))},calculateZaxes=e=>{const t=e.length,a=vec3.equals(e[0],e[t-1]),c=[];let r;for(let s=0;s<t;s++){const o=vec3.create();0===s?a?calculateZaxis(o,e[t-2],e[0],e[1]):t>2&&calculateZaxis(o,e[0],e[1],e[2]):s===t-1?a?calculateZaxis(o,e[t-2],e[0],e[1]):t>2&&calculateZaxis(o,e[t-3],e[t-2],e[t-1]):calculateZaxis(o,e[s-1],e[s],e[s+1]),r&&vec3.dot(r,o)<0&&vec3.negate(o,o),c.push(o),r=o}if(isZeroVector(c[0]))for(let e=1;e<c.length;e++)if(!isZeroVector(c[e])){c[0]=c[e];break}for(let e=1;e<c.length;e++)isZeroVector(c[e])&&!isZeroVector(c[e-1])&&vec3.clone(c[e],c[e-1]);return c},calculateXaxes=(e,t)=>{const a=[];for(let c=0;c<e.length;c++){const r=vec3.create();a.push(vec3.normalize(r,vec3.cross(r,e[c],t[c])))}return a},rotationMatrixFromSCP=(e,t,a,c)=>(e[0]=t[0],e[1]=a[0],e[2]=c[0],e[3]=0,e[4]=t[1],e[5]=a[1],e[6]=c[1],e[7]=0,e[8]=t[2],e[9]=a[2],e[10]=c[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e),extrudeX3D=e=>{let{beginCap:t,endCap:a,crossSection:c,orientations:r,scales:s,spine:o}=Object.assign({},e);if(utils.area(c)<0&&c.reverse(),1===s.length&&(s=o.map(e=>s[0])),1===r.length&&(r=o.map(e=>r[0])),o.length!==s.length||o.length!==r.length)throw new Error(`invalid X3D specification; spine scale orientaion length must be the same; ${o.length}`);const l=geometries.geom2.fromPoints(c),i=slice.fromSides(geometries.geom2.toSides(l));let n=calculateYaxes(o),m=calculateZaxes(o),u=calculateXaxes(n,m);const v=[0,1,0],g=mat4.fromVectorRotation(mat4.create(),vec3.fromValues(0,0,1),v);return m.reduce((e,t)=>e&&isZeroVector(t),!0)&&(vec3.subtract(v,o[1],o[0]),mat4.fromVectorRotation(g,vec3.fromValues(0,0,1),v),u=u.map(e=>[1,0,0]),n=n.map(e=>[0,1,0]),m=m.map(e=>[0,0,1])),extrudeFromSlices({numberOfSlices:o.length,capStart:t,capEnd:a,callback:function(e,t,a){const c=o[t],l=vec3.fromVec2(vec3.create(),s[t],1),i=r[t],v=u[t],f=n[t],x=m[t],h=mat4.fromTranslation(mat4.create(),c),p=mat4.fromScaling(mat4.create(),l),d=rotationMatrixFromSCP(mat4.create(),v,f,x),b=mat4.fromRotation(mat4.create(),i[3],i),Z=mat4.create();mat4.multiply(Z,g,Z),mat4.multiply(Z,d,Z),mat4.multiply(Z,b,Z),mat4.multiply(Z,h,Z);let S=a;return S=slice.transform(p,S),S=slice.transform(Z,S)}},i)};module.exports=extrudeX3D;
706
706
 
707
- },{"@jscad/modeling":215}],109:[function(require,module,exports){
707
+ },{"@jscad/modeling":212}],109:[function(require,module,exports){
708
708
  const version=require("../package.json").version,translate=require("./translate"),instantiate=require("./instantiate"),deserialize=(e,t)=>{const i={filename:"x3d",output:"script",version:version,flatten:!0,addMetaData:!0};return"script"===(e=Object.assign({},i,e)).output?translate(e,t):instantiate(e,t)},extension="x3d";module.exports={deserialize:deserialize,extension:"x3d"};
709
709
 
710
710
  },{"../package.json":105,"./instantiate":110,"./translate":117}],110:[function(require,module,exports){
711
711
  const{flatten:flatten}=require("@jscad/array-utils"),parse=require("./parse"),instantiateDefinitions=require("./instantiateDefinitions"),{x3dTypes:x3dTypes}=require("./objects"),instantiate=(t,e)=>{const s={pxPmm:require("./constants").pxPmm};t=Object.assign({},s,t);const{pxPmm:a}=t;t&&t.statusCallback&&t.statusCallback({progress:0});const{x3dObj:n}=parse(e,a);if(n.definition!==x3dTypes.X3D||!n.objects)throw new Error("X3D malformed");if(n.objects.length<1||n.objects[0].definition!==x3dTypes.SCENE)throw new Error("X3D did not define a SCENE");t&&t.statusCallback&&t.statusCallback({progress:50});const i=n.objects[0].objects;let r=instantiateDefinitions(t,i);return t.flatten&&(r=flatten(r)),t&&t.statusCallback&&t.statusCallback({progress:100}),r};module.exports=instantiate;
712
712
 
713
- },{"./constants":106,"./instantiateDefinitions":111,"./objects":115,"./parse":116,"@jscad/array-utils":529}],111:[function(require,module,exports){
713
+ },{"./constants":106,"./instantiateDefinitions":111,"./objects":115,"./parse":116,"@jscad/array-utils":525}],111:[function(require,module,exports){
714
714
  const{colors:colors,transforms:transforms}=require("@jscad/modeling"),createTransform=require("./createTransform"),{x3dTypes:x3dTypes}=require("./objects"),{findColor:findColor}=require("./translateHelpers"),instantiatePrimitive=require("./instantiatePrimitive"),{instantiateLine:instantiateLine}=require("./instantiateLine"),{instantiateMesh:instantiateMesh}=require("./instantiateMesh"),instantiatedList=new Map,instantiateTransform=(t,n)=>{const i=n.objects.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);if(0===i.length)return null;const e=createTransform(n.center,n.rotation,n.scale,n.scaleOrientation,n.translation);return i.map(t=>{const n=t.color;return t=transforms.transform(e,t),n&&(t.color=n),t})},instantiateShape=(t,n)=>{const i=n.objects,e=findColor(i,t);let a=instantiatePrimitive(t,i);return a||(a=instantiateMesh(t,i)),a||(a=instantiateLine(t,i)),a||(a=null),a&&e&&(a=colors.colorize(e,a)),a},instantiateGroup=(t,n)=>{const i=n.objects.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);return 0===i.length?null:i},instantiateDefinition=(t,n)=>{let i;switch(n.definition){case x3dTypes.TRANSFORM:i=instantiateTransform(t,n);break;case x3dTypes.SHAPE:i=instantiateShape(t,n);break;case x3dTypes.GROUP:i=instantiateGroup(t,n);break;default:console.log("WARNING: unknown definition: "+n.definition)}return i},instantiateDefinitions=(t,n)=>{const i=n.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);return instantiatedList.clear(),i};module.exports=instantiateDefinitions;
715
715
 
716
- },{"./createTransform":107,"./instantiateLine":112,"./instantiateMesh":113,"./instantiatePrimitive":114,"./objects":115,"./translateHelpers":119,"@jscad/modeling":215}],112:[function(require,module,exports){
716
+ },{"./createTransform":107,"./instantiateLine":112,"./instantiateMesh":113,"./instantiatePrimitive":114,"./objects":115,"./translateHelpers":119,"@jscad/modeling":212}],112:[function(require,module,exports){
717
717
  const jscad=require("@jscad/modeling"),{createColors:createColors,findNode:findNode}=require("./translateHelpers"),{x3dTypes:x3dTypes}=require("./objects"),convertLine=(e,o)=>{let n=findNode(x3dTypes.INDEXEDLINESET,o);if(n){const e=findNode(x3dTypes.COORDINATE,n.objects),o=n.indexes,t=findNode(x3dTypes.COLOR,n.objects);if(e&&o){const r=o.map(o=>{let n=o.map(o=>e.points[o]);return n.findIndex(e=>0!==e[2])>=0&&(console.warn("WARNING: unsupported 3D indexed line set was ignored"),n=[]),n});return!0===n.colorPerVertex?n.colorIndex=o:n.colorIndex=o.map((e,o)=>o),{pointsSet:r,colors:createColors(n,t)}}}if(n=findNode(x3dTypes.LINESET,o)){const e=findNode(x3dTypes.COORDINATE,n.objects),o=findNode(x3dTypes.COLOR,n.objects),t=n.vertexCount;if(e&&t){let r=0;const s=t.map(o=>{let n=[];for(let t=0;t<o;t++)n.push(e.points[r]),r++;return n.findIndex(e=>0!==e[2])>=0&&(console.warn("WARNING: unsupported 3D line set was ignored"),n=[]),n});if(!0===n.colorPerVertex){let e=0;n.colorIndex=t.map(o=>{const n=[];for(let t=0;t<o;t++)n.push(e),e++;return n})}else n.colorIndex=s.map((e,o)=>o);return{pointsSet:s,colors:createColors(n,o)}}}return null},instantiateLine=(e,o)=>{let n;const t=convertLine(0,o);if(t){const{pointsSet:e,colors:o}=t;n=e.map((e,n)=>{let t;return t=o?jscad.colors.colorize(o[n],jscad.primitives.line(e)):jscad.primitives.line(e)})}return n};module.exports={convertLine:convertLine,instantiateLine:instantiateLine};
718
718
 
719
- },{"./objects":115,"./translateHelpers":119,"@jscad/modeling":215}],113:[function(require,module,exports){
719
+ },{"./objects":115,"./translateHelpers":119,"@jscad/modeling":212}],113:[function(require,module,exports){
720
720
  const{primitives:primitives}=require("@jscad/modeling"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode,createColors:createColors}=require("./translateHelpers"),convertMesh=(e,o)=>{let t=findNode(x3dTypes.TRIANGLESET,o);if(t){const e=findNode(x3dTypes.COORDINATE,t.objects),o=findNode(x3dTypes.COLOR,t.objects);if(e){const n=e.points,s=n.length,r=Math.trunc(s/3),i=[];for(let e=0;e<r;e++){const o=3*e;i.push([o,o+1,o+2])}const d=t.ccw?"outward":"inward";return t.colorIndex=i,{type:"triangles",points:n,faces:i,colors:createColors(t,o),orientation:d}}}if(t=findNode(x3dTypes.TRIANGLEFANSET,o)){const e=t.fanCount,o=findNode(x3dTypes.COORDINATE,t.objects),n=findNode(x3dTypes.COLOR,t.objects);if(o){const s=o.points,r=e.length,i=[];let d=0;for(let o=0;o<r;o++){const t=Math.trunc(e[o]);for(let e=1;e<t-1;e++)i.push([d,d+e,d+e+1]);d+=t}const c=t.ccw?"outward":"inward";return t.colorIndex=i,{type:`triangle fans (${r})`,points:s,faces:i,colors:createColors(t,n),orientation:c}}}if(t=findNode(x3dTypes.TRIANGLESTRIPSET,o)){const e=t.stripCount,o=findNode(x3dTypes.COORDINATE,t.objects),n=findNode(x3dTypes.COLOR,t.objects);if(o){const s=o.points,r=e.length,i=[];let d=0;for(let o=0;o<r;o++){const t=Math.trunc(e[o]);for(let e=0;e<t-2;e++){const o=[d+e,d+e+1,d+e+2];e%2==1&&o.reverse(),i.push(o)}d+=t}return t.colorIndex=i,{type:`triangle strip (${r})`,points:s,faces:i,colors:createColors(t,n),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.QUADSET,o)){const e=findNode(x3dTypes.COORDINATE,t.objects),o=findNode(x3dTypes.COLOR,t.objects);if(e){const n=e.points,s=n.length,r=Math.trunc(s/4),i=[];for(let e=0;e<r;e++){const o=4*e;i.push([o,o+1,o+2,o+3])}return t.colorIndex=i,{type:`quad (${r})`,points:n,faces:i,colors:createColors(t,o),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.INDEXEDTRIANGLESET,o)){const e=findNode(x3dTypes.COORDINATE,t.objects),o=findNode(x3dTypes.COLOR,t.objects),n=t.index;if(e&&n&&n.length>2){const s=e.points,r=Math.trunc(n.length/3),i=[];for(let e=0;e<r;e++){const o=3*e;i.push([n[o],n[o+1],n[o+2]])}return t.colorIndex=i,{type:"indexed triangle",points:s,faces:i,colors:createColors(t,o),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.INDEXEDTRIANGLEFANSET,o)){const e=findNode(x3dTypes.COORDINATE,t.objects),o=findNode(x3dTypes.COLOR,t.objects),n=t.fans;if(e&&n&&n.length>0){const s=e.points,r=n.length,i=[];for(let e=0;e<r;e++){const o=n[e],t=o.length;for(let e=1;e<t-1;e++)i.push([o[0],o[e],o[e+1]])}return t.colorIndex=i,{type:`indexed triangle fan (${r})`,points:s,faces:i,colors:createColors(t,o),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.INDEXEDTRIANGLESTRIPSET,o)){const e=findNode(x3dTypes.COORDINATE,t.objects),o=findNode(x3dTypes.COLOR,t.objects),n=t.strips;if(e&&n&&n.length>0){const s=e.points,r=n.length,i=[];for(let e=0;e<r;e++){const o=n[e],t=o.length;for(let e=0;e<t-2;e++){const t=[o[e],o[e+1],o[e+2]];e%2==1&&t.reverse(),i.push(t)}}return t.colorIndex=i,{type:`indexed triangle strip (${r})`,points:s,faces:i,colors:createColors(t,o),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.INDEXEDQUADSET,o)){const e=findNode(x3dTypes.COORDINATE,t.objects),o=findNode(x3dTypes.COLOR,t.objects),n=t.index;if(e&&n&&n.length>3){const s=e.points,r=Math.trunc(n.length/4),i=[];for(let e=0;e<r;e++){const o=4*e;i.push([n[o],n[o+1],n[o+2],n[o+3]])}return t.colorIndex=i,{type:`indexed quad (${r})`,points:s,faces:i,colors:createColors(t,o),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.INDEXEDFACESET,o)){const e=findNode(x3dTypes.COORDINATE,t.objects),o=t.faces,n=findNode(x3dTypes.COLOR,t.objects);if(e&&o&&o.length>0){const s=e.points;return{type:`indexed faces (${o.length})`,points:s,faces:o,colors:createColors(t,n),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.ELEVATIONGRID,o)){const e=t.height,o=findNode(x3dTypes.COLOR,t.objects);if(e&&e.length>0){const n=t.xDimension,s=t.xSpacing,r=t.zDimension,i=t.zSpacing,d=[];let c=0;for(let o=0;o<r;++o)for(let t=0;t<n;++t){const n=t*s,r=o*i,a=e[c];c++,d.push([n,a,r])}const a=[];for(let o=0;o<r-1;++o)for(let t=0;t<n-1;++t){const s=t+o*n,r=t+1+o*n,i=t+(o+1)*n,d=t+1+(o+1)*n,c=[Math.abs(e[s]),Math.abs(e[r]),Math.abs(e[i]),Math.abs(e[d])];let l=0;c[1]>=c[0]&&c[1]>=c[2]&&c[1]>=c[3]&&(l=1),c[2]>=c[0]&&c[2]>=c[1]&&c[2]>=c[3]&&(l=2),c[3]>=c[0]&&c[3]>=c[1]&&c[3]>=c[2]&&(l=3),0===l&&a.push([s,d,r],[s,i,d]),1===l&&a.push([r,i,d],[r,s,i]),2===l&&a.push([i,r,s],[i,d,r]),3===l&&a.push([d,s,i],[d,r,s])}const l=t.ccw?"outward":"inward";return!0===t.colorPerVertex&&(t.colorIndex=a),{type:`elevation grid (${n} X ${r})`,points:d,faces:a,colors:createColors(t,o),orientation:l}}}return null},instantiateMesh=(e,o)=>{let t;const n=convertMesh(0,o);return n&&(t=primitives.polyhedron(n)),t};module.exports={convertMesh:convertMesh,instantiateMesh:instantiateMesh};
721
721
 
722
- },{"./objects":115,"./translateHelpers":119,"@jscad/modeling":215}],114:[function(require,module,exports){
722
+ },{"./objects":115,"./translateHelpers":119,"@jscad/modeling":212}],114:[function(require,module,exports){
723
723
  const{booleans:booleans,geometries:geometries,primitives:primitives,transforms:transforms}=require("@jscad/modeling"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode}=require("./translateHelpers"),extrudeX3D=require("./extrudeX3D"),instantiatePrimitive=(e,i)=>{let s,r=findNode(x3dTypes.BOX,i);if(r)return s=primitives.cuboid({size:r.size});if(r=findNode(x3dTypes.CONE,i))return s=transforms.rotateX(-Math.PI/2,primitives.cylinderElliptic({startRadius:[r.bottomRadius,r.bottomRadius],height:r.height,segments:r.subdivision,endRadius:[r.topRadius,r.topRadius]}));if(r=findNode(x3dTypes.CYLINDER,i))return s=transforms.rotateX(-Math.PI/2,primitives.cylinder({radius:r.radius,height:r.height,segments:r.subdivision}));if(r=findNode(x3dTypes.SPHERE,i))return s=primitives.sphere({radius:r.radius,segments:r.subdivision});if(r=findNode(x3dTypes.EXTRUSION,i))return s=extrudeX3D(r);if(r=findNode(x3dTypes.ARC2D,i))return s=primitives.arc({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision});if(r=findNode(x3dTypes.ARCCLOSE2D,i))return s="PIE"===r.closureType?primitives.circle({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision}):geometries.geom2.fromPoints(geometries.path2.toPoints(geometries.path2.close(primitives.arc({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision}))));if(r=findNode(x3dTypes.CIRCLE2D,i))return s=primitives.arc({radius:r.radius,segments:r.subdivision});if(r=findNode(x3dTypes.DISK2D,i))return s=r.innerRadius===r.outerRadius?primitives.arc({radius:r.outerRadius,segments:r.subdivision}):0===r.innerRadius?primitives.circle({radius:r.outerRadius,segments:r.subdivision}):booleans.subtract(primitives.circle({radius:r.outerRadius,segments:r.subdivision}),primitives.circle({radius:r.innerRadius,segments:r.subdivision}));if(r=findNode(x3dTypes.POLYLINE2D,i))return s=primitives.line([r.lineSegments]);if(r=findNode(x3dTypes.RECTANGLE2D,i))return s=primitives.rectangle({size:r.size});if(r=findNode(x3dTypes.TRIANGLESET2D,i)){const e=r.vertices,i=e.length,t=Math.trunc(i/3);s=[];for(let i=0;i<t;i+=3)s.push(geometries.geom2.fromPoints([e[i],e[i+1],e[i+2]]));return s}return s};module.exports=instantiatePrimitive;
724
724
 
725
- },{"./extrudeX3D":108,"./objects":115,"./translateHelpers":119,"@jscad/modeling":215}],115:[function(require,module,exports){
725
+ },{"./extrudeX3D":108,"./objects":115,"./translateHelpers":119,"@jscad/modeling":212}],115:[function(require,module,exports){
726
726
  const{maths:maths}=require("@jscad/modeling"),x3dTypes={X3D:0,UNIT:1,META:2,SCENE:3,TRANSFORM:4,SHAPE:5,GROUP:6,APPEARANCE:7,TRIANGLESET:10,TRIANGLEFANSET:11,TRIANGLESTRIPSET:12,QUADSET:13,INDEXEDTRIANGLESET:14,INDEXEDTRIANGLEFANSET:15,INDEXEDTRIANGLESTRIPSET:16,INDEXEDQUADSET:17,ELEVATIONGRID:18,INDEXEDFACESET:19,LINESET:20,INDEXEDLINESET:21,BOX:50,CONE:51,CYLINDER:52,SPHERE:53,EXTRUSION:54,ARC2D:61,ARCCLOSE2D:62,CIRCLE2D:63,DISK2D:64,POLYLINE2D:65,RECTANGLE2D:66,TRIANGLESET2D:67,COLOR:91,COORDINATE:92,MATERIAL:93},x3dX3D=e=>{const t={definition:x3dTypes.X3D,objects:[]};return t},x3dUnit=e=>{const t={definition:x3dTypes.UNIT,category:"",name:"",conversionFactor:1};return e.category&&(t.category=e.category),e.name&&(t.name=e.name),e.conversionfactor&&(t.conversionFactor=e.conversionfactor),t},x3dMeta=e=>{const t={definition:x3dTypes.META,content:"",name:""};return e.content&&(t.content=e.content),e.name&&(t.name=e.name),t},x3dScene=e=>{const t={definition:x3dTypes.SCENE,objects:[]};return t},x3dTransform=e=>{const t={definition:x3dTypes.TRANSFORM,center:[0,0,0],rotation:[0,0,1,0],scale:[1,1,1],scaleOrientation:[0,0,1,0],translation:[0,0,0]};if(e.center){const i=e.center.trim().split(/ +/).map(e=>parseFloat(e));i.length>2&&(t.center=i)}if(e.rotation){const i=e.rotation.trim().split(/ +/).map(e=>parseFloat(e));i.length>3&&(t.rotation=i)}if(e.scale){const i=e.scale.trim().split(/ +/).map(e=>parseFloat(e));i.length>2&&(t.scale=i)}if(e.scaleorientation){const i=e.scaleorientation.trim().split(/ +/).map(e=>parseFloat(e));i.length>3&&(t.scaleOrientation=i)}if(e.translation){const i=e.translation.trim().split(/ +/).map(e=>parseFloat(e));i.length>2&&(t.translation=i)}return t.objects=[],t},x3dShape=e=>{const t={definition:x3dTypes.SHAPE,objects:[]};return t},x3dBox=e=>{const t={definition:x3dTypes.BOX,size:[2,2,2]};if(e.size){const i=e.size.trim().split(/ +/).map(e=>parseFloat(e));i.length>2&&(t.size=i)}return t},x3dCone=e=>{const t={definition:x3dTypes.CONE,bottomRadius:1,height:2,subdivision:32,topRadius:1e-5};return e.bottomRadius&&(t.bottomRadius=Math.max(parseFloat(e.bottomRadius),1e-5)),e.height&&(t.height=parseFloat(e.height)),e.subdivision&&(t.subdivision=parseFloat(e.subdivision)),e.topRadius&&(t.topRadius=Math.max(parseFloat(e.topRadius),1e-5)),t},x3dCylinder=e=>{const t={definition:x3dTypes.CYLINDER,height:2,radius:1,subdivision:32};return e.height&&(t.height=parseFloat(e.height)),e.radius&&(t.radius=parseFloat(e.radius)),e.subdivision&&(t.subdivision=parseFloat(e.subdivision)),t},x3dSphere=e=>{const t={definition:x3dTypes.SPHERE,radius:1,subdivision:24};if(e.radius&&(t.radius=parseFloat(e.radius)),e.subdivision){const i=e.subdivision.trim().split(/ +/).map(e=>parseFloat(e));i.length>1&&(t.subdivision=Math.max(...i))}return t},x3dExtrusion=e=>{const t={definition:x3dTypes.EXTRUSION,ccw:!0,beginCap:!0,endCap:!0,crossSection:[[1,1],[1,-1],[-1,-1],[-1,1],[1,1]],orientations:[[0,0,1,0]],scales:[[1,1]],spine:[[0,0,0],[0,1,0]]};if(e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.beginCap&&(t.beginCap=e.beginCap.includes("TRUE")||e.beginCap.includes("true")),e.endCap&&(t.endCap=e.endCap.includes("TRUE")||e.endCap.includes("true")),e.crossSection){const i=e.crossSection.trim().split(/ +/).map(e=>parseFloat(e)),n=Math.trunc(i.length/2),s=[];for(let e=0;e<n;e++){const t=2*e;s.push([i[t],i[t+1]])}t.ccw=maths.utils.area(s)<0,t.crossSection=s}if(e.orientation){const i=e.orientation.trim().split(/ +/).map(e=>parseFloat(e)),n=Math.trunc(i.length/4),s=[];for(let e=0;e<n;e++){const t=4*e;s.push([i[t],i[t+1],i[t+2],i[t+3]])}t.orientations=s}if(e.scale){const i=e.scale.trim().split(/ +/).map(e=>parseFloat(e)),n=Math.trunc(i.length/2),s=[];for(let e=0;e<n;e++){const t=2*e;0===i[t]&&(i[t]=1e-6),0===i[t+1]&&(i[t+1]=1e-6),s.push([i[t],i[t+1]])}t.scales=s}if(e.spine){const i=e.spine.trim().split(/ +/).map(e=>parseFloat(e)),n=Math.trunc(i.length/3),s=[];for(let e=0;e<n;e++){const t=3*e;s.push([i[t],i[t+1],i[t+2]])}t.spine=s}return t},x3dArc2D=e=>{const t={definition:x3dTypes.ARC2D,endAngle:Math.PI/2,radius:1,startAngle:0,subdivision:32};return e.endAngle&&(t.endAngle=parseFloat(e.endAngle)),e.radius&&(t.radius=parseFloat(e.radius)),e.startAngle&&(t.startAngle=parseFloat(e.startAngle)),e.subdivision&&(t.subdivision=parseFloat(e.subdivision)),t},x3dArcClose2D=e=>{const t={definition:x3dTypes.ARCCLOSE2D,closureType:"PIE",endAngle:Math.PI/2,radius:1,startAngle:0,subdivision:32};return e.closureType&&(t.closureType=e.closureType),e.endAngle&&(t.endAngle=parseFloat(e.endAngle)),e.radius&&(t.radius=parseFloat(e.radius)),e.startAngle&&(t.startAngle=parseFloat(e.startAngle)),e.subdivision&&(t.subdivision=parseFloat(e.subdivision)),t},x3dCircle2D=e=>{const t={definition:x3dTypes.CIRCLE2D,radius:1,subdivision:32};return e.radius&&(t.radius=parseFloat(e.radius)),e.subdivision&&(t.subdivision=parseFloat(e.subdivision)),t},x3dDisk2D=e=>{const t={definition:x3dTypes.DISK2D,innerRadius:0,outerRadius:1,subdivision:32};return e.innerRadius&&(t.innerRadius=parseFloat(e.innerRadius)),e.outerRadius&&(t.outerRadius=parseFloat(e.outerRadius)),e.subdivision&&(t.subdivision=parseFloat(e.subdivision)),t},x3dPolyline2D=e=>{const t={definition:x3dTypes.POLYLINE2D,lineSegments:[]};if(e.lineSegments){const i=e.lineSegments.trim().split(/ +/).map(e=>parseFloat(e));for(let e=0;e<i.length;e+=2){const n=[i[e],i[e+1]];t.lineSegments.push(n)}}return t},x3dRectangle2D=e=>{const t={definition:x3dTypes.RECTANGLE2D,size:[2,2]};if(e.size){const i=e.size.trim().split(/ +/).map(e=>parseFloat(e));i.length>1&&(t.size=i)}return t},x3dTriangleSet2D=e=>{const t={definition:x3dTypes.TRIANGLESET2D,vertices:[]};if(e.vertices){const i=e.vertices.trim().split(/ +/).map(e=>parseFloat(e));for(let e=0;e<i.length;e+=2){const n=[i[e],i[e+1]];t.vertices.push(n)}}return t},x3dLineSet=e=>{const t={definition:x3dTypes.LINESET,vertexCount:[],colorPerVertex:!0};return e.vertexCount&&(t.vertexCount=e.vertexCount.trim().split(/ +/).map(e=>parseFloat(e))),e.colorPerVertex&&(t.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),t.objects=[],t},x3dIndexedLineSet=e=>{const t={definition:x3dTypes.INDEXEDLINESET,indexes:[],colorPerVertex:!0};if(e.coordIndex){const i=e.coordIndex.trim().split(/ -1/);t.indexes=i.map(e=>e.trim().split(/ +/).map(e=>parseFloat(e))),t.indexes=t.indexes.filter(e=>e.length>1)}return e.colorPerVertex&&(t.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),t.objects=[],t},x3dColor=e=>{const t={definition:x3dTypes.COLOR,colors:[]};if(e.color){const i=e.color.trim().split(/ +/).map(e=>parseFloat(e)),n=i.length,s=Math.trunc(n/3);for(let e=0;e<s;e++){const n=3*e;t.colors.push([i[n],i[n+1],i[n+2]])}}return t},x3dCoordinate=e=>{const t={definition:x3dTypes.COORDINATE,points:[]};if(e.point){const i=e.point.trim().split(/ +/).map(e=>parseFloat(e)),n=i.length,s=Math.trunc(n/3);for(let e=0;e<s;e++){const n=3*e;t.points.push([i[n],i[n+1],i[n+2]])}}return t},x3dTriangleSet=e=>{const t={definition:x3dTypes.TRIANGLESET,ccw:!0,colorPerVertex:!0};return e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),t.objects=[],t},x3dTriangleFanSet=e=>{const t={definition:x3dTypes.TRIANGLEFANSET,ccw:!0,fanCount:[],colorPerVertex:!0};return e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.fanCount&&(t.fanCount=e.fanCount.trim().split(/ +/).map(e=>parseFloat(e))),t.objects=[],t},x3dTriangleStripSet=e=>{const t={definition:x3dTypes.TRIANGLESTRIPSET,ccw:!0,stripCount:[],colorPerVertex:!0};return e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.stripCount&&(t.stripCount=e.stripCount.trim().split(/ +/).map(e=>parseFloat(e))),t.objects=[],t},x3dQuadSet=e=>{const t={definition:x3dTypes.QUADSET,ccw:!0,colorPerVertex:!0};return e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),t.objects=[],t},x3dIndexedTriangleSet=e=>{const t={definition:x3dTypes.INDEXEDTRIANGLESET,ccw:!0,index:[],colorPerVertex:!0};return e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index&&(t.index=e.index.trim().split(/ +/).map(e=>parseFloat(e))),t.objects=[],t},x3dIndexedTriangleFanSet=e=>{const t={definition:x3dTypes.INDEXEDTRIANGLEFANSET,ccw:!0,fans:[],colorPerVertex:!0};if(e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index){const i=e.index.trim().split(/ -1/);t.fans=i.map(e=>e.trim().split(/ +/).map(e=>parseFloat(e))).filter(e=>e.length>2)}return t.objects=[],t},x3dIndexedTriangleStripSet=e=>{const t={definition:x3dTypes.INDEXEDTRIANGLESTRIPSET,ccw:!0,strips:[],colorPerVertex:!0,objects:[]};if(e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index){const i=e.index.trim().split(/ -1/);t.strips=i.map(e=>e.trim().split(/ +/).map(e=>parseFloat(e))).filter(e=>e.length>2)}return t},x3dIndexedQuadSet=e=>{const t={definition:x3dTypes.INDEXEDQUADSET,ccw:!0,index:[],colorPerVertex:!0};return e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index&&(t.index=e.index.trim().split(/ +/).map(e=>parseFloat(e))),t.objects=[],t},x3dIndexedFaceSet=e=>{const t={definition:x3dTypes.INDEXEDFACESET,ccw:!0,convex:!0,faces:[],colorPerVertex:!0,colorIndex:null};if(e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.convex&&(t.convex=e.convex.includes("TRUE")||e.convex.includes("true")),e.coordIndex){const i=e.coordIndex.trim().split(/ -1/);t.faces=i.map(e=>e.trim().split(/ +/).map(e=>parseFloat(e))).filter(e=>e.length>2)}if(e.colorPerVertex&&(t.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),e.colorIndex)if(t.colorPerVertex){const i=e.colorIndex.trim().split(/ -1/);t.colorIndex=i.map(e=>e.trim().split(/ +/).map(e=>parseFloat(e))).filter(e=>e.length>2)}else t.colorIndex=e.colorIndex.trim().split(/ +/).map(e=>parseFloat(e));else t.colorIndex=t.faces;return t.objects=[],t},x3dElevationGrid=e=>{const t={definition:x3dTypes.ELEVATIONGRID,xDimension:2,zDimension:2,xSpacing:1,zSpacing:1,height:[0,0,0,0],ccw:!0,solid:!1,colorPerVertex:!0};return e.xDimension&&(t.xDimension=parseFloat(e.xDimension)),e.zDimension&&(t.zDimension=parseFloat(e.zDimension)),e.xSpacing&&(t.xSpacing=parseFloat(e.xSpacing)),e.zSpacing&&(t.zSpacing=parseFloat(e.zSpacing)),e.height&&(t.height=e.height.trim().split(/ +/).map(e=>parseFloat(e))),e.ccw&&(t.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.solid&&(t.solid=e.solid.includes("TRUE")||e.solid.includes("true")),e.colorPerVertex&&(t.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),t.objects=[],t},x3dAppearance=e=>{const t={definition:x3dTypes.APPEARANCE,objects:[]};return t},x3dMaterial=e=>{const t={definition:x3dTypes.MATERIAL,color:[.8,.8,.8,1]};let i=1;if(e.transparency&&(i=1-e.transparency),e.diffuseColor){const n=e.diffuseColor.trim().split(/ +/).map(e=>parseFloat(e));n.length>2&&(n.length<4&&n.push(i),t.color=n)}if(e.emissiveColor){const n=e.emissiveColor.trim().split(/ +/).map(e=>parseFloat(e));n.length>2&&(n.length<4&&n.push(i),t.color=n)}return t},x3dGroup=e=>{const t={definition:x3dTypes.GROUP,objects:[]};return t};module.exports={x3dTypes:x3dTypes,x3dX3D:x3dX3D,x3dUnit:x3dUnit,x3dMeta:x3dMeta,x3dScene:x3dScene,x3dTransform:x3dTransform,x3dShape:x3dShape,x3dGroup:x3dGroup,x3dBox:x3dBox,x3dCone:x3dCone,x3dCylinder:x3dCylinder,x3dSphere:x3dSphere,x3dExtrusion:x3dExtrusion,x3dArc2D:x3dArc2D,x3dArcClose2D:x3dArcClose2D,x3dCircle2D:x3dCircle2D,x3dDisk2D:x3dDisk2D,x3dPolyline2D:x3dPolyline2D,x3dRectangle2D:x3dRectangle2D,x3dTriangleSet2D:x3dTriangleSet2D,x3dColor:x3dColor,x3dCoordinate:x3dCoordinate,x3dTriangleSet:x3dTriangleSet,x3dTriangleFanSet:x3dTriangleFanSet,x3dTriangleStripSet:x3dTriangleStripSet,x3dQuadSet:x3dQuadSet,x3dIndexedTriangleSet:x3dIndexedTriangleSet,x3dIndexedTriangleFanSet:x3dIndexedTriangleFanSet,x3dIndexedTriangleStripSet:x3dIndexedTriangleStripSet,x3dIndexedQuadSet:x3dIndexedQuadSet,x3dIndexedFaceSet:x3dIndexedFaceSet,x3dElevationGrid:x3dElevationGrid,x3dLineSet:x3dLineSet,x3dIndexedLineSet:x3dIndexedLineSet,x3dAppearance:x3dAppearance,x3dMaterial:x3dMaterial};
727
727
 
728
- },{"@jscad/modeling":215}],116:[function(require,module,exports){
728
+ },{"@jscad/modeling":212}],116:[function(require,module,exports){
729
729
  const saxes=require("saxes"),{x3dTypes:x3dTypes,x3dX3D:x3dX3D,x3dUnit:x3dUnit,x3dMeta:x3dMeta,x3dScene:x3dScene,x3dTransform:x3dTransform,x3dShape:x3dShape,x3dGroup:x3dGroup,x3dBox:x3dBox,x3dCone:x3dCone,x3dCylinder:x3dCylinder,x3dSphere:x3dSphere,x3dExtrusion:x3dExtrusion,x3dArc2D:x3dArc2D,x3dArcClose2D:x3dArcClose2D,x3dCircle2D:x3dCircle2D,x3dDisk2D:x3dDisk2D,x3dPolyline2D:x3dPolyline2D,x3dRectangle2D:x3dRectangle2D,x3dTriangleSet2D:x3dTriangleSet2D,x3dColor:x3dColor,x3dCoordinate:x3dCoordinate,x3dTriangleSet:x3dTriangleSet,x3dTriangleFanSet:x3dTriangleFanSet,x3dTriangleStripSet:x3dTriangleStripSet,x3dQuadSet:x3dQuadSet,x3dIndexedTriangleSet:x3dIndexedTriangleSet,x3dIndexedTriangleFanSet:x3dIndexedTriangleFanSet,x3dIndexedTriangleStripSet:x3dIndexedTriangleStripSet,x3dIndexedQuadSet:x3dIndexedQuadSet,x3dIndexedFaceSet:x3dIndexedFaceSet,x3dElevationGrid:x3dElevationGrid,x3dLineSet:x3dLineSet,x3dIndexedLineSet:x3dIndexedLineSet,x3dAppearance:x3dAppearance,x3dMaterial:x3dMaterial}=require("./objects");let x3dLast=null,x3dDefinition=x3dTypes.X3D;const x3dObjects=[],x3dDefs=new Map,x3dMaterials=[],x3dTextures=[],x3dLength={factor:1,name:"meters"},x3dAngle={factor:1,name:"radians"};let x3dObj=null;const nodeToObjectMap={X3D:x3dX3D,UNIT:x3dUnit,META:x3dMeta,SCENE:x3dScene,TRANSFORM:x3dTransform,SHAPE:x3dShape,GROUP:x3dGroup,STATICGROUP:x3dGroup,BOX:x3dBox,CONE:x3dCone,CYLINDER:x3dCylinder,SPHERE:x3dSphere,EXTRUSION:x3dExtrusion,ARC2D:x3dArc2D,ARCCLOSE2D:x3dArcClose2D,CIRCLE2D:x3dCircle2D,DISK2D:x3dDisk2D,POLYLINE2D:x3dPolyline2D,RECTANGLE2D:x3dRectangle2D,TRIANGLESET2D:x3dTriangleSet2D,COLOR:x3dColor,COORDINATE:x3dCoordinate,TRIANGLESET:x3dTriangleSet,TRIANGLEFANSET:x3dTriangleFanSet,TRIANGLESTRIPSET:x3dTriangleStripSet,QUADSET:x3dQuadSet,INDEXEDTRIANGLESET:x3dIndexedTriangleSet,INDEXEDTRIANGLEFANSET:x3dIndexedTriangleFanSet,INDEXEDTRIANGLESTRIPSET:x3dIndexedTriangleStripSet,INDEXEDQUADSET:x3dIndexedQuadSet,INDEXEDFACESET:x3dIndexedFaceSet,ELEVATIONGRID:x3dElevationGrid,LINESET:x3dLineSet,INDEXEDLINESET:x3dIndexedLineSet,APPEARANCE:x3dAppearance,MATERIAL:x3dMaterial};let objectId=1;const getObjectId=()=>("0000"+objectId++).slice(-4),createX3DParser=(e,d)=>{const x=new saxes.SaxesParser;x.on("error",e=>{console.log(`error: line ${e.line}, column ${e.column}, bad character [${e.c}]`)}),x.on("opentag",e=>{const d=e.name.toUpperCase();let x=nodeToObjectMap[d]?nodeToObjectMap[d](e.attributes,{x3dObjects:x3dObjects}):null;if(x){if(x.id=getObjectId(),e.attributes.USE){const d=e.attributes.USE;if(x3dDefs.has(d)){const e=x3dDefs.get(d);e.definition!==x.definition&&console.log(`WARNING: using a definition "${d}" of a different type; ${x.definition} vs ${e.definition}`),x=e}else console.log(`WARNING: definition "${d}" does not exist, using default for ${x.definition}`)}else if(e.attributes.DEF){const d=e.attributes.DEF;x3dDefs.has(d)?console.log(`WARNING: redefintion of ${d} has been ignored`):x3dDefs.set(d,x)}switch(x.definition){case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:case x3dTypes.GROUP:x3dDefinition=x.definition}switch(x3dDefinition){case x3dTypes.X3D:"objects"in x&&x3dObjects.push(x),x.definition===x3dTypes.UNIT&&("length"===x.category&&(x3dLength.factor=x.conversionFactor,x3dLength.name=x.name),"angle"===x.category&&(x3dAngle.factor=x.conversionFactor,x3dAngle.name=x.name));break;case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.GROUP:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:if(x3dObjects.length>0){const e=x3dObjects.pop();"objects"in e&&e.objects.push(x),x3dObjects.push(e),"objects"in x&&x3dObjects.push(x)}break;default:console.log("WARNING: invalid X3D definition")}x3dLast=x}}),x.on("closetag",e=>{switch(e.name.toUpperCase()){case"X3D":case"SCENE":case"TRANSFORM":case"SHAPE":case"GROUP":case"STATICGROUP":case"APPEARANCE":case"TRIANGLESET":case"TRIANGLEFANSET":case"TRIANGLESTRIPSET":case"QUADSET":case"INDEXEDTRIANGLESET":case"INDEXEDTRIANGLEFANSET":case"INDEXEDTRIANGLESTRIPSET":case"INDEXEDQUADSET":case"INDEXEDFACESET":case"ELEVATIONGRID":case"LINESET":case"INDEXEDLINESET":break;default:return}const d=()=>{x3dObjects.length>0&&(x3dDefinition=x3dObjects[x3dObjects.length-1].definition)};let x=null;switch(x3dDefinition){case x3dTypes.X3D:x3dObjects.length>0&&(x=x3dObjects.pop(),d()),0===x3dObjects.length&&(x.length=x3dLength,x.angle=x3dAngle,x3dObj=x);break;case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.GROUP:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:x3dObjects.length>0&&(x=x3dObjects.pop(),d());break;default:console.log("WARNING: unhandled definition",x3dDefinition)}}),x.on("text",e=>{null!==e&&(e=e.trim()).length>0&&x3dLast&&0!==x3dDefinition&&(x3dLast.value=e)}),x.on("end",()=>{}),x.write(e).close()},parse=(e,d)=>(createX3DParser(e),{x3dObj:x3dObj,x3dMaterials:x3dMaterials,x3dTextures:x3dTextures});module.exports=parse;
730
730
 
731
731
  },{"./objects":115,"saxes":104}],117:[function(require,module,exports){
@@ -746,19 +746,19 @@ const{pointsToString:pointsToString}=require("./translateHelpers"),{convertMesh:
746
746
  },{"./instantiateMesh":113,"./translateHelpers":119}],122:[function(require,module,exports){
747
747
  const{geometries:geometries}=require("@jscad/modeling"),{geom3:geom3,poly3:poly3}=geometries,extrudeX3D=require("./extrudeX3D"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode,findColor:findColor,pointsToString:pointsToString}=require("./translateHelpers"),translateLine=require("./translateLine"),translateMesh=require("./translateMesh"),translateShape=(e,i)=>{let s=`\n// shape\nconst createObjects${i.id} = (options) => {\n let objects = []\n`;const t=i.objects,n=findColor(t,e);let r,o=findNode(x3dTypes.BOX,t);if(o)r=`primitives.cuboid({size: [${o.size}]})`;else if(o=findNode(x3dTypes.CONE,t))s+=` const shape = transforms.rotateX(-Math.PI/2, primitives.cylinderElliptic({startRadius: [${o.bottomRadius},${o.bottomRadius}], height: ${o.height}, segments: ${o.subdivision}, endRadius: [${o.topRadius}, ${o.topRadius}]}))\n`,r="shape";else if(o=findNode(x3dTypes.CYLINDER,t))s+=` const shape = transforms.rotateX(-Math.PI/2, primitives.cylinder({radius: ${o.radius}, height: ${o.height}, segments: ${o.subdivision}}))\n`,r="shape";else if(o=findNode(x3dTypes.SPHERE,t))r=`primitives.sphere({radius: ${o.radius}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.EXTRUSION,t)){const e=extrudeX3D(o);s+=` const polygons = [\n ${geom3.toPolygons(e).map(e=>pointsToString(poly3.toPoints(e))).join(",\n ")}\n]\n`,r="geometries.geom3.fromPoints(polygons)"}if(!r)if(o=findNode(x3dTypes.ARC2D,t))r=`primitives.arc({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.ARCCLOSE2D,t))r="PIE"===o.closureType?`primitives.circle({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}})`:`geometries.geom2.fromPoints(geometries.path2.toPoints(geometries.path2.close(primitives.arc({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}}))))`;else if(o=findNode(x3dTypes.CIRCLE2D,t))r=`primitives.arc({radius: ${o.radius}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.DISK2D,t))r=o.innerRadius===o.outerRadius?`primitives.arc({radius: ${o.outerRadius}, segments: ${o.subdivision}})`:0===o.innerRadius?`primitives.circle({radius: ${o.outerRadius}, segments: ${o.subdivision}})`:`booleans.subtract(primitives.circle({radius: ${o.outerRadius}, segments: ${o.subdivision}}), primitives.circle({radius: ${o.innerRadius}, segments: ${o.subdivision}}))`;else if(o=findNode(x3dTypes.POLYLINE2D,t)){r=`primitives.line([[${o.lineSegments.join("], [")}]])`}else if(o=findNode(x3dTypes.RECTANGLE2D,t))r=`primitives.rectangle({size: [${o.size}]})`;else if(o=findNode(x3dTypes.TRIANGLESET2D,t)){const e=o.vertices.length,i=Math.trunc(e/3);s+=`\n // 2D triangle set: ${e} points, ${i} faces\n const vertices = ${pointsToString(o.vertices)}\n const triangles = []\n for (let i = 0; i < ${i}; i = i + 3) {\n triangles.push(geometries.geom2.fromPoints([vertices[i], vertices[i + 1], vertices[i + 2]]))\n }\n`,r="triangles"}let d=translateMesh(e,t);return d&&(r=d.primitive,s+=d.code),(d=translateLine(e,t))&&(r=d.primitive,s+=d.code),r&&(s+=n?` objects.push(colorize([${n}], ${r}))`:` objects.push(${r})`),s+="\n return objects\n}\n"};module.exports=translateShape;
748
748
 
749
- },{"./extrudeX3D":108,"./objects":115,"./translateHelpers":119,"./translateLine":120,"./translateMesh":121,"@jscad/modeling":215}],123:[function(require,module,exports){
749
+ },{"./extrudeX3D":108,"./objects":115,"./translateHelpers":119,"./translateLine":120,"./translateMesh":121,"@jscad/modeling":212}],123:[function(require,module,exports){
750
750
  "use strict";const isObject=t=>t&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+"</"+e[0]+">"+n:i+n+r(o)+"</"+e[0]+">"+n}(t)}module.exports=stringify;
751
751
 
752
752
  },{}],124:[function(require,module,exports){
753
- const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{geom2:geom2,geom3:geom3,path2:path2,poly2:poly2,poly3:poly3}=geometries,{flatten:flatten}=require("@jscad/array-utils"),stringify=require("onml/lib/stringify"),mimeType="model/x3d+xml",serialize=(e,...o)=>{if(e=Object.assign({},{color:[0,0,1,1],smooth:!1,decimals:1e3,metadata:!0,unit:"millimeter",statusCallback:null},e),0===(o=(o=flatten(o)).filter(e=>geom3.isA(e)||geom2.isA(e)||path2.isA(e))).length)throw new Error("expected one or more geom3/geom2/path2 objects");e.statusCallback&&e.statusCallback({progress:0});let t=["X3D",{profile:"Interchange",version:"3.3","xmlns:xsd":"http://www.w3.org/2001/XMLSchema-instance","xsd:noNamespaceSchemaLocation":"http://www.web3d.org/specifications/x3d-3.3.xsd"}];e.metadata?t.push(["head",{},["meta",{name:"creator",content:"Created by JSCAD"}],["meta",{name:"reference",content:"https://www.openjscad.xyz"}],["meta",{name:"created",content:(new Date).toISOString()}]]):t.push(["head",{},["meta",{name:"creator",content:"Created by JSCAD"}]]),t=t.concat(convertObjects(o,e));const r=`<?xml version="1.0" encoding="UTF-8"?>\n${stringify(t,2)}`;return e&&e.statusCallback&&e.statusCallback({progress:100}),[r]},convertObjects=(e,o)=>{const t=[];return e.forEach((r,n)=>{if(o.statusCallback&&o.statusCallback({progress:100*n/e.length}),geom3.isA(r)){r=modifiers.generalize({snap:!0,triangulate:!0},r),geom3.toPolygons(r).length>0&&t.push(convertGeom3(r,o))}geom2.isA(r)&&t.push(convertGeom2(r,o)),path2.isA(r)&&t.push(convertPath2(r,o))}),[["Scene",{},["Transform",{rotation:"1 0 0 -1.5708"},...t]]]},convertPath2=(e,o)=>{const t=path2.toPoints(e).slice();t.length>1&&e.isClosed&&t.push(t[0]);const r=["Shape",{},convertPolyline2D(poly2.create(t),o)];return e.color&&r.push(convertAppearance(e,"emissiveColor",o)),r},convertGeom2=(e,o)=>{const t=geom2.toOutlines(e),r=["Group",{}];return t.forEach(t=>{t.length>1&&t.push(t[0]);const n=["Shape",{},convertPolyline2D(poly2.create(t),o)];e.color&&n.push(convertAppearance(e,"emissiveColor",o)),r.push(n)}),r},convertPolyline2D=(e,o)=>{return["Polyline2D",{lineSegments:e.vertices.map(e=>`${e[0]} ${e[1]}`).join(" ")}]},convertAppearance=(e,o,t)=>{return["Appearance",["Material",{[o]:e.color.slice(0,3).join(" "),transparency:roundToDecimals(1-e.color[3],t)}]]},convertGeom3=(e,o)=>{const t=["Shape",{},convertMesh(e,o)];let r=["Appearance",{},["Material"]];return e.color&&(r=convertAppearance(e,"diffuseColor",o)),t.push(r),t},convertMesh=(e,o)=>{const t=convertToTriangles(e,o),r=polygons2coordinates(t,o),n=r[0].join(" "),s=r[1].join(" "),a=r[2].join(" "),c=["IndexedTriangleSet",{ccw:"true",colorPerVertex:"false",normalPerVertex:o.smooth,solid:"false",index:n},["Coordinate",{point:s}]];return e.color||c.push(["Color",{color:a}]),c},convertToTriangles=(e,o)=>{const t=[];return geom3.toPolygons(e).forEach(r=>{const n=r.vertices[0];for(let s=r.vertices.length-3;s>=0;s--){const a=poly3.fromPoints([n,r.vertices[s+1],r.vertices[s+2]]);let c=o.color;e.color&&(c=e.color),r.color&&(c=r.color),a.color=c,t.push(a)}}),t},convertToColor=(e,o)=>{let t=o.color;return e.color&&(t=e.color),`${t[0]} ${t[1]} ${t[2]}`},roundToDecimals=(e,o)=>Math.round(e*o.decimals)/o.decimals,polygons2coordinates=(e,o)=>{const t=[],r=[],n=[],s=new Map;return e.forEach(e=>{const a=[],c=e.vertices.length;for(let t=0;t<c;t++){const n=e.vertices[t],c=`${n[0]},${n[1]},${n[2]}`;if(!s.has(c)){const e=roundToDecimals(n[0],o),t=roundToDecimals(n[1],o),a=roundToDecimals(n[2],o);r.push(`${e} ${t} ${a}`),s.set(c,r.length-1)}a.push(s.get(c))}t.push(a.join(" ")),n.push(convertToColor(e,o))}),s.clear(),[t,r,n]};module.exports={serialize:serialize,mimeType:mimeType};
753
+ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{geom2:geom2,geom3:geom3,path2:path2,poly2:poly2,poly3:poly3}=geometries,{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),stringify=require("onml/lib/stringify"),mimeType="model/x3d+xml",serialize=(e,...o)=>{if(e=Object.assign({},{color:[0,0,1,1],decimals:1e3,metadata:!0,unit:"millimeter",statusCallback:null},e),0===(o=(o=flatten(o)).filter(e=>geom3.isA(e)||geom2.isA(e)||path2.isA(e))).length)throw new Error("expected one or more geom3/geom2/path2 objects");e.statusCallback&&e.statusCallback({progress:0});let t=["X3D",{profile:"Interchange",version:"4.0","xmlns:xsd":"http://www.w3.org/2001/XMLSchema-instance","xsd:noNamespaceSchemaLocation":"http://www.web3d.org/specifications/x3d-4.0.xsd"}];e.metadata?t.push(["head",{},["meta",{name:"creator",content:"Created by JSCAD"}],["meta",{name:"reference",content:"https://www.openjscad.xyz"}],["meta",{name:"created",content:(new Date).toISOString()}]]):t.push(["head",{},["meta",{name:"creator",content:"Created by JSCAD"}]]),t=t.concat(convertObjects(o,e));const r=`<?xml version="1.0" encoding="UTF-8"?>\n${stringify(t,2)}`;return e&&e.statusCallback&&e.statusCallback({progress:100}),[r]},convertObjects=(e,o)=>{let t=["Scene",{}];const r=[];return e.forEach((t,n)=>{if(o.statusCallback&&o.statusCallback({progress:100*n/e.length}),geom3.isA(t)){t=modifiers.generalize({snap:!0,triangulate:!0},t),geom3.toPolygons(t).length>0&&r.push(convertGeom3(t,o))}geom2.isA(t)&&r.push(convertGeom2(t,o)),path2.isA(t)&&r.push(convertPath2(t,o))}),[t=t.concat(r)]},convertPath2=(e,o)=>{const t=path2.toPoints(e).slice();return t.length>1&&e.isClosed&&t.push(t[0]),shape=["Shape",{},convertPolyline2D(poly2.create(t),o)],e.color&&shape.push(convertAppearance(e,o)),shape},convertGeom2=(e,o)=>{const t=geom2.toOutlines(e),r=["Group",{}];return t.forEach(t=>{t.length>1&&t.push(t[0]);const n=["Shape",{},convertPolyline2D(poly2.create(t),o)];e.color&&n.push(convertAppearance(e,o)),r.push(n)}),r},convertPolyline2D=(e,o)=>{return["Polyline2D",{lineSegments:e.vertices.map(e=>`${e[0]} ${e[1]}`).join(" ")}]},convertAppearance=(e,o)=>{return["Appearance",["Material",{diffuseColor:e.color.join(" "),emissiveColor:e.color.join(" ")}]]},convertGeom3=(e,o)=>{const t=["Shape",{},convertMesh(e,o)];return e.color&&t.push(convertAppearance(e,o)),t},convertMesh=(e,o)=>{const t=convertToTriangles(e,o),r=polygons2coordinates(t,o),n=r[0].join(" "),s=r[1].join(" "),a=r[2].join(" "),c=["IndexedTriangleSet",{ccw:"true",colorPerVertex:"false",solid:"false",index:n},["Coordinate",{point:s}]];return e.color||c.push(["Color",{color:a}]),c},convertToTriangles=(e,o)=>{const t=[];return geom3.toPolygons(e).forEach(r=>{const n=r.vertices[0];for(let s=r.vertices.length-3;s>=0;s--){const a=poly3.fromPoints([n,r.vertices[s+1],r.vertices[s+2]]);let c=o.color;e.color&&(c=e.color),r.color&&(c=r.color),a.color=c,t.push(a)}}),t},convertToColor=(e,o)=>{let t=o.color;return e.color&&(t=e.color),`${t[0]} ${t[1]} ${t[2]}`},polygons2coordinates=(e,o)=>{const t=[],r=[],n=[],s=new Map;return e.forEach(e=>{const a=[],c=e.vertices.length;for(let t=0;t<c;t++){const n=e.vertices[t],c=`${n[0]},${n[1]},${n[2]}`;if(!s.has(c)){const e=Math.round(n[0]*o.decimals)/o.decimals,t=Math.round(n[1]*o.decimals)/o.decimals,a=Math.round(n[2]*o.decimals)/o.decimals;r.push(`${e} ${t} ${a}`),s.set(c,r.length-1)}a.push(s.get(c))}t.push(a.join(" ")),n.push(convertToColor(e,o))}),s.clear(),[t,r,n]};module.exports={serialize:serialize,mimeType:mimeType};
754
754
 
755
- },{"@jscad/array-utils":529,"@jscad/modeling":215,"onml/lib/stringify":123}],125:[function(require,module,exports){
755
+ },{"@jscad/array-utils":525,"@jscad/modeling":212,"onml/lib/stringify":123}],125:[function(require,module,exports){
756
756
  const cssColors=require("./cssColors"),colorNameToRgb=o=>cssColors[o.toLowerCase()];module.exports=colorNameToRgb;
757
757
 
758
758
  },{"./cssColors":127}],126:[function(require,module,exports){
759
759
  const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),colorGeom2=(o,r)=>{const e=geom2.clone(r);return e.color=o,e},colorGeom3=(o,r)=>{const e=geom3.clone(r);return e.color=o,e},colorPath2=(o,r)=>{const e=path2.clone(r);return e.color=o,e},colorPoly3=(o,r)=>{const e=poly3.clone(r);return e.color=o,e},colorize=(o,...r)=>{if(!Array.isArray(o))throw new Error("color must be an array");if(o.length<3)throw new Error("color must contain R, G and B values");if(3===o.length&&(o=[o[0],o[1],o[2],1]),0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const e=r.map(r=>geom2.isA(r)?colorGeom2(o,r):geom3.isA(r)?colorGeom3(o,r):path2.isA(r)?colorPath2(o,r):poly3.isA(r)?colorPoly3(o,r):(r.color=o,r));return 1===e.length?e[0]:e};module.exports=colorize;
760
760
 
761
- },{"../geometries/geom2":149,"../geometries/geom3":164,"../geometries/path2":185,"../geometries/poly3":202,"../utils/flatten":519}],127:[function(require,module,exports){
761
+ },{"../geometries/geom2":146,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../utils/flatten":515}],127:[function(require,module,exports){
762
762
  const cssColors={black:[0,0,0],silver:[192/255,192/255,192/255],gray:[128/255,128/255,128/255],white:[1,1,1],maroon:[128/255,0,0],red:[1,0,0],purple:[128/255,0,128/255],fuchsia:[1,0,1],green:[0,128/255,0],lime:[0,1,0],olive:[128/255,128/255,0],yellow:[1,1,0],navy:[0,0,128/255],blue:[0,0,1],teal:[0,128/255,128/255],aqua:[0,1,1],aliceblue:[240/255,248/255,1],antiquewhite:[250/255,235/255,215/255],aquamarine:[127/255,1,212/255],azure:[240/255,1,1],beige:[245/255,245/255,220/255],bisque:[1,228/255,196/255],blanchedalmond:[1,235/255,205/255],blueviolet:[138/255,43/255,226/255],brown:[165/255,42/255,42/255],burlywood:[222/255,184/255,135/255],cadetblue:[95/255,158/255,160/255],chartreuse:[127/255,1,0],chocolate:[210/255,105/255,30/255],coral:[1,127/255,80/255],cornflowerblue:[100/255,149/255,237/255],cornsilk:[1,248/255,220/255],crimson:[220/255,20/255,60/255],cyan:[0,1,1],darkblue:[0,0,139/255],darkcyan:[0,139/255,139/255],darkgoldenrod:[184/255,134/255,11/255],darkgray:[169/255,169/255,169/255],darkgreen:[0,100/255,0],darkgrey:[169/255,169/255,169/255],darkkhaki:[189/255,183/255,107/255],darkmagenta:[139/255,0,139/255],darkolivegreen:[85/255,107/255,47/255],darkorange:[1,140/255,0],darkorchid:[.6,50/255,.8],darkred:[139/255,0,0],darksalmon:[233/255,150/255,122/255],darkseagreen:[143/255,188/255,143/255],darkslateblue:[72/255,61/255,139/255],darkslategray:[47/255,79/255,79/255],darkslategrey:[47/255,79/255,79/255],darkturquoise:[0,206/255,209/255],darkviolet:[148/255,0,211/255],deeppink:[1,20/255,147/255],deepskyblue:[0,191/255,1],dimgray:[105/255,105/255,105/255],dimgrey:[105/255,105/255,105/255],dodgerblue:[30/255,144/255,1],firebrick:[178/255,34/255,34/255],floralwhite:[1,250/255,240/255],forestgreen:[34/255,139/255,34/255],gainsboro:[220/255,220/255,220/255],ghostwhite:[248/255,248/255,1],gold:[1,215/255,0],goldenrod:[218/255,165/255,32/255],greenyellow:[173/255,1,47/255],grey:[128/255,128/255,128/255],honeydew:[240/255,1,240/255],hotpink:[1,105/255,180/255],indianred:[205/255,92/255,92/255],indigo:[75/255,0,130/255],ivory:[1,1,240/255],khaki:[240/255,230/255,140/255],lavender:[230/255,230/255,250/255],lavenderblush:[1,240/255,245/255],lawngreen:[124/255,252/255,0],lemonchiffon:[1,250/255,205/255],lightblue:[173/255,216/255,230/255],lightcoral:[240/255,128/255,128/255],lightcyan:[224/255,1,1],lightgoldenrodyellow:[250/255,250/255,210/255],lightgray:[211/255,211/255,211/255],lightgreen:[144/255,238/255,144/255],lightgrey:[211/255,211/255,211/255],lightpink:[1,182/255,193/255],lightsalmon:[1,160/255,122/255],lightseagreen:[32/255,178/255,170/255],lightskyblue:[135/255,206/255,250/255],lightslategray:[119/255,136/255,.6],lightslategrey:[119/255,136/255,.6],lightsteelblue:[176/255,196/255,222/255],lightyellow:[1,1,224/255],limegreen:[50/255,205/255,50/255],linen:[250/255,240/255,230/255],magenta:[1,0,1],mediumaquamarine:[.4,205/255,170/255],mediumblue:[0,0,205/255],mediumorchid:[186/255,85/255,211/255],mediumpurple:[147/255,112/255,219/255],mediumseagreen:[60/255,179/255,113/255],mediumslateblue:[123/255,104/255,238/255],mediumspringgreen:[0,250/255,154/255],mediumturquoise:[72/255,209/255,.8],mediumvioletred:[199/255,21/255,133/255],midnightblue:[25/255,25/255,112/255],mintcream:[245/255,1,250/255],mistyrose:[1,228/255,225/255],moccasin:[1,228/255,181/255],navajowhite:[1,222/255,173/255],oldlace:[253/255,245/255,230/255],olivedrab:[107/255,142/255,35/255],orange:[1,165/255,0],orangered:[1,69/255,0],orchid:[218/255,112/255,214/255],palegoldenrod:[238/255,232/255,170/255],palegreen:[152/255,251/255,152/255],paleturquoise:[175/255,238/255,238/255],palevioletred:[219/255,112/255,147/255],papayawhip:[1,239/255,213/255],peachpuff:[1,218/255,185/255],peru:[205/255,133/255,63/255],pink:[1,192/255,203/255],plum:[221/255,160/255,221/255],powderblue:[176/255,224/255,230/255],rosybrown:[188/255,143/255,143/255],royalblue:[65/255,105/255,225/255],saddlebrown:[139/255,69/255,19/255],salmon:[250/255,128/255,114/255],sandybrown:[244/255,164/255,96/255],seagreen:[46/255,139/255,87/255],seashell:[1,245/255,238/255],sienna:[160/255,82/255,45/255],skyblue:[135/255,206/255,235/255],slateblue:[106/255,90/255,205/255],slategray:[112/255,128/255,144/255],slategrey:[112/255,128/255,144/255],snow:[1,250/255,250/255],springgreen:[0,1,127/255],steelblue:[70/255,130/255,180/255],tan:[210/255,180/255,140/255],thistle:[216/255,191/255,216/255],tomato:[1,99/255,71/255],turquoise:[64/255,224/255,208/255],violet:[238/255,130/255,238/255],wheat:[245/255,222/255,179/255],whitesmoke:[245/255,245/255,245/255],yellowgreen:[154/255,205/255,50/255]};module.exports=cssColors;
763
763
 
764
764
  },{}],128:[function(require,module,exports){
@@ -767,10 +767,10 @@ const hexToRgb=t=>{if((t=t.replace("#","")).length<6)throw new Error("the given
767
767
  },{}],129:[function(require,module,exports){
768
768
  const flatten=require("../utils/flatten"),hueToColorComponent=require("./hueToColorComponent"),hslToRgb=(...o)=>{if((o=flatten(o)).length<3)throw new Error("values must contain H, S and L values");const e=o[0],n=o[1],t=o[2];let r=t,l=t,u=t;if(0!==n){const o=t<.5?t*(1+n):t+n-t*n,h=2*t-o;r=hueToColorComponent(h,o,e+1/3),l=hueToColorComponent(h,o,e),u=hueToColorComponent(h,o,e-1/3)}if(o.length>3){return[r,l,u,o[3]]}return[r,l,u]};module.exports=hslToRgb;
769
769
 
770
- },{"../utils/flatten":519,"./hueToColorComponent":131}],130:[function(require,module,exports){
770
+ },{"../utils/flatten":515,"./hueToColorComponent":131}],130:[function(require,module,exports){
771
771
  const flatten=require("../utils/flatten"),hsvToRgb=(...e)=>{if((e=flatten(e)).length<3)throw new Error("values must contain H, S and V values");const t=e[0],a=e[1],r=e[2];let s=0,n=0,o=0;const c=Math.floor(6*t),l=6*t-c,u=r*(1-a),b=r*(1-l*a),h=r*(1-(1-l)*a);switch(c%6){case 0:s=r,n=h,o=u;break;case 1:s=b,n=r,o=u;break;case 2:s=u,n=r,o=h;break;case 3:s=u,n=b,o=r;break;case 4:s=h,n=u,o=r;break;case 5:s=r,n=u,o=b}if(e.length>3){return[s,n,o,e[3]]}return[s,n,o]};module.exports=hsvToRgb;
772
772
 
773
- },{"../utils/flatten":519}],131:[function(require,module,exports){
773
+ },{"../utils/flatten":515}],131:[function(require,module,exports){
774
774
  const hueToColorComponent=(o,e,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?o+6*(e-o)*n:n<.5?e:n<2/3?o+(e-o)*(2/3-n)*6:o);module.exports=hueToColorComponent;
775
775
 
776
776
  },{}],132:[function(require,module,exports){
@@ -779,1204 +779,1192 @@ module.exports={colorize:require("./colorize"),colorNameToRgb:require("./colorNa
779
779
  },{"./colorNameToRgb":125,"./colorize":126,"./cssColors":127,"./hexToRgb":128,"./hslToRgb":129,"./hsvToRgb":130,"./hueToColorComponent":131,"./rgbToHex":133,"./rgbToHsl":134,"./rgbToHsv":135}],133:[function(require,module,exports){
780
780
  const flatten=require("../utils/flatten"),rgbToHex=(...t)=>{if((t=flatten(t)).length<3)throw new Error("values must contain R, G and B values");const e=255*t[0],r=255*t[1],n=255*t[2];let o=`#${Number(16777216+65536*e+256*r+n).toString(16).substring(1,7)}`;return t.length>3&&(o+=Number(255*t[3]).toString(16)),o};module.exports=rgbToHex;
781
781
 
782
- },{"../utils/flatten":519}],134:[function(require,module,exports){
782
+ },{"../utils/flatten":515}],134:[function(require,module,exports){
783
783
  const flatten=require("../utils/flatten"),rgbToHsl=(...t)=>{if((t=flatten(t)).length<3)throw new Error("values must contain R, G and B values");const e=t[0],n=t[1],s=t[2],a=Math.max(e,n,s),r=Math.min(e,n,s);let l,o;const c=(a+r)/2;if(a===r)l=o=0;else{const t=a-r;switch(o=c>.5?t/(2-a-r):t/(a+r),a){case e:l=(n-s)/t+(n<s?6:0);break;case n:l=(s-e)/t+2;break;case s:l=(e-n)/t+4}l/=6}if(t.length>3){return[l,o,c,t[3]]}return[l,o,c]};module.exports=rgbToHsl;
784
784
 
785
- },{"../utils/flatten":519}],135:[function(require,module,exports){
785
+ },{"../utils/flatten":515}],135:[function(require,module,exports){
786
786
  const flatten=require("../utils/flatten"),rgbToHsv=(...e)=>{if((e=flatten(e)).length<3)throw new Error("values must contain R, G and B values");const t=e[0],a=e[1],n=e[2],r=Math.max(t,a,n),s=Math.min(t,a,n);let l;const o=r,c=r-s,i=0===r?0:c/r;if(r===s)l=0;else{switch(r){case t:l=(a-n)/c+(a<n?6:0);break;case a:l=(n-t)/c+2;break;case n:l=(t-a)/c+4}l/=6}if(e.length>3){return[l,i,o,e[3]]}return[l,i,o]};module.exports=rgbToHsv;
787
787
 
788
- },{"../utils/flatten":519}],136:[function(require,module,exports){
789
- const lengths=require("./lengths"),arcLengthToT=(e,t)=>{const{distance:s,segments:n}=Object.assign({},{distance:0,segments:100},e),o=lengths(n,t);let r=0,c=n;for(;r<=c;){const e=Math.floor(r+(c-r)/2),t=o[e]-s;if(t<0)r=e+1;else{if(!(t>0)){c=e;break}c=e-1}}const g=c;if(o[g]===s)return g/n;const a=o[g];return(g+(s-a)/(o[g+1]-a))/n};module.exports=arcLengthToT;
790
-
791
- },{"./lengths":140}],137:[function(require,module,exports){
788
+ },{"../utils/flatten":515}],136:[function(require,module,exports){
792
789
  const create=e=>{if(!Array.isArray(e))throw new Error("Bezier points must be a valid array/");if(e.length<2)throw new Error("Bezier points must contain at least 2 values.");const r=getPointType(e);return{points:e,pointType:r,dimensions:"float_single"===r?0:e[0].length,permutations:getPermutations(e.length-1),tangentPermutations:getPermutations(e.length-2)}},getPointType=function(e){let r=null;return e.forEach(e=>{let t="";if(Number.isFinite(e))t="float_single";else{if(!Array.isArray(e))throw new Error("Bezier points must all be numbers or arrays of number.");e.forEach(e=>{if(!Number.isFinite(e))throw new Error("Bezier point values must all be numbers.")}),t="float_"+e.length}if(null==r)r=t;else if(r!==t)throw new Error("Bezier points must be either all numbers or all arrays of numbers of the same size.")}),r},getPermutations=function(e){const r=[];for(let t=0;t<=e;t++)r.push(factorial(e)/(factorial(t)*factorial(e-t)));return r},factorial=function(e){let r=1;for(let t=2;t<=e;t++)r*=t;return r};module.exports=create;
793
790
 
794
- },{}],138:[function(require,module,exports){
795
- module.exports={create:require("./create"),valueAt:require("./valueAt"),tangentAt:require("./tangentAt"),lengths:require("./lengths"),length:require("./length"),arcLengthToT:require("./arcLengthToT")};
796
-
797
- },{"./arcLengthToT":136,"./create":137,"./length":139,"./lengths":140,"./tangentAt":141,"./valueAt":142}],139:[function(require,module,exports){
798
- const lengths=require("./lengths"),length=(e,t)=>lengths(e,t)[e];module.exports=length;
799
-
800
- },{"./lengths":140}],140:[function(require,module,exports){
801
- const valueAt=require("./valueAt"),lengths=(e,r)=>{let t=0,n=[0],s=valueAt(0,r);for(let a=1;a<=e;a++){const i=valueAt(a/e,r);t+=distanceBetween(i,s),n.push(t),s=i}return n},distanceBetween=(e,r)=>{if(Number.isFinite(e)&&Number.isFinite(r))return Math.abs(e-r);if(Array.isArray(e)&&Array.isArray(r)){if(e.length!==r.length)throw new Error("The operands must have the same number of dimensions.");let t=0;for(let n=0;n<e.length;n++)t+=(r[n]-e[n])*(r[n]-e[n]);return Math.sqrt(t)}throw new Error("The operands must be of the same type, either number or array.")};module.exports=lengths;
791
+ },{}],137:[function(require,module,exports){
792
+ module.exports={create:require("./create"),valueAt:require("./valueAt"),tangentAt:require("./tangentAt")};
802
793
 
803
- },{"./valueAt":142}],141:[function(require,module,exports){
794
+ },{"./create":136,"./tangentAt":138,"./valueAt":139}],138:[function(require,module,exports){
804
795
  const tangentAt=(t,n)=>{if(t<0||t>1)throw new Error("Bezier tangentAt() input must be between 0 and 1");if("float_single"===n.pointType)return bezierTangent(n,n.points,t);{const e=[];for(let o=0;o<n.dimensions;o++){const r=[];for(let t=0;t<n.points.length;t++)r.push(n.points[t][o]);e.push(bezierTangent(n,r,t))}return e}},bezierTangent=function(t,n,e){const o=n.length-1;let r=0;for(let i=0;i<o;i++){const s=o*(n[i+1]-n[i]);r+=t.tangentPermutations[i]*Math.pow(1-e,o-1-i)*Math.pow(e,i)*s}return r};module.exports=tangentAt;
805
796
 
806
- },{}],142:[function(require,module,exports){
797
+ },{}],139:[function(require,module,exports){
807
798
  const valueAt=(t,e)=>{if(t<0||t>1)throw new Error("Bezier valueAt() input must be between 0 and 1");if("float_single"===e.pointType)return bezierFunction(e,e.points,t);{const n=[];for(let o=0;o<e.dimensions;o++){const i=[];for(let t=0;t<e.points.length;t++)i.push(e.points[t][o]);n.push(bezierFunction(e,i,t))}return n}},bezierFunction=function(t,e,n){const o=e.length-1;let i=0;for(let r=0;r<=o;r++)i+=t.permutations[r]*Math.pow(1-n,o-r)*Math.pow(n,r)*e[r];return i};module.exports=valueAt;
808
799
 
809
- },{}],143:[function(require,module,exports){
800
+ },{}],140:[function(require,module,exports){
810
801
  module.exports={bezier:require("./bezier")};
811
802
 
812
- },{"./bezier":138}],144:[function(require,module,exports){
803
+ },{"./bezier":137}],141:[function(require,module,exports){
813
804
  const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.sides=r.sides.map(s=>{return[vec2.transform(vec2.create(),s[0],r.transforms),vec2.transform(vec2.create(),s[1],r.transforms)]}),r.transforms=mat4.create(),r);module.exports=applyTransforms;
814
805
 
815
- },{"../../maths/mat4":266,"../../maths/vec2":313}],145:[function(require,module,exports){
806
+ },{"../../maths/mat4":263,"../../maths/vec2":310}],142:[function(require,module,exports){
816
807
  const clone=e=>Object.assign({},e);module.exports=clone;
817
808
 
818
- },{}],146:[function(require,module,exports){
809
+ },{}],143:[function(require,module,exports){
819
810
  const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{sides:e,transforms:mat4.create()});module.exports=create;
820
811
 
821
- },{"../../maths/mat4":266}],147:[function(require,module,exports){
812
+ },{"../../maths/mat4":263}],144:[function(require,module,exports){
822
813
  const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),create=require("./create"),fromCompactBinary=e=>{if(0!==e[0])throw new Error("invalid compact binary data");const r=create();r.transforms=mat4.clone(e.slice(1,17));for(let t=21;t<e.length;t+=4){const a=vec2.fromValues(e[t+0],e[t+1]),o=vec2.fromValues(e[t+2],e[t+3]);r.sides.push([a,o])}return e[17]>=0&&(r.color=[e[17],e[18],e[19],e[20]]),r};module.exports=fromCompactBinary;
823
814
 
824
- },{"../../maths/mat4":266,"../../maths/vec2":313,"./create":146}],148:[function(require,module,exports){
815
+ },{"../../maths/mat4":263,"../../maths/vec2":310,"./create":143}],145:[function(require,module,exports){
825
816
  const vec2=require("../../maths/vec2"),create=require("./create"),fromPoints=e=>{if(!Array.isArray(e))throw new Error("the given points must be an array");let r=e.length;if(r<3)throw new Error("the given points must define a closed geometry with three or more points");vec2.equals(e[0],e[r-1])&&--r;const t=[];let o=e[r-1];for(let n=0;n<r;n++){const r=e[n];t.push([vec2.clone(o),vec2.clone(r)]),o=r}return create(t)};module.exports=fromPoints;
826
817
 
827
- },{"../../maths/vec2":313,"./create":146}],149:[function(require,module,exports){
818
+ },{"../../maths/vec2":310,"./create":143}],146:[function(require,module,exports){
828
819
  module.exports={clone:require("./clone"),create:require("./create"),fromPoints:require("./fromPoints"),fromCompactBinary:require("./fromCompactBinary"),isA:require("./isA"),reverse:require("./reverse"),toOutlines:require("./toOutlines"),toPoints:require("./toPoints"),toSides:require("./toSides"),toString:require("./toString"),toCompactBinary:require("./toCompactBinary"),transform:require("./transform"),validate:require("./validate")};
829
820
 
830
- },{"./clone":145,"./create":146,"./fromCompactBinary":147,"./fromPoints":148,"./isA":150,"./reverse":151,"./toCompactBinary":152,"./toOutlines":153,"./toPoints":154,"./toSides":155,"./toString":156,"./transform":157,"./validate":158}],150:[function(require,module,exports){
821
+ },{"./clone":142,"./create":143,"./fromCompactBinary":144,"./fromPoints":145,"./isA":147,"./reverse":148,"./toCompactBinary":149,"./toOutlines":150,"./toPoints":151,"./toSides":152,"./toString":153,"./transform":154,"./validate":155}],147:[function(require,module,exports){
831
822
  const isA=s=>!!(s&&"object"==typeof s&&"sides"in s&&"transforms"in s&&Array.isArray(s.sides)&&"length"in s.transforms);module.exports=isA;
832
823
 
833
- },{}],151:[function(require,module,exports){
824
+ },{}],148:[function(require,module,exports){
834
825
  const create=require("./create"),toSides=require("./toSides"),reverse=e=>{const r=toSides(e).map(e=>[e[1],e[0]]);return r.reverse(),create(r)};module.exports=reverse;
835
826
 
836
- },{"./create":146,"./toSides":155}],152:[function(require,module,exports){
827
+ },{"./create":143,"./toSides":152}],149:[function(require,module,exports){
837
828
  const toCompactBinary=o=>{const t=o.sides,r=o.transforms;let n=[-1,-1,-1,-1];o.color&&(n=o.color);const e=new Float32Array(21+4*t.length);e[0]=0,e[1]=r[0],e[2]=r[1],e[3]=r[2],e[4]=r[3],e[5]=r[4],e[6]=r[5],e[7]=r[6],e[8]=r[7],e[9]=r[8],e[10]=r[9],e[11]=r[10],e[12]=r[11],e[13]=r[12],e[14]=r[13],e[15]=r[14],e[16]=r[15],e[17]=n[0],e[18]=n[1],e[19]=n[2],e[20]=n[3];for(let o=0;o<t.length;o++){const r=4*o+21,n=t[o][0],s=t[o][1];e[r+0]=n[0],e[r+1]=n[1],e[r+2]=s[0],e[r+3]=s[1]}return e};module.exports=toCompactBinary;
838
829
 
839
- },{}],153:[function(require,module,exports){
830
+ },{}],150:[function(require,module,exports){
840
831
  const vec2=require("../../maths/vec2"),toSides=require("./toSides"),toSharedVertices=e=>{const t=new Map,r=e=>{const r=e.toString();return t.has(r)?t.get(r):(t.set(r,e),e)};return e.map(e=>e.map(r))},toVertexMap=e=>{const t=new Map;return toSharedVertices(e).forEach(e=>{t.has(e[0])?t.get(e[0]).push(e):t.set(e[0],[e])}),t},toOutlines=e=>{const t=toVertexMap(toSides(e)),r=[];for(;;){let e;for(const[r,o]of t){if(e=o.shift())break;t.delete(r)}if(void 0===e)break;const o=[],s=e[0];for(;;){o.push(e[0]);const r=e[1];if(r===s)break;const n=t.get(r);if(!n)throw new Error(`geometry is not closed at vertex ${r}`);const c=popNextSide(e,n);0===n.length&&t.delete(r),e=c}o.length>0&&o.push(o.shift()),r.push(o)}return t.clear(),r},popNextSide=(e,t)=>{if(1===t.length)return t.pop();const r=vec2.create(),o=vec2.angleDegrees(vec2.subtract(r,e[1],e[0]));let s,n;t.forEach((e,t)=>{let c=vec2.angleDegrees(vec2.subtract(r,e[1],e[0]))-o;c<-180&&(c+=360),c>=180&&(c-=360),(void 0===n||c>s)&&(n=t,s=c)});const c=t[n];return t.splice(n,1),c};module.exports=toOutlines;
841
832
 
842
- },{"../../maths/vec2":313,"./toSides":155}],154:[function(require,module,exports){
833
+ },{"../../maths/vec2":310,"./toSides":152}],151:[function(require,module,exports){
843
834
  const toSides=require("./toSides"),toPoints=t=>{const o=toSides(t).map(t=>t[0]);return o.length>0&&o.push(o.shift()),o};module.exports=toPoints;
844
835
 
845
- },{"./toSides":155}],155:[function(require,module,exports){
836
+ },{"./toSides":152}],152:[function(require,module,exports){
846
837
  const applyTransforms=require("./applyTransforms"),toSides=s=>applyTransforms(s).sides;module.exports=toSides;
847
838
 
848
- },{"./applyTransforms":144}],156:[function(require,module,exports){
839
+ },{"./applyTransforms":141}],153:[function(require,module,exports){
849
840
  const vec2=require("../../maths/vec2"),toSides=require("./toSides"),toString=e=>{const t=toSides(e);let o="geom2 ("+t.length+" sides):\n[\n";return t.forEach(e=>{o+=" ["+vec2.toString(e[0])+", "+vec2.toString(e[1])+"]\n"}),o+="]\n"};module.exports=toString;
850
841
 
851
- },{"../../maths/vec2":313,"./toSides":155}],157:[function(require,module,exports){
842
+ },{"../../maths/vec2":310,"./toSides":152}],154:[function(require,module,exports){
852
843
  const mat4=require("../../maths/mat4"),transform=(t,r)=>{const s=mat4.multiply(mat4.create(),t,r.transforms);return Object.assign({},r,{transforms:s})};module.exports=transform;
853
844
 
854
- },{"../../maths/mat4":266}],158:[function(require,module,exports){
845
+ },{"../../maths/mat4":263}],155:[function(require,module,exports){
855
846
  const vec2=require("../../maths/vec2"),isA=require("./isA"),toOutlines=require("./toOutlines"),validate=e=>{if(!isA(e))throw new Error("invalid geom2 structure");if(toOutlines(e),e.sides.forEach(e=>{if(vec2.equals(e[0],e[1]))throw new Error(`geom2 self-edge ${e[0]}`)}),!e.transforms.every(Number.isFinite))throw new Error(`geom2 invalid transforms ${e.transforms}`)};module.exports=validate;
856
847
 
857
- },{"../../maths/vec2":313,"./isA":150,"./toOutlines":153}],159:[function(require,module,exports){
848
+ },{"../../maths/vec2":310,"./isA":147,"./toOutlines":150}],156:[function(require,module,exports){
858
849
  const mat4=require("../../maths/mat4"),poly3=require("../poly3"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.polygons=r.polygons.map(s=>poly3.transform(r.transforms,s)),r.transforms=mat4.create(),r);module.exports=applyTransforms;
859
850
 
860
- },{"../../maths/mat4":266,"../poly3":202}],160:[function(require,module,exports){
851
+ },{"../../maths/mat4":263,"../poly3":199}],157:[function(require,module,exports){
861
852
  const clone=e=>Object.assign({},e);module.exports=clone;
862
853
 
863
- },{}],161:[function(require,module,exports){
854
+ },{}],158:[function(require,module,exports){
864
855
  const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{polygons:e,transforms:mat4.create()});module.exports=create;
865
856
 
866
- },{"../../maths/mat4":266}],162:[function(require,module,exports){
857
+ },{"../../maths/mat4":263}],159:[function(require,module,exports){
867
858
  const vec3=require("../../maths/vec3"),mat4=require("../../maths/mat4"),poly3=require("../poly3"),create=require("./create"),fromCompactBinary=e=>{if(1!==e[0])throw new Error("invalid compact binary data");const r=create();r.transforms=mat4.clone(e.slice(1,17));const o=e[21];let t=22,a=e.length-3*o;for(;a<e.length;){const o=e[t];t++;const c=[];for(let r=0;r<o;r++)c.push(vec3.fromValues(e[a],e[a+1],e[a+2])),a+=3;r.polygons.push(poly3.create(c))}return e[17]>=0&&(r.color=[e[17],e[18],e[19],e[20]]),r};module.exports=fromCompactBinary;
868
859
 
869
- },{"../../maths/mat4":266,"../../maths/vec3":344,"../poly3":202,"./create":161}],163:[function(require,module,exports){
860
+ },{"../../maths/mat4":263,"../../maths/vec3":341,"../poly3":199,"./create":158}],160:[function(require,module,exports){
870
861
  const poly3=require("../poly3"),create=require("./create"),fromPoints=r=>{if(!Array.isArray(r))throw new Error("the given points must be an array");const e=r.map((r,e)=>{return poly3.create(r)});return create(e)};module.exports=fromPoints;
871
862
 
872
- },{"../poly3":202,"./create":161}],164:[function(require,module,exports){
863
+ },{"../poly3":199,"./create":158}],161:[function(require,module,exports){
873
864
  module.exports={clone:require("./clone"),create:require("./create"),fromPoints:require("./fromPoints"),fromCompactBinary:require("./fromCompactBinary"),invert:require("./invert"),isA:require("./isA"),toPoints:require("./toPoints"),toPolygons:require("./toPolygons"),toString:require("./toString"),toCompactBinary:require("./toCompactBinary"),transform:require("./transform"),validate:require("./validate")};
874
865
 
875
- },{"./clone":160,"./create":161,"./fromCompactBinary":162,"./fromPoints":163,"./invert":165,"./isA":166,"./toCompactBinary":167,"./toPoints":168,"./toPolygons":169,"./toString":170,"./transform":171,"./validate":172}],165:[function(require,module,exports){
866
+ },{"./clone":157,"./create":158,"./fromCompactBinary":159,"./fromPoints":160,"./invert":162,"./isA":163,"./toCompactBinary":164,"./toPoints":165,"./toPolygons":166,"./toString":167,"./transform":168,"./validate":169}],162:[function(require,module,exports){
876
867
  const poly3=require("../poly3"),create=require("./create"),toPolygons=require("./toPolygons"),invert=e=>{const o=toPolygons(e).map(e=>poly3.invert(e));return create(o)};module.exports=invert;
877
868
 
878
- },{"../poly3":202,"./create":161,"./toPolygons":169}],166:[function(require,module,exports){
869
+ },{"../poly3":199,"./create":158,"./toPolygons":166}],163:[function(require,module,exports){
879
870
  const isA=o=>!!(o&&"object"==typeof o&&"polygons"in o&&"transforms"in o&&Array.isArray(o.polygons)&&"length"in o.transforms);module.exports=isA;
880
871
 
881
- },{}],167:[function(require,module,exports){
872
+ },{}],164:[function(require,module,exports){
882
873
  const poly3=require("../poly3"),toCompactBinary=o=>{const t=o.polygons,e=o.transforms,r=t.length,n=t.reduce((o,t)=>o+t.vertices.length,0);let l=[-1,-1,-1,-1];o.color&&(l=o.color);const c=new Float32Array(22+r+3*n);c[0]=1,c[1]=e[0],c[2]=e[1],c[3]=e[2],c[4]=e[3],c[5]=e[4],c[6]=e[5],c[7]=e[6],c[8]=e[7],c[9]=e[8],c[10]=e[9],c[11]=e[10],c[12]=e[11],c[13]=e[12],c[14]=e[13],c[15]=e[14],c[16]=e[15],c[17]=l[0],c[18]=l[1],c[19]=l[2],c[20]=l[3],c[21]=n;let s=22,a=s+r;return t.forEach(o=>{const t=poly3.toPoints(o);c[s]=t.length,s++;for(let o=0;o<t.length;o++){const e=t[o];c[a+0]=e[0],c[a+1]=e[1],c[a+2]=e[2],a+=3}}),c};module.exports=toCompactBinary;
883
874
 
884
- },{"../poly3":202}],168:[function(require,module,exports){
875
+ },{"../poly3":199}],165:[function(require,module,exports){
885
876
  const poly3=require("../poly3"),toPolygons=require("./toPolygons"),toPoints=o=>{return toPolygons(o).map(o=>poly3.toPoints(o))};module.exports=toPoints;
886
877
 
887
- },{"../poly3":202,"./toPolygons":169}],169:[function(require,module,exports){
878
+ },{"../poly3":199,"./toPolygons":166}],166:[function(require,module,exports){
888
879
  const applyTransforms=require("./applyTransforms"),toPolygons=o=>applyTransforms(o).polygons;module.exports=toPolygons;
889
880
 
890
- },{"./applyTransforms":159}],170:[function(require,module,exports){
881
+ },{"./applyTransforms":156}],167:[function(require,module,exports){
891
882
  const poly3=require("../poly3"),toPolygons=require("./toPolygons"),toString=o=>{const t=toPolygons(o);let n="geom3 ("+t.length+" polygons):\n";return t.forEach(o=>{n+=" "+poly3.toString(o)+"\n"}),n};module.exports=toString;
892
883
 
893
- },{"../poly3":202,"./toPolygons":169}],171:[function(require,module,exports){
884
+ },{"../poly3":199,"./toPolygons":166}],168:[function(require,module,exports){
894
885
  const mat4=require("../../maths/mat4"),transform=(t,r)=>{const s=mat4.multiply(mat4.create(),t,r.transforms);return Object.assign({},r,{transforms:s})};module.exports=transform;
895
886
 
896
- },{"../../maths/mat4":266}],172:[function(require,module,exports){
887
+ },{"../../maths/mat4":263}],169:[function(require,module,exports){
897
888
  const poly3=require("../poly3"),isA=require("./isA"),validate=e=>{if(!isA(e))throw new Error("invalid geom3 structure");if(e.polygons.forEach(poly3.validate),validateManifold(e),!e.transforms.every(Number.isFinite))throw new Error(`geom3 invalid transforms ${e.transforms}`)},validateManifold=e=>{const o=new Map;e.polygons.forEach(({vertices:e})=>{e.forEach((r,n)=>{const t=`${`${r}`}/${`${e[(n+1)%e.length]}`}`,i=o.has(t)?o.get(t):0;o.set(t,i+1)})});const r=[];if(o.forEach((e,n)=>{const t=n.split("/").reverse().join("/");e!==o.get(t)&&r.push(n.replace("/"," -> "))}),r.length>0)throw new Error(`non-manifold edges ${r.length}\n${r.join("\n")}`)};module.exports=validate;
898
889
 
899
- },{"../poly3":202,"./isA":166}],173:[function(require,module,exports){
890
+ },{"../poly3":199,"./isA":163}],170:[function(require,module,exports){
900
891
  module.exports={geom2:require("./geom2"),geom3:require("./geom3"),path2:require("./path2"),poly2:require("./poly2"),poly3:require("./poly3")};
901
892
 
902
- },{"./geom2":149,"./geom3":164,"./path2":185,"./poly2":196,"./poly3":202}],174:[function(require,module,exports){
893
+ },{"./geom2":146,"./geom3":161,"./path2":182,"./poly2":193,"./poly3":199}],171:[function(require,module,exports){
903
894
  const{TAU:TAU}=require("../../maths/constants"),vec2=require("../../maths/vec2"),fromPoints=require("./fromPoints"),toPoints=require("./toPoints"),appendArc=(e,t)=>{let{endpoint:r,radius:a,xaxisrotation:o,clockwise:n,large:s,segments:c}=Object.assign({},{radius:[0,0],xaxisrotation:0,clockwise:!1,large:!1,segments:16},e);if(!Array.isArray(r))throw new Error("endpoint must be an array of X and Y values");if(r.length<2)throw new Error("endpoint must contain X and Y values");if(r=vec2.clone(r),!Array.isArray(a))throw new Error("radius must be an array of X and Y values");if(a.length<2)throw new Error("radius must contain X and Y values");if(c<4)throw new Error("segments must be four or more");if(t.isClosed)throw new Error("the given path cannot be closed");const i=toPoints(t);if(i.length<1)throw new Error("the given path must contain one or more points (as the starting point for the arc)");let h=a[0],u=a[1];const l=i[i.length-1];h=Math.round(1e5*h)/1e5,u=Math.round(1e5*u)/1e5,r=vec2.fromValues(Math.round(1e5*r[0])/1e5,Math.round(1e5*r[1])/1e5);const d=!n;let v=[];if(0===h||0===u)v.push(r);else{h=Math.abs(h),u=Math.abs(u);const t=o,a=Math.cos(t),n=Math.sin(t),i=vec2.subtract(vec2.create(),l,r);vec2.scale(i,i,.5);const f=Math.round(1e5*(a*i[0]+n*i[1]))/1e5,m=Math.round(1e5*(-n*i[0]+a*i[1]))/1e5,M=vec2.fromValues(f,m),p=M[0]*M[0]/(h*h)+M[1]*M[1]/(u*u);if(p>1){const e=Math.sqrt(p);h*=e,u*=e,h=Math.round(1e5*h)/1e5,u=Math.round(1e5*u)/1e5}let w=Math.sqrt((h*h*u*u-h*h*M[1]*M[1]-u*u*M[0]*M[0])/(h*h*M[1]*M[1]+u*u*M[0]*M[0]));d===s&&(w=-w);const g=vec2.fromValues(h*M[1]/u,-u*M[0]/h);vec2.scale(g,g,w);let A=vec2.fromValues(a*g[0]-n*g[1],n*g[0]+a*g[1]);A=vec2.add(A,A,vec2.scale(vec2.create(),vec2.add(vec2.create(),l,r),.5));const b=vec2.fromValues((M[0]-g[0])/h,(M[1]-g[1])/u),E=vec2.fromValues((-M[0]-g[0])/h,(-M[1]-g[1])/u),V=vec2.angleRadians(b);let q=vec2.angleRadians(E)-V;q%=TAU,!d&&q>0?q-=TAU:d&&q<0&&(q+=TAU);let y=Math.ceil(Math.abs(q)/TAU*c)+1;y<1&&(y=1);for(let e=1;e<y;e++){const t=V+e/y*q,r=Math.cos(t),o=Math.sin(t),s=vec2.fromValues(a*h*r-n*u*o,n*h*r+a*u*o);vec2.add(s,s,A),v.push(s)}y&&v.push(e.endpoint)}return v=i.concat(v),fromPoints({},v)};module.exports=appendArc;
904
895
 
905
- },{"../../maths/constants":217,"../../maths/vec2":313,"./fromPoints":184,"./toPoints":189}],175:[function(require,module,exports){
896
+ },{"../../maths/constants":214,"../../maths/vec2":310,"./fromPoints":181,"./toPoints":186}],172:[function(require,module,exports){
906
897
  const{TAU:TAU}=require("../../maths/constants"),vec2=require("../../maths/vec2"),vec3=require("../../maths/vec2"),appendPoints=require("./appendPoints"),toPoints=require("./toPoints"),appendBezier=(e,t)=>{let{controlPoints:o,segments:r}=Object.assign({},{segments:16},e);if(!Array.isArray(o))throw new Error("controlPoints must be an array of one or more points");if(o.length<1)throw new Error("controlPoints must be an array of one or more points");if(r<4)throw new Error("segments must be four or more");if(t.isClosed)throw new Error("the given geometry cannot be closed");const n=toPoints(t);if(n.length<1)throw new Error("the given path must contain one or more points (as the starting point for the bezier curve)");if(null===(o=o.slice())[0]){if(o.length<2)throw new Error("a null control point must be passed with one more control points");let e=n[n.length-2];if("lastBezierControlPoint"in t&&(e=t.lastBezierControlPoint),!Array.isArray(e))throw new Error("the given path must contain TWO or more points if given a null control point");const r=vec2.scale(vec2.create(),n[n.length-1],2);vec2.subtract(r,r,e),o[0]=r}o.unshift(n[n.length-1]);const s=o.length-1,i=[];let c=1;for(let e=0;e<=s;++e)e>0&&(c*=e),i.push(c);const a=[];for(let e=0;e<=s;++e){const t=i[s]/(i[e]*i[s-e]);a.push(t)}const l=vec2.create(),h=vec2.create(),p=vec3.create(),u=e=>{let t=1,r=Math.pow(1-e,s);const n=1!==e?1/(1-e):1,i=vec2.create();for(let c=0;c<=s;++c){c===s&&(r=1);const h=a[c]*t*r,p=vec2.scale(l,o[c],h);vec2.add(i,i,p),t*=e,r*=n}return i},v=[],m=[],f=s+1;for(let e=0;e<f;++e){const t=e/(f-1),o=u(t);v.push(o),m.push(t)}let g=1;const w=TAU/r,P=Math.sin(w);for(;g<v.length-1;){const e=vec2.subtract(l,v[g],v[g-1]);vec2.normalize(e,e);const t=vec2.subtract(h,v[g+1],v[g]);vec2.normalize(t,t);const o=vec2.cross(p,e,t);if(Math.abs(o[2])>P){const e=m[g-1],t=m[g+1],o=e+1*(t-e)/3,r=e+2*(t-e)/3,n=u(o),s=u(r);v.splice(g,1,n,s),m.splice(g,1,o,r),--g<1&&(g=1)}else++g}v.shift();const b=appendPoints(v,t);return b.lastBezierControlPoint=o[o.length-2],b};module.exports=appendBezier;
907
898
 
908
- },{"../../maths/constants":217,"../../maths/vec2":313,"./appendPoints":176,"./toPoints":189}],176:[function(require,module,exports){
899
+ },{"../../maths/constants":214,"../../maths/vec2":310,"./appendPoints":173,"./toPoints":186}],173:[function(require,module,exports){
909
900
  const concat=require("./concat"),create=require("./create"),appendPoints=(e,c)=>concat(c,create(e));module.exports=appendPoints;
910
901
 
911
- },{"./concat":180,"./create":181}],177:[function(require,module,exports){
902
+ },{"./concat":177,"./create":178}],174:[function(require,module,exports){
912
903
  const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.points=r.points.map(s=>vec2.transform(vec2.create(),s,r.transforms)),r.transforms=mat4.create(),r);module.exports=applyTransforms;
913
904
 
914
- },{"../../maths/mat4":266,"../../maths/vec2":313}],178:[function(require,module,exports){
905
+ },{"../../maths/mat4":263,"../../maths/vec2":310}],175:[function(require,module,exports){
915
906
  const clone=e=>Object.assign({},e);module.exports=clone;
916
907
 
917
- },{}],179:[function(require,module,exports){
908
+ },{}],176:[function(require,module,exports){
918
909
  const{EPS:EPS}=require("../../maths/constants"),vec2=require("../../maths/vec2"),clone=require("./clone"),close=e=>{if(e.isClosed)return e;const t=clone(e);if(t.isClosed=!0,t.points.length>1){const e=t.points,n=e[0];let o=e[e.length-1];for(;vec2.distance(n,o)<EPS*EPS&&(e.pop(),1!==e.length);)o=e[e.length-1]}return t};module.exports=close;
919
910
 
920
- },{"../../maths/constants":217,"../../maths/vec2":313,"./clone":178}],180:[function(require,module,exports){
911
+ },{"../../maths/constants":214,"../../maths/vec2":310,"./clone":175}],177:[function(require,module,exports){
921
912
  const fromPoints=require("./fromPoints"),toPoints=require("./toPoints"),{equals:equals}=require("../../maths/vec2"),concat=(...t)=>{let o=!1,e=[];return t.forEach((t,n)=>{const s=toPoints(t).slice();if(e.length>0&&s.length>0&&equals(s[0],e[e.length-1])&&s.shift(),s.length>0&&o)throw new Error(`Cannot concatenate to a closed path; check the ${n}th path`);o=t.isClosed,e=e.concat(s)}),fromPoints({closed:o},e)};module.exports=concat;
922
913
 
923
- },{"../../maths/vec2":313,"./fromPoints":184,"./toPoints":189}],181:[function(require,module,exports){
914
+ },{"../../maths/vec2":310,"./fromPoints":181,"./toPoints":186}],178:[function(require,module,exports){
924
915
  const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{points:e,isClosed:!1,transforms:mat4.create()});module.exports=create;
925
916
 
926
- },{"../../maths/mat4":266}],182:[function(require,module,exports){
917
+ },{"../../maths/mat4":263}],179:[function(require,module,exports){
927
918
  const vec2=require("../../maths/vec2"),toPoints=require("./toPoints"),equals=(e,t)=>{if(e.isClosed!==t.isClosed)return!1;if(e.points.length!==t.points.length)return!1;const o=toPoints(e),s=toPoints(t),i=o.length;let r=0;do{let t=!1;for(let e=0;e<i;e++)if(!vec2.equals(o[e],s[(e+r)%i])){t=!0;break}if(!1===t)return!0;if(!e.isClosed)return!1}while(++r<i);return!1};module.exports=equals;
928
919
 
929
- },{"../../maths/vec2":313,"./toPoints":189}],183:[function(require,module,exports){
920
+ },{"../../maths/vec2":310,"./toPoints":186}],180:[function(require,module,exports){
930
921
  const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),create=require("./create"),fromCompactBinary=r=>{if(2!==r[0])throw new Error("invalid compact binary data");const e=create();e.transforms=mat4.clone(r.slice(1,17)),e.isClosed=!!r[17];for(let t=22;t<r.length;t+=2){const o=vec2.fromValues(r[t],r[t+1]);e.points.push(o)}return r[18]>=0&&(e.color=[r[18],r[19],r[20],r[21]]),e};module.exports=fromCompactBinary;
931
922
 
932
- },{"../../maths/mat4":266,"../../maths/vec2":313,"./create":181}],184:[function(require,module,exports){
923
+ },{"../../maths/mat4":263,"../../maths/vec2":310,"./create":178}],181:[function(require,module,exports){
933
924
  const{EPS:EPS}=require("../../maths/constants"),vec2=require("../../maths/vec2"),close=require("./close"),create=require("./create"),fromPoints=(e,t)=>{let{closed:s}=Object.assign({},{closed:!1},e),o=create();if(o.points=t.map(e=>vec2.clone(e)),o.points.length>1){const e=o.points[0],t=o.points[o.points.length-1];vec2.distance(e,t)<EPS*EPS&&(s=!0)}return!0===s&&(o=close(o)),o};module.exports=fromPoints;
934
925
 
935
- },{"../../maths/constants":217,"../../maths/vec2":313,"./close":179,"./create":181}],185:[function(require,module,exports){
926
+ },{"../../maths/constants":214,"../../maths/vec2":310,"./close":176,"./create":178}],182:[function(require,module,exports){
936
927
  module.exports={appendArc:require("./appendArc"),appendBezier:require("./appendBezier"),appendPoints:require("./appendPoints"),clone:require("./clone"),close:require("./close"),concat:require("./concat"),create:require("./create"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromCompactBinary:require("./fromCompactBinary"),isA:require("./isA"),reverse:require("./reverse"),toPoints:require("./toPoints"),toString:require("./toString"),toCompactBinary:require("./toCompactBinary"),transform:require("./transform"),validate:require("./validate")};
937
928
 
938
- },{"./appendArc":174,"./appendBezier":175,"./appendPoints":176,"./clone":178,"./close":179,"./concat":180,"./create":181,"./equals":182,"./fromCompactBinary":183,"./fromPoints":184,"./isA":186,"./reverse":187,"./toCompactBinary":188,"./toPoints":189,"./toString":190,"./transform":191,"./validate":192}],186:[function(require,module,exports){
929
+ },{"./appendArc":171,"./appendBezier":172,"./appendPoints":173,"./clone":175,"./close":176,"./concat":177,"./create":178,"./equals":179,"./fromCompactBinary":180,"./fromPoints":181,"./isA":183,"./reverse":184,"./toCompactBinary":185,"./toPoints":186,"./toString":187,"./transform":188,"./validate":189}],183:[function(require,module,exports){
939
930
  const isA=s=>!!(s&&"object"==typeof s&&"points"in s&&"transforms"in s&&"isClosed"in s&&Array.isArray(s.points)&&"length"in s.transforms);module.exports=isA;
940
931
 
941
- },{}],187:[function(require,module,exports){
932
+ },{}],184:[function(require,module,exports){
942
933
  const clone=require("./clone"),reverse=e=>{const r=clone(e);return r.points=e.points.slice().reverse(),r};module.exports=reverse;
943
934
 
944
- },{"./clone":178}],188:[function(require,module,exports){
935
+ },{"./clone":175}],185:[function(require,module,exports){
945
936
  const toCompactBinary=o=>{const t=o.points,n=o.transforms;let r=[-1,-1,-1,-1];o.color&&(r=o.color);const s=new Float32Array(22+2*t.length);s[0]=2,s[1]=n[0],s[2]=n[1],s[3]=n[2],s[4]=n[3],s[5]=n[4],s[6]=n[5],s[7]=n[6],s[8]=n[7],s[9]=n[8],s[10]=n[9],s[11]=n[10],s[12]=n[11],s[13]=n[12],s[14]=n[13],s[15]=n[14],s[16]=n[15],s[17]=o.isClosed?1:0,s[18]=r[0],s[19]=r[1],s[20]=r[2],s[21]=r[3];for(let o=0;o<t.length;o++){const n=2*o+22,r=t[o];s[n]=r[0],s[n+1]=r[1]}return s};module.exports=toCompactBinary;
946
937
 
947
- },{}],189:[function(require,module,exports){
938
+ },{}],186:[function(require,module,exports){
948
939
  const applyTransforms=require("./applyTransforms"),toPoints=o=>applyTransforms(o).points;module.exports=toPoints;
949
940
 
950
- },{"./applyTransforms":177}],190:[function(require,module,exports){
941
+ },{"./applyTransforms":174}],187:[function(require,module,exports){
951
942
  const vec2=require("../../maths/vec2"),toPoints=require("./toPoints"),toString=t=>{const o=toPoints(t);let n="path ("+o.length+" points, "+t.isClosed+"):\n[\n";return o.forEach(t=>{n+=" "+vec2.toString(t)+",\n"}),n+="]\n"};module.exports=toString;
952
943
 
953
- },{"../../maths/vec2":313,"./toPoints":189}],191:[function(require,module,exports){
944
+ },{"../../maths/vec2":310,"./toPoints":186}],188:[function(require,module,exports){
954
945
  const mat4=require("../../maths/mat4"),transform=(t,r)=>{const s=mat4.multiply(mat4.create(),t,r.transforms);return Object.assign({},r,{transforms:s})};module.exports=transform;
955
946
 
956
- },{"../../maths/mat4":266}],192:[function(require,module,exports){
947
+ },{"../../maths/mat4":263}],189:[function(require,module,exports){
957
948
  const vec2=require("../../maths/vec2"),isA=require("./isA"),validate=r=>{if(!isA(r))throw new Error("invalid path2 structure");if(r.points.length>1)for(let i=0;i<r.points.length;i++)if(vec2.equals(r.points[i],r.points[(i+1)%r.points.length]))throw new Error(`path2 duplicate points ${r.points[i]}`);if(r.points.forEach(r=>{if(!r.every(Number.isFinite))throw new Error(`path2 invalid point ${r}`)}),!r.transforms.every(Number.isFinite))throw new Error(`path2 invalid transforms ${r.transforms}`)};module.exports=validate;
958
949
 
959
- },{"../../maths/vec2":313,"./isA":186}],193:[function(require,module,exports){
950
+ },{"../../maths/vec2":310,"./isA":183}],190:[function(require,module,exports){
960
951
  const measureArea=require("./measureArea"),flip=require("./flip"),arePointsInside=(e,r)=>{if(0===e.length)return 0;const t=r.vertices;return t.length<3?0:(measureArea(r)<0&&(r=flip(r)),e.reduce((e,r)=>e+isPointInside(r,t),0)===e.length?1:0)},isPointInside=(e,r)=>{const t=r.length,n=e[0],i=e[1];let s=r[t-1],o=r[0],l=s[1]>i,u=0,a=0;for(let e=t+1;--e;){const e=o[1]>i;if(l!==e){const e=s[0]>n,r=o[0]>n;e&&r?u=!u:o[0]-(o[1]-i)*(s[0]-o[0])/(s[1]-o[1])>=n&&(u=!u)}l=e,s=o,o=r[++a]}return u},isLeft=(e,r,t)=>(r[0]-e[0])*(t[1]-e[1])-(t[0]-e[0])*(r[1]-e[1]);module.exports=arePointsInside;
961
952
 
962
- },{"./flip":195,"./measureArea":197}],194:[function(require,module,exports){
953
+ },{"./flip":192,"./measureArea":194}],191:[function(require,module,exports){
963
954
  const create=e=>((void 0===e||e.length<3)&&(e=[]),{vertices:e});module.exports=create;
964
955
 
965
- },{}],195:[function(require,module,exports){
956
+ },{}],192:[function(require,module,exports){
966
957
  const create=require("./create"),flip=e=>{const r=e.vertices.slice().reverse();return create(r)};module.exports=flip;
967
958
 
968
- },{"./create":194}],196:[function(require,module,exports){
959
+ },{"./create":191}],193:[function(require,module,exports){
969
960
  module.exports={arePointsInside:require("./arePointsInside"),create:require("./create"),flip:require("./flip"),measureArea:require("./measureArea")};
970
961
 
971
- },{"./arePointsInside":193,"./create":194,"./flip":195,"./measureArea":197}],197:[function(require,module,exports){
962
+ },{"./arePointsInside":190,"./create":191,"./flip":192,"./measureArea":194}],194:[function(require,module,exports){
972
963
  const area=require("../../maths/utils/area"),measureArea=e=>area(e.vertices);module.exports=measureArea;
973
964
 
974
- },{"../../maths/utils/area":290}],198:[function(require,module,exports){
965
+ },{"../../maths/utils/area":287}],195:[function(require,module,exports){
975
966
  const create=require("./create"),vec3=require("../../maths/vec3"),clone=(...e)=>{let c,r;return 1===e.length?(c=create(),r=e[0]):(c=e[0],r=e[1]),c.vertices=r.vertices.map(e=>vec3.clone(e)),c};module.exports=clone;
976
967
 
977
- },{"../../maths/vec3":344,"./create":199}],199:[function(require,module,exports){
968
+ },{"../../maths/vec3":341,"./create":196}],196:[function(require,module,exports){
978
969
  const create=e=>((void 0===e||e.length<3)&&(e=[]),{vertices:e});module.exports=create;
979
970
 
980
- },{}],200:[function(require,module,exports){
971
+ },{}],197:[function(require,module,exports){
981
972
  const vec3=require("../../maths/vec3"),create=require("./create"),fromPoints=e=>{const r=e.map(e=>vec3.clone(e));return create(r)};module.exports=fromPoints;
982
973
 
983
- },{"../../maths/vec3":344,"./create":199}],201:[function(require,module,exports){
974
+ },{"../../maths/vec3":341,"./create":196}],198:[function(require,module,exports){
984
975
  const create=require("./create"),fromPointsAndPlane=(e,n)=>{const r=create(e);return r.plane=n,r};module.exports=fromPointsAndPlane;
985
976
 
986
- },{"./create":199}],202:[function(require,module,exports){
977
+ },{"./create":196}],199:[function(require,module,exports){
987
978
  module.exports={clone:require("./clone"),create:require("./create"),fromPoints:require("./fromPoints"),fromPointsAndPlane:require("./fromPointsAndPlane"),invert:require("./invert"),isA:require("./isA"),isConvex:require("./isConvex"),measureArea:require("./measureArea"),measureBoundingBox:require("./measureBoundingBox"),measureBoundingSphere:require("./measureBoundingSphere"),measureSignedVolume:require("./measureSignedVolume"),plane:require("./plane"),toPoints:require("./toPoints"),toString:require("./toString"),transform:require("./transform"),validate:require("./validate")};
988
979
 
989
- },{"./clone":198,"./create":199,"./fromPoints":200,"./fromPointsAndPlane":201,"./invert":203,"./isA":204,"./isConvex":205,"./measureArea":206,"./measureBoundingBox":207,"./measureBoundingSphere":208,"./measureSignedVolume":209,"./plane":210,"./toPoints":211,"./toString":212,"./transform":213,"./validate":214}],203:[function(require,module,exports){
980
+ },{"./clone":195,"./create":196,"./fromPoints":197,"./fromPointsAndPlane":198,"./invert":200,"./isA":201,"./isConvex":202,"./measureArea":203,"./measureBoundingBox":204,"./measureBoundingSphere":205,"./measureSignedVolume":206,"./plane":207,"./toPoints":208,"./toString":209,"./transform":210,"./validate":211}],200:[function(require,module,exports){
990
981
  const plane=require("../../maths/plane"),create=require("./create"),invert=e=>{const r=e.vertices.slice().reverse(),a=create(r);return e.plane&&(a.plane=plane.flip(plane.create(),e.plane)),a};module.exports=invert;
991
982
 
992
- },{"../../maths/plane":285,"./create":199}],204:[function(require,module,exports){
983
+ },{"../../maths/plane":282,"./create":196}],201:[function(require,module,exports){
993
984
  const isA=e=>!!(e&&"object"==typeof e&&"vertices"in e&&Array.isArray(e.vertices));module.exports=isA;
994
985
 
995
- },{}],205:[function(require,module,exports){
986
+ },{}],202:[function(require,module,exports){
996
987
  const plane=require("../../maths/plane"),vec3=require("../../maths/vec3"),isConvex=e=>areVerticesConvex(e.vertices),areVerticesConvex=e=>{const t=e.length;if(t>2){const r=plane.fromPoints(plane.create(),...e);let c=e[t-2],n=e[t-1];for(let o=0;o<t;o++){const t=e[o];if(!isConvexPoint(c,n,t,r))return!1;c=n,n=t}}return!0},isConvexPoint=(e,t,r,c)=>{const n=vec3.cross(vec3.create(),vec3.subtract(vec3.create(),t,e),vec3.subtract(vec3.create(),r,t));return vec3.dot(n,c)>=0};module.exports=isConvex;
997
988
 
998
- },{"../../maths/plane":285,"../../maths/vec3":344}],206:[function(require,module,exports){
989
+ },{"../../maths/plane":282,"../../maths/vec3":341}],203:[function(require,module,exports){
999
990
  const plane=require("./plane"),measureArea=e=>{const r=e.vertices.length;if(r<3)return 0;const a=e.vertices,t=plane(e),s=Math.abs(t[0]),n=Math.abs(t[1]),c=Math.abs(t[2]);if(s+n+c===0)return 0;let l=3;s>n&&s>c?l=1:n>c&&(l=2);let o=0,u=0,f=1,i=2;switch(l){case 1:for(f=1;f<r;f++)u=f-1,i=(f+1)%r,o+=a[f][1]*(a[i][2]-a[u][2]);o+=a[0][1]*(a[1][2]-a[r-1][2]),o/=2*t[0];break;case 2:for(f=1;f<r;f++)u=f-1,i=(f+1)%r,o+=a[f][2]*(a[i][0]-a[u][0]);o+=a[0][2]*(a[1][0]-a[r-1][0]),o/=2*t[1];break;case 3:default:for(f=1;f<r;f++)u=f-1,i=(f+1)%r,o+=a[f][0]*(a[i][1]-a[u][1]);o+=a[0][0]*(a[1][1]-a[r-1][1]),o/=2*t[2]}return o};module.exports=measureArea;
1000
991
 
1001
- },{"./plane":210}],207:[function(require,module,exports){
992
+ },{"./plane":207}],204:[function(require,module,exports){
1002
993
  const vec3=require("../../maths/vec3"),measureBoundingBox=e=>{const c=e.vertices,n=c.length,o=0===n?vec3.create():vec3.clone(c[0]),r=vec3.clone(o);for(let e=1;e<n;e++)vec3.min(o,o,c[e]),vec3.max(r,r,c[e]);return[o,r]};module.exports=measureBoundingBox;
1003
994
 
1004
- },{"../../maths/vec3":344}],208:[function(require,module,exports){
995
+ },{"../../maths/vec3":341}],205:[function(require,module,exports){
1005
996
  const vec3=require("../../maths/vec3"),vec4=require("../../maths/vec4"),cache=new WeakMap,measureBoundingSphere=e=>{let r=cache.get(e);if(r)return r;const t=e.vertices,c=vec4.create();if(0===t.length)return c[0]=0,c[1]=0,c[2]=0,c[3]=0,c;let a=t[0],n=a,s=a,h=a,u=a,o=a;t.forEach(e=>{a[0]>e[0]&&(a=e),n[1]>e[1]&&(n=e),s[2]>e[2]&&(s=e),h[0]<e[0]&&(h=e),u[1]<e[1]&&(u=e),o[2]<e[2]&&(o=e)}),c[0]=.5*(a[0]+h[0]),c[1]=.5*(n[1]+u[1]),c[2]=.5*(s[2]+o[2]);const i=c[0]-h[0],v=c[1]-u[1],m=c[2]-o[2];return c[3]=Math.sqrt(i*i+v*v+m*m),cache.set(e,c),c};module.exports=measureBoundingSphere;
1006
997
 
1007
- },{"../../maths/vec3":344,"../../maths/vec4":370}],209:[function(require,module,exports){
998
+ },{"../../maths/vec3":341,"../../maths/vec4":367}],206:[function(require,module,exports){
1008
999
  const vec3=require("../../maths/vec3"),measureSignedVolume=e=>{let r=0;const t=e.vertices,c=vec3.create();for(let e=0;e<t.length-2;e++)vec3.cross(c,t[e+1],t[e+2]),r+=vec3.dot(t[0],c);return r/=6};module.exports=measureSignedVolume;
1009
1000
 
1010
- },{"../../maths/vec3":344}],210:[function(require,module,exports){
1001
+ },{"../../maths/vec3":341}],207:[function(require,module,exports){
1011
1002
  const mplane=require("../../maths/plane/"),plane=e=>(e.plane||(e.plane=mplane.fromPoints(mplane.create(),...e.vertices)),e.plane);module.exports=plane;
1012
1003
 
1013
- },{"../../maths/plane/":285}],211:[function(require,module,exports){
1004
+ },{"../../maths/plane/":282}],208:[function(require,module,exports){
1014
1005
  const toPoints=o=>o.vertices;module.exports=toPoints;
1015
1006
 
1016
- },{}],212:[function(require,module,exports){
1007
+ },{}],209:[function(require,module,exports){
1017
1008
  const vec3=require("../../maths/vec3/"),toString=e=>{let t="poly3: vertices: [";return e.vertices.forEach(e=>{t+=`${vec3.toString(e)}, `}),t+="]"};module.exports=toString;
1018
1009
 
1019
- },{"../../maths/vec3/":344}],213:[function(require,module,exports){
1010
+ },{"../../maths/vec3/":341}],210:[function(require,module,exports){
1020
1011
  const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),create=require("./create"),transform=(e,r)=>{const t=r.vertices.map(r=>vec3.transform(vec3.create(),r,e));return mat4.isMirroring(e)&&t.reverse(),create(t)};module.exports=transform;
1021
1012
 
1022
- },{"../../maths/mat4":266,"../../maths/vec3":344,"./create":199}],214:[function(require,module,exports){
1013
+ },{"../../maths/mat4":263,"../../maths/vec3":341,"./create":196}],211:[function(require,module,exports){
1023
1014
  const signedDistanceToPoint=require("../../maths/plane/signedDistanceToPoint"),{NEPS:NEPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),isA=require("./isA"),isConvex=require("./isConvex"),measureArea=require("./measureArea"),plane=require("./plane"),validate=e=>{if(!isA(e))throw new Error("invalid poly3 structure");if(e.vertices.length<3)throw new Error(`poly3 not enough vertices ${e.vertices.length}`);if(measureArea(e)<=0)throw new Error("poly3 area must be greater than zero");for(let r=0;r<e.vertices.length;r++)if(vec3.equals(e.vertices[r],e.vertices[(r+1)%e.vertices.length]))throw new Error(`poly3 duplicate vertex ${e.vertices[r]}`);if(!isConvex(e))throw new Error("poly3 must be convex");if(e.vertices.forEach(e=>{if(!e.every(Number.isFinite))throw new Error(`poly3 invalid vertex ${e}`)}),e.vertices.length>3){const r=plane(e);e.vertices.forEach(e=>{const t=Math.abs(signedDistanceToPoint(r,e));if(t>NEPS)throw new Error(`poly3 must be coplanar: vertex ${e} distance ${t}`)})}};module.exports=validate;
1024
1015
 
1025
- },{"../../maths/constants":217,"../../maths/plane/signedDistanceToPoint":287,"../../maths/vec3":344,"./isA":204,"./isConvex":205,"./measureArea":206,"./plane":210}],215:[function(require,module,exports){
1016
+ },{"../../maths/constants":214,"../../maths/plane/signedDistanceToPoint":284,"../../maths/vec3":341,"./isA":201,"./isConvex":202,"./measureArea":203,"./plane":207}],212:[function(require,module,exports){
1026
1017
  module.exports={colors:require("./colors"),curves:require("./curves"),geometries:require("./geometries"),maths:require("./maths"),measurements:require("./measurements"),primitives:require("./primitives"),text:require("./text"),utils:require("./utils"),booleans:require("./operations/booleans"),expansions:require("./operations/expansions"),extrusions:require("./operations/extrusions"),hulls:require("./operations/hulls"),modifiers:require("./operations/modifiers"),transforms:require("./operations/transforms")};
1027
1018
 
1028
- },{"./colors":132,"./curves":143,"./geometries":173,"./maths":218,"./measurements":374,"./operations/booleans":388,"./operations/expansions":417,"./operations/extrusions":440,"./operations/hulls":462,"./operations/modifiers":473,"./operations/transforms":483,"./primitives":499,"./text":513,"./utils":521}],216:[function(require,module,exports){
1019
+ },{"./colors":132,"./curves":140,"./geometries":170,"./maths":215,"./measurements":371,"./operations/booleans":385,"./operations/expansions":414,"./operations/extrusions":436,"./operations/hulls":458,"./operations/modifiers":469,"./operations/transforms":479,"./primitives":495,"./text":509,"./utils":517}],213:[function(require,module,exports){
1029
1020
  const mat4=require("./mat4"),vec2=require("./vec2"),vec3=require("./vec3"),OrthoNormalBasis=function(e,t){arguments.length<2&&(t=vec3.orthogonal(vec3.create(),e)),this.v=vec3.normalize(vec3.create(),vec3.cross(vec3.create(),e,t)),this.u=vec3.cross(vec3.create(),this.v,e),this.plane=e,this.planeorigin=vec3.scale(vec3.create(),e,e[3])};OrthoNormalBasis.GetCartesian=function(e,t){const i=e+"/"+t;let s,n;if("X/Y"===i)s=[0,0,1],n=[1,0,0];else if("Y/-X"===i)s=[0,0,1],n=[0,1,0];else if("-X/-Y"===i)s=[0,0,1],n=[-1,0,0];else if("-Y/X"===i)s=[0,0,1],n=[0,-1,0];else if("-X/Y"===i)s=[0,0,-1],n=[-1,0,0];else if("-Y/-X"===i)s=[0,0,-1],n=[0,-1,0];else if("X/-Y"===i)s=[0,0,-1],n=[1,0,0];else if("Y/X"===i)s=[0,0,-1],n=[0,1,0];else if("X/Z"===i)s=[0,-1,0],n=[1,0,0];else if("Z/-X"===i)s=[0,-1,0],n=[0,0,1];else if("-X/-Z"===i)s=[0,-1,0],n=[-1,0,0];else if("-Z/X"===i)s=[0,-1,0],n=[0,0,-1];else if("-X/Z"===i)s=[0,1,0],n=[-1,0,0];else if("-Z/-X"===i)s=[0,1,0],n=[0,0,-1];else if("X/-Z"===i)s=[0,1,0],n=[1,0,0];else if("Z/X"===i)s=[0,1,0],n=[0,0,1];else if("Y/Z"===i)s=[1,0,0],n=[0,1,0];else if("Z/-Y"===i)s=[1,0,0],n=[0,0,1];else if("-Y/-Z"===i)s=[1,0,0],n=[0,-1,0];else if("-Z/Y"===i)s=[1,0,0],n=[0,0,-1];else if("-Y/Z"===i)s=[-1,0,0],n=[0,-1,0];else if("-Z/-Y"===i)s=[-1,0,0],n=[0,0,-1];else if("Y/-Z"===i)s=[-1,0,0],n=[0,1,0];else{if("Z/Y"!==i)throw new Error("OrthoNormalBasis.GetCartesian: invalid combination of axis identifiers. Should pass two string arguments from [X,Y,Z,-X,-Y,-Z], being two different axes.");s=[-1,0,0],n=[0,0,1]}return new OrthoNormalBasis(new Plane(new Vector3D(s),0),new Vector3D(n))},OrthoNormalBasis.Z0Plane=function(){const e=new Plane(new Vector3D([0,0,1]),0);return new OrthoNormalBasis(e,new Vector3D([1,0,0]))},OrthoNormalBasis.prototype={getProjectionMatrix:function(){return mat4.fromValues(this.u[0],this.v[0],this.plane[0],0,this.u[1],this.v[1],this.plane[1],0,this.u[2],this.v[2],this.plane[2],0,0,0,-this.plane[3],1)},getInverseProjectionMatrix:function(){const e=vec3.scale(vec3.create(),this.plane,this.plane[3]);return mat4.fromValues(this.u[0],this.u[1],this.u[2],0,this.v[0],this.v[1],this.v[2],0,this.plane[0],this.plane[1],this.plane[2],0,e[0],e[1],e[2],1)},to2D:function(e){return vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v))},to3D:function(e){const t=vec3.scale(vec3.create(),this.u,e[0]),i=vec3.scale(vec3.create(),this.v,e[1]),s=vec3.add(t,t,this.planeorigin);return vec3.add(i,i,s)},line3Dto2D:function(e){const t=e.point,i=e.direction.plus(t),s=this.to2D(t),n=this.to2D(i);return Line2D.fromPoints(s,n)},line2Dto3D:function(e){const t=e.origin(),i=e.direction().plus(t),s=this.to3D(t),n=this.to3D(i);return Line3D.fromPoints(s,n)},transform:function(e){const t=this.plane.transform(e),i=this.u.transform(e),s=new Vector3D(0,0,0).transform(e),n=i.minus(s);return new OrthoNormalBasis(t,n)}},module.exports=OrthoNormalBasis;
1030
1021
 
1031
- },{"./mat4":266,"./vec2":313,"./vec3":344}],217:[function(require,module,exports){
1022
+ },{"./mat4":263,"./vec2":310,"./vec3":341}],214:[function(require,module,exports){
1032
1023
  const spatialResolution=1e5,EPS=1e-5,NEPS=1e-13,TAU=2*Math.PI;module.exports={EPS:EPS,NEPS:NEPS,TAU:TAU,spatialResolution:1e5};
1033
1024
 
1034
- },{}],218:[function(require,module,exports){
1025
+ },{}],215:[function(require,module,exports){
1035
1026
  module.exports={constants:require("./constants"),line2:require("./line2"),line3:require("./line3"),mat4:require("./mat4"),plane:require("./plane"),utils:require("./utils"),vec2:require("./vec2"),vec3:require("./vec3"),vec4:require("./vec4")};
1036
1027
 
1037
- },{"./constants":217,"./line2":228,"./line3":245,"./mat4":266,"./plane":285,"./utils":291,"./vec2":313,"./vec3":344,"./vec4":370}],219:[function(require,module,exports){
1028
+ },{"./constants":214,"./line2":225,"./line3":242,"./mat4":263,"./plane":282,"./utils":288,"./vec2":310,"./vec3":341,"./vec4":367}],216:[function(require,module,exports){
1038
1029
  const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r};module.exports=clone;
1039
1030
 
1040
- },{"./create":222}],220:[function(require,module,exports){
1041
- const vec2=require("../vec2"),direction=require("./direction"),origin=require("./origin"),closestPoint=(e,c)=>{const i=origin(e),r=direction(e),o=vec2.subtract(vec2.create(),c,i),t=vec2.dot(o,r);return vec2.scale(o,r,t),vec2.add(o,o,i),o};module.exports=closestPoint;
1031
+ },{"./create":219}],217:[function(require,module,exports){
1032
+ const vec2=require("../vec2"),direction=require("./direction"),origin=require("./origin"),closestPoint=(e,i)=>{const r=origin(e),o=direction(e),n=(o[1]-r[1])/(o[0]-r[0]),t=r[1]-n*r[0],c=-1/n,s=(i[1]-c*i[0]-t)/(n-c),u=n*s+t;return vec2.fromValues(s,u)};module.exports=closestPoint;
1042
1033
 
1043
- },{"../vec2":313,"./direction":223,"./origin":230}],221:[function(require,module,exports){
1034
+ },{"../vec2":310,"./direction":220,"./origin":227}],218:[function(require,module,exports){
1044
1035
  const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o);module.exports=copy;
1045
1036
 
1046
- },{}],222:[function(require,module,exports){
1037
+ },{}],219:[function(require,module,exports){
1047
1038
  const create=()=>[0,1,0];module.exports=create;
1048
1039
 
1049
- },{}],223:[function(require,module,exports){
1040
+ },{}],220:[function(require,module,exports){
1050
1041
  const vec2=require("../vec2"),direction=e=>{const c=vec2.normal(vec2.create(),e);return vec2.negate(c,c),c};module.exports=direction;
1051
1042
 
1052
- },{"../vec2":313}],224:[function(require,module,exports){
1043
+ },{"../vec2":310}],221:[function(require,module,exports){
1053
1044
  const vec2=require("../vec2"),distanceToPoint=(e,t)=>{let o=vec2.dot(t,e);return o=Math.abs(o-e[2])};module.exports=distanceToPoint;
1054
1045
 
1055
- },{"../vec2":313}],225:[function(require,module,exports){
1046
+ },{"../vec2":310}],222:[function(require,module,exports){
1056
1047
  const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2];module.exports=equals;
1057
1048
 
1058
- },{}],226:[function(require,module,exports){
1049
+ },{}],223:[function(require,module,exports){
1059
1050
  const vec2=require("../vec2"),fromPoints=(e,c,o)=>{const r=vec2.subtract(vec2.create(),o,c);vec2.normal(r,r),vec2.normalize(r,r);const t=vec2.dot(c,r);return e[0]=r[0],e[1]=r[1],e[2]=t,e};module.exports=fromPoints;
1060
1051
 
1061
- },{"../vec2":313}],227:[function(require,module,exports){
1052
+ },{"../vec2":310}],224:[function(require,module,exports){
1062
1053
  const create=require("./create"),fromValues=(e,r,t)=>{const o=create();return o[0]=e,o[1]=r,o[2]=t,o};module.exports=fromValues;
1063
1054
 
1064
- },{"./create":222}],228:[function(require,module,exports){
1055
+ },{"./create":219}],225:[function(require,module,exports){
1065
1056
  module.exports={clone:require("./clone"),closestPoint:require("./closestPoint"),copy:require("./copy"),create:require("./create"),direction:require("./direction"),distanceToPoint:require("./distanceToPoint"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromValues:require("./fromValues"),intersectPointOfLines:require("./intersectPointOfLines"),origin:require("./origin"),reverse:require("./reverse"),toString:require("./toString"),transform:require("./transform"),xAtY:require("./xAtY")};
1066
1057
 
1067
- },{"./clone":219,"./closestPoint":220,"./copy":221,"./create":222,"./direction":223,"./distanceToPoint":224,"./equals":225,"./fromPoints":226,"./fromValues":227,"./intersectPointOfLines":229,"./origin":230,"./reverse":231,"./toString":232,"./transform":233,"./xAtY":234}],229:[function(require,module,exports){
1058
+ },{"./clone":216,"./closestPoint":217,"./copy":218,"./create":219,"./direction":220,"./distanceToPoint":221,"./equals":222,"./fromPoints":223,"./fromValues":224,"./intersectPointOfLines":226,"./origin":227,"./reverse":228,"./toString":229,"./transform":230,"./xAtY":231}],226:[function(require,module,exports){
1068
1059
  const vec2=require("../vec2"),{solve2Linear:solve2Linear}=require("../utils"),intersectToLine=(e,r)=>{const n=solve2Linear(e[0],e[1],r[0],r[1],e[2],r[2]);return vec2.clone(n)};module.exports=intersectToLine;
1069
1060
 
1070
- },{"../utils":291,"../vec2":313}],230:[function(require,module,exports){
1061
+ },{"../utils":288,"../vec2":310}],227:[function(require,module,exports){
1071
1062
  const vec2=require("../vec2"),origin=e=>vec2.scale(vec2.create(),e,e[2]);module.exports=origin;
1072
1063
 
1073
- },{"../vec2":313}],231:[function(require,module,exports){
1064
+ },{"../vec2":310}],228:[function(require,module,exports){
1074
1065
  const vec2=require("../vec2"),copy=require("./copy"),fromValues=require("./fromValues"),reverse=(e,r)=>{const c=vec2.negate(vec2.create(),r),o=-r[2];return copy(e,fromValues(c[0],c[1],o))};module.exports=reverse;
1075
1066
 
1076
- },{"../vec2":313,"./copy":221,"./fromValues":227}],232:[function(require,module,exports){
1067
+ },{"../vec2":310,"./copy":218,"./fromValues":224}],229:[function(require,module,exports){
1077
1068
  const toString=t=>`line2: (${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)})`;module.exports=toString;
1078
1069
 
1079
- },{}],233:[function(require,module,exports){
1070
+ },{}],230:[function(require,module,exports){
1080
1071
  const vec2=require("../vec2"),fromPoints=require("./fromPoints"),origin=require("./origin"),direction=require("./direction"),transform=(r,o,i)=>{const e=origin(o),n=direction(o);return vec2.transform(e,e,i),vec2.transform(n,n,i),fromPoints(r,e,n)};module.exports=transform;
1081
1072
 
1082
- },{"../vec2":313,"./direction":223,"./fromPoints":226,"./origin":230}],234:[function(require,module,exports){
1073
+ },{"../vec2":310,"./direction":220,"./fromPoints":223,"./origin":227}],231:[function(require,module,exports){
1083
1074
  const origin=require("./origin"),xAtY=(i,r)=>{let e=(i[2]-i[1]*r)/i[0];if(Number.isNaN(e)){e=origin(i)[0]}return e};module.exports=xAtY;
1084
1075
 
1085
- },{"./origin":230}],235:[function(require,module,exports){
1076
+ },{"./origin":227}],232:[function(require,module,exports){
1086
1077
  const vec3=require("../vec3"),create=require("./create"),clone=e=>{const c=create();return vec3.copy(c[0],e[0]),vec3.copy(c[1],e[1]),c};module.exports=clone;
1087
1078
 
1088
- },{"../vec3":344,"./create":238}],236:[function(require,module,exports){
1079
+ },{"../vec3":341,"./create":235}],233:[function(require,module,exports){
1089
1080
  const vec3=require("../vec3"),closestPoint=(e,c)=>{const t=e[0],o=e[1],s=vec3.dot(vec3.subtract(vec3.create(),c,t),o)/vec3.dot(o,o),v=vec3.scale(vec3.create(),o,s);return vec3.add(v,v,t),v};module.exports=closestPoint;
1090
1081
 
1091
- },{"../vec3":344}],237:[function(require,module,exports){
1082
+ },{"../vec3":341}],234:[function(require,module,exports){
1092
1083
  const vec3=require("../vec3"),copy=(c,e)=>(vec3.copy(c[0],e[0]),vec3.copy(c[1],e[1]),c);module.exports=copy;
1093
1084
 
1094
- },{"../vec3":344}],238:[function(require,module,exports){
1085
+ },{"../vec3":341}],235:[function(require,module,exports){
1095
1086
  const vec3=require("../vec3"),create=()=>[vec3.fromValues(0,0,0),vec3.fromValues(0,0,1)];module.exports=create;
1096
1087
 
1097
- },{"../vec3":344}],239:[function(require,module,exports){
1088
+ },{"../vec3":341}],236:[function(require,module,exports){
1098
1089
  const direction=o=>o[1];module.exports=direction;
1099
1090
 
1100
- },{}],240:[function(require,module,exports){
1091
+ },{}],237:[function(require,module,exports){
1101
1092
  const vec3=require("../vec3"),closestPoint=require("./closestPoint"),distanceToPoint=(e,t)=>{const c=closestPoint(e,t),o=vec3.subtract(vec3.create(),t,c);return vec3.length(o)};module.exports=distanceToPoint;
1102
1093
 
1103
- },{"../vec3":344,"./closestPoint":236}],241:[function(require,module,exports){
1094
+ },{"../vec3":341,"./closestPoint":233}],238:[function(require,module,exports){
1104
1095
  const vec3=require("../vec3"),equals=(e,s)=>!!vec3.equals(e[1],s[1])&&!!vec3.equals(e[0],s[0]);module.exports=equals;
1105
1096
 
1106
- },{"../vec3":344}],242:[function(require,module,exports){
1097
+ },{"../vec3":341}],239:[function(require,module,exports){
1107
1098
  const vec3=require("../vec3"),{solve2Linear:solve2Linear}=require("../utils"),{EPS:EPS}=require("../constants"),fromPointAndDirection=require("./fromPointAndDirection"),fromPlanes=(e,r,o)=>{let n=vec3.cross(vec3.create(),r,o),s=vec3.length(n);if(s<EPS)throw new Error("parallel planes do not intersect");s=1/s,n=vec3.scale(n,n,s);const t=Math.abs(n[0]),a=Math.abs(n[1]),i=Math.abs(n[2]);let l,c;return t>=a&&t>=i?(c=solve2Linear(r[1],r[2],o[1],o[2],r[3],o[3]),l=vec3.fromValues(0,c[0],c[1])):a>=t&&a>=i?(c=solve2Linear(r[0],r[2],o[0],o[2],r[3],o[3]),l=vec3.fromValues(c[0],0,c[1])):(c=solve2Linear(r[0],r[1],o[0],o[1],r[3],o[3]),l=vec3.fromValues(c[0],c[1],0)),fromPointAndDirection(e,l,n)};module.exports=fromPlanes;
1108
1099
 
1109
- },{"../constants":217,"../utils":291,"../vec3":344,"./fromPointAndDirection":243}],243:[function(require,module,exports){
1100
+ },{"../constants":214,"../utils":288,"../vec3":341,"./fromPointAndDirection":240}],240:[function(require,module,exports){
1110
1101
  const vec3=require("../vec3"),fromPointAndDirection=(e,c,o)=>{const r=vec3.normalize(vec3.create(),o);return vec3.copy(e[0],c),vec3.copy(e[1],r),e};module.exports=fromPointAndDirection;
1111
1102
 
1112
- },{"../vec3":344}],244:[function(require,module,exports){
1103
+ },{"../vec3":341}],241:[function(require,module,exports){
1113
1104
  const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),fromPoints=(o,r,e)=>{const t=vec3.subtract(vec3.create(),e,r);return fromPointAndDirection(o,r,t)};module.exports=fromPoints;
1114
1105
 
1115
- },{"../vec3":344,"./fromPointAndDirection":243}],245:[function(require,module,exports){
1106
+ },{"../vec3":341,"./fromPointAndDirection":240}],242:[function(require,module,exports){
1116
1107
  module.exports={clone:require("./clone"),closestPoint:require("./closestPoint"),copy:require("./copy"),create:require("./create"),direction:require("./direction"),distanceToPoint:require("./distanceToPoint"),equals:require("./equals"),fromPlanes:require("./fromPlanes"),fromPointAndDirection:require("./fromPointAndDirection"),fromPoints:require("./fromPoints"),intersectPointOfLineAndPlane:require("./intersectPointOfLineAndPlane"),origin:require("./origin"),reverse:require("./reverse"),toString:require("./toString"),transform:require("./transform")};
1117
1108
 
1118
- },{"./clone":235,"./closestPoint":236,"./copy":237,"./create":238,"./direction":239,"./distanceToPoint":240,"./equals":241,"./fromPlanes":242,"./fromPointAndDirection":243,"./fromPoints":244,"./intersectPointOfLineAndPlane":246,"./origin":247,"./reverse":248,"./toString":249,"./transform":250}],246:[function(require,module,exports){
1109
+ },{"./clone":232,"./closestPoint":233,"./copy":234,"./create":235,"./direction":236,"./distanceToPoint":237,"./equals":238,"./fromPlanes":239,"./fromPointAndDirection":240,"./fromPoints":241,"./intersectPointOfLineAndPlane":243,"./origin":244,"./reverse":245,"./toString":246,"./transform":247}],243:[function(require,module,exports){
1119
1110
  const vec3=require("../vec3"),intersectToPlane=(e,c)=>{const t=c,r=c[3],o=e[0],v=e[1],n=(r-vec3.dot(t,o))/vec3.dot(t,v);return vec3.add(vec3.create(),o,vec3.scale(vec3.create(),v,n))};module.exports=intersectToPlane;
1120
1111
 
1121
- },{"../vec3":344}],247:[function(require,module,exports){
1112
+ },{"../vec3":341}],244:[function(require,module,exports){
1122
1113
  const origin=o=>o[0];module.exports=origin;
1123
1114
 
1124
- },{}],248:[function(require,module,exports){
1115
+ },{}],245:[function(require,module,exports){
1125
1116
  const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),reverse=(e,r)=>{const n=vec3.clone(r[0]),o=vec3.negate(vec3.create(),r[1]);return fromPointAndDirection(e,n,o)};module.exports=reverse;
1126
1117
 
1127
- },{"../vec3":344,"./fromPointAndDirection":243}],249:[function(require,module,exports){
1118
+ },{"../vec3":341,"./fromPointAndDirection":240}],246:[function(require,module,exports){
1128
1119
  const toString=t=>{const o=t[0],i=t[1];return`line3: point: (${o[0].toFixed(7)}, ${o[1].toFixed(7)}, ${o[2].toFixed(7)}) direction: (${i[0].toFixed(7)}, ${i[1].toFixed(7)}, ${i[2].toFixed(7)})`};module.exports=toString;
1129
1120
 
1130
- },{}],250:[function(require,module,exports){
1121
+ },{}],247:[function(require,module,exports){
1131
1122
  const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),transform=(r,e,t)=>{const o=e[0],c=e[1],n=vec3.add(vec3.create(),o,c),i=vec3.transform(vec3.create(),o,t),a=vec3.transform(n,n,t),m=vec3.subtract(a,a,i);return fromPointAndDirection(r,i,m)};module.exports=transform;
1132
1123
 
1133
- },{"../vec3":344,"./fromPointAndDirection":243}],251:[function(require,module,exports){
1124
+ },{"../vec3":341,"./fromPointAndDirection":240}],248:[function(require,module,exports){
1134
1125
  const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d[2]=o[2]+a[2],d[3]=o[3]+a[3],d[4]=o[4]+a[4],d[5]=o[5]+a[5],d[6]=o[6]+a[6],d[7]=o[7]+a[7],d[8]=o[8]+a[8],d[9]=o[9]+a[9],d[10]=o[10]+a[10],d[11]=o[11]+a[11],d[12]=o[12]+a[12],d[13]=o[13]+a[13],d[14]=o[14]+a[14],d[15]=o[15]+a[15],d);module.exports=add;
1135
1126
 
1136
- },{}],252:[function(require,module,exports){
1127
+ },{}],249:[function(require,module,exports){
1137
1128
  const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r};module.exports=clone;
1138
1129
 
1139
- },{"./create":254}],253:[function(require,module,exports){
1130
+ },{"./create":251}],250:[function(require,module,exports){
1140
1131
  const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o[4]=c[4],o[5]=c[5],o[6]=c[6],o[7]=c[7],o[8]=c[8],o[9]=c[9],o[10]=c[10],o[11]=c[11],o[12]=c[12],o[13]=c[13],o[14]=c[14],o[15]=c[15],o);module.exports=copy;
1141
1132
 
1142
- },{}],254:[function(require,module,exports){
1133
+ },{}],251:[function(require,module,exports){
1143
1134
  const create=()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];module.exports=create;
1144
1135
 
1145
- },{}],255:[function(require,module,exports){
1136
+ },{}],252:[function(require,module,exports){
1146
1137
  const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2]&&e[3]===s[3]&&e[4]===s[4]&&e[5]===s[5]&&e[6]===s[6]&&e[7]===s[7]&&e[8]===s[8]&&e[9]===s[9]&&e[10]===s[10]&&e[11]===s[11]&&e[12]===s[12]&&e[13]===s[13]&&e[14]===s[14]&&e[15]===s[15];module.exports=equals;
1147
1138
 
1148
- },{}],256:[function(require,module,exports){
1139
+ },{}],253:[function(require,module,exports){
1149
1140
  const{EPS:EPS}=require("../constants"),{sin:sin,cos:cos}=require("../utils/trigonometry"),identity=require("./identity"),fromRotation=(t,o,i)=>{let[n,r,s]=i;const e=n*n+r*r+s*s;if(Math.abs(e)<EPS)return identity(t);const c=1/Math.sqrt(e);n*=c,r*=c,s*=c;const u=sin(o),a=cos(o),d=1-a;return t[0]=n*n*d+a,t[1]=r*n*d+s*u,t[2]=s*n*d-r*u,t[3]=0,t[4]=n*r*d-s*u,t[5]=r*r*d+a,t[6]=s*r*d+n*u,t[7]=0,t[8]=n*s*d+r*u,t[9]=r*s*d-n*u,t[10]=s*s*d+a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};module.exports=fromRotation;
1150
1141
 
1151
- },{"../constants":217,"../utils/trigonometry":295,"./identity":265}],257:[function(require,module,exports){
1142
+ },{"../constants":214,"../utils/trigonometry":292,"./identity":262}],254:[function(require,module,exports){
1152
1143
  const fromScaling=(o,c)=>(o[0]=c[0],o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=c[1],o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=c[2],o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o);module.exports=fromScaling;
1153
1144
 
1154
- },{}],258:[function(require,module,exports){
1145
+ },{}],255:[function(require,module,exports){
1155
1146
  const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromTaitBryanRotation=(o,s,n,t)=>{const i=sin(s),r=cos(s),c=sin(n),a=cos(n),e=sin(t),m=cos(t);return o[0]=a*r,o[1]=a*i,o[2]=-c,o[3]=0,o[4]=e*c*r-m*i,o[5]=m*r+e*c*i,o[6]=e*a,o[7]=0,o[8]=e*i+m*c*r,o[9]=m*c*i-e*r,o[10]=m*a,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromTaitBryanRotation;
1156
1147
 
1157
- },{"../utils/trigonometry":295}],259:[function(require,module,exports){
1148
+ },{"../utils/trigonometry":292}],256:[function(require,module,exports){
1158
1149
  const fromTranslation=(o,n)=>(o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=n[0],o[13]=n[1],o[14]=n[2],o[15]=1,o);module.exports=fromTranslation;
1159
1150
 
1160
- },{}],260:[function(require,module,exports){
1151
+ },{}],257:[function(require,module,exports){
1161
1152
  const create=require("./create"),fromValues=(e,r,t,o,a,c,s,u,l,m,n,f,V,d,i,p)=>{const q=create();return q[0]=e,q[1]=r,q[2]=t,q[3]=o,q[4]=a,q[5]=c,q[6]=s,q[7]=u,q[8]=l,q[9]=m,q[10]=n,q[11]=f,q[12]=V,q[13]=d,q[14]=i,q[15]=p,q};module.exports=fromValues;
1162
1153
 
1163
- },{"./create":254}],261:[function(require,module,exports){
1154
+ },{"./create":251}],258:[function(require,module,exports){
1164
1155
  const vec3=require("../vec3"),fromRotation=require("./fromRotation"),fromVectorRotation=(o,e,t)=>{const r=vec3.normalize(vec3.create(),e),c=vec3.normalize(vec3.create(),t),n=vec3.cross(vec3.create(),c,r),a=vec3.dot(c,r);if(-1===a)return fromRotation(o,Math.PI,vec3.orthogonal(n,r));const i=1/(1+a);return o[0]=n[0]*n[0]*i+a,o[1]=n[1]*n[0]*i-n[2],o[2]=n[2]*n[0]*i+n[1],o[3]=0,o[4]=n[0]*n[1]*i+n[2],o[5]=n[1]*n[1]*i+a,o[6]=n[2]*n[1]*i-n[0],o[7]=0,o[8]=n[0]*n[2]*i-n[1],o[9]=n[1]*n[2]*i+n[0],o[10]=n[2]*n[2]*i+a,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromVectorRotation;
1165
1156
 
1166
- },{"../vec3":344,"./fromRotation":256}],262:[function(require,module,exports){
1157
+ },{"../vec3":341,"./fromRotation":253}],259:[function(require,module,exports){
1167
1158
  const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromXRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=n,o[6]=s,o[7]=0,o[8]=0,o[9]=-s,o[10]=n,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromXRotation;
1168
1159
 
1169
- },{"../utils/trigonometry":295}],263:[function(require,module,exports){
1160
+ },{"../utils/trigonometry":292}],260:[function(require,module,exports){
1170
1161
  const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromYRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=n,o[1]=0,o[2]=-s,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=s,o[9]=0,o[10]=n,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromYRotation;
1171
1162
 
1172
- },{"../utils/trigonometry":295}],264:[function(require,module,exports){
1163
+ },{"../utils/trigonometry":292}],261:[function(require,module,exports){
1173
1164
  const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromZRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=n,o[1]=s,o[2]=0,o[3]=0,o[4]=-s,o[5]=n,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromZRotation;
1174
1165
 
1175
- },{"../utils/trigonometry":295}],265:[function(require,module,exports){
1166
+ },{"../utils/trigonometry":292}],262:[function(require,module,exports){
1176
1167
  const identity=t=>(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t);module.exports=identity;
1177
1168
 
1178
- },{}],266:[function(require,module,exports){
1169
+ },{}],263:[function(require,module,exports){
1179
1170
  module.exports={add:require("./add"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),invert:require("./invert"),equals:require("./equals"),fromRotation:require("./fromRotation"),fromScaling:require("./fromScaling"),fromTaitBryanRotation:require("./fromTaitBryanRotation"),fromTranslation:require("./fromTranslation"),fromValues:require("./fromValues"),fromVectorRotation:require("./fromVectorRotation"),fromXRotation:require("./fromXRotation"),fromYRotation:require("./fromYRotation"),fromZRotation:require("./fromZRotation"),identity:require("./identity"),isIdentity:require("./isIdentity"),isOnlyTransformScale:require("./isOnlyTransformScale"),isMirroring:require("./isMirroring"),mirrorByPlane:require("./mirrorByPlane"),multiply:require("./multiply"),rotate:require("./rotate"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),scale:require("./scale"),subtract:require("./subtract"),toString:require("./toString"),translate:require("./translate")};
1180
1171
 
1181
- },{"./add":251,"./clone":252,"./copy":253,"./create":254,"./equals":255,"./fromRotation":256,"./fromScaling":257,"./fromTaitBryanRotation":258,"./fromTranslation":259,"./fromValues":260,"./fromVectorRotation":261,"./fromXRotation":262,"./fromYRotation":263,"./fromZRotation":264,"./identity":265,"./invert":267,"./isIdentity":268,"./isMirroring":269,"./isOnlyTransformScale":270,"./mirrorByPlane":271,"./multiply":272,"./rotate":273,"./rotateX":274,"./rotateY":275,"./rotateZ":276,"./scale":277,"./subtract":278,"./toString":279,"./translate":280}],267:[function(require,module,exports){
1172
+ },{"./add":248,"./clone":249,"./copy":250,"./create":251,"./equals":252,"./fromRotation":253,"./fromScaling":254,"./fromTaitBryanRotation":255,"./fromTranslation":256,"./fromValues":257,"./fromVectorRotation":258,"./fromXRotation":259,"./fromYRotation":260,"./fromZRotation":261,"./identity":262,"./invert":264,"./isIdentity":265,"./isMirroring":266,"./isOnlyTransformScale":267,"./mirrorByPlane":268,"./multiply":269,"./rotate":270,"./rotateX":271,"./rotateY":272,"./rotateZ":273,"./scale":274,"./subtract":275,"./toString":276,"./translate":277}],264:[function(require,module,exports){
1182
1173
  const invert=(t,e)=>{const n=e[0],r=e[1],l=e[2],o=e[3],s=e[4],u=e[5],c=e[6],i=e[7],v=e[8],d=e[9],m=e[10],p=e[11],x=e[12],a=e[13],b=e[14],f=e[15],g=n*u-r*s,h=n*c-l*s,j=n*i-o*s,k=r*c-l*u,q=r*i-o*u,w=l*i-o*c,y=v*a-d*x,z=v*b-m*x,A=v*f-p*x,B=d*b-m*a,C=d*f-p*a,D=m*f-p*b;let E=g*D-h*C+j*B+k*A-q*z+w*y;return E?(E=1/E,t[0]=(u*D-c*C+i*B)*E,t[1]=(l*C-r*D-o*B)*E,t[2]=(a*w-b*q+f*k)*E,t[3]=(m*q-d*w-p*k)*E,t[4]=(c*A-s*D-i*z)*E,t[5]=(n*D-l*A+o*z)*E,t[6]=(b*j-x*w-f*h)*E,t[7]=(v*w-m*j+p*h)*E,t[8]=(s*C-u*A+i*y)*E,t[9]=(r*A-n*C-o*y)*E,t[10]=(x*q-a*j+f*g)*E,t[11]=(d*j-v*q-p*g)*E,t[12]=(u*z-s*B-c*y)*E,t[13]=(n*B-r*z+l*y)*E,t[14]=(a*h-x*k-b*g)*E,t[15]=(v*k-d*h+m*g)*E,t):null};module.exports=invert;
1183
1174
 
1184
- },{}],268:[function(require,module,exports){
1175
+ },{}],265:[function(require,module,exports){
1185
1176
  const isIdentity=t=>1===t[0]&&0===t[1]&&0===t[2]&&0===t[3]&&0===t[4]&&1===t[5]&&0===t[6]&&0===t[7]&&0===t[8]&&0===t[9]&&1===t[10]&&0===t[11]&&0===t[12]&&0===t[13]&&0===t[14]&&1===t[15];module.exports=isIdentity;
1186
1177
 
1187
- },{}],269:[function(require,module,exports){
1178
+ },{}],266:[function(require,module,exports){
1188
1179
  const isMirroring=r=>{const i=r[4]*r[9]-r[8]*r[5],o=r[8]*r[1]-r[0]*r[9],n=r[0]*r[5]-r[4]*r[1];return i*r[2]+o*r[6]+n*r[10]<0};module.exports=isMirroring;
1189
1180
 
1190
- },{}],270:[function(require,module,exports){
1181
+ },{}],267:[function(require,module,exports){
1191
1182
  const isOnlyTransformScale=s=>isZero(s[1])&&isZero(s[2])&&isZero(s[3])&&isZero(s[4])&&isZero(s[6])&&isZero(s[7])&&isZero(s[8])&&isZero(s[9])&&isZero(s[11])&&1===s[15],isZero=s=>Math.abs(s)<Number.EPSILON;module.exports=isOnlyTransformScale;
1192
1183
 
1193
- },{}],271:[function(require,module,exports){
1184
+ },{}],268:[function(require,module,exports){
1194
1185
  const mirrorByPlane=(r,o)=>{const[e,n,t,l]=o;return r[0]=1-2*e*e,r[1]=-2*n*e,r[2]=-2*t*e,r[3]=0,r[4]=-2*e*n,r[5]=1-2*n*n,r[6]=-2*t*n,r[7]=0,r[8]=-2*e*t,r[9]=-2*n*t,r[10]=1-2*t*t,r[11]=0,r[12]=2*e*l,r[13]=2*n*l,r[14]=2*t*l,r[15]=1,r};module.exports=mirrorByPlane;
1195
1186
 
1196
- },{}],272:[function(require,module,exports){
1187
+ },{}],269:[function(require,module,exports){
1197
1188
  const multiply=(t,l,e)=>{const o=l[0],u=l[1],m=l[2],n=l[3],p=l[4],r=l[5],s=l[6],c=l[7],i=l[8],y=l[9],d=l[10],x=l[11],a=l[12],b=l[13],f=l[14],g=l[15];let h=e[0],j=e[1],k=e[2],q=e[3];return t[0]=h*o+j*p+k*i+q*a,t[1]=h*u+j*r+k*y+q*b,t[2]=h*m+j*s+k*d+q*f,t[3]=h*n+j*c+k*x+q*g,h=e[4],j=e[5],k=e[6],q=e[7],t[4]=h*o+j*p+k*i+q*a,t[5]=h*u+j*r+k*y+q*b,t[6]=h*m+j*s+k*d+q*f,t[7]=h*n+j*c+k*x+q*g,h=e[8],j=e[9],k=e[10],q=e[11],t[8]=h*o+j*p+k*i+q*a,t[9]=h*u+j*r+k*y+q*b,t[10]=h*m+j*s+k*d+q*f,t[11]=h*n+j*c+k*x+q*g,h=e[12],j=e[13],k=e[14],q=e[15],t[12]=h*o+j*p+k*i+q*a,t[13]=h*u+j*r+k*y+q*b,t[14]=h*m+j*s+k*d+q*f,t[15]=h*n+j*c+k*x+q*g,t};module.exports=multiply;
1198
1189
 
1199
- },{}],273:[function(require,module,exports){
1190
+ },{}],270:[function(require,module,exports){
1200
1191
  const{EPS:EPS}=require("../constants"),{sin:sin,cos:cos}=require("../utils/trigonometry"),copy=require("./copy"),rotate=(t,o,r,s)=>{let[e,n,c]=s;const i=e*e+n*n+c*c;if(Math.abs(i)<EPS)return copy(t,o);const u=1/Math.sqrt(i);e*=u,n*=u,c*=u;const a=sin(r),p=cos(r),q=1-p,y=o[0],l=o[1],E=o[2],P=o[3],S=o[4],h=o[5],m=o[6],M=o[7],b=o[8],d=o[9],f=o[10],g=o[11],x=e*e*q+p,j=n*e*q+c*a,k=c*e*q-n*a,v=e*n*q-c*a,w=n*n*q+p,z=c*n*q+e*a,A=e*c*q+n*a,B=n*c*q-e*a,C=c*c*q+p;return t[0]=y*x+S*j+b*k,t[1]=l*x+h*j+d*k,t[2]=E*x+m*j+f*k,t[3]=P*x+M*j+g*k,t[4]=y*v+S*w+b*z,t[5]=l*v+h*w+d*z,t[6]=E*v+m*w+f*z,t[7]=P*v+M*w+g*z,t[8]=y*A+S*B+b*C,t[9]=l*A+h*B+d*C,t[10]=E*A+m*B+f*C,t[11]=P*A+M*B+g*C,o!==t&&(t[12]=o[12],t[13]=o[13],t[14]=o[14],t[15]=o[15]),t};module.exports=rotate;
1201
1192
 
1202
- },{"../constants":217,"../utils/trigonometry":295,"./copy":253}],274:[function(require,module,exports){
1193
+ },{"../constants":214,"../utils/trigonometry":292,"./copy":250}],271:[function(require,module,exports){
1203
1194
  const{sin:sin,cos:cos}=require("../utils/trigonometry"),rotateX=(o,t,s)=>{const r=sin(s),e=cos(s),n=t[4],i=t[5],c=t[6],u=t[7],a=t[8],l=t[9],m=t[10],X=t[11];return t!==o&&(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=t[3],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[4]=n*e+a*r,o[5]=i*e+l*r,o[6]=c*e+m*r,o[7]=u*e+X*r,o[8]=a*e-n*r,o[9]=l*e-i*r,o[10]=m*e-c*r,o[11]=X*e-u*r,o};module.exports=rotateX;
1204
1195
 
1205
- },{"../utils/trigonometry":295}],275:[function(require,module,exports){
1196
+ },{"../utils/trigonometry":292}],272:[function(require,module,exports){
1206
1197
  const{sin:sin,cos:cos}=require("../utils/trigonometry"),rotateY=(o,t,s)=>{const r=sin(s),e=cos(s),n=t[0],i=t[1],c=t[2],u=t[3],a=t[8],l=t[9],m=t[10],Y=t[11];return t!==o&&(o[4]=t[4],o[5]=t[5],o[6]=t[6],o[7]=t[7],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[0]=n*e-a*r,o[1]=i*e-l*r,o[2]=c*e-m*r,o[3]=u*e-Y*r,o[8]=n*r+a*e,o[9]=i*r+l*e,o[10]=c*r+m*e,o[11]=u*r+Y*e,o};module.exports=rotateY;
1207
1198
 
1208
- },{"../utils/trigonometry":295}],276:[function(require,module,exports){
1199
+ },{"../utils/trigonometry":292}],273:[function(require,module,exports){
1209
1200
  const{sin:sin,cos:cos}=require("../utils/trigonometry"),rotateZ=(o,t,s)=>{const r=sin(s),e=cos(s),n=t[0],i=t[1],c=t[2],u=t[3],a=t[4],l=t[5],m=t[6],Z=t[7];return t!==o&&(o[8]=t[8],o[9]=t[9],o[10]=t[10],o[11]=t[11],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[0]=n*e+a*r,o[1]=i*e+l*r,o[2]=c*e+m*r,o[3]=u*e+Z*r,o[4]=a*e-n*r,o[5]=l*e-i*r,o[6]=m*e-c*r,o[7]=Z*e-u*r,o};module.exports=rotateZ;
1210
1201
 
1211
- },{"../utils/trigonometry":295}],277:[function(require,module,exports){
1202
+ },{"../utils/trigonometry":292}],274:[function(require,module,exports){
1212
1203
  const scale=(e,s,c)=>{const o=c[0],t=c[1],l=c[2];return e[0]=s[0]*o,e[1]=s[1]*o,e[2]=s[2]*o,e[3]=s[3]*o,e[4]=s[4]*t,e[5]=s[5]*t,e[6]=s[6]*t,e[7]=s[7]*t,e[8]=s[8]*l,e[9]=s[9]*l,e[10]=s[10]*l,e[11]=s[11]*l,e[12]=s[12],e[13]=s[13],e[14]=s[14],e[15]=s[15],e};module.exports=scale;
1213
1204
 
1214
- },{}],278:[function(require,module,exports){
1205
+ },{}],275:[function(require,module,exports){
1215
1206
  const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t[2]=s[2]-c[2],t[3]=s[3]-c[3],t[4]=s[4]-c[4],t[5]=s[5]-c[5],t[6]=s[6]-c[6],t[7]=s[7]-c[7],t[8]=s[8]-c[8],t[9]=s[9]-c[9],t[10]=s[10]-c[10],t[11]=s[11]-c[11],t[12]=s[12]-c[12],t[13]=s[13]-c[13],t[14]=s[14]-c[14],t[15]=s[15]-c[15],t);module.exports=subtract;
1216
1207
 
1217
- },{}],279:[function(require,module,exports){
1208
+ },{}],276:[function(require,module,exports){
1218
1209
  const toString=t=>t.map(t=>t.toFixed(7)).toString();module.exports=toString;
1219
1210
 
1220
- },{}],280:[function(require,module,exports){
1211
+ },{}],277:[function(require,module,exports){
1221
1212
  const translate=(t,e,n)=>{const r=n[0],s=n[1],a=n[2];let l,o,c,u,d,m,p,x,b,f,g,h;return e===t?(t[12]=e[0]*r+e[4]*s+e[8]*a+e[12],t[13]=e[1]*r+e[5]*s+e[9]*a+e[13],t[14]=e[2]*r+e[6]*s+e[10]*a+e[14],t[15]=e[3]*r+e[7]*s+e[11]*a+e[15]):(l=e[0],o=e[1],c=e[2],u=e[3],d=e[4],m=e[5],p=e[6],x=e[7],b=e[8],f=e[9],g=e[10],h=e[11],t[0]=l,t[1]=o,t[2]=c,t[3]=u,t[4]=d,t[5]=m,t[6]=p,t[7]=x,t[8]=b,t[9]=f,t[10]=g,t[11]=h,t[12]=l*r+d*s+b*a+e[12],t[13]=o*r+m*s+f*a+e[13],t[14]=c*r+p*s+g*a+e[14],t[15]=u*r+x*s+h*a+e[15]),t};module.exports=translate;
1222
1213
 
1223
- },{}],281:[function(require,module,exports){
1214
+ },{}],278:[function(require,module,exports){
1224
1215
  const flip=(l,o)=>(l[0]=-o[0],l[1]=-o[1],l[2]=-o[2],l[3]=-o[3],l);module.exports=flip;
1225
1216
 
1226
- },{}],282:[function(require,module,exports){
1217
+ },{}],279:[function(require,module,exports){
1227
1218
  const vec3=require("../vec3"),fromNormalAndPoint=(e,o,r)=>{const c=vec3.normalize(vec3.create(),o),n=vec3.dot(r,c);return e[0]=c[0],e[1]=c[1],e[2]=c[2],e[3]=n,e};module.exports=fromNormalAndPoint;
1228
1219
 
1229
- },{"../vec3":344}],283:[function(require,module,exports){
1220
+ },{"../vec3":341}],280:[function(require,module,exports){
1230
1221
  const vec3=require("../vec3"),fromPoints=(e,...c)=>{const r=c.length,t=vec3.create(),o=vec3.create(),v=e=>{const v=c[e],n=c[(e+1)%r],s=c[(e+2)%r];return vec3.subtract(t,n,v),vec3.subtract(o,s,v),vec3.cross(t,t,o),vec3.normalize(t,t),t};return e[0]=0,e[1]=0,e[2]=0,3===r?vec3.copy(e,v(0)):(c.forEach((c,r)=>{vec3.add(e,e,v(r))}),vec3.normalize(e,e)),e[3]=vec3.dot(e,c[0]),e};module.exports=fromPoints;
1231
1222
 
1232
- },{"../vec3":344}],284:[function(require,module,exports){
1223
+ },{"../vec3":341}],281:[function(require,module,exports){
1233
1224
  const{EPS:EPS}=require("../constants"),vec3=require("../vec3"),fromPointsRandom=(e,c,o,t)=>{let r=vec3.subtract(vec3.create(),o,c),v=vec3.subtract(vec3.create(),t,c);vec3.length(r)<EPS&&(r=vec3.orthogonal(r,v)),vec3.length(v)<EPS&&(v=vec3.orthogonal(v,r));let n=vec3.cross(vec3.create(),r,v);vec3.length(n)<EPS&&(v=vec3.orthogonal(v,r),n=vec3.cross(n,r,v)),n=vec3.normalize(n,n);const s=vec3.dot(n,c);return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=s,e};module.exports=fromPointsRandom;
1234
1225
 
1235
- },{"../constants":217,"../vec3":344}],285:[function(require,module,exports){
1226
+ },{"../constants":214,"../vec3":341}],282:[function(require,module,exports){
1236
1227
  module.exports={clone:require("../vec4/clone"),copy:require("../vec4/copy"),create:require("../vec4/create"),equals:require("../vec4/equals"),flip:require("./flip"),fromNormalAndPoint:require("./fromNormalAndPoint"),fromValues:require("../vec4/fromValues"),fromPoints:require("./fromPoints"),fromPointsRandom:require("./fromPointsRandom"),projectionOfPoint:require("./projectionOfPoint"),signedDistanceToPoint:require("./signedDistanceToPoint"),toString:require("../vec4/toString"),transform:require("./transform")};
1237
1228
 
1238
- },{"../vec4/clone":363,"../vec4/copy":364,"../vec4/create":365,"../vec4/equals":367,"../vec4/fromValues":369,"../vec4/toString":371,"./flip":281,"./fromNormalAndPoint":282,"./fromPoints":283,"./fromPointsRandom":284,"./projectionOfPoint":286,"./signedDistanceToPoint":287,"./transform":288}],286:[function(require,module,exports){
1229
+ },{"../vec4/clone":360,"../vec4/copy":361,"../vec4/create":362,"../vec4/equals":364,"../vec4/fromValues":366,"../vec4/toString":368,"./flip":278,"./fromNormalAndPoint":279,"./fromPoints":280,"./fromPointsRandom":281,"./projectionOfPoint":283,"./signedDistanceToPoint":284,"./transform":285}],283:[function(require,module,exports){
1239
1230
  const vec3=require("../vec3"),projectionOfPoint=(e,o)=>{const r=o[0]*e[0]+o[1]*e[1]+o[2]*e[2]-e[3],t=o[0]-r*e[0],c=o[1]-r*e[1],n=o[2]-r*e[2];return vec3.fromValues(t,c,n)};module.exports=projectionOfPoint;
1240
1231
 
1241
- },{"../vec3":344}],287:[function(require,module,exports){
1232
+ },{"../vec3":341}],284:[function(require,module,exports){
1242
1233
  const vec3=require("../vec3"),signedDistanceToPoint=(e,o)=>vec3.dot(e,o)-e[3];module.exports=signedDistanceToPoint;
1243
1234
 
1244
- },{"../vec3":344}],288:[function(require,module,exports){
1235
+ },{"../vec3":341}],285:[function(require,module,exports){
1245
1236
  const mat4=require("../mat4"),vec3=require("../vec3"),fromPoints=require("./fromPoints"),flip=require("./flip"),transform=(e,r,c)=>{const t=mat4.isMirroring(c),o=vec3.orthogonal(vec3.create(),r),a=vec3.cross(o,r,o),v=vec3.cross(vec3.create(),r,a);let s=vec3.fromScalar(vec3.create(),r[3]);vec3.multiply(s,s,r);let i=vec3.add(vec3.create(),s,a),m=vec3.add(vec3.create(),s,v);return s=vec3.transform(s,s,c),i=vec3.transform(i,i,c),m=vec3.transform(m,m,c),fromPoints(e,s,i,m),t&&flip(e,e),e};module.exports=transform;
1246
1237
 
1247
- },{"../mat4":266,"../vec3":344,"./flip":281,"./fromPoints":283}],289:[function(require,module,exports){
1238
+ },{"../mat4":263,"../vec3":341,"./flip":278,"./fromPoints":280}],286:[function(require,module,exports){
1248
1239
  const{NEPS:NEPS}=require("../constants"),aboutEqualNormals=(a,s)=>Math.abs(a[0]-s[0])<=NEPS&&Math.abs(a[1]-s[1])<=NEPS&&Math.abs(a[2]-s[2])<=NEPS;module.exports=aboutEqualNormals;
1249
1240
 
1250
- },{"../constants":217}],290:[function(require,module,exports){
1241
+ },{"../constants":214}],287:[function(require,module,exports){
1251
1242
  const area=e=>{let t=0;for(let r=0;r<e.length;r++){const l=(r+1)%e.length;t+=e[r][0]*e[l][1],t-=e[l][0]*e[r][1]}return t/2};module.exports=area;
1252
1243
 
1253
- },{}],291:[function(require,module,exports){
1244
+ },{}],288:[function(require,module,exports){
1254
1245
  module.exports={aboutEqualNormals:require("./aboutEqualNormals"),area:require("./area"),cos:require("./trigonometry").cos,interpolateBetween2DPointsForY:require("./interpolateBetween2DPointsForY"),intersect:require("./intersect"),sin:require("./trigonometry").sin,solve2Linear:require("./solve2Linear")};
1255
1246
 
1256
- },{"./aboutEqualNormals":289,"./area":290,"./interpolateBetween2DPointsForY":292,"./intersect":293,"./solve2Linear":294,"./trigonometry":295}],292:[function(require,module,exports){
1247
+ },{"./aboutEqualNormals":286,"./area":287,"./interpolateBetween2DPointsForY":289,"./intersect":290,"./solve2Linear":291,"./trigonometry":292}],289:[function(require,module,exports){
1257
1248
  const interpolateBetween2DPointsForY=(e,t,o)=>{let n,r=o-e[1],i=t[1]-e[1];return i<0&&(r=-r,i=-i),n=r<=0?0:r>=i?1:i<1e-10?.5:r/i,e[0]+n*(t[0]-e[0])};module.exports=interpolateBetween2DPointsForY;
1258
1249
 
1259
- },{}],293:[function(require,module,exports){
1250
+ },{}],290:[function(require,module,exports){
1260
1251
  const intersect=(t,e,r,n)=>{if(t[0]===e[0]&&t[1]===e[1]||r[0]===n[0]&&r[1]===n[1])return;const s=(n[1]-r[1])*(e[0]-t[0])-(n[0]-r[0])*(e[1]-t[1]);if(Math.abs(s)<Number.MIN_VALUE)return;const o=((n[0]-r[0])*(t[1]-r[1])-(n[1]-r[1])*(t[0]-r[0]))/s,c=((e[0]-t[0])*(t[1]-r[1])-(e[1]-t[1])*(t[0]-r[0]))/s;return o<0||o>1||c<0||c>1?void 0:[t[0]+o*(e[0]-t[0]),t[1]+o*(e[1]-t[1])]};module.exports=intersect;
1261
1252
 
1262
- },{}],294:[function(require,module,exports){
1253
+ },{}],291:[function(require,module,exports){
1263
1254
  const solve2Linear=(e,o,n,r,s,t)=>{const l=1/(e*r-o*n);let a=s*r-o*t,c=-s*n+e*t;return[a*=l,c*=l]};module.exports=solve2Linear;
1264
1255
 
1265
- },{}],295:[function(require,module,exports){
1256
+ },{}],292:[function(require,module,exports){
1266
1257
  const{NEPS:NEPS}=require("../constants"),rezero=s=>Math.abs(s)<NEPS?0:s,sin=s=>rezero(Math.sin(s)),cos=s=>rezero(Math.cos(s));module.exports={sin:sin,cos:cos};
1267
1258
 
1268
- },{"../constants":217}],296:[function(require,module,exports){
1259
+ },{"../constants":214}],293:[function(require,module,exports){
1269
1260
  const abs=(a,s)=>(a[0]=Math.abs(s[0]),a[1]=Math.abs(s[1]),a);module.exports=abs;
1270
1261
 
1271
- },{}],297:[function(require,module,exports){
1262
+ },{}],294:[function(require,module,exports){
1272
1263
  const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d);module.exports=add;
1273
1264
 
1274
- },{}],298:[function(require,module,exports){
1265
+ },{}],295:[function(require,module,exports){
1275
1266
  module.exports=require("./angleRadians");
1276
1267
 
1277
- },{"./angleRadians":300}],299:[function(require,module,exports){
1268
+ },{"./angleRadians":297}],296:[function(require,module,exports){
1278
1269
  const angleRadians=require("./angleRadians"),angleDegrees=e=>57.29577951308232*angleRadians(e);module.exports=angleDegrees;
1279
1270
 
1280
- },{"./angleRadians":300}],300:[function(require,module,exports){
1271
+ },{"./angleRadians":297}],297:[function(require,module,exports){
1281
1272
  const angleRadians=a=>Math.atan2(a[1],a[0]);module.exports=angleRadians;
1282
1273
 
1283
- },{}],301:[function(require,module,exports){
1274
+ },{}],298:[function(require,module,exports){
1284
1275
  const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r};module.exports=clone;
1285
1276
 
1286
- },{"./create":303}],302:[function(require,module,exports){
1277
+ },{"./create":300}],299:[function(require,module,exports){
1287
1278
  const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o);module.exports=copy;
1288
1279
 
1289
- },{}],303:[function(require,module,exports){
1280
+ },{}],300:[function(require,module,exports){
1290
1281
  const create=()=>[0,0];module.exports=create;
1291
1282
 
1292
- },{}],304:[function(require,module,exports){
1283
+ },{}],301:[function(require,module,exports){
1293
1284
  const cross=(s,o,c)=>(s[0]=0,s[1]=0,s[2]=o[0]*c[1]-o[1]*c[0],s);module.exports=cross;
1294
1285
 
1295
- },{}],305:[function(require,module,exports){
1286
+ },{}],302:[function(require,module,exports){
1296
1287
  const distance=(t,s)=>{const e=s[0]-t[0],n=s[1]-t[1];return Math.sqrt(e*e+n*n)};module.exports=distance;
1297
1288
 
1298
- },{}],306:[function(require,module,exports){
1289
+ },{}],303:[function(require,module,exports){
1299
1290
  const divide=(d,e,i)=>(d[0]=e[0]/i[0],d[1]=e[1]/i[1],d);module.exports=divide;
1300
1291
 
1301
- },{}],307:[function(require,module,exports){
1292
+ },{}],304:[function(require,module,exports){
1302
1293
  const dot=(o,t)=>o[0]*t[0]+o[1]*t[1];module.exports=dot;
1303
1294
 
1304
- },{}],308:[function(require,module,exports){
1295
+ },{}],305:[function(require,module,exports){
1305
1296
  const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1];module.exports=equals;
1306
1297
 
1307
- },{}],309:[function(require,module,exports){
1298
+ },{}],306:[function(require,module,exports){
1308
1299
  const fromAngleRadians=require("./fromAngleRadians"),fromAngleDegrees=(e,r)=>fromAngleRadians(e,.017453292519943295*r);module.exports=fromAngleDegrees;
1309
1300
 
1310
- },{"./fromAngleRadians":310}],310:[function(require,module,exports){
1301
+ },{"./fromAngleRadians":307}],307:[function(require,module,exports){
1311
1302
  const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromAngleRadians=(s,o)=>(s[0]=cos(o),s[1]=sin(o),s);module.exports=fromAngleRadians;
1312
1303
 
1313
- },{"../utils/trigonometry":295}],311:[function(require,module,exports){
1304
+ },{"../utils/trigonometry":292}],308:[function(require,module,exports){
1314
1305
  const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o);module.exports=fromScalar;
1315
1306
 
1316
- },{}],312:[function(require,module,exports){
1307
+ },{}],309:[function(require,module,exports){
1317
1308
  const create=require("./create"),fromValues=(e,r)=>{const t=create();return t[0]=e,t[1]=r,t};module.exports=fromValues;
1318
1309
 
1319
- },{"./create":303}],313:[function(require,module,exports){
1310
+ },{"./create":300}],310:[function(require,module,exports){
1320
1311
  module.exports={abs:require("./abs"),add:require("./add"),angle:require("./angle"),angleDegrees:require("./angleDegrees"),angleRadians:require("./angleRadians"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),cross:require("./cross"),distance:require("./distance"),divide:require("./divide"),dot:require("./dot"),equals:require("./equals"),fromAngleDegrees:require("./fromAngleDegrees"),fromAngleRadians:require("./fromAngleRadians"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),length:require("./length"),lerp:require("./lerp"),max:require("./max"),min:require("./min"),multiply:require("./multiply"),negate:require("./negate"),normal:require("./normal"),normalize:require("./normalize"),rotate:require("./rotate"),scale:require("./scale"),snap:require("./snap"),squaredDistance:require("./squaredDistance"),squaredLength:require("./squaredLength"),subtract:require("./subtract"),toString:require("./toString"),transform:require("./transform")};
1321
1312
 
1322
- },{"./abs":296,"./add":297,"./angle":298,"./angleDegrees":299,"./angleRadians":300,"./clone":301,"./copy":302,"./create":303,"./cross":304,"./distance":305,"./divide":306,"./dot":307,"./equals":308,"./fromAngleDegrees":309,"./fromAngleRadians":310,"./fromScalar":311,"./fromValues":312,"./length":314,"./lerp":315,"./max":316,"./min":317,"./multiply":318,"./negate":319,"./normal":320,"./normalize":321,"./rotate":322,"./scale":323,"./snap":324,"./squaredDistance":325,"./squaredLength":326,"./subtract":327,"./toString":328,"./transform":329}],314:[function(require,module,exports){
1313
+ },{"./abs":293,"./add":294,"./angle":295,"./angleDegrees":296,"./angleRadians":297,"./clone":298,"./copy":299,"./create":300,"./cross":301,"./distance":302,"./divide":303,"./dot":304,"./equals":305,"./fromAngleDegrees":306,"./fromAngleRadians":307,"./fromScalar":308,"./fromValues":309,"./length":311,"./lerp":312,"./max":313,"./min":314,"./multiply":315,"./negate":316,"./normal":317,"./normalize":318,"./rotate":319,"./scale":320,"./snap":321,"./squaredDistance":322,"./squaredLength":323,"./subtract":324,"./toString":325,"./transform":326}],311:[function(require,module,exports){
1323
1314
  const length=t=>Math.sqrt(t[0]*t[0]+t[1]*t[1]);module.exports=length;
1324
1315
 
1325
- },{}],315:[function(require,module,exports){
1316
+ },{}],312:[function(require,module,exports){
1326
1317
  const lerp=(e,r,o,t)=>{const l=r[0],n=r[1];return e[0]=l+t*(o[0]-l),e[1]=n+t*(o[1]-n),e};module.exports=lerp;
1327
1318
 
1328
- },{}],316:[function(require,module,exports){
1319
+ },{}],313:[function(require,module,exports){
1329
1320
  const max=(a,m,x)=>(a[0]=Math.max(m[0],x[0]),a[1]=Math.max(m[1],x[1]),a);module.exports=max;
1330
1321
 
1331
- },{}],317:[function(require,module,exports){
1322
+ },{}],314:[function(require,module,exports){
1332
1323
  const min=(m,n,i)=>(m[0]=Math.min(n[0],i[0]),m[1]=Math.min(n[1],i[1]),m);module.exports=min;
1333
1324
 
1334
- },{}],318:[function(require,module,exports){
1325
+ },{}],315:[function(require,module,exports){
1335
1326
  const multiply=(l,t,m)=>(l[0]=t[0]*m[0],l[1]=t[1]*m[1],l);module.exports=multiply;
1336
1327
 
1337
- },{}],319:[function(require,module,exports){
1328
+ },{}],316:[function(require,module,exports){
1338
1329
  const negate=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e);module.exports=negate;
1339
1330
 
1340
- },{}],320:[function(require,module,exports){
1331
+ },{}],317:[function(require,module,exports){
1341
1332
  const{TAU:TAU}=require("../constants"),create=require("./create"),rotate=require("./rotate"),normal=(e,r)=>rotate(e,r,create(),TAU/4);module.exports=normal;
1342
1333
 
1343
- },{"../constants":217,"./create":303,"./rotate":322}],321:[function(require,module,exports){
1334
+ },{"../constants":214,"./create":300,"./rotate":319}],318:[function(require,module,exports){
1344
1335
  const normalize=(t,e)=>{const o=e[0],r=e[1];let n=o*o+r*r;return n>0&&(n=1/Math.sqrt(n)),t[0]=o*n,t[1]=r*n,t};module.exports=normalize;
1345
1336
 
1346
- },{}],322:[function(require,module,exports){
1337
+ },{}],319:[function(require,module,exports){
1347
1338
  const rotate=(t,o,e,r)=>{const s=o[0]-e[0],a=o[1]-e[1],n=Math.cos(r),c=Math.sin(r);return t[0]=s*n-a*c+e[0],t[1]=s*c+a*n+e[1],t};module.exports=rotate;
1348
1339
 
1349
- },{}],323:[function(require,module,exports){
1340
+ },{}],320:[function(require,module,exports){
1350
1341
  const scale=(e,s,c)=>(e[0]=s[0]*c,e[1]=s[1]*c,e);module.exports=scale;
1351
1342
 
1352
- },{}],324:[function(require,module,exports){
1343
+ },{}],321:[function(require,module,exports){
1353
1344
  const snap=(n,o,a)=>(n[0]=Math.round(o[0]/a)*a+0,n[1]=Math.round(o[1]/a)*a+0,n);module.exports=snap;
1354
1345
 
1355
- },{}],325:[function(require,module,exports){
1346
+ },{}],322:[function(require,module,exports){
1356
1347
  const squaredDistance=(e,s)=>{const t=s[0]-e[0],n=s[1]-e[1];return t*t+n*n};module.exports=squaredDistance;
1357
1348
 
1358
- },{}],326:[function(require,module,exports){
1349
+ },{}],323:[function(require,module,exports){
1359
1350
  const squaredLength=e=>{const t=e[0],n=e[1];return t*t+n*n};module.exports=squaredLength;
1360
1351
 
1361
- },{}],327:[function(require,module,exports){
1352
+ },{}],324:[function(require,module,exports){
1362
1353
  const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t);module.exports=subtract;
1363
1354
 
1364
- },{}],328:[function(require,module,exports){
1355
+ },{}],325:[function(require,module,exports){
1365
1356
  const toString=t=>`[${t[0].toFixed(7)}, ${t[1].toFixed(7)}]`;module.exports=toString;
1366
1357
 
1367
- },{}],329:[function(require,module,exports){
1358
+ },{}],326:[function(require,module,exports){
1368
1359
  const transform=(r,o,t)=>{const n=o[0],s=o[1];return r[0]=t[0]*n+t[4]*s+t[12],r[1]=t[1]*n+t[5]*s+t[13],r};module.exports=transform;
1369
1360
 
1370
- },{}],330:[function(require,module,exports){
1361
+ },{}],327:[function(require,module,exports){
1371
1362
  const abs=(a,s)=>(a[0]=Math.abs(s[0]),a[1]=Math.abs(s[1]),a[2]=Math.abs(s[2]),a);module.exports=abs;
1372
1363
 
1373
- },{}],331:[function(require,module,exports){
1364
+ },{}],328:[function(require,module,exports){
1374
1365
  const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d[2]=o[2]+a[2],d);module.exports=add;
1375
1366
 
1376
- },{}],332:[function(require,module,exports){
1367
+ },{}],329:[function(require,module,exports){
1377
1368
  const dot=require("./dot"),angle=(t,a)=>{const o=t[0],e=t[1],r=t[2],n=a[0],s=a[1],h=a[2],M=Math.sqrt(o*o+e*e+r*r)*Math.sqrt(n*n+s*s+h*h),d=M&&dot(t,a)/M;return Math.acos(Math.min(Math.max(d,-1),1))};module.exports=angle;
1378
1369
 
1379
- },{"./dot":339}],333:[function(require,module,exports){
1370
+ },{"./dot":336}],330:[function(require,module,exports){
1380
1371
  const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r};module.exports=clone;
1381
1372
 
1382
- },{"./create":335}],334:[function(require,module,exports){
1373
+ },{"./create":332}],331:[function(require,module,exports){
1383
1374
  const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o);module.exports=copy;
1384
1375
 
1385
- },{}],335:[function(require,module,exports){
1376
+ },{}],332:[function(require,module,exports){
1386
1377
  const create=()=>[0,0,0];module.exports=create;
1387
1378
 
1388
- },{}],336:[function(require,module,exports){
1379
+ },{}],333:[function(require,module,exports){
1389
1380
  const cross=(s,o,r)=>{const c=o[0],t=o[1],e=o[2],n=r[0],u=r[1],d=r[2];return s[0]=t*d-e*u,s[1]=e*n-c*d,s[2]=c*u-t*n,s};module.exports=cross;
1390
1381
 
1391
- },{}],337:[function(require,module,exports){
1382
+ },{}],334:[function(require,module,exports){
1392
1383
  const distance=(t,s)=>{const e=s[0]-t[0],n=s[1]-t[1],c=s[2]-t[2];return Math.sqrt(e*e+n*n+c*c)};module.exports=distance;
1393
1384
 
1394
- },{}],338:[function(require,module,exports){
1385
+ },{}],335:[function(require,module,exports){
1395
1386
  const divide=(d,e,i)=>(d[0]=e[0]/i[0],d[1]=e[1]/i[1],d[2]=e[2]/i[2],d);module.exports=divide;
1396
1387
 
1397
- },{}],339:[function(require,module,exports){
1388
+ },{}],336:[function(require,module,exports){
1398
1389
  const dot=(o,t)=>o[0]*t[0]+o[1]*t[1]+o[2]*t[2];module.exports=dot;
1399
1390
 
1400
- },{}],340:[function(require,module,exports){
1391
+ },{}],337:[function(require,module,exports){
1401
1392
  const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2];module.exports=equals;
1402
1393
 
1403
- },{}],341:[function(require,module,exports){
1394
+ },{}],338:[function(require,module,exports){
1404
1395
  const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o[2]=r,o);module.exports=fromScalar;
1405
1396
 
1406
- },{}],342:[function(require,module,exports){
1397
+ },{}],339:[function(require,module,exports){
1407
1398
  const create=require("./create"),fromValues=(e,r,t)=>{const o=create();return o[0]=e,o[1]=r,o[2]=t,o};module.exports=fromValues;
1408
1399
 
1409
- },{"./create":335}],343:[function(require,module,exports){
1400
+ },{"./create":332}],340:[function(require,module,exports){
1410
1401
  const fromVector2=(o,r,e=0)=>(o[0]=r[0],o[1]=r[1],o[2]=e,o);module.exports=fromVector2;
1411
1402
 
1412
- },{}],344:[function(require,module,exports){
1403
+ },{}],341:[function(require,module,exports){
1413
1404
  module.exports={abs:require("./abs"),add:require("./add"),angle:require("./angle"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),cross:require("./cross"),distance:require("./distance"),divide:require("./divide"),dot:require("./dot"),equals:require("./equals"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),fromVec2:require("./fromVec2"),length:require("./length"),lerp:require("./lerp"),max:require("./max"),min:require("./min"),multiply:require("./multiply"),negate:require("./negate"),normalize:require("./normalize"),orthogonal:require("./orthogonal"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),scale:require("./scale"),snap:require("./snap"),squaredDistance:require("./squaredDistance"),squaredLength:require("./squaredLength"),subtract:require("./subtract"),toString:require("./toString"),transform:require("./transform")};
1414
1405
 
1415
- },{"./abs":330,"./add":331,"./angle":332,"./clone":333,"./copy":334,"./create":335,"./cross":336,"./distance":337,"./divide":338,"./dot":339,"./equals":340,"./fromScalar":341,"./fromValues":342,"./fromVec2":343,"./length":345,"./lerp":346,"./max":347,"./min":348,"./multiply":349,"./negate":350,"./normalize":351,"./orthogonal":352,"./rotateX":353,"./rotateY":354,"./rotateZ":355,"./scale":356,"./snap":357,"./squaredDistance":358,"./squaredLength":359,"./subtract":360,"./toString":361,"./transform":362}],345:[function(require,module,exports){
1406
+ },{"./abs":327,"./add":328,"./angle":329,"./clone":330,"./copy":331,"./create":332,"./cross":333,"./distance":334,"./divide":335,"./dot":336,"./equals":337,"./fromScalar":338,"./fromValues":339,"./fromVec2":340,"./length":342,"./lerp":343,"./max":344,"./min":345,"./multiply":346,"./negate":347,"./normalize":348,"./orthogonal":349,"./rotateX":350,"./rotateY":351,"./rotateZ":352,"./scale":353,"./snap":354,"./squaredDistance":355,"./squaredLength":356,"./subtract":357,"./toString":358,"./transform":359}],342:[function(require,module,exports){
1416
1407
  const length=t=>{const e=t[0],n=t[1],o=t[2];return Math.sqrt(e*e+n*n+o*o)};module.exports=length;
1417
1408
 
1418
- },{}],346:[function(require,module,exports){
1409
+ },{}],343:[function(require,module,exports){
1419
1410
  const lerp=(e,l,o,p)=>(e[0]=l[0]+p*(o[0]-l[0]),e[1]=l[1]+p*(o[1]-l[1]),e[2]=l[2]+p*(o[2]-l[2]),e);module.exports=lerp;
1420
1411
 
1421
- },{}],347:[function(require,module,exports){
1412
+ },{}],344:[function(require,module,exports){
1422
1413
  const max=(a,m,x)=>(a[0]=Math.max(m[0],x[0]),a[1]=Math.max(m[1],x[1]),a[2]=Math.max(m[2],x[2]),a);module.exports=max;
1423
1414
 
1424
- },{}],348:[function(require,module,exports){
1415
+ },{}],345:[function(require,module,exports){
1425
1416
  const min=(m,n,i)=>(m[0]=Math.min(n[0],i[0]),m[1]=Math.min(n[1],i[1]),m[2]=Math.min(n[2],i[2]),m);module.exports=min;
1426
1417
 
1427
- },{}],349:[function(require,module,exports){
1418
+ },{}],346:[function(require,module,exports){
1428
1419
  const multiply=(l,t,m)=>(l[0]=t[0]*m[0],l[1]=t[1]*m[1],l[2]=t[2]*m[2],l);module.exports=multiply;
1429
1420
 
1430
- },{}],350:[function(require,module,exports){
1421
+ },{}],347:[function(require,module,exports){
1431
1422
  const negate=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e);module.exports=negate;
1432
1423
 
1433
- },{}],351:[function(require,module,exports){
1424
+ },{}],348:[function(require,module,exports){
1434
1425
  const normalize=(t,e)=>{const o=e[0],r=e[1],n=e[2];let l=o*o+r*r+n*n;return l>0&&(l=1/Math.sqrt(l)),t[0]=o*l,t[1]=r*l,t[2]=n*l,t};module.exports=normalize;
1435
1426
 
1436
- },{}],352:[function(require,module,exports){
1427
+ },{}],349:[function(require,module,exports){
1437
1428
  const abs=require("./abs"),create=require("./create"),cross=require("./cross"),orthogonal=(r,e)=>{const o=abs(create(),e),s=0+(o[0]<o[1]&&o[0]<o[2]),t=0+(o[1]<=o[0]&&o[1]<o[2]),a=0+(o[2]<=o[0]&&o[2]<=o[1]);return cross(r,e,[s,t,a])};module.exports=orthogonal;
1438
1429
 
1439
- },{"./abs":330,"./create":335,"./cross":336}],353:[function(require,module,exports){
1430
+ },{"./abs":327,"./create":332,"./cross":333}],350:[function(require,module,exports){
1440
1431
  const rotateX=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],e[2]=o[2]-s[2],n[0]=e[0],n[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),n[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=n[2]+s[2],t};module.exports=rotateX;
1441
1432
 
1442
- },{}],354:[function(require,module,exports){
1433
+ },{}],351:[function(require,module,exports){
1443
1434
  const rotateY=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],e[2]=o[2]-s[2],n[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),n[1]=e[1],n[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=n[2]+s[2],t};module.exports=rotateY;
1444
1435
 
1445
- },{}],355:[function(require,module,exports){
1436
+ },{}],352:[function(require,module,exports){
1446
1437
  const rotateZ=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],n[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),n[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=o[2],t};module.exports=rotateZ;
1447
1438
 
1448
- },{}],356:[function(require,module,exports){
1439
+ },{}],353:[function(require,module,exports){
1449
1440
  const scale=(e,s,c)=>(e[0]=s[0]*c,e[1]=s[1]*c,e[2]=s[2]*c,e);module.exports=scale;
1450
1441
 
1451
- },{}],357:[function(require,module,exports){
1442
+ },{}],354:[function(require,module,exports){
1452
1443
  const snap=(n,o,a)=>(n[0]=Math.round(o[0]/a)*a+0,n[1]=Math.round(o[1]/a)*a+0,n[2]=Math.round(o[2]/a)*a+0,n);module.exports=snap;
1453
1444
 
1454
- },{}],358:[function(require,module,exports){
1445
+ },{}],355:[function(require,module,exports){
1455
1446
  const squaredDistance=(e,s)=>{const t=s[0]-e[0],n=s[1]-e[1],r=s[2]-e[2];return t*t+n*n+r*r};module.exports=squaredDistance;
1456
1447
 
1457
- },{}],359:[function(require,module,exports){
1448
+ },{}],356:[function(require,module,exports){
1458
1449
  const squaredLength=e=>{const t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r};module.exports=squaredLength;
1459
1450
 
1460
- },{}],360:[function(require,module,exports){
1451
+ },{}],357:[function(require,module,exports){
1461
1452
  const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t[2]=s[2]-c[2],t);module.exports=subtract;
1462
1453
 
1463
- },{}],361:[function(require,module,exports){
1454
+ },{}],358:[function(require,module,exports){
1464
1455
  const toString=t=>`[${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)}]`;module.exports=toString;
1465
1456
 
1466
- },{}],362:[function(require,module,exports){
1457
+ },{}],359:[function(require,module,exports){
1467
1458
  const transform=(r,t,o)=>{const n=t[0],s=t[1],e=t[2];let m=o[3]*n+o[7]*s+o[11]*e+o[15];return m=m||1,r[0]=(o[0]*n+o[4]*s+o[8]*e+o[12])/m,r[1]=(o[1]*n+o[5]*s+o[9]*e+o[13])/m,r[2]=(o[2]*n+o[6]*s+o[10]*e+o[14])/m,r};module.exports=transform;
1468
1459
 
1469
- },{}],363:[function(require,module,exports){
1460
+ },{}],360:[function(require,module,exports){
1470
1461
  const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r};module.exports=clone;
1471
1462
 
1472
- },{"./create":365}],364:[function(require,module,exports){
1463
+ },{"./create":362}],361:[function(require,module,exports){
1473
1464
  const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o);module.exports=copy;
1474
1465
 
1475
- },{}],365:[function(require,module,exports){
1466
+ },{}],362:[function(require,module,exports){
1476
1467
  const create=()=>[0,0,0,0];module.exports=create;
1477
1468
 
1478
- },{}],366:[function(require,module,exports){
1469
+ },{}],363:[function(require,module,exports){
1479
1470
  const dot=(o,t)=>o[0]*t[0]+o[1]*t[1]+o[2]*t[2]+o[3]*t[3];module.exports=dot;
1480
1471
 
1481
- },{}],367:[function(require,module,exports){
1472
+ },{}],364:[function(require,module,exports){
1482
1473
  const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2]&&e[3]===s[3];module.exports=equals;
1483
1474
 
1484
- },{}],368:[function(require,module,exports){
1475
+ },{}],365:[function(require,module,exports){
1485
1476
  const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o[2]=r,o[3]=r,o);module.exports=fromScalar;
1486
1477
 
1487
- },{}],369:[function(require,module,exports){
1478
+ },{}],366:[function(require,module,exports){
1488
1479
  const create=require("./create"),fromValues=(e,r,t,o)=>{const a=create();return a[0]=e,a[1]=r,a[2]=t,a[3]=o,a};module.exports=fromValues;
1489
1480
 
1490
- },{"./create":365}],370:[function(require,module,exports){
1481
+ },{"./create":362}],367:[function(require,module,exports){
1491
1482
  module.exports={clone:require("./clone"),copy:require("./copy"),create:require("./create"),dot:require("./dot"),equals:require("./equals"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),toString:require("./toString"),transform:require("./transform")};
1492
1483
 
1493
- },{"./clone":363,"./copy":364,"./create":365,"./dot":366,"./equals":367,"./fromScalar":368,"./fromValues":369,"./toString":371,"./transform":372}],371:[function(require,module,exports){
1484
+ },{"./clone":360,"./copy":361,"./create":362,"./dot":363,"./equals":364,"./fromScalar":365,"./fromValues":366,"./toString":368,"./transform":369}],368:[function(require,module,exports){
1494
1485
  const toString=t=>`(${t[0].toFixed(9)}, ${t[1].toFixed(9)}, ${t[2].toFixed(9)}, ${t[3].toFixed(9)})`;module.exports=toString;
1495
1486
 
1496
- },{}],372:[function(require,module,exports){
1487
+ },{}],369:[function(require,module,exports){
1497
1488
  const transform=(r,o,t)=>{const[n,s,e,m]=o;return r[0]=t[0]*n+t[4]*s+t[8]*e+t[12]*m,r[1]=t[1]*n+t[5]*s+t[9]*e+t[13]*m,r[2]=t[2]*n+t[6]*s+t[10]*e+t[14]*m,r[3]=t[3]*n+t[7]*s+t[11]*e+t[15]*m,r};module.exports=transform;
1498
1489
 
1499
- },{}],373:[function(require,module,exports){
1490
+ },{}],370:[function(require,module,exports){
1500
1491
  const{EPS:EPS}=require("../maths/constants"),calculateEpsilonFromBounds=(o,t)=>{let e=0;for(let l=0;l<t;l++)e+=o[1][l]-o[0][l];return EPS*e/t};module.exports=calculateEpsilonFromBounds;
1501
1492
 
1502
- },{"../maths/constants":217}],374:[function(require,module,exports){
1493
+ },{"../maths/constants":214}],371:[function(require,module,exports){
1503
1494
  module.exports={measureAggregateArea:require("./measureAggregateArea"),measureAggregateBoundingBox:require("./measureAggregateBoundingBox"),measureAggregateEpsilon:require("./measureAggregateEpsilon"),measureAggregateVolume:require("./measureAggregateVolume"),measureArea:require("./measureArea"),measureBoundingBox:require("./measureBoundingBox"),measureBoundingSphere:require("./measureBoundingSphere"),measureCenter:require("./measureCenter"),measureCenterOfMass:require("./measureCenterOfMass"),measureDimensions:require("./measureDimensions"),measureEpsilon:require("./measureEpsilon"),measureVolume:require("./measureVolume")};
1504
1495
 
1505
- },{"./measureAggregateArea":375,"./measureAggregateBoundingBox":376,"./measureAggregateEpsilon":377,"./measureAggregateVolume":378,"./measureArea":379,"./measureBoundingBox":380,"./measureBoundingSphere":381,"./measureCenter":382,"./measureCenterOfMass":383,"./measureDimensions":384,"./measureEpsilon":385,"./measureVolume":386}],375:[function(require,module,exports){
1496
+ },{"./measureAggregateArea":372,"./measureAggregateBoundingBox":373,"./measureAggregateEpsilon":374,"./measureAggregateVolume":375,"./measureArea":376,"./measureBoundingBox":377,"./measureBoundingSphere":378,"./measureCenter":379,"./measureCenterOfMass":380,"./measureDimensions":381,"./measureEpsilon":382,"./measureVolume":383}],372:[function(require,module,exports){
1506
1497
  const flatten=require("../utils/flatten"),measureArea=require("./measureArea"),measureAggregateArea=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateArea: no geometries supplied");const r=measureArea(e);if(1===e.length)return r;return r.reduce((e,r)=>e+r,0)};module.exports=measureAggregateArea;
1507
1498
 
1508
- },{"../utils/flatten":519,"./measureArea":379}],376:[function(require,module,exports){
1499
+ },{"../utils/flatten":515,"./measureArea":376}],373:[function(require,module,exports){
1509
1500
  const flatten=require("../utils/flatten"),vec3min=require("../maths/vec3/min"),vec3max=require("../maths/vec3/max"),measureBoundingBox=require("./measureBoundingBox"),measureAggregateBoundingBox=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateBoundingBox: no geometries supplied");const r=measureBoundingBox(e);if(1===e.length)return r;const u=[[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE],[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE]];return r.reduce((e,r)=>e=[vec3min(e[0],e[0],r[0]),vec3max(e[1],e[1],r[1])],u)};module.exports=measureAggregateBoundingBox;
1510
1501
 
1511
- },{"../maths/vec3/max":347,"../maths/vec3/min":348,"../utils/flatten":519,"./measureBoundingBox":380}],377:[function(require,module,exports){
1502
+ },{"../maths/vec3/max":344,"../maths/vec3/min":345,"../utils/flatten":515,"./measureBoundingBox":377}],374:[function(require,module,exports){
1512
1503
  const flatten=require("../utils/flatten"),measureAggregateBoundingBox=require("./measureAggregateBoundingBox"),calculateEpsilonFromBounds=require("./calculateEpsilonFromBounds"),{geom2:geom2,geom3:geom3,path2:path2}=require("../geometries"),measureAggregateEpsilon=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateEpsilon: no geometries supplied");const o=measureAggregateBoundingBox(e);let r=0;return r=e.reduce((e,o)=>path2.isA(o)||geom2.isA(o)?Math.max(e,2):geom3.isA(o)?Math.max(e,3):0,r),calculateEpsilonFromBounds(o,r)};module.exports=measureAggregateEpsilon;
1513
1504
 
1514
- },{"../geometries":173,"../utils/flatten":519,"./calculateEpsilonFromBounds":373,"./measureAggregateBoundingBox":376}],378:[function(require,module,exports){
1505
+ },{"../geometries":170,"../utils/flatten":515,"./calculateEpsilonFromBounds":370,"./measureAggregateBoundingBox":373}],375:[function(require,module,exports){
1515
1506
  const flatten=require("../utils/flatten"),measureVolume=require("./measureVolume"),measureAggregateVolume=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateVolume: no geometries supplied");const r=measureVolume(e);if(1===e.length)return r;return r.reduce((e,r)=>e+r,0)};module.exports=measureAggregateVolume;
1516
1507
 
1517
- },{"../utils/flatten":519,"./measureVolume":386}],379:[function(require,module,exports){
1508
+ },{"../utils/flatten":515,"./measureVolume":383}],376:[function(require,module,exports){
1518
1509
  const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureAreaOfPath2=()=>0,measureAreaOfGeom2=e=>{let r=cache.get(e);if(r)return r;return r=geom2.toSides(e).reduce((e,r)=>e+(r[0][0]*r[1][1]-r[0][1]*r[1][0]),0),r*=.5,cache.set(e,r),r},measureAreaOfGeom3=e=>{let r=cache.get(e);if(r)return r;return r=geom3.toPolygons(e).reduce((e,r)=>e+poly3.measureArea(r),0),cache.set(e,r),r},measureArea=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const r=e.map(e=>path2.isA(e)?0:geom2.isA(e)?measureAreaOfGeom2(e):geom3.isA(e)?measureAreaOfGeom3(e):0);return 1===r.length?r[0]:r};module.exports=measureArea;
1519
1510
 
1520
- },{"../geometries/geom2":149,"../geometries/geom3":164,"../geometries/path2":185,"../geometries/poly3":202,"../utils/flatten":519}],380:[function(require,module,exports){
1511
+ },{"../geometries/geom2":146,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../utils/flatten":515}],377:[function(require,module,exports){
1521
1512
  const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureBoundingBoxOfPath2=e=>{let o=cache.get(e);if(o)return o;const t=path2.toPoints(e);let n;n=0===t.length?vec2.create():vec2.clone(t[0]);let r=vec2.clone(n);return t.forEach(e=>{vec2.min(n,n,e),vec2.max(r,r,e)}),n=[n[0],n[1],0],r=[r[0],r[1],0],o=[n,r],cache.set(e,o),o},measureBoundingBoxOfGeom2=e=>{let o=cache.get(e);if(o)return o;const t=geom2.toPoints(e);let n;n=0===t.length?vec2.create():vec2.clone(t[0]);let r=vec2.clone(n);return t.forEach(e=>{vec2.min(n,n,e),vec2.max(r,r,e)}),n=[n[0],n[1],0],r=[r[0],r[1],0],o=[n,r],cache.set(e,o),o},measureBoundingBoxOfGeom3=e=>{let o=cache.get(e);if(o)return o;const t=geom3.toPolygons(e);let n=vec3.create();if(t.length>0){const e=poly3.toPoints(t[0]);vec3.copy(n,e[0])}let r=vec3.clone(n);return t.forEach(e=>{poly3.toPoints(e).forEach(e=>{vec3.min(n,n,e),vec3.max(r,r,e)})}),n=[n[0],n[1],n[2]],r=[r[0],r[1],r[2]],o=[n,r],cache.set(e,o),o},measureBoundingBox=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const o=e.map(e=>path2.isA(e)?measureBoundingBoxOfPath2(e):geom2.isA(e)?measureBoundingBoxOfGeom2(e):geom3.isA(e)?measureBoundingBoxOfGeom3(e):[[0,0,0],[0,0,0]]);return 1===o.length?o[0]:o};module.exports=measureBoundingBox;
1522
1513
 
1523
- },{"../geometries/geom2":149,"../geometries/geom3":164,"../geometries/path2":185,"../geometries/poly3":202,"../maths/vec2":313,"../maths/vec3":344,"../utils/flatten":519}],381:[function(require,module,exports){
1514
+ },{"../geometries/geom2":146,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../maths/vec2":310,"../maths/vec3":341,"../utils/flatten":515}],378:[function(require,module,exports){
1524
1515
  const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cacheOfBoundingSpheres=new WeakMap,measureBoundingSphereOfPath2=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=path2.toPoints(e);if(c.length>0){let e=0;const t=vec3.create();c.forEach(o=>{vec3.add(r,r,vec3.fromVec2(t,o,0)),e++}),vec3.scale(r,r,1/e),c.forEach(e=>{o=Math.max(o,vec2.squaredDistance(r,e))}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphereOfGeom2=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=geom2.toSides(e);if(c.length>0){let e=0;const t=vec3.create();c.forEach(o=>{vec3.add(r,r,vec3.fromVec2(t,o[0],0)),e++}),vec3.scale(r,r,1/e),c.forEach(e=>{o=Math.max(o,vec2.squaredDistance(r,e[0]))}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphereOfGeom3=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=geom3.toPolygons(e);if(c.length>0){let e=0;c.forEach(t=>{poly3.toPoints(t).forEach(t=>{vec3.add(r,r,t),e++})}),vec3.scale(r,r,1/e),c.forEach(e=>{poly3.toPoints(e).forEach(e=>{o=Math.max(o,vec3.squaredDistance(r,e))})}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphere=(...e)=>{const t=(e=flatten(e)).map(e=>path2.isA(e)?measureBoundingSphereOfPath2(e):geom2.isA(e)?measureBoundingSphereOfGeom2(e):geom3.isA(e)?measureBoundingSphereOfGeom3(e):[[0,0,0],0]);return 1===t.length?t[0]:t};module.exports=measureBoundingSphere;
1525
1516
 
1526
- },{"../geometries/geom2":149,"../geometries/geom3":164,"../geometries/path2":185,"../geometries/poly3":202,"../maths/vec2":313,"../maths/vec3":344,"../utils/flatten":519}],382:[function(require,module,exports){
1517
+ },{"../geometries/geom2":146,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../maths/vec2":310,"../maths/vec3":341,"../utils/flatten":515}],379:[function(require,module,exports){
1527
1518
  const flatten=require("../utils/flatten"),measureBoundingBox=require("./measureBoundingBox"),measureCenter=(...e)=>{const n=(e=flatten(e)).map(e=>{const n=measureBoundingBox(e);return[n[0][0]+(n[1][0]-n[0][0])/2,n[0][1]+(n[1][1]-n[0][1])/2,n[0][2]+(n[1][2]-n[0][2])/2]});return 1===n.length?n[0]:n};module.exports=measureCenter;
1528
1519
 
1529
- },{"../utils/flatten":519,"./measureBoundingBox":380}],383:[function(require,module,exports){
1520
+ },{"../utils/flatten":515,"./measureBoundingBox":377}],380:[function(require,module,exports){
1530
1521
  const flatten=require("../utils/flatten"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),cacheOfCenterOfMass=new WeakMap,measureCenterOfMassGeom2=e=>{let t=cacheOfCenterOfMass.get(e);if(void 0!==t)return t;const s=geom2.toSides(e);let r=0,c=0,a=0;if(s.length>0){for(let e=0;e<s.length;e++){const t=s[e][0],o=s[e][1],n=t[0]*o[1]-t[1]*o[0];r+=n,c+=(t[0]+o[0])*n,a+=(t[1]+o[1])*n}const e=1/(6*(r/=2));c*=e,a*=e}return t=vec3.fromValues(c,a,0),cacheOfCenterOfMass.set(e,t),t},measureCenterOfMassGeom3=e=>{let t=cacheOfCenterOfMass.get(e);if(void 0!==t)return t;t=vec3.create();const s=geom3.toPolygons(e);if(0===s.length)return t;let r=0;const c=vec3.create();return s.forEach(e=>{const s=e.vertices;for(let e=0;e<s.length-2;e++){vec3.cross(c,s[e+1],s[e+2]);const a=vec3.dot(s[0],c)/6;r+=a,vec3.add(c,s[0],s[e+1]),vec3.add(c,c,s[e+2]);const o=vec3.scale(c,c,.25*a);vec3.add(t,t,o)}}),vec3.scale(t,t,1/r),cacheOfCenterOfMass.set(e,t),t},measureCenterOfMass=(...e)=>{const t=(e=flatten(e)).map(e=>geom2.isA(e)?measureCenterOfMassGeom2(e):geom3.isA(e)?measureCenterOfMassGeom3(e):[0,0,0]);return 1===t.length?t[0]:t};module.exports=measureCenterOfMass;
1531
1522
 
1532
- },{"../geometries/geom2":149,"../geometries/geom3":164,"../maths/vec3":344,"../utils/flatten":519}],384:[function(require,module,exports){
1523
+ },{"../geometries/geom2":146,"../geometries/geom3":161,"../maths/vec3":341,"../utils/flatten":515}],381:[function(require,module,exports){
1533
1524
  const flatten=require("../utils/flatten"),measureBoundingBox=require("./measureBoundingBox"),measureDimensions=(...e)=>{const n=(e=flatten(e)).map(e=>{const n=measureBoundingBox(e);return[n[1][0]-n[0][0],n[1][1]-n[0][1],n[1][2]-n[0][2]]});return 1===n.length?n[0]:n};module.exports=measureDimensions;
1534
1525
 
1535
- },{"../utils/flatten":519,"./measureBoundingBox":380}],385:[function(require,module,exports){
1526
+ },{"../utils/flatten":515,"./measureBoundingBox":377}],382:[function(require,module,exports){
1536
1527
  const flatten=require("../utils/flatten"),{geom2:geom2,geom3:geom3,path2:path2}=require("../geometries"),calculateEpsilonFromBounds=require("./calculateEpsilonFromBounds"),measureBoundingBox=require("./measureBoundingBox"),measureEpsilonOfPath2=e=>calculateEpsilonFromBounds(measureBoundingBox(e),2),measureEpsilonOfGeom2=e=>calculateEpsilonFromBounds(measureBoundingBox(e),2),measureEpsilonOfGeom3=e=>calculateEpsilonFromBounds(measureBoundingBox(e),3),measureEpsilon=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const o=e.map(e=>path2.isA(e)?measureEpsilonOfPath2(e):geom2.isA(e)?measureEpsilonOfGeom2(e):geom3.isA(e)?measureEpsilonOfGeom3(e):0);return 1===o.length?o[0]:o};module.exports=measureEpsilon;
1537
1528
 
1538
- },{"../geometries":173,"../utils/flatten":519,"./calculateEpsilonFromBounds":373,"./measureBoundingBox":380}],386:[function(require,module,exports){
1529
+ },{"../geometries":170,"../utils/flatten":515,"./calculateEpsilonFromBounds":370,"./measureBoundingBox":377}],383:[function(require,module,exports){
1539
1530
  const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureVolumeOfPath2=()=>0,measureVolumeOfGeom2=()=>0,measureVolumeOfGeom3=e=>{let r=cache.get(e);if(r)return r;return r=geom3.toPolygons(e).reduce((e,r)=>e+poly3.measureSignedVolume(r),0),cache.set(e,r),r},measureVolume=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const r=e.map(e=>path2.isA(e)?0:geom2.isA(e)?0:geom3.isA(e)?measureVolumeOfGeom3(e):0);return 1===r.length?r[0]:r};module.exports=measureVolume;
1540
1531
 
1541
- },{"../geometries/geom2":149,"../geometries/geom3":164,"../geometries/path2":185,"../geometries/poly3":202,"../utils/flatten":519}],387:[function(require,module,exports){
1532
+ },{"../geometries/geom2":146,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../utils/flatten":515}],384:[function(require,module,exports){
1542
1533
  const vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),fromFakePolygon=(e,o)=>{if(o.vertices.length<4)return null;const r=[],n=o.vertices.filter((e,o)=>e[2]>0&&(r.push(o),!0));if(2!==n.length)throw new Error("Assertion failed: fromFakePolygon: not enough points found");const t=n.map(o=>{const r=Math.round(o[0]/e)*e+0,n=Math.round(o[1]/e)*e+0;return vec2.fromValues(r,n)});if(vec2.equals(t[0],t[1]))return null;const s=r[1]-r[0];if(1!==s&&3!==s)throw new Error("Assertion failed: fromFakePolygon: unknown index ordering");return 1===s&&t.reverse(),t},fromFakePolygons=(e,o)=>{const r=o.map(o=>fromFakePolygon(e,o)).filter(e=>null!==e);return geom2.create(r)};module.exports=fromFakePolygons;
1543
1534
 
1544
- },{"../../geometries/geom2":149,"../../maths/vec2":313}],388:[function(require,module,exports){
1535
+ },{"../../geometries/geom2":146,"../../maths/vec2":310}],385:[function(require,module,exports){
1545
1536
  module.exports={intersect:require("./intersect"),scission:require("./scission"),subtract:require("./subtract"),union:require("./union")};
1546
1537
 
1547
- },{"./intersect":389,"./scission":394,"./subtract":396,"./union":407}],389:[function(require,module,exports){
1538
+ },{"./intersect":386,"./scission":391,"./subtract":393,"./union":404}],386:[function(require,module,exports){
1548
1539
  const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),intersectGeom2=require("./intersectGeom2"),intersectGeom3=require("./intersectGeom3"),intersect=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only intersect of the types are supported");const r=e[0];return geom2.isA(r)?intersectGeom2(e):geom3.isA(r)?intersectGeom3(e):r};module.exports=intersect;
1549
1540
 
1550
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../utils/areAllShapesTheSameType":517,"../../utils/flatten":519,"./intersectGeom2":390,"./intersectGeom3":391}],390:[function(require,module,exports){
1541
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../utils/areAllShapesTheSameType":513,"../../utils/flatten":515,"./intersectGeom2":387,"./intersectGeom3":388}],387:[function(require,module,exports){
1551
1542
  const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),intersectGeom3=require("./intersectGeom3"),intersect=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),r=intersectGeom3(o),t=measureEpsilon(r);return fromFakePolygons(t,geom3.toPolygons(r))};module.exports=intersect;
1552
1543
 
1553
- },{"../../geometries/geom3":164,"../../measurements/measureEpsilon":385,"../../utils/flatten":519,"./fromFakePolygons":387,"./intersectGeom3":391,"./to3DWalls":400}],391:[function(require,module,exports){
1544
+ },{"../../geometries/geom3":161,"../../measurements/measureEpsilon":382,"../../utils/flatten":515,"./fromFakePolygons":384,"./intersectGeom3":388,"./to3DWalls":397}],388:[function(require,module,exports){
1554
1545
  const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),intersectSub=require("./intersectGeom3Sub"),intersect=(...e)=>{let t=(e=flatten(e)).shift();return e.forEach(e=>{t=intersectSub(t,e)}),t=retessellate(t)};module.exports=intersect;
1555
1546
 
1556
- },{"../../utils/flatten":519,"../modifiers/retessellate":477,"./intersectGeom3Sub":392}],392:[function(require,module,exports){
1547
+ },{"../../utils/flatten":515,"../modifiers/retessellate":473,"./intersectGeom3Sub":389}],389:[function(require,module,exports){
1557
1548
  const geom3=require("../../geometries/geom3"),mayOverlap=require("./mayOverlap"),{Tree:Tree}=require("./trees"),intersectGeom3Sub=(e,o)=>{if(!mayOverlap(e,o))return geom3.create();const r=new Tree(geom3.toPolygons(e)),t=new Tree(geom3.toPolygons(o));r.invert(),t.clipTo(r),t.invert(),r.clipTo(t),t.clipTo(r),r.addPolygons(t.allPolygons()),r.invert();const n=r.allPolygons();return geom3.create(n)};module.exports=intersectGeom3Sub;
1558
1549
 
1559
- },{"../../geometries/geom3":164,"./mayOverlap":393,"./trees":404}],393:[function(require,module,exports){
1550
+ },{"../../geometries/geom3":161,"./mayOverlap":390,"./trees":401}],390:[function(require,module,exports){
1560
1551
  const{EPS:EPS}=require("../../maths/constants"),measureBoundingBox=require("../../measurements/measureBoundingBox"),mayOverlap=(e,n)=>{if(0===e.polygons.length||0===n.polygons.length)return!1;const o=measureBoundingBox(e),r=o[0],s=o[1],u=measureBoundingBox(n),a=u[0],t=u[1];return!(a[0]-s[0]>EPS)&&(!(r[0]-t[0]>EPS)&&(!(a[1]-s[1]>EPS)&&(!(r[1]-t[1]>EPS)&&(!(a[2]-s[2]>EPS)&&!(r[2]-t[2]>EPS)))))};module.exports=mayOverlap;
1561
1552
 
1562
- },{"../../maths/constants":217,"../../measurements/measureBoundingBox":380}],394:[function(require,module,exports){
1553
+ },{"../../maths/constants":214,"../../measurements/measureBoundingBox":377}],391:[function(require,module,exports){
1563
1554
  const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),scissionGeom3=require("./scissionGeom3"),scission=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const s=e.map(e=>geom3.isA(e)?scissionGeom3(e):e);return 1===s.length?s[0]:s};module.exports=scission;
1564
1555
 
1565
- },{"../../geometries/geom3":164,"../../utils/flatten":519,"./scissionGeom3":395}],395:[function(require,module,exports){
1556
+ },{"../../geometries/geom3":161,"../../utils/flatten":515,"./scissionGeom3":392}],392:[function(require,module,exports){
1566
1557
  const vec3=require("../../maths/vec3"),measureEpsilon=require("../../measurements/measureEpsilon"),geom3=require("../../geometries/geom3"),sortNb=e=>e.sort((e,s)=>e-s).filter((e,s,o)=>!s||e!==o[s-1]),insertMapping=(e,s,o)=>{const t=`${s}`,n=e.get(t);void 0===n?e.set(t,[o]):n.push(o)},findMapping=(e,s)=>{const o=`${s}`;return e.get(o)},scissionGeom3=e=>{const s=measureEpsilon(e),o=geom3.toPolygons(e),t=o.length,n=new Map,r=vec3.create();o.forEach((e,o)=>{e.vertices.forEach(e=>{insertMapping(n,vec3.snap(r,e,s),o)})});const c=o.map(e=>{let o=[];return e.vertices.forEach(e=>{o=o.concat(findMapping(n,vec3.snap(r,e,s)))}),{e:1,d:sortNb(o)}});n.clear();let i=0;const a=c.length;for(let e=0;e<a;e++){const s=c[e];if(s.e>0){const o=new Array(t);o[e]=!0;do{i=0,o.forEach((e,s)=>{const t=c[s];if(t.e>0){t.e=-1;for(let e=0;e<t.d.length;e++)o[t.d[e]]=!0;i++}})}while(i>0);s.indexes=o}}const p=[];for(let e=0;e<a;e++)if(c[e].indexes){const s=[];c[e].indexes.forEach((e,t)=>s.push(o[t])),p.push(geom3.create(s))}return p};module.exports=scissionGeom3;
1567
1558
 
1568
- },{"../../geometries/geom3":164,"../../maths/vec3":344,"../../measurements/measureEpsilon":385}],396:[function(require,module,exports){
1559
+ },{"../../geometries/geom3":161,"../../maths/vec3":341,"../../measurements/measureEpsilon":382}],393:[function(require,module,exports){
1569
1560
  const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),subtractGeom2=require("./subtractGeom2"),subtractGeom3=require("./subtractGeom3"),subtract=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only subtract of the types are supported");const r=e[0];return geom2.isA(r)?subtractGeom2(e):geom3.isA(r)?subtractGeom3(e):r};module.exports=subtract;
1570
1561
 
1571
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../utils/areAllShapesTheSameType":517,"../../utils/flatten":519,"./subtractGeom2":397,"./subtractGeom3":398}],397:[function(require,module,exports){
1562
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../utils/areAllShapesTheSameType":513,"../../utils/flatten":515,"./subtractGeom2":394,"./subtractGeom3":395}],394:[function(require,module,exports){
1572
1563
  const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),subtractGeom3=require("./subtractGeom3"),subtract=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),r=subtractGeom3(o),t=measureEpsilon(r);return fromFakePolygons(t,geom3.toPolygons(r))};module.exports=subtract;
1573
1564
 
1574
- },{"../../geometries/geom3":164,"../../measurements/measureEpsilon":385,"../../utils/flatten":519,"./fromFakePolygons":387,"./subtractGeom3":398,"./to3DWalls":400}],398:[function(require,module,exports){
1565
+ },{"../../geometries/geom3":161,"../../measurements/measureEpsilon":382,"../../utils/flatten":515,"./fromFakePolygons":384,"./subtractGeom3":395,"./to3DWalls":397}],395:[function(require,module,exports){
1575
1566
  const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),subtractSub=require("./subtractGeom3Sub"),subtract=(...t)=>{let e=(t=flatten(t)).shift();return t.forEach(t=>{e=subtractSub(e,t)}),e=retessellate(e)};module.exports=subtract;
1576
1567
 
1577
- },{"../../utils/flatten":519,"../modifiers/retessellate":477,"./subtractGeom3Sub":399}],399:[function(require,module,exports){
1568
+ },{"../../utils/flatten":515,"../modifiers/retessellate":473,"./subtractGeom3Sub":396}],396:[function(require,module,exports){
1578
1569
  const geom3=require("../../geometries/geom3"),mayOverlap=require("./mayOverlap"),{Tree:Tree}=require("./trees"),subtractGeom3Sub=(e,o)=>{if(!mayOverlap(e,o))return geom3.clone(e);const r=new Tree(geom3.toPolygons(e)),t=new Tree(geom3.toPolygons(o));r.invert(),r.clipTo(t),t.clipTo(r,!0),r.addPolygons(t.allPolygons()),r.invert();const l=r.allPolygons();return geom3.create(l)};module.exports=subtractGeom3Sub;
1579
1570
 
1580
- },{"../../geometries/geom3":164,"./mayOverlap":393,"./trees":404}],400:[function(require,module,exports){
1571
+ },{"../../geometries/geom3":161,"./mayOverlap":390,"./trees":401}],397:[function(require,module,exports){
1581
1572
  const vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),to3DWall=(e,o,r)=>{const c=[vec3.fromVec2(vec3.create(),r[0],e),vec3.fromVec2(vec3.create(),r[1],e),vec3.fromVec2(vec3.create(),r[1],o),vec3.fromVec2(vec3.create(),r[0],o)];return poly3.create(c)},to3DWalls=(e,o)=>{const r=geom2.toSides(o).map(o=>to3DWall(e.z0,e.z1,o));return geom3.create(r)};module.exports=to3DWalls;
1582
1573
 
1583
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/poly3":202,"../../maths/vec3":344}],401:[function(require,module,exports){
1574
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/vec3":341}],398:[function(require,module,exports){
1584
1575
  const plane=require("../../../maths/plane"),poly3=require("../../../geometries/poly3");class Node{constructor(e){this.plane=null,this.front=null,this.back=null,this.polygontreenodes=[],this.parent=e}invert(){const e=[this];let o;for(let n=0;n<e.length;n++){(o=e[n]).plane&&(o.plane=plane.flip(plane.create(),o.plane)),o.front&&e.push(o.front),o.back&&e.push(o.back);const t=o.front;o.front=o.back,o.back=t}}clipPolygons(e,o){let n,t={node:this,polygontreenodes:e};const l=[];do{if(n=t.node,e=t.polygontreenodes,n.plane){const t=n.plane,s=[],p=[],r=o?s:p,d=e.length;for(let o=0;o<d;o++){const n=e[o];n.isRemoved()||n.splitByPlane(t,r,s,p,s)}n.front&&p.length>0&&l.push({node:n.front,polygontreenodes:p});const h=s.length;if(n.back&&h>0)l.push({node:n.back,polygontreenodes:s});else for(let e=0;e<h;e++)s[e].remove()}t=l.pop()}while(void 0!==t)}clipTo(e,o){let n=this;const t=[];do{n.polygontreenodes.length>0&&e.rootnode.clipPolygons(n.polygontreenodes,o),n.front&&t.push(n.front),n.back&&t.push(n.back),n=t.pop()}while(void 0!==n)}addPolygonTreeNodes(e){let o={node:this,polygontreenodes:e};const n=[];do{const e=o.node,t=o.polygontreenodes;if(0===t.length){o=n.pop();continue}if(!e.plane){let o=0;const n=t[o=Math.floor(t.length/2)].getPolygon();e.plane=poly3.plane(n)}const l=[],s=[],p=t.length;for(let o=0;o<p;++o)t[o].splitByPlane(e.plane,e.polygontreenodes,s,l,s);if(l.length>0){e.front||(e.front=new Node(e)),p===l.length&&0===s.length?e.front.polygontreenodes=l:n.push({node:e.front,polygontreenodes:l})}if(s.length>0){e.back||(e.back=new Node(e)),p===s.length&&0===l.length?e.back.polygontreenodes=s:n.push({node:e.back,polygontreenodes:s})}o=n.pop()}while(void 0!==o)}}module.exports=Node;
1585
1576
 
1586
- },{"../../../geometries/poly3":202,"../../../maths/plane":285}],402:[function(require,module,exports){
1577
+ },{"../../../geometries/poly3":199,"../../../maths/plane":282}],399:[function(require,module,exports){
1587
1578
  const{EPS:EPS}=require("../../../maths/constants"),vec3=require("../../../maths/vec3"),poly3=require("../../../geometries/poly3"),splitPolygonByPlane=require("./splitPolygonByPlane");class PolygonTreeNode{constructor(e,t){this.parent=e,this.children=[],this.polygon=t,this.removed=!1}addPolygons(e){if(!this.isRootNode())throw new Error("Assertion failed");const t=this;e.forEach(e=>{t.addChild(e)})}remove(){if(!this.removed){this.removed=!0,this.polygon=null;const e=this.parent.children,t=e.indexOf(this);if(t<0)throw new Error("Assertion failed");e.splice(t,1),this.parent.recursivelyInvalidatePolygon()}}isRemoved(){return this.removed}isRootNode(){return!this.parent}invert(){if(!this.isRootNode())throw new Error("Assertion failed");this.invertSub()}getPolygon(){if(!this.polygon)throw new Error("Assertion failed");return this.polygon}getPolygons(e){let t=[this];const o=[t];let n,l,s,i;for(n=0;n<o.length;++n)for(l=0,s=(t=o[n]).length;l<s;l++)(i=t[l]).polygon?e.push(i.polygon):i.children.length>0&&o.push(i.children)}splitByPlane(e,t,o,n,l){if(this.children.length){const s=[this.children];let i,r,h,c,d;for(i=0;i<s.length;i++)for(d=s[i],r=0,h=d.length;r<h;r++)(c=d[r]).children.length>0?s.push(c.children):c._splitByPlane(e,t,o,n,l)}else this._splitByPlane(e,t,o,n,l)}_splitByPlane(e,t,o,n,l){const s=this.polygon;if(s){const i=poly3.measureBoundingSphere(s),r=i[3]+EPS,h=i,c=vec3.dot(e,h)-e[3];if(c>r)n.push(this);else if(c<-r)l.push(this);else{const i=splitPolygonByPlane(e,s);switch(i.type){case 0:t.push(this);break;case 1:o.push(this);break;case 2:n.push(this);break;case 3:l.push(this);break;case 4:if(i.front){const e=this.addChild(i.front);n.push(e)}if(i.back){const e=this.addChild(i.back);l.push(e)}}}}}addChild(e){const t=new PolygonTreeNode(this,e);return this.children.push(t),t}invertSub(){let e=[this];const t=[e];let o,n,l,s;for(o=0;o<t.length;o++)for(n=0,l=(e=t[o]).length;n<l;n++)(s=e[n]).polygon&&(s.polygon=poly3.invert(s.polygon)),s.children.length>0&&t.push(s.children)}recursivelyInvalidatePolygon(){this.polygon=null,this.parent&&this.parent.recursivelyInvalidatePolygon()}clear(){let e=[this];const t=[e];for(let o=0;o<t.length;++o){const n=(e=t[o]).length;for(let o=0;o<n;o++){const n=e[o];n.polygon&&(n.polygon=null),n.parent&&(n.parent=null),n.children.length>0&&t.push(n.children),n.children=[]}}}toString(){let e="",t=[this];const o=[t];let n,l,s,i;for(n=0;n<o.length;++n){t=o[n];const r=" ".repeat(n);for(l=0,s=t.length;l<s;l++)e+=`${r}PolygonTreeNode (${(i=t[l]).isRootNode()}): ${i.children.length}`,i.polygon?e+=`\n ${r}polygon: ${i.polygon.vertices}\n`:e+="\n",i.children.length>0&&o.push(i.children)}return e}}module.exports=PolygonTreeNode;
1588
1579
 
1589
- },{"../../../geometries/poly3":202,"../../../maths/constants":217,"../../../maths/vec3":344,"./splitPolygonByPlane":406}],403:[function(require,module,exports){
1580
+ },{"../../../geometries/poly3":199,"../../../maths/constants":214,"../../../maths/vec3":341,"./splitPolygonByPlane":403}],400:[function(require,module,exports){
1590
1581
  const Node=require("./Node"),PolygonTreeNode=require("./PolygonTreeNode");class Tree{constructor(o){this.polygonTree=new PolygonTreeNode,this.rootnode=new Node(null),o&&this.addPolygons(o)}invert(){this.polygonTree.invert(),this.rootnode.invert()}clipTo(o,e=!1){this.rootnode.clipTo(o,e)}allPolygons(){const o=[];return this.polygonTree.getPolygons(o),o}addPolygons(o){const e=new Array(o.length);for(let r=0;r<o.length;r++)e[r]=this.polygonTree.addChild(o[r]);this.rootnode.addPolygonTreeNodes(e)}clear(){this.polygonTree.clear()}toString(){return"Tree: "+this.polygonTree.toString("")}}module.exports=Tree;
1591
1582
 
1592
- },{"./Node":401,"./PolygonTreeNode":402}],404:[function(require,module,exports){
1583
+ },{"./Node":398,"./PolygonTreeNode":399}],401:[function(require,module,exports){
1593
1584
  module.exports={Tree:require("./Tree")};
1594
1585
 
1595
- },{"./Tree":403}],405:[function(require,module,exports){
1586
+ },{"./Tree":400}],402:[function(require,module,exports){
1596
1587
  const vec3=require("../../../maths/vec3"),splitLineSegmentByPlane=(e,t,c)=>{const n=vec3.subtract(vec3.create(),c,t);let s=(e[3]-vec3.dot(e,t))/vec3.dot(e,n);return Number.isNaN(s)&&(s=0),s>1&&(s=1),s<0&&(s=0),vec3.scale(n,n,s),vec3.add(n,t,n),n};module.exports=splitLineSegmentByPlane;
1597
1588
 
1598
- },{"../../../maths/vec3":344}],406:[function(require,module,exports){
1589
+ },{"../../../maths/vec3":341}],403:[function(require,module,exports){
1599
1590
  const{EPS:EPS}=require("../../../maths/constants"),plane=require("../../../maths/plane"),vec3=require("../../../maths/vec3"),poly3=require("../../../geometries/poly3"),splitLineSegmentByPlane=require("./splitLineSegmentByPlane"),splitPolygonByPlane=(e,t)=>{const l={type:null,front:null,back:null},n=t.vertices,s=n.length,o=poly3.plane(t);if(plane.equals(o,e))l.type=0;else{let t=!1,p=!1;const i=[],c=-EPS;for(let l=0;l<s;l++){const s=vec3.dot(e,n[l])-e[3],o=s<c;i.push(o),s>EPS&&(t=!0),s<c&&(p=!0)}if(t||p)if(p)if(t){l.type=4;const t=[],p=[];let c=i[0];for(let l=0;l<s;l++){const o=n[l];let r=l+1;r>=s&&(r=0);const a=i[r];if(c===a)c?p.push(o):t.push(o);else{const l=n[r],s=splitLineSegmentByPlane(e,o,l);c?(p.push(o),p.push(s),t.push(s)):(t.push(o),t.push(s),p.push(s))}c=a}const r=EPS*EPS;if(p.length>=3){let e=p[p.length-1];for(let t=0;t<p.length;t++){const l=p[t];vec3.squaredDistance(l,e)<r&&(p.splice(t,1),t--),e=l}}if(t.length>=3){let e=t[t.length-1];for(let l=0;l<t.length;l++){const n=t[l];vec3.squaredDistance(n,e)<r&&(t.splice(l,1),l--),e=n}}t.length>=3&&(l.front=poly3.fromPointsAndPlane(t,o)),p.length>=3&&(l.back=poly3.fromPointsAndPlane(p,o))}else l.type=3;else l.type=2;else{const t=vec3.dot(e,o);l.type=t>=0?0:1}}return l};module.exports=splitPolygonByPlane;
1600
1591
 
1601
- },{"../../../geometries/poly3":202,"../../../maths/constants":217,"../../../maths/plane":285,"../../../maths/vec3":344,"./splitLineSegmentByPlane":405}],407:[function(require,module,exports){
1592
+ },{"../../../geometries/poly3":199,"../../../maths/constants":214,"../../../maths/plane":282,"../../../maths/vec3":341,"./splitLineSegmentByPlane":402}],404:[function(require,module,exports){
1602
1593
  const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),unionGeom2=require("./unionGeom2"),unionGeom3=require("./unionGeom3"),union=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only unions of the same type are supported");const o=e[0];return geom2.isA(o)?unionGeom2(e):geom3.isA(o)?unionGeom3(e):o};module.exports=union;
1603
1594
 
1604
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../utils/areAllShapesTheSameType":517,"../../utils/flatten":519,"./unionGeom2":408,"./unionGeom3":409}],408:[function(require,module,exports){
1595
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../utils/areAllShapesTheSameType":513,"../../utils/flatten":515,"./unionGeom2":405,"./unionGeom3":406}],405:[function(require,module,exports){
1605
1596
  const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),unionGeom3=require("./unionGeom3"),union=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),n=unionGeom3(o),r=measureEpsilon(n);return fromFakePolygons(r,geom3.toPolygons(n))};module.exports=union;
1606
1597
 
1607
- },{"../../geometries/geom3":164,"../../measurements/measureEpsilon":385,"../../utils/flatten":519,"./fromFakePolygons":387,"./to3DWalls":400,"./unionGeom3":409}],409:[function(require,module,exports){
1598
+ },{"../../geometries/geom3":161,"../../measurements/measureEpsilon":382,"../../utils/flatten":515,"./fromFakePolygons":384,"./to3DWalls":397,"./unionGeom3":406}],406:[function(require,module,exports){
1608
1599
  const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),unionSub=require("./unionGeom3Sub"),union=(...e)=>{let t;for(e=flatten(e),t=1;t<e.length;t+=2)e.push(unionSub(e[t-1],e[t]));let n=e[t-1];return n=retessellate(n)};module.exports=union;
1609
1600
 
1610
- },{"../../utils/flatten":519,"../modifiers/retessellate":477,"./unionGeom3Sub":410}],410:[function(require,module,exports){
1601
+ },{"../../utils/flatten":515,"../modifiers/retessellate":473,"./unionGeom3Sub":407}],407:[function(require,module,exports){
1611
1602
  const geom3=require("../../geometries/geom3"),mayOverlap=require("./mayOverlap"),{Tree:Tree}=require("./trees"),unionSub=(e,o)=>{if(!mayOverlap(e,o))return unionForNonIntersecting(e,o);const n=new Tree(geom3.toPolygons(e)),r=new Tree(geom3.toPolygons(o));n.clipTo(r,!1),r.clipTo(n),r.invert(),r.clipTo(n),r.invert();const t=n.allPolygons().concat(r.allPolygons());return geom3.create(t)},unionForNonIntersecting=(e,o)=>{let n=geom3.toPolygons(e);return n=n.concat(geom3.toPolygons(o)),geom3.create(n)};module.exports=unionSub;
1612
1603
 
1613
- },{"../../geometries/geom3":164,"./mayOverlap":393,"./trees":404}],411:[function(require,module,exports){
1604
+ },{"../../geometries/geom3":161,"./mayOverlap":390,"./trees":401}],408:[function(require,module,exports){
1614
1605
  const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),expandGeom2=require("./expandGeom2"),expandGeom3=require("./expandGeom3"),expandPath2=require("./expandPath2"),expand=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const t=r.map(r=>path2.isA(r)?expandPath2(e,r):geom2.isA(r)?expandGeom2(e,r):geom3.isA(r)?expandGeom3(e,r):r);return 1===t.length?t[0]:t};module.exports=expand;
1615
1606
 
1616
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../utils/flatten":519,"./expandGeom2":412,"./expandGeom3":413,"./expandPath2":414}],412:[function(require,module,exports){
1607
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../utils/flatten":515,"./expandGeom2":409,"./expandGeom3":410,"./expandPath2":411}],409:[function(require,module,exports){
1617
1608
  const geom2=require("../../geometries/geom2"),offsetFromPoints=require("./offsetFromPoints"),expandGeom2=(e,o)=>{const{delta:r,corners:s,segments:t}=Object.assign({},{delta:1,corners:"edge",segments:16},e);if("edge"!==s&&"chamfer"!==s&&"round"!==s)throw new Error('corners must be "edge", "chamfer", or "round"');const n=geom2.toOutlines(o).map(o=>offsetFromPoints(e={delta:r,corners:s,closed:!0,segments:t},o)).reduce((e,o)=>e.concat(geom2.toSides(geom2.fromPoints(o))),[]);return geom2.create(n)};module.exports=expandGeom2;
1618
1609
 
1619
- },{"../../geometries/geom2":149,"./offsetFromPoints":419}],413:[function(require,module,exports){
1610
+ },{"../../geometries/geom2":146,"./offsetFromPoints":416}],410:[function(require,module,exports){
1620
1611
  const geom3=require("../../geometries/geom3"),union=require("../booleans/union"),expandShell=require("./expandShell"),expandGeom3=(e,n)=>{const{delta:o,corners:r,segments:t}=Object.assign({},{delta:1,corners:"round",segments:12},e);if("round"!==r)throw new Error('corners must be "round" for 3D geometries');if(0===geom3.toPolygons(n).length)throw new Error("the given geometry cannot be empty");const s=expandShell(e={delta:o,corners:r,segments:t},n);return union(n,s)};module.exports=expandGeom3;
1621
1612
 
1622
- },{"../../geometries/geom3":164,"../booleans/union":407,"./expandShell":415}],414:[function(require,module,exports){
1613
+ },{"../../geometries/geom3":161,"../booleans/union":404,"./expandShell":412}],411:[function(require,module,exports){
1623
1614
  const area=require("../../maths/utils/area"),vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),offsetFromPoints=require("./offsetFromPoints"),createGeometryFromClosedOffsets=e=>{let{external:t,internal:r}=e;area(t)<0?t=t.reverse():r=r.reverse();const o=path2.fromPoints({closed:!0},t),s=path2.fromPoints({closed:!0},r),n=geom2.toSides(geom2.fromPoints(path2.toPoints(o))),a=geom2.toSides(geom2.fromPoints(path2.toPoints(s)));return n.push(...a),geom2.create(n)},createGeometryFromExpandedOpenPath=(e,t,r,o)=>{const{points:s,external:n,internal:a}=e,c=Math.floor(t/2),m=[],i=[];if("round"===r&&c>0){const e=Math.PI/c,t=s[s.length-1],r=vec2.angle(vec2.subtract(vec2.create(),n[n.length-1],t)),d=s[0],l=vec2.angle(vec2.subtract(vec2.create(),a[0],d));for(let s=1;s<c;s++){let n=r+e*s,a=vec2.fromAngleRadians(vec2.create(),n);vec2.scale(a,a,o),vec2.add(a,a,t),m.push(a),n=l+e*s,a=vec2.fromAngleRadians(vec2.create(),n),vec2.scale(a,a,o),vec2.add(a,a,d),i.push(a)}}const d=[];return d.push(...n,...m,...a.reverse(),...i),geom2.fromPoints(d)},expandPath2=(e,t)=>{e=Object.assign({},{delta:1,corners:"edge",segments:16},e);const{delta:r,corners:o,segments:s}=e;if(r<=0)throw new Error("the given delta must be positive for paths");if("edge"!==o&&"chamfer"!==o&&"round"!==o)throw new Error('corners must be "edge", "chamfer", or "round"');const n=t.isClosed,a=path2.toPoints(t);if(0===a.length)throw new Error("the given geometry cannot be empty");const c={points:a,external:offsetFromPoints({delta:r,corners:o,segments:s,closed:n},a),internal:offsetFromPoints({delta:-r,corners:o,segments:s,closed:n},a)};return t.isClosed?createGeometryFromClosedOffsets(c):createGeometryFromExpandedOpenPath(c,s,o,r)};module.exports=expandPath2;
1624
1615
 
1625
- },{"../../geometries/geom2":149,"../../geometries/path2":185,"../../maths/utils/area":290,"../../maths/vec2":313,"./offsetFromPoints":419}],415:[function(require,module,exports){
1616
+ },{"../../geometries/geom2":146,"../../geometries/path2":182,"../../maths/utils/area":287,"../../maths/vec2":310,"./offsetFromPoints":416}],412:[function(require,module,exports){
1626
1617
  const{EPS:EPS,TAU:TAU}=require("../../maths/constants"),mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),fnNumberSort=require("../../utils/fnNumberSort"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),sphere=require("../../primitives/sphere"),retessellate=require("../modifiers/retessellate"),unionGeom3Sub=require("../booleans/unionGeom3Sub"),extrudePolygon=require("./extrudePolygon"),mapPlaneToVertex=(e,t,o)=>{const n=t.toString();if(e.has(n)){e.get(n)[1].push(o)}else{const s=[t,[o]];e.set(n,s)}},mapPlaneToEdge=(e,t,o)=>{const n=t[0].toString(),s=t[1].toString(),r=n<s?`${n},${s}`:`${s},${n}`;if(e.has(r)){e.get(r)[1].push(o)}else{const n=[t,[o]];e.set(r,n)}},addUniqueAngle=(e,t)=>{e.findIndex(e=>e===t)<0&&e.push(t)},expandShell=(e,t)=>{const{delta:o,segments:n}=Object.assign({},{delta:1,segments:12},e);let s=geom3.create();const r=new Map,c=new Map,a=vec3.create(),l=vec3.create();return geom3.toPolygons(t).forEach((e,t)=>{const n=vec3.scale(vec3.create(),poly3.plane(e),2*o),a=poly3.transform(mat4.fromTranslation(mat4.create(),vec3.scale(vec3.create(),n,-.5)),e),l=extrudePolygon(n,a);s=unionGeom3Sub(s,l);const u=e.vertices;for(let t=0;t<u.length;t++){mapPlaneToVertex(r,u[t],poly3.plane(e));const o=(t+1)%u.length,n=[u[t],u[o]];mapPlaneToEdge(c,n,poly3.plane(e))}}),c.forEach(e=>{const t=e[0],r=e[1],c=t[0],u=t[1],i=vec3.subtract(vec3.create(),u,c);vec3.normalize(i,i);const m=r[0],g=vec3.cross(vec3.create(),m,i);let p=[];for(let e=0;e<n;e++)addUniqueAngle(p,e*TAU/n);for(let e=0,t=r.length;e<t;e++){const t=r[e],o=vec3.dot(g,t),n=vec3.dot(m,t);let s=Math.atan2(o,n);s<0&&(s+=TAU),addUniqueAngle(p,s),(s=Math.atan2(-o,-n))<0&&(s+=TAU),addUniqueAngle(p,s)}const h=(p=p.sort(fnNumberSort)).length;let v,d;const f=[],S=[],q=[];for(let e=-1;e<h;e++){const t=p[e<0?e+h:e],n=Math.sin(t),s=Math.cos(t);vec3.scale(a,m,s*o),vec3.scale(l,g,n*o),vec3.add(a,a,l);const r=vec3.add(vec3.create(),c,a),i=vec3.add(vec3.create(),u,a);let y=!1;if(e>=0&&vec3.distance(r,v)<EPS&&(y=!0),!y){if(e>=0){f.push(r),S.push(i);const e=[d,i,r,v],t=poly3.create(e);q.push(t)}v=r,d=i}}S.reverse(),q.push(poly3.create(f)),q.push(poly3.create(S));const y=geom3.create(q);s=unionGeom3Sub(s,y)}),r.forEach(e=>{const t=e[0],r=e[1],c=r[0];let u=null,i=0;for(let e=1;e<r.length;e++){const t=r[e],o=vec3.cross(a,c,t),n=vec3.length(o);n>.05&&n>i&&(i=n,u=t)}u||(u=vec3.orthogonal(a,c));const m=vec3.cross(a,c,u);vec3.normalize(m,m);const g=vec3.cross(l,m,c),p=sphere({center:[t[0],t[1],t[2]],radius:o,segments:n,axes:[c,m,g]});s=unionGeom3Sub(s,p)}),retessellate(s)};module.exports=expandShell;
1627
1618
 
1628
- },{"../../geometries/geom3":164,"../../geometries/poly3":202,"../../maths/constants":217,"../../maths/mat4":266,"../../maths/vec3":344,"../../primitives/sphere":507,"../../utils/fnNumberSort":520,"../booleans/unionGeom3Sub":410,"../modifiers/retessellate":477,"./extrudePolygon":416}],416:[function(require,module,exports){
1619
+ },{"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/constants":214,"../../maths/mat4":263,"../../maths/vec3":341,"../../primitives/sphere":503,"../../utils/fnNumberSort":516,"../booleans/unionGeom3Sub":407,"../modifiers/retessellate":473,"./extrudePolygon":413}],413:[function(require,module,exports){
1629
1620
  const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),extrudePolygon=(e,r)=>{vec3.dot(poly3.plane(r),e)>0&&(r=poly3.invert(r));const t=[r],o=poly3.transform(mat4.fromTranslation(mat4.create(),e),r),s=r.vertices.length;for(let e=0;e<s;e++){const c=e<s-1?e+1:0,i=poly3.create([r.vertices[e],o.vertices[e],o.vertices[c],r.vertices[c]]);t.push(i)}return t.push(poly3.invert(o)),geom3.create(t)};module.exports=extrudePolygon;
1630
1621
 
1631
- },{"../../geometries/geom3":164,"../../geometries/poly3":202,"../../maths/mat4":266,"../../maths/vec3":344}],417:[function(require,module,exports){
1622
+ },{"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/mat4":263,"../../maths/vec3":341}],414:[function(require,module,exports){
1632
1623
  module.exports={expand:require("./expand"),offset:require("./offset")};
1633
1624
 
1634
- },{"./expand":411,"./offset":418}],418:[function(require,module,exports){
1625
+ },{"./expand":408,"./offset":415}],415:[function(require,module,exports){
1635
1626
  const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),offsetGeom2=require("./offsetGeom2"),offsetPath2=require("./offsetPath2"),offset=(e,...t)=>{if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");const o=t.map(t=>path2.isA(t)?offsetPath2(e,t):geom2.isA(t)?offsetGeom2(e,t):t);return 1===o.length?o[0]:o};module.exports=offset;
1636
1627
 
1637
- },{"../../geometries/geom2":149,"../../geometries/path2":185,"../../utils/flatten":519,"./offsetGeom2":420,"./offsetPath2":421}],419:[function(require,module,exports){
1628
+ },{"../../geometries/geom2":146,"../../geometries/path2":182,"../../utils/flatten":515,"./offsetGeom2":417,"./offsetPath2":418}],416:[function(require,module,exports){
1638
1629
  const{EPS:EPS,TAU:TAU}=require("../../maths/constants"),intersect=require("../../maths/utils/intersect"),line2=require("../../maths/line2"),vec2=require("../../maths/vec2"),area=require("../../maths/utils/area"),offsetFromPoints=(e,t)=>{let{delta:s,corners:c,closed:n,segments:a}=Object.assign({},{delta:1,corners:"edge",closed:!1,segments:16},e);if(Math.abs(s)<EPS)return t;let r=e.closed?area(t):1;0===r&&(r=1);const o=r>0&&s>=0||r<0&&s<0;s=Math.abs(s);let i=null,l=[];const u=[],v=vec2.create(),f=t.length;for(let e=0;e<f;e++){const c=(e+1)%f,a=t[e],r=t[c];o?vec2.subtract(v,a,r):vec2.subtract(v,r,a),vec2.normal(v,v),vec2.normalize(v,v),vec2.scale(v,v,s);const h=vec2.add(vec2.create(),a,v),d=vec2.add(vec2.create(),r,v),m=[h,d];if(null!=i&&(n||!n&&0!==c)){const e=intersect(i[0],i[1],m[0],m[1]);e?(l.pop(),m[0]=e):u.push({c:a,s0:i,s1:m})}i=[h,d],(0!==c||n)&&(l.push(m[0]),l.push(m[1]))}if(n&&null!=i){const e=l[0],s=l[1],c=intersect(i[0],i[1],e,s);if(c)l[0]=c,l.pop();else{const c=t[0],n=[e,s];u.push({c:c,s0:i,s1:n})}}if("edge"===c){const e=new Map;l.forEach((t,s)=>e.set(t,s));const t=line2.create(),s=line2.create();u.forEach(c=>{line2.fromPoints(t,c.s0[0],c.s0[1]),line2.fromPoints(s,c.s1[0],c.s1[1]);const n=line2.intersectPointOfLines(t,s);if(Number.isFinite(n[0])&&Number.isFinite(n[1])){const t=c.s0[1],s=e.get(t);l[s]=n,l[(s+1)%l.length]=void 0}else{const t=c.s1[0],s=e.get(t);l[s]=void 0}}),l=l.filter(e=>void 0!==e)}if("round"===c){let e=Math.floor(a/4);const t=vec2.create();u.forEach(c=>{let n=vec2.angle(vec2.subtract(t,c.s1[0],c.c));if(n-=vec2.angle(vec2.subtract(t,c.s0[1],c.c)),o&&n<0&&(n+=Math.PI)<0&&(n+=Math.PI),!o&&n>0&&(n-=Math.PI)>0&&(n-=Math.PI),0!==n){const r=n/(e=Math.floor(a*(Math.abs(n)/TAU))),o=vec2.angle(vec2.subtract(t,c.s0[1],c.c)),i=[];for(let t=1;t<e;t++){const e=o+r*t,n=vec2.fromAngleRadians(vec2.create(),e);vec2.scale(n,n,s),vec2.add(n,n,c.c),i.push(n)}if(i.length>0){const e=c.s0[1];let t=l.findIndex(t=>vec2.equals(e,t));t=(t+1)%l.length,l.splice(t,0,...i)}}else{const e=c.s1[0],t=l.findIndex(t=>vec2.equals(e,t));l.splice(t,1)}})}return l};module.exports=offsetFromPoints;
1639
1630
 
1640
- },{"../../maths/constants":217,"../../maths/line2":228,"../../maths/utils/area":290,"../../maths/utils/intersect":293,"../../maths/vec2":313}],420:[function(require,module,exports){
1631
+ },{"../../maths/constants":214,"../../maths/line2":225,"../../maths/utils/area":287,"../../maths/utils/intersect":290,"../../maths/vec2":310}],417:[function(require,module,exports){
1641
1632
  const geom2=require("../../geometries/geom2"),poly2=require("../../geometries/poly2"),offsetFromPoints=require("./offsetFromPoints"),offsetGeom2=(e,o)=>{const{delta:r,corners:s,segments:t}=Object.assign({},{delta:1,corners:"edge",segments:0},e);if("edge"!==s&&"chamfer"!==s&&"round"!==s)throw new Error('corners must be "edge", "chamfer", or "round"');const n=geom2.toOutlines(o),m=n.map(o=>{const m=n.reduce((e,r)=>e+poly2.arePointsInside(o,poly2.create(r)),0);return offsetFromPoints(e={delta:m%2==0?r:-r,corners:s,closed:!0,segments:t},o)}).reduce((e,o)=>e.concat(geom2.toSides(geom2.fromPoints(o))),[]);return geom2.create(m)};module.exports=offsetGeom2;
1642
1633
 
1643
- },{"../../geometries/geom2":149,"../../geometries/poly2":196,"./offsetFromPoints":419}],421:[function(require,module,exports){
1634
+ },{"../../geometries/geom2":146,"../../geometries/poly2":193,"./offsetFromPoints":416}],418:[function(require,module,exports){
1644
1635
  const path2=require("../../geometries/path2"),offsetFromPoints=require("./offsetFromPoints"),offsetPath2=(e,o)=>{const s={delta:1,corners:"edge",closed:o.isClosed,segments:16},{delta:t,corners:r,closed:n,segments:c}=Object.assign({},s,e);if("edge"!==r&&"chamfer"!==r&&"round"!==r)throw new Error('corners must be "edge", "chamfer", or "round"');const d=offsetFromPoints(e={delta:t,corners:r,closed:n,segments:c},path2.toPoints(o));return path2.fromPoints({closed:n},d)};module.exports=offsetPath2;
1645
1636
 
1646
- },{"../../geometries/path2":185,"./offsetFromPoints":419}],422:[function(require,module,exports){
1637
+ },{"../../geometries/path2":182,"./offsetFromPoints":416}],419:[function(require,module,exports){
1647
1638
  const{area:area}=require("../../../maths/utils"),{toOutlines:toOutlines}=require("../../../geometries/geom2"),{arePointsInside:arePointsInside}=require("../../../geometries/poly2"),assignHoles=e=>{const s=toOutlines(e),o=[],t=[];s.forEach((e,s)=>{const n=area(e);n<0?t.push(s):n>0&&o.push(s)});const n=[],r=[];return o.forEach((e,o)=>{const i=s[e];n[o]=[],t.forEach((e,t)=>{const a=s[e];arePointsInside([a[0]],{vertices:i})&&(n[o].push(e),r[t]||(r[t]=[]),r[t].push(o))})}),t.forEach((e,s)=>{if(r[s]&&r[s].length>1){const o=minIndex(r[s],e=>n[e].length);r[s].forEach((s,t)=>{t!==o&&(n[s]=n[s].filter(s=>s!==e))})}}),n.map((e,t)=>({solid:s[o[t]],holes:e.map(e=>s[e])}))},minIndex=(e,s)=>{let o,t;return e.forEach((e,n)=>{const r=s(e);(void 0===t||r<t)&&(o=n,t=r)}),o};module.exports=assignHoles;
1648
1639
 
1649
- },{"../../../geometries/geom2":149,"../../../geometries/poly2":196,"../../../maths/utils":291}],423:[function(require,module,exports){
1640
+ },{"../../../geometries/geom2":146,"../../../geometries/poly2":193,"../../../maths/utils":288}],420:[function(require,module,exports){
1650
1641
  const{filterPoints:filterPoints,linkedPolygon:linkedPolygon,locallyInside:locallyInside,splitPolygon:splitPolygon}=require("./linkedPolygon"),{area:area,pointInTriangle:pointInTriangle}=require("./triangle"),eliminateHoles=(e,t,n,l)=>{const i=[];for(let n=0,o=t.length;n<o;n++){const r=t[n]*l,x=n<o-1?t[n+1]*l:e.length,s=linkedPolygon(e,r,x,l,!1);s===s.next&&(s.steiner=!0),i.push(getLeftmost(s))}i.sort((e,t)=>e.x-t.x);for(let e=0;e<i.length;e++)n=eliminateHole(i[e],n),n=filterPoints(n,n.next);return n},eliminateHole=(e,t)=>{const n=findHoleBridge(e,t);if(!n)return t;const l=splitPolygon(n,e),i=filterPoints(n,n.next);return filterPoints(l,l.next),t===n?i:t},findHoleBridge=(e,t)=>{let n=t;const l=e.x,i=e.y;let o,r=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){const e=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=l&&e>r){if(r=e,e===l){if(i===n.y)return n;if(i===n.next.y)return n.next}o=n.x<n.next.x?n:n.next}}n=n.next}while(n!==t);if(!o)return null;if(l===r)return o;const x=o,s=o.x,y=o.y;let a=1/0;n=o;do{if(l>=n.x&&n.x>=s&&l!==n.x&&pointInTriangle(i<y?l:r,i,s,y,i<y?r:l,i,n.x,n.y)){const t=Math.abs(i-n.y)/(l-n.x);locallyInside(n,e)&&(t<a||t===a&&(n.x>o.x||n.x===o.x&&sectorContainsSector(o,n)))&&(o=n,a=t)}n=n.next}while(n!==x);return o},sectorContainsSector=(e,t)=>area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0,getLeftmost=e=>{let t=e,n=e;do{(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next}while(t!==e);return n};module.exports=eliminateHoles;
1651
1642
 
1652
- },{"./linkedPolygon":427,"./triangle":429}],424:[function(require,module,exports){
1643
+ },{"./linkedPolygon":424,"./triangle":426}],421:[function(require,module,exports){
1653
1644
  const eliminateHoles=require("./eliminateHoles"),{removeNode:removeNode,sortLinked:sortLinked}=require("./linkedList"),{cureLocalIntersections:cureLocalIntersections,filterPoints:filterPoints,isValidDiagonal:isValidDiagonal,linkedPolygon:linkedPolygon,splitPolygon:splitPolygon}=require("./linkedPolygon"),{area:area,pointInTriangle:pointInTriangle}=require("./triangle"),triangulate=(e,r,n=2)=>{const t=r&&r.length,i=t?r[0]*n:e.length;let x=linkedPolygon(e,0,i,n,!0);const l=[];if(!x||x.next===x.prev)return l;let o,a,y,s,p;if(t&&(x=eliminateHoles(e,r,x,n)),e.length>80*n){o=y=e[0],a=s=e[1];for(let r=n;r<i;r+=n){const n=e[r],t=e[r+1];n<o&&(o=n),t<a&&(a=t),n>y&&(y=n),t>s&&(s=t)}p=0!==(p=Math.max(y-o,s-a))?1/p:0}return earcutLinked(x,l,n,o,a,p),l},earcutLinked=(e,r,n,t,i,x,l)=>{if(!e)return;!l&&x&&indexCurve(e,t,i,x);let o,a,y=e;for(;e.prev!==e.next;)if(o=e.prev,a=e.next,x?isEarHashed(e,t,i,x):isEar(e))r.push(o.i/n),r.push(e.i/n),r.push(a.i/n),removeNode(e),e=a.next,y=a.next;else if((e=a)===y){l?1===l?(e=cureLocalIntersections(filterPoints(e),r,n),earcutLinked(e,r,n,t,i,x,2)):2===l&&splitEarcut(e,r,n,t,i,x):earcutLinked(filterPoints(e),r,n,t,i,x,1);break}},isEar=e=>{const r=e.prev,n=e,t=e.next;if(area(r,n,t)>=0)return!1;let i=e.next.next;for(;i!==e.prev;){if(pointInTriangle(r.x,r.y,n.x,n.y,t.x,t.y,i.x,i.y)&&area(i.prev,i,i.next)>=0)return!1;i=i.next}return!0},isEarHashed=(e,r,n,t)=>{const i=e.prev,x=e,l=e.next;if(area(i,x,l)>=0)return!1;const o=i.x<x.x?i.x<l.x?i.x:l.x:x.x<l.x?x.x:l.x,a=i.y<x.y?i.y<l.y?i.y:l.y:x.y<l.y?x.y:l.y,y=i.x>x.x?i.x>l.x?i.x:l.x:x.x>l.x?x.x:l.x,s=i.y>x.y?i.y>l.y?i.y:l.y:x.y>l.y?x.y:l.y,p=zOrder(o,a,r,n,t),u=zOrder(y,s,r,n,t);let d=e.prevZ,v=e.nextZ;for(;d&&d.z>=p&&v&&v.z<=u;){if(d!==e.prev&&d!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,d.x,d.y)&&area(d.prev,d,d.next)>=0)return!1;if(d=d.prevZ,v!==e.prev&&v!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,v.x,v.y)&&area(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;d&&d.z>=p;){if(d!==e.prev&&d!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,d.x,d.y)&&area(d.prev,d,d.next)>=0)return!1;d=d.prevZ}for(;v&&v.z<=u;){if(v!==e.prev&&v!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,v.x,v.y)&&area(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0},splitEarcut=(e,r,n,t,i,x)=>{let l=e;do{let e=l.next.next;for(;e!==l.prev;){if(l.i!==e.i&&isValidDiagonal(l,e)){let o=splitPolygon(l,e);return l=filterPoints(l,l.next),o=filterPoints(o,o.next),earcutLinked(l,r,n,t,i,x),void earcutLinked(o,r,n,t,i,x)}e=e.next}l=l.next}while(l!==e)},indexCurve=(e,r,n,t)=>{let i=e;do{null===i.z&&(i.z=zOrder(i.x,i.y,r,n,t)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,sortLinked(i,e=>e.z)},zOrder=(e,r,n,t,i)=>(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))|(r=1431655765&((r=858993459&((r=252645135&((r=16711935&((r=32767*(r-t)*i)|r<<8))|r<<4))|r<<2))|r<<1))<<1;module.exports=triangulate;
1654
1645
 
1655
- },{"./eliminateHoles":423,"./linkedList":425,"./linkedPolygon":427,"./triangle":429}],425:[function(require,module,exports){
1646
+ },{"./eliminateHoles":420,"./linkedList":422,"./linkedPolygon":424,"./triangle":426}],422:[function(require,module,exports){
1656
1647
  const sortLinked=require("./linkedListSort");class Node{constructor(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}}const insertNode=(e,t,n,r)=>{const o=new Node(e,t,n);return r?(o.next=r.next,o.prev=r,r.next.prev=o,r.next=o):(o.prev=o,o.next=o),o},removeNode=e=>{e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)};module.exports={Node:Node,insertNode:insertNode,removeNode:removeNode,sortLinked:sortLinked};
1657
1648
 
1658
- },{"./linkedListSort":426}],426:[function(require,module,exports){
1649
+ },{"./linkedListSort":423}],423:[function(require,module,exports){
1659
1650
  const sortLinked=(e,t)=>{let l,n,o,r,x,Z=1;do{n=e,e=null;let u=null;for(x=0;n;){x++,o=n;let d=0;for(l=0;l<Z&&(d++,o=o.nextZ);l++);let s=Z;for(;d>0||s>0&&o;)0!==d&&(0===s||!o||t(n)<=t(o))?(r=n,n=n.nextZ,d--):(r=o,o=o.nextZ,s--),u?u.nextZ=r:e=r,r.prevZ=u,u=r;n=o}u.nextZ=null,Z*=2}while(x>1);return e};module.exports=sortLinked;
1660
1651
 
1661
- },{}],427:[function(require,module,exports){
1652
+ },{}],424:[function(require,module,exports){
1662
1653
  const{Node:Node,insertNode:insertNode,removeNode:removeNode}=require("./linkedList"),{area:area}=require("./triangle"),linkedPolygon=(e,n,t,r,i)=>{let o;if(i===signedArea(e,n,t,r)>0)for(let i=n;i<t;i+=r)o=insertNode(i,e[i],e[i+1],o);else for(let i=t-r;i>=n;i-=r)o=insertNode(i,e[i],e[i+1],o);return o&&equals(o,o.next)&&(removeNode(o),o=o.next),o},filterPoints=(e,n)=>{if(!e)return e;n||(n=e);let t,r=e;do{if(t=!1,r.steiner||!equals(r,r.next)&&0!==area(r.prev,r,r.next))r=r.next;else{if(removeNode(r),(r=n=r.prev)===r.next)break;t=!0}}while(t||r!==n);return n},cureLocalIntersections=(e,n,t)=>{let r=e;do{const i=r.prev,o=r.next.next;!equals(i,o)&&intersects(i,r,r.next,o)&&locallyInside(i,o)&&locallyInside(o,i)&&(n.push(i.i/t),n.push(r.i/t),n.push(o.i/t),removeNode(r),removeNode(r.next),r=e=o),r=r.next}while(r!==e);return filterPoints(r)},intersectsPolygon=(e,n)=>{let t=e;do{if(t.i!==e.i&&t.next.i!==e.i&&t.i!==n.i&&t.next.i!==n.i&&intersects(t,t.next,e,n))return!0;t=t.next}while(t!==e);return!1},locallyInside=(e,n)=>area(e.prev,e,e.next)<0?area(e,n,e.next)>=0&&area(e,e.prev,n)>=0:area(e,n,e.prev)<0||area(e,e.next,n)<0,middleInside=(e,n)=>{let t=e,r=!1;const i=(e.x+n.x)/2,o=(e.y+n.y)/2;do{t.y>o!=t.next.y>o&&t.next.y!==t.y&&i<(t.next.x-t.x)*(o-t.y)/(t.next.y-t.y)+t.x&&(r=!r),t=t.next}while(t!==e);return r},splitPolygon=(e,n)=>{const t=new Node(e.i,e.x,e.y),r=new Node(n.i,n.x,n.y),i=e.next,o=n.prev;return e.next=n,n.prev=e,t.next=i,i.prev=t,r.next=t,t.prev=r,o.next=r,r.prev=o,r},isValidDiagonal=(e,n)=>e.next.i!==n.i&&e.prev.i!==n.i&&!intersectsPolygon(e,n)&&(locallyInside(e,n)&&locallyInside(n,e)&&middleInside(e,n)&&(area(e.prev,e,n.prev)||area(e,n.prev,n))||equals(e,n)&&area(e.prev,e,e.next)>0&&area(n.prev,n,n.next)>0),intersects=(e,n,t,r)=>{const i=Math.sign(area(e,n,t)),o=Math.sign(area(e,n,r)),l=Math.sign(area(t,r,e)),a=Math.sign(area(t,r,n));return i!==o&&l!==a||(!(0!==i||!onSegment(e,t,n))||(!(0!==o||!onSegment(e,r,n))||(!(0!==l||!onSegment(t,e,r))||!(0!==a||!onSegment(t,n,r)))))},onSegment=(e,n,t)=>n.x<=Math.max(e.x,t.x)&&n.x>=Math.min(e.x,t.x)&&n.y<=Math.max(e.y,t.y)&&n.y>=Math.min(e.y,t.y),signedArea=(e,n,t,r)=>{let i=0;for(let o=n,l=t-r;o<t;o+=r)i+=(e[l]-e[o])*(e[o+1]+e[l+1]),l=o;return i},equals=(e,n)=>e.x===n.x&&e.y===n.y;module.exports={cureLocalIntersections:cureLocalIntersections,filterPoints:filterPoints,isValidDiagonal:isValidDiagonal,linkedPolygon:linkedPolygon,locallyInside:locallyInside,splitPolygon:splitPolygon};
1663
1654
 
1664
- },{"./linkedList":425,"./triangle":429}],428:[function(require,module,exports){
1655
+ },{"./linkedList":422,"./triangle":426}],425:[function(require,module,exports){
1665
1656
  const geom2=require("../../../geometries/geom2"),plane=require("../../../maths/plane"),vec2=require("../../../maths/vec2"),vec3=require("../../../maths/vec3"),calculatePlane=require("../slice/calculatePlane"),assignHoles=require("./assignHoles");class PolygonHierarchy{constructor(e){this.plane=calculatePlane(e);const s=vec3.orthogonal(vec3.create(),this.plane),c=vec3.cross(vec3.create(),this.plane,s);this.v=vec3.normalize(c,c),this.u=vec3.cross(vec3.create(),this.v,this.plane),this.basisMap=new Map;const t=e.edges.map(e=>e.map(e=>this.to2D(e))),a=geom2.create(t);this.roots=assignHoles(a)}to2D(e){const s=vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v));return this.basisMap.set(s,e),s}to3D(e){const s=this.basisMap.get(e);if(s)return s;{console.log("Warning: point not in original slice");const s=vec3.scale(vec3.create(),this.u,e[0]),c=vec3.scale(vec3.create(),this.v,e[1]),t=vec3.scale(vec3.create(),plane,plane[3]),a=vec3.add(s,s,t);return vec3.add(c,c,a)}}}module.exports=PolygonHierarchy;
1666
1657
 
1667
- },{"../../../geometries/geom2":149,"../../../maths/plane":285,"../../../maths/vec2":313,"../../../maths/vec3":344,"../slice/calculatePlane":442,"./assignHoles":422}],429:[function(require,module,exports){
1658
+ },{"../../../geometries/geom2":146,"../../../maths/plane":282,"../../../maths/vec2":310,"../../../maths/vec3":341,"../slice/calculatePlane":438,"./assignHoles":419}],426:[function(require,module,exports){
1668
1659
  const pointInTriangle=(n,a,e,r,i,o,t,x)=>(i-t)*(a-x)-(n-t)*(o-x)>=0&&(n-t)*(r-x)-(e-t)*(a-x)>=0&&(e-t)*(o-x)-(i-t)*(r-x)>=0,area=(n,a,e)=>(a.y-n.y)*(e.x-a.x)-(a.x-n.x)*(e.y-a.y);module.exports={area:area,pointInTriangle:pointInTriangle};
1669
1660
 
1670
- },{}],430:[function(require,module,exports){
1661
+ },{}],427:[function(require,module,exports){
1671
1662
  const mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),repairSlice=require("./slice/repair"),extrudeWalls=require("./extrudeWalls"),defaultCallback=(e,r,l)=>{let t=null;return geom2.isA(l)&&(t=slice.fromSides(geom2.toSides(l))),poly3.isA(l)&&(t=slice.fromPoints(poly3.toPoints(l))),0===e||1===e?slice.transform(mat4.fromTranslation(mat4.create(),[0,0,e]),t):null},extrudeFromSlices=(e,r)=>{const l={numberOfSlices:2,capStart:!0,capEnd:!0,close:!1,repair:!0,callback:defaultCallback},{numberOfSlices:t,capStart:o,capEnd:c,close:s,repair:i,callback:a}=Object.assign({},l,e);if(t<2)throw new Error("numberOfSlices must be 2 or more");i&&(r=repairSlice(r));const n=t-1;let u=null,m=null,f=null,g=[];for(let e=0;e<t;e++){const l=a(e/n,e,r);if(l){if(!slice.isA(l))throw new Error("the callback function must return slice objects");if(0===slice.toEdges(l).length)throw new Error("the callback function must return slices with one or more edges");f&&(g=g.concat(extrudeWalls(f,l))),0===e&&(u=l),e===t-1&&(m=l),f=l}}if(c){const e=slice.toPolygons(m);g=g.concat(e)}if(o){const e=slice.toPolygons(u).map(poly3.invert);g=g.concat(e)}return o||c||s&&!slice.equals(m,u)&&(g=g.concat(extrudeWalls(m,u))),geom3.create(g)};module.exports=extrudeFromSlices;
1672
1663
 
1673
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/poly3":202,"../../maths/mat4":266,"./extrudeWalls":439,"./slice":448,"./slice/repair":450}],431:[function(require,module,exports){
1674
- const{TAU:TAU}=require("../../maths/constants"),slice=require("./slice"),mat4=require("../../maths/mat4"),extrudeFromSlices=require("./extrudeFromSlices"),geom2=require("../../geometries/geom2"),extrudeHelical=(e,t)=>{const r={angle:TAU,startAngle:0,pitch:10,endOffset:0,segmentsPerRotation:32},{angle:a,endOffset:s,segmentsPerRotation:i,startAngle:o}=Object.assign({},r,e);let n;n=!e.pitch&&e.height?e.height/(a/TAU):e.pitch?e.pitch:r.pitch;if(i<3)throw new Error("The number of segments per rotation needs to be at least 3.");let m=geom2.toSides(t);if(0===m.length)throw new Error("the given geometry cannot be empty");const l=m.filter(e=>e[0][0]>=0);let c=slice.fromSides(m);0===l.length&&(c=slice.reverse(c));const h=Math.round(i/TAU*Math.abs(a)),g=h>=2?h:2,u=mat4.create();let f;return extrudeFromSlices({numberOfSlices:g+1,callback:(e,t,r)=>{const i=o+a/g*t,m=s/g*t,l=(i-o)/TAU*n;return mat4.multiply(u,mat4.fromTranslation(mat4.create(),[m,0,l*Math.sign(a)]),mat4.fromXRotation(mat4.create(),-TAU/4*Math.sign(a))),f=mat4.create(),mat4.multiply(f,mat4.fromZRotation(mat4.create(),i),u),slice.transform(f,r)}},c)};module.exports=extrudeHelical;
1675
-
1676
- },{"../../geometries/geom2":149,"../../maths/constants":217,"../../maths/mat4":266,"./extrudeFromSlices":430,"./slice":448}],432:[function(require,module,exports){
1664
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/mat4":263,"./extrudeWalls":435,"./slice":444,"./slice/repair":446}],428:[function(require,module,exports){
1677
1665
  const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeLinearPath2=require("./extrudeLinearPath2"),extrudeLinear=(e,...t)=>{const{height:r,twistAngle:i,twistSteps:n,repair:a}=Object.assign({},{height:1,twistAngle:0,twistSteps:1,repair:!0},e);if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");e={offset:[0,0,r],twistAngle:i,twistSteps:n,repair:a};const s=t.map(t=>path2.isA(t)?extrudeLinearPath2(e,t):geom2.isA(t)?extrudeLinearGeom2(e,t):t);return 1===s.length?s[0]:s};module.exports=extrudeLinear;
1678
1666
 
1679
- },{"../../geometries/geom2":149,"../../geometries/path2":185,"../../utils/flatten":519,"./extrudeLinearGeom2":433,"./extrudeLinearPath2":434}],433:[function(require,module,exports){
1667
+ },{"../../geometries/geom2":146,"../../geometries/path2":182,"../../utils/flatten":515,"./extrudeLinearGeom2":429,"./extrudeLinearPath2":430}],429:[function(require,module,exports){
1680
1668
  const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeGeom2=(e,t)=>{let{offset:r,twistAngle:s,twistSteps:o,repair:i}=Object.assign({},{offset:[0,0,1],twistAngle:0,twistSteps:12,repair:!0},e);if(o<1)throw new Error("twistSteps must be 1 or more");0===s&&(o=1);const c=vec3.clone(r),m=geom2.toSides(t);if(0===m.length)throw new Error("the given geometry cannot be empty");const a=slice.fromSides(m);c[2]<0&&slice.reverse(a,a);const n=mat4.create();return extrudeFromSlices(e={numberOfSlices:o+1,capStart:!0,capEnd:!0,repair:i,callback:(e,t,r)=>{const i=t/o*s,m=vec3.scale(vec3.create(),c,t/o);return mat4.multiply(n,mat4.fromZRotation(n,i),mat4.fromTranslation(mat4.create(),m)),slice.transform(n,r)}},a)};module.exports=extrudeGeom2;
1681
1669
 
1682
- },{"../../geometries/geom2":149,"../../maths/mat4":266,"../../maths/vec3":344,"./extrudeFromSlices":430,"./slice":448}],434:[function(require,module,exports){
1670
+ },{"../../geometries/geom2":146,"../../maths/mat4":263,"../../maths/vec3":341,"./extrudeFromSlices":427,"./slice":444}],430:[function(require,module,exports){
1683
1671
  const geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudePath2=(e,r)=>{if(!r.isClosed)throw new Error("extruded path must be closed");const t=path2.toPoints(r),o=geom2.fromPoints(t);return extrudeLinearGeom2(e,o)};module.exports=extrudePath2;
1684
1672
 
1685
- },{"../../geometries/geom2":149,"../../geometries/path2":185,"./extrudeLinearGeom2":433}],435:[function(require,module,exports){
1673
+ },{"../../geometries/geom2":146,"../../geometries/path2":182,"./extrudeLinearGeom2":429}],431:[function(require,module,exports){
1686
1674
  const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeRectangularPath2=require("./extrudeRectangularPath2"),extrudeRectangularGeom2=require("./extrudeRectangularGeom2"),extrudeRectangular=(e,...t)=>{const{size:r,height:a}=Object.assign({},{size:1,height:1},e);if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");if(r<=0)throw new Error("size must be positive");if(a<=0)throw new Error("height must be positive");const u=t.map(t=>path2.isA(t)?extrudeRectangularPath2(e,t):geom2.isA(t)?extrudeRectangularGeom2(e,t):t);return 1===u.length?u[0]:u};module.exports=extrudeRectangular;
1687
1675
 
1688
- },{"../../geometries/geom2":149,"../../geometries/path2":185,"../../utils/flatten":519,"./extrudeRectangularGeom2":436,"./extrudeRectangularPath2":437}],436:[function(require,module,exports){
1676
+ },{"../../geometries/geom2":146,"../../geometries/path2":182,"../../utils/flatten":515,"./extrudeRectangularGeom2":432,"./extrudeRectangularPath2":433}],432:[function(require,module,exports){
1689
1677
  const{area:area}=require("../../maths/utils"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),expand=require("../expansions/expand"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeRectangularGeom2=(e,r)=>{const{size:t,height:o}=Object.assign({},{size:1,height:1},e);e.delta=t,e.offset=[0,0,o];const a=geom2.toOutlines(r);if(0===a.length)throw new Error("the given geometry cannot be empty");const n=a.map(r=>(area(r)<0&&r.reverse(),expand(e,path2.fromPoints({closed:!0},r)))).reduce((e,r)=>e.concat(geom2.toSides(r)),[]),i=geom2.create(n);return extrudeLinearGeom2(e,i)};module.exports=extrudeRectangularGeom2;
1690
1678
 
1691
- },{"../../geometries/geom2":149,"../../geometries/path2":185,"../../maths/utils":291,"../expansions/expand":411,"./extrudeLinearGeom2":433}],437:[function(require,module,exports){
1679
+ },{"../../geometries/geom2":146,"../../geometries/path2":182,"../../maths/utils":288,"../expansions/expand":408,"./extrudeLinearGeom2":429}],433:[function(require,module,exports){
1692
1680
  const path2=require("../../geometries/path2"),expand=require("../expansions/expand"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeRectangularPath2=(e,t)=>{const{size:r,height:n}=Object.assign({},{size:1,height:1},e);if(e.delta=r,e.offset=[0,0,n],0===path2.toPoints(t).length)throw new Error("the given geometry cannot be empty");const a=expand(e,t);return extrudeLinearGeom2(e,a)};module.exports=extrudeRectangularPath2;
1693
1681
 
1694
- },{"../../geometries/path2":185,"../expansions/expand":411,"./extrudeLinearGeom2":433}],438:[function(require,module,exports){
1682
+ },{"../../geometries/path2":182,"../expansions/expand":408,"./extrudeLinearGeom2":429}],434:[function(require,module,exports){
1695
1683
  const{TAU:TAU}=require("../../maths/constants"),mat4=require("../../maths/mat4"),{mirrorX:mirrorX}=require("../transforms/mirror"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeRotate=(e,t)=>{const r={segments:12,startAngle:0,angle:TAU,overflow:"cap"};let{segments:a,startAngle:o,angle:s,overflow:m}=Object.assign({},r,e);if(a<3)throw new Error("segments must be greater then 3");o=Math.abs(o)>TAU?o%TAU:o,s=Math.abs(s)>TAU?s%TAU:s;let n=o+s;if((n=Math.abs(n)>TAU?n%TAU:n)<o){const e=o;o=n,n=e}let l=n-o;if(l<=0&&(l=TAU),Math.abs(l)<TAU){const e=TAU/a;a=Math.floor(Math.abs(l)/e),Math.abs(l)>a*e&&a++}let i=geom2.toSides(t);if(0===i.length)throw new Error("the given geometry cannot be empty");const c=i.filter(e=>e[0][0]<0),g=i.filter(e=>e[0][0]>=0);c.length>0&&g.length>0&&"cap"===m&&(c.length>g.length?(i=i.map(e=>{let t=e[0],r=e[1];return[t=[Math.min(t[0],0),t[1]],r=[Math.min(r[0],0),r[1]]]}),t=geom2.reverse(geom2.create(i)),t=mirrorX(t)):g.length>=c.length&&(i=i.map(e=>{let t=e[0],r=e[1];return[t=[Math.max(t[0],0),t[1]],r=[Math.max(r[0],0),r[1]]]}),t=geom2.create(i)));const h=l/a,u=Math.abs(l)<TAU,A=slice.fromSides(geom2.toSides(t));slice.reverse(A,A);const f=mat4.create();return extrudeFromSlices(e={numberOfSlices:a+1,capStart:u,capEnd:u,close:!u,callback:(e,t,r)=>{let s=h*t+o;return l===TAU&&t===a&&(s=o),mat4.multiply(f,mat4.fromZRotation(f,s),mat4.fromXRotation(mat4.create(),TAU/4)),slice.transform(f,r)}},A)};module.exports=extrudeRotate;
1696
1684
 
1697
- },{"../../geometries/geom2":149,"../../maths/constants":217,"../../maths/mat4":266,"../transforms/mirror":484,"./extrudeFromSlices":430,"./slice":448}],439:[function(require,module,exports){
1685
+ },{"../../geometries/geom2":146,"../../maths/constants":214,"../../maths/mat4":263,"../transforms/mirror":480,"./extrudeFromSlices":427,"./slice":444}],435:[function(require,module,exports){
1698
1686
  const{EPS:EPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),gcd=(e,t)=>e===t?e:e<t?gcd(t,e):1===t?1:0===t?e:gcd(t,e%t),lcm=(e,t)=>e*t/gcd(e,t),repartitionEdges=(e,t)=>{const r=e/t.length;if(1===r)return t;const s=vec3.fromValues(r,r,r),c=[];return t.forEach(e=>{const t=vec3.subtract(vec3.create(),e[1],e[0]);vec3.divide(t,t,s);let l=e[0];for(let e=1;e<=r;++e){const e=vec3.add(vec3.create(),l,t);c.push([l,e]),l=e}}),c},EPSAREA=EPS*EPS/2*Math.sin(Math.PI/3),extrudeWalls=(e,t)=>{let r=slice.toEdges(e),s=slice.toEdges(t);if(r.length!==s.length){const e=lcm(r.length,s.length);e!==r.length&&(r=repartitionEdges(e,r)),e!==s.length&&(s=repartitionEdges(e,s))}const c=[];return r.forEach((e,t)=>{const r=s[t],l=poly3.create([e[0],e[1],r[1]]),o=poly3.measureArea(l);Number.isFinite(o)&&o>EPSAREA&&c.push(l);const n=poly3.create([e[0],r[1],r[0]]),i=poly3.measureArea(n);Number.isFinite(i)&&i>EPSAREA&&c.push(n)}),c};module.exports=extrudeWalls;
1699
1687
 
1700
- },{"../../geometries/poly3":202,"../../maths/constants":217,"../../maths/vec3":344,"./slice":448}],440:[function(require,module,exports){
1701
- module.exports={extrudeFromSlices:require("./extrudeFromSlices"),extrudeLinear:require("./extrudeLinear"),extrudeRectangular:require("./extrudeRectangular"),extrudeRotate:require("./extrudeRotate"),extrudeHelical:require("./extrudeHelical"),project:require("./project"),slice:require("./slice")};
1688
+ },{"../../geometries/poly3":199,"../../maths/constants":214,"../../maths/vec3":341,"./slice":444}],436:[function(require,module,exports){
1689
+ module.exports={extrudeFromSlices:require("./extrudeFromSlices"),extrudeLinear:require("./extrudeLinear"),extrudeRectangular:require("./extrudeRectangular"),extrudeRotate:require("./extrudeRotate"),project:require("./project"),slice:require("./slice")};
1702
1690
 
1703
- },{"./extrudeFromSlices":430,"./extrudeHelical":431,"./extrudeLinear":432,"./extrudeRectangular":435,"./extrudeRotate":438,"./project":441,"./slice":448}],441:[function(require,module,exports){
1691
+ },{"./extrudeFromSlices":427,"./extrudeLinear":428,"./extrudeRectangular":431,"./extrudeRotate":434,"./project":437,"./slice":444}],437:[function(require,module,exports){
1704
1692
  const flatten=require("../../utils/flatten"),aboutEqualNormals=require("../../maths/utils/aboutEqualNormals"),plane=require("../../maths/plane"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),measureEpsilon=require("../../measurements/measureEpsilon"),unionGeom2=require("../booleans/unionGeom2"),projectGeom3=(e,o)=>{const r=plane.fromNormalAndPoint(plane.create(),e.axis,e.origin);if(Number.isNaN(r[0])||Number.isNaN(r[1])||Number.isNaN(r[2])||Number.isNaN(r[3]))throw new Error("project: invalid axis or origin");const t=measureEpsilon(o),a=t*t*Math.sqrt(3)/4;if(0===t)return geom2.create();const n=geom3.toPolygons(o);let s=[];for(let e=0;e<n.length;e++){const o=n[e].vertices.map(e=>plane.projectionOfPoint(r,e)),t=poly3.create(o),i=poly3.plane(t);aboutEqualNormals(r,i)&&(poly3.measureArea(t)<a||s.push(t))}if(!aboutEqualNormals(r,[0,0,1])){const e=mat4.fromVectorRotation(mat4.create(),r,[0,0,1]);s=s.map(o=>poly3.transform(e,o))}const i=(s=s.sort((e,o)=>poly3.measureArea(o)-poly3.measureArea(e))).map(e=>geom2.fromPoints(e.vertices));return unionGeom2(i)},project=(e,...o)=>{const{axis:r,origin:t}=Object.assign({},{axis:[0,0,1],origin:[0,0,0]},e);if(0===(o=flatten(o)).length)throw new Error("wrong number of arguments");e={axis:r,origin:t};const a=o.map(o=>geom3.isA(o)?projectGeom3(e,o):o);return 1===a.length?a[0]:a};module.exports=project;
1705
1693
 
1706
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/poly3":202,"../../maths/mat4":266,"../../maths/plane":285,"../../maths/utils/aboutEqualNormals":289,"../../measurements/measureEpsilon":385,"../../utils/flatten":519,"../booleans/unionGeom2":408}],442:[function(require,module,exports){
1694
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/mat4":263,"../../maths/plane":282,"../../maths/utils/aboutEqualNormals":286,"../../measurements/measureEpsilon":382,"../../utils/flatten":515,"../booleans/unionGeom2":405}],438:[function(require,module,exports){
1707
1695
  const plane=require("../../../maths/plane"),vec3=require("../../../maths/vec3"),calculatePlane=e=>{const c=e.edges;if(c.length<3)throw new Error("slices must have 3 or more edges to calculate a plane");const a=c.reduce((e,c)=>vec3.add(vec3.create(),e,c[0]),vec3.create());let t;vec3.scale(a,a,1/c.length);let l=0;c.forEach(e=>{if(!vec3.equals(e[0],e[1])){const c=vec3.squaredDistance(a,e[0]);c>l&&(t=e,l=c)}});const r=c.find(e=>vec3.equals(e[1],t[0]));return plane.fromPoints(plane.create(),r[0],t[0],t[1])};module.exports=calculatePlane;
1708
1696
 
1709
- },{"../../../maths/plane":285,"../../../maths/vec3":344}],443:[function(require,module,exports){
1697
+ },{"../../../maths/plane":282,"../../../maths/vec3":341}],439:[function(require,module,exports){
1710
1698
  const create=require("./create"),vec3=require("../../../maths/vec3"),clone=(...e)=>{let c,r;return 1===e.length?(c=create(),r=e[0]):(c=e[0],r=e[1]),c.edges=r.edges.map(e=>[vec3.clone(e[0]),vec3.clone(e[1])]),c};module.exports=clone;
1711
1699
 
1712
- },{"../../../maths/vec3":344,"./create":444}],444:[function(require,module,exports){
1700
+ },{"../../../maths/vec3":341,"./create":440}],440:[function(require,module,exports){
1713
1701
  const create=e=>(e||(e=[]),{edges:e});module.exports=create;
1714
1702
 
1715
- },{}],445:[function(require,module,exports){
1703
+ },{}],441:[function(require,module,exports){
1716
1704
  const vec3=require("../../../maths/vec3"),equals=(e,s)=>{const r=e.edges,t=s.edges;return r.length===t.length&&r.reduce((e,s,r)=>{const u=t[r],c=vec3.squaredDistance(s[0],u[0]);return e&&c<Number.EPSILON},!0)};module.exports=equals;
1717
1705
 
1718
- },{"../../../maths/vec3":344}],446:[function(require,module,exports){
1706
+ },{"../../../maths/vec3":341}],442:[function(require,module,exports){
1719
1707
  const vec3=require("../../../maths/vec3"),create=require("./create"),fromPoints=e=>{if(!Array.isArray(e))throw new Error("the given points must be an array");if(e.length<3)throw new Error("the given points must contain THREE or more points");const r=[];let t=e[e.length-1];return e.forEach(e=>{2===e.length&&r.push([vec3.fromVec2(vec3.create(),t),vec3.fromVec2(vec3.create(),e)]),3===e.length&&r.push([t,e]),t=e}),create(r)};module.exports=fromPoints;
1720
1708
 
1721
- },{"../../../maths/vec3":344,"./create":444}],447:[function(require,module,exports){
1709
+ },{"../../../maths/vec3":341,"./create":440}],443:[function(require,module,exports){
1722
1710
  const vec3=require("../../../maths/vec3"),create=require("./create"),fromSides=e=>{if(!Array.isArray(e))throw new Error("the given sides must be an array");const r=[];return e.forEach(e=>{r.push([vec3.fromVec2(vec3.create(),e[0]),vec3.fromVec2(vec3.create(),e[1])])}),create(r)};module.exports=fromSides;
1723
1711
 
1724
- },{"../../../maths/vec3":344,"./create":444}],448:[function(require,module,exports){
1712
+ },{"../../../maths/vec3":341,"./create":440}],444:[function(require,module,exports){
1725
1713
  module.exports={calculatePlane:require("./calculatePlane"),clone:require("./clone"),create:require("./create"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromSides:require("./fromSides"),isA:require("./isA"),reverse:require("./reverse"),toEdges:require("./toEdges"),toPolygons:require("./toPolygons"),toString:require("./toString"),transform:require("./transform")};
1726
1714
 
1727
- },{"./calculatePlane":442,"./clone":443,"./create":444,"./equals":445,"./fromPoints":446,"./fromSides":447,"./isA":449,"./reverse":451,"./toEdges":452,"./toPolygons":453,"./toString":454,"./transform":455}],449:[function(require,module,exports){
1715
+ },{"./calculatePlane":438,"./clone":439,"./create":440,"./equals":441,"./fromPoints":442,"./fromSides":443,"./isA":445,"./reverse":447,"./toEdges":448,"./toPolygons":449,"./toString":450,"./transform":451}],445:[function(require,module,exports){
1728
1716
  const isA=e=>!!(e&&"object"==typeof e&&"edges"in e&&Array.isArray(e.edges));module.exports=isA;
1729
1717
 
1730
- },{}],450:[function(require,module,exports){
1718
+ },{}],446:[function(require,module,exports){
1731
1719
  const vec3=require("../../../maths/vec3"),create=require("./create"),repair=e=>{if(!e.edges)return e;let t=e.edges;const r=new Map,c=new Map;(t=t.filter(e=>!vec3.equals(e[0],e[1]))).forEach(e=>{const t=e[0].toString(),s=e[1].toString();r.set(t,e[0]),r.set(s,e[1]),c.set(t,(c.get(t)||0)+1),c.set(s,(c.get(s)||0)-1)});const s=[],a=[];return c.forEach((e,t)=>{e<0&&s.push(t),e>0&&a.push(t)}),s.forEach(e=>{const c=r.get(e);let s,n=1/0;a.forEach(e=>{const t=r.get(e),a=vec3.distance(c,t);a<n&&(n=a,s=t)}),console.warn(`slice.repair: repairing vertex gap ${c} to ${s} distance ${n}`),t=t.map(t=>t[0].toString()===e?[s,t[1]]:t[1].toString()===e?[t[0],s]:t)}),create(t)};module.exports=repair;
1732
1720
 
1733
- },{"../../../maths/vec3":344,"./create":444}],451:[function(require,module,exports){
1721
+ },{"../../../maths/vec3":341,"./create":440}],447:[function(require,module,exports){
1734
1722
  const create=require("./create"),reverse=(...e)=>{let r,t;return 1===e.length?(r=create(),t=e[0]):(r=e[0],t=e[1]),r.edges=t.edges.map(e=>[e[1],e[0]]),r};module.exports=reverse;
1735
1723
 
1736
- },{"./create":444}],452:[function(require,module,exports){
1724
+ },{"./create":440}],448:[function(require,module,exports){
1737
1725
  const toEdges=e=>e.edges;module.exports=toEdges;
1738
1726
 
1739
- },{}],453:[function(require,module,exports){
1727
+ },{}],449:[function(require,module,exports){
1740
1728
  const poly3=require("../../../geometries/poly3"),earcut=require("../earcut"),PolygonHierarchy=require("../earcut/polygonHierarchy"),toPolygons=o=>{const e=new PolygonHierarchy(o),r=[];return e.roots.forEach(({solid:o,holes:t})=>{let l=o.length;const n=[];t.forEach((o,e)=>{n.push(l),l+=o.length});const s=[o,...t].flat(),c=s.flat(),a=o=>e.to3D(s[o]),h=earcut(c,n);for(let o=0;o<h.length;o+=3){const t=h.slice(o,o+3).map(a);r.push(poly3.fromPointsAndPlane(t,e.plane))}}),r};module.exports=toPolygons;
1741
1729
 
1742
- },{"../../../geometries/poly3":202,"../earcut":424,"../earcut/polygonHierarchy":428}],454:[function(require,module,exports){
1730
+ },{"../../../geometries/poly3":199,"../earcut":421,"../earcut/polygonHierarchy":425}],450:[function(require,module,exports){
1743
1731
  const vec3=require("../../../maths/vec3"),edgesToString=e=>e.reduce((e,t)=>e+=`[${vec3.toString(t[0])}, ${vec3.toString(t[1])}], `,""),toString=e=>`[${edgesToString(e.edges)}]`;module.exports=toString;
1744
1732
 
1745
- },{"../../../maths/vec3":344}],455:[function(require,module,exports){
1733
+ },{"../../../maths/vec3":341}],451:[function(require,module,exports){
1746
1734
  const vec3=require("../../../maths/vec3"),create=require("./create"),transform=(e,r)=>{const t=r.edges.map(r=>[vec3.transform(vec3.create(),r[0],e),vec3.transform(vec3.create(),r[1],e)]);return create(t)};module.exports=transform;
1747
1735
 
1748
- },{"../../../maths/vec3":344,"./create":444}],456:[function(require,module,exports){
1736
+ },{"../../../maths/vec3":341,"./create":440}],452:[function(require,module,exports){
1749
1737
  const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),hullPath2=require("./hullPath2"),hullGeom2=require("./hullGeom2"),hullGeom3=require("./hullGeom3"),hull=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only hulls of the same type are supported");const l=e[0];return path2.isA(l)?hullPath2(e):geom2.isA(l)?hullGeom2(e):geom3.isA(l)?hullGeom3(e):l};module.exports=hull;
1750
1738
 
1751
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../utils/areAllShapesTheSameType":517,"../../utils/flatten":519,"./hullGeom2":458,"./hullGeom3":459,"./hullPath2":460}],457:[function(require,module,exports){
1739
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../utils/areAllShapesTheSameType":513,"../../utils/flatten":515,"./hullGeom2":454,"./hullGeom3":455,"./hullPath2":456}],453:[function(require,module,exports){
1752
1740
  const flatten=require("../../utils/flatten"),union=require("../booleans/union"),hull=require("./hull"),hullChain=(...n)=>{if((n=flatten(n)).length<2)throw new Error("wrong number of arguments");const e=[];for(let l=1;l<n.length;l++)e.push(hull(n[l-1],n[l]));return union(e)};module.exports=hullChain;
1753
1741
 
1754
- },{"../../utils/flatten":519,"../booleans/union":407,"./hull":456}],458:[function(require,module,exports){
1742
+ },{"../../utils/flatten":515,"../booleans/union":404,"./hull":452}],454:[function(require,module,exports){
1755
1743
  const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),hullPoints2=require("./hullPoints2"),toUniquePoints=require("./toUniquePoints"),hullGeom2=(...e)=>{e=flatten(e);const t=toUniquePoints(e),o=hullPoints2(t);return o.length<3?geom2.create():geom2.fromPoints(o)};module.exports=hullGeom2;
1756
1744
 
1757
- },{"../../geometries/geom2":149,"../../utils/flatten":519,"./hullPoints2":461,"./toUniquePoints":471}],459:[function(require,module,exports){
1745
+ },{"../../geometries/geom2":146,"../../utils/flatten":515,"./hullPoints2":457,"./toUniquePoints":467}],455:[function(require,module,exports){
1758
1746
  const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),quickhull=require("./quickhull"),toUniquePoints=require("./toUniquePoints"),hullGeom3=(...e)=>{if(1===(e=flatten(e)).length)return e[0];const t=toUniquePoints(e),o=quickhull(t,{skipTriangulation:!0}).map(e=>{const o=e.map(e=>t[e]);return poly3.create(o)});return geom3.create(o)};module.exports=hullGeom3;
1759
1747
 
1760
- },{"../../geometries/geom3":164,"../../geometries/poly3":202,"../../utils/flatten":519,"./quickhull":469,"./toUniquePoints":471}],460:[function(require,module,exports){
1748
+ },{"../../geometries/geom3":161,"../../geometries/poly3":199,"../../utils/flatten":515,"./quickhull":465,"./toUniquePoints":467}],456:[function(require,module,exports){
1761
1749
  const flatten=require("../../utils/flatten"),path2=require("../../geometries/path2"),hullPoints2=require("./hullPoints2"),toUniquePoints=require("./toUniquePoints"),hullPath2=(...t)=>{t=flatten(t);const e=toUniquePoints(t),o=hullPoints2(e);return path2.fromPoints({closed:!0},o)};module.exports=hullPath2;
1762
1750
 
1763
- },{"../../geometries/path2":185,"../../utils/flatten":519,"./hullPoints2":461,"./toUniquePoints":471}],461:[function(require,module,exports){
1751
+ },{"../../geometries/path2":182,"../../utils/flatten":515,"./hullPoints2":457,"./toUniquePoints":467}],457:[function(require,module,exports){
1764
1752
  const vec2=require("../../maths/vec2"),hullPoints2=t=>{let e=vec2.fromValues(1/0,1/0);t.forEach(t=>{(t[1]<e[1]||t[1]===e[1]&&t[0]<e[0])&&(e=t)});const n=[];t.forEach(t=>{const s=fakeAtan2(t[1]-e[1],t[0]-e[0]),o=vec2.squaredDistance(t,e);n.push({point:t,angle:s,distSq:o})}),n.sort((t,e)=>t.angle<e.angle?-1:t.angle>e.angle?1:t.distSq<e.distSq?-1:t.distSq>e.distSq?1:0);const s=[];return n.forEach(t=>{let e=s.length;for(;e>1&&ccw(s[e-2],s[e-1],t.point)<=Number.EPSILON;)s.pop(),e=s.length;s.push(t.point)}),s},ccw=(t,e,n)=>(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0]),fakeAtan2=(t,e)=>0===t&&0===e?-1/0:-e/t;module.exports=hullPoints2;
1765
1753
 
1766
- },{"../../maths/vec2":313}],462:[function(require,module,exports){
1754
+ },{"../../maths/vec2":310}],458:[function(require,module,exports){
1767
1755
  module.exports={hull:require("./hull"),hullChain:require("./hullChain")};
1768
1756
 
1769
- },{"./hull":456,"./hullChain":457}],463:[function(require,module,exports){
1757
+ },{"./hull":452,"./hullChain":453}],459:[function(require,module,exports){
1770
1758
  const add=require("../../../maths/vec3/add"),copy=require("../../../maths/vec3/copy"),cross=require("../../../maths/vec3/cross"),dot=require("../../../maths/vec3/dot"),length=require("../../../maths/vec3/length"),normalize=require("../../../maths/vec3/normalize"),scale=require("../../../maths/vec3/scale"),subtract=require("../../../maths/vec3/subtract"),HalfEdge=require("./HalfEdge"),VISIBLE=0,NON_CONVEX=1,DELETED=2;class Face{constructor(){this.normal=[],this.centroid=[],this.offset=0,this.outside=null,this.mark=VISIBLE,this.edge=null,this.nVertices=0}getEdge(e){if("number"!=typeof e)throw Error("requires a number");let t=this.edge;for(;e>0;)t=t.next,e-=1;for(;e<0;)t=t.prev,e+=1;return t}computeNormal(){const e=this.edge,t=e.next;let r=t.next;const s=subtract([],t.head().point,e.head().point),o=[],i=[];for(this.nVertices=2,this.normal=[0,0,0];r!==e;)copy(i,s),subtract(s,r.head().point,e.head().point),add(this.normal,this.normal,cross(o,i,s)),r=r.next,this.nVertices+=1;this.area=length(this.normal),this.normal=scale(this.normal,this.normal,1/this.area)}computeNormalMinArea(e){if(this.computeNormal(),this.area<e){let e,t=0,r=this.edge;do{const s=r.lengthSquared();s>t&&(e=r,t=s),r=r.next}while(r!==this.edge);const s=e.tail().point,o=e.head().point,i=subtract([],o,s),n=Math.sqrt(t);scale(i,i,1/n);const a=dot(this.normal,i);scale(i,i,-a),add(this.normal,this.normal,i),normalize(this.normal,this.normal)}}computeCentroid(){this.centroid=[0,0,0];let e=this.edge;do{add(this.centroid,this.centroid,e.head().point),e=e.next}while(e!==this.edge);scale(this.centroid,this.centroid,1/this.nVertices)}computeNormalAndCentroid(e){void 0!==e?this.computeNormalMinArea(e):this.computeNormal(),this.computeCentroid(),this.offset=dot(this.normal,this.centroid)}distanceToPlane(e){return dot(this.normal,e)-this.offset}connectHalfEdges(e,t){let r;if(e.opposite.face===t.opposite.face){const s=t.opposite.face;let o;e===this.edge&&(this.edge=t),3===s.nVertices?(o=t.opposite.prev.opposite,s.mark=DELETED,r=s):(o=t.opposite.next,s.edge===o.prev&&(s.edge=o),o.prev=o.prev.prev,o.prev.next=o),t.prev=e.prev,t.prev.next=t,t.setOpposite(o),s.computeNormalAndCentroid()}else e.next=t,t.prev=e;return r}mergeAdjacentFaces(e,t){const r=e.opposite,s=r.face;t.push(s),s.mark=DELETED;let o,i,n=e.prev,a=e.next,c=r.prev,h=r.next;for(;n.opposite.face===s;)n=n.prev,h=h.next;for(;a.opposite.face===s;)a=a.next,c=c.prev;for(o=h;o!==c.next;o=o.next)o.face=this;return this.edge=a,(i=this.connectHalfEdges(c,a))&&t.push(i),(i=this.connectHalfEdges(n,h))&&t.push(i),this.computeNormalAndCentroid(),t}collectIndices(){const e=[];let t=this.edge;do{e.push(t.head().index),t=t.next}while(t!==this.edge);return e}static createTriangle(e,t,r,s=0){const o=new Face,i=new HalfEdge(e,o),n=new HalfEdge(t,o),a=new HalfEdge(r,o);return i.next=a.prev=n,n.next=i.prev=a,a.next=n.prev=i,o.edge=i,o.computeNormalAndCentroid(s),o}}module.exports={VISIBLE:VISIBLE,NON_CONVEX:1,DELETED:DELETED,Face:Face};
1771
1759
 
1772
- },{"../../../maths/vec3/add":331,"../../../maths/vec3/copy":334,"../../../maths/vec3/cross":336,"../../../maths/vec3/dot":339,"../../../maths/vec3/length":345,"../../../maths/vec3/normalize":351,"../../../maths/vec3/scale":356,"../../../maths/vec3/subtract":360,"./HalfEdge":464}],464:[function(require,module,exports){
1760
+ },{"../../../maths/vec3/add":328,"../../../maths/vec3/copy":331,"../../../maths/vec3/cross":333,"../../../maths/vec3/dot":336,"../../../maths/vec3/length":342,"../../../maths/vec3/normalize":348,"../../../maths/vec3/scale":353,"../../../maths/vec3/subtract":357,"./HalfEdge":460}],460:[function(require,module,exports){
1773
1761
  const distance=require("../../../maths/vec3/distance"),squaredDistance=require("../../../maths/vec3/squaredDistance");class HalfEdge{constructor(t,e){this.vertex=t,this.face=e,this.next=null,this.prev=null,this.opposite=null}head(){return this.vertex}tail(){return this.prev?this.prev.vertex:null}length(){return this.tail()?distance(this.tail().point,this.head().point):-1}lengthSquared(){return this.tail()?squaredDistance(this.tail().point,this.head().point):-1}setOpposite(t){this.opposite=t,t.opposite=this}}module.exports=HalfEdge;
1774
1762
 
1775
- },{"../../../maths/vec3/distance":337,"../../../maths/vec3/squaredDistance":358}],465:[function(require,module,exports){
1763
+ },{"../../../maths/vec3/distance":334,"../../../maths/vec3/squaredDistance":355}],461:[function(require,module,exports){
1776
1764
  const dot=require("../../../maths/vec3/dot"),pointLineDistance=require("./point-line-distance"),getPlaneNormal=require("./get-plane-normal"),VertexList=require("./VertexList"),Vertex=require("./Vertex"),{Face:Face,VISIBLE:VISIBLE,NON_CONVEX:NON_CONVEX,DELETED:DELETED}=require("./Face"),MERGE_NON_CONVEX_WRT_LARGER_FACE=1,MERGE_NON_CONVEX=2;class QuickHull{constructor(e){if(!Array.isArray(e))throw TypeError("input is not a valid array");if(e.length<4)throw Error("cannot build a simplex out of <4 points");this.tolerance=-1,this.nFaces=0,this.nPoints=e.length,this.faces=[],this.newFaces=[],this.claimed=new VertexList,this.unclaimed=new VertexList,this.vertices=[];for(let t=0;t<e.length;t+=1)this.vertices.push(new Vertex(e[t],t));this.discardedFaces=[],this.vertexPointIndices=[]}addVertexToFace(e,t){e.face=t,t.outside?this.claimed.insertBefore(t.outside,e):this.claimed.add(e),t.outside=e}removeVertexFromFace(e,t){e===t.outside&&(e.next&&e.next.face===t?t.outside=e.next:t.outside=null),this.claimed.remove(e)}removeAllVerticesFromFace(e){if(e.outside){let t=e.outside;for(;t.next&&t.next.face===e;)t=t.next;return this.claimed.removeChain(e.outside,t),t.next=null,e.outside}}deleteFaceVertices(e,t){const i=this.removeAllVerticesFromFace(e);if(i)if(t){let e;for(let s=i;s;s=e){e=s.next,t.distanceToPlane(s.point)>this.tolerance?this.addVertexToFace(s,t):this.unclaimed.add(s)}}else this.unclaimed.addAll(i)}resolveUnclaimedPoints(e){let t=this.unclaimed.first();for(let i=t;i;i=t){t=i.next;let s,o=this.tolerance;for(let t=0;t<e.length;t+=1){const a=e[t];if(a.mark===VISIBLE){const e=a.distanceToPlane(i.point);if(e>o&&(o=e,s=a),o>1e3*this.tolerance)break}}s&&this.addVertexToFace(i,s)}}computeExtremes(){const e=[],t=[],i=[],s=[];let o,a;for(o=0;o<3;o+=1)i[o]=s[o]=this.vertices[0];for(o=0;o<3;o+=1)e[o]=t[o]=this.vertices[0].point[o];for(o=1;o<this.vertices.length;o+=1){const c=this.vertices[o],n=c.point;for(a=0;a<3;a+=1)n[a]<e[a]&&(e[a]=n[a],i[a]=c);for(a=0;a<3;a+=1)n[a]>t[a]&&(t[a]=n[a],s[a]=c)}return this.tolerance=3*Number.EPSILON*(Math.max(Math.abs(e[0]),Math.abs(t[0]))+Math.max(Math.abs(e[1]),Math.abs(t[1]))+Math.max(Math.abs(e[2]),Math.abs(t[2]))),[i,s]}createInitialSimplex(){const e=this.vertices,[t,i]=this.computeExtremes();let s,o,a,c,n=0,r=0;for(a=0;a<3;a+=1){const e=i[a].point[a]-t[a].point[a];e>n&&(n=e,r=a)}const l=t[r],h=i[r];for(n=0,a=0;a<this.vertices.length;a+=1){const e=this.vertices[a];if(e!==l&&e!==h){const t=pointLineDistance(e.point,l.point,h.point);t>n&&(n=t,s=e)}}const d=getPlaneNormal([],l.point,h.point,s.point),p=dot(l.point,d);for(n=-1,a=0;a<this.vertices.length;a+=1){const e=this.vertices[a];if(e!==l&&e!==h&&e!==s){const t=Math.abs(dot(d,e.point)-p);t>n&&(n=t,o=e)}}const f=[];if(dot(o.point,d)-p<0)for(f.push(Face.createTriangle(l,h,s),Face.createTriangle(o,h,l),Face.createTriangle(o,s,h),Face.createTriangle(o,l,s)),a=0;a<3;a+=1){const e=(a+1)%3;f[a+1].getEdge(2).setOpposite(f[0].getEdge(e)),f[a+1].getEdge(1).setOpposite(f[e+1].getEdge(0))}else for(f.push(Face.createTriangle(l,s,h),Face.createTriangle(o,l,h),Face.createTriangle(o,h,s),Face.createTriangle(o,s,l)),a=0;a<3;a+=1){const e=(a+1)%3;f[a+1].getEdge(2).setOpposite(f[0].getEdge((3-a)%3)),f[a+1].getEdge(0).setOpposite(f[e+1].getEdge(1))}for(a=0;a<4;a+=1)this.faces.push(f[a]);for(a=0;a<e.length;a+=1){const t=e[a];if(t!==l&&t!==h&&t!==s&&t!==o){let e;for(n=this.tolerance,c=0;c<4;c+=1){const i=f[c].distanceToPlane(t.point);i>n&&(n=i,e=f[c])}e&&this.addVertexToFace(t,e)}}}reindexFaceAndVertices(){const e=[];for(let t=0;t<this.faces.length;t+=1){const i=this.faces[t];i.mark===VISIBLE&&e.push(i)}this.faces=e}collectFaces(e){const t=[];for(let i=0;i<this.faces.length;i+=1){if(this.faces[i].mark!==VISIBLE)throw Error("attempt to include a destroyed face in the hull");const s=this.faces[i].collectIndices();if(e)t.push(s);else for(let e=0;e<s.length-2;e+=1)t.push([s[0],s[e+1],s[e+2]])}return t}nextVertexToAdd(){if(!this.claimed.isEmpty()){let e,t,i=0;const s=this.claimed.first().face;for(t=s.outside;t&&t.face===s;t=t.next){const o=s.distanceToPlane(t.point);o>i&&(i=o,e=t)}return e}}computeHorizon(e,t,i,s){let o;this.deleteFaceVertices(i),i.mark=DELETED,o=t?t.next:t=i.getEdge(0);do{const t=o.opposite,i=t.face;i.mark===VISIBLE&&(i.distanceToPlane(e)>this.tolerance?this.computeHorizon(e,t,i,s):s.push(o)),o=o.next}while(o!==t)}addAdjoiningFace(e,t){const i=Face.createTriangle(e,t.tail(),t.head());return this.faces.push(i),i.getEdge(-1).setOpposite(t.opposite),i.getEdge(0)}addNewFaces(e,t){let i,s;this.newFaces=[];for(let o=0;o<t.length;o+=1){const a=t[o],c=this.addAdjoiningFace(e,a);i?c.next.setOpposite(s):i=c,this.newFaces.push(c.face),s=c}i.next.setOpposite(s)}oppositeFaceDistance(e){return e.face.distanceToPlane(e.opposite.face.centroid)}doAdjacentMerge(e,t){let i=e.edge,s=!0,o=0;do{if(o>=e.nVertices)throw Error("merge recursion limit exceeded");const a=i.opposite.face;let c=!1;if(t===MERGE_NON_CONVEX?(this.oppositeFaceDistance(i)>-this.tolerance||this.oppositeFaceDistance(i.opposite)>-this.tolerance)&&(c=!0):e.area>a.area?this.oppositeFaceDistance(i)>-this.tolerance?c=!0:this.oppositeFaceDistance(i.opposite)>-this.tolerance&&(s=!1):this.oppositeFaceDistance(i.opposite)>-this.tolerance?c=!0:this.oppositeFaceDistance(i)>-this.tolerance&&(s=!1),c){const t=e.mergeAdjacentFaces(i,[]);for(let i=0;i<t.length;i+=1)this.deleteFaceVertices(t[i],e);return!0}i=i.next,o+=1}while(i!==e.edge);return s||(e.mark=NON_CONVEX),!1}addVertexToHull(e){const t=[];this.unclaimed.clear(),this.removeVertexFromFace(e,e.face),this.computeHorizon(e.point,null,e.face,t),this.addNewFaces(e,t);for(let e=0;e<this.newFaces.length;e+=1){const t=this.newFaces[e];if(t.mark===VISIBLE)for(;this.doAdjacentMerge(t,MERGE_NON_CONVEX_WRT_LARGER_FACE););}for(let e=0;e<this.newFaces.length;e+=1){const t=this.newFaces[e];if(t.mark===NON_CONVEX)for(t.mark=VISIBLE;this.doAdjacentMerge(t,MERGE_NON_CONVEX););}this.resolveUnclaimedPoints(this.newFaces)}build(){let e;for(this.createInitialSimplex();e=this.nextVertexToAdd();)this.addVertexToHull(e);this.reindexFaceAndVertices()}}module.exports=QuickHull;
1777
1765
 
1778
- },{"../../../maths/vec3/dot":339,"./Face":463,"./Vertex":466,"./VertexList":467,"./get-plane-normal":468,"./point-line-distance":470}],466:[function(require,module,exports){
1766
+ },{"../../../maths/vec3/dot":336,"./Face":459,"./Vertex":462,"./VertexList":463,"./get-plane-normal":464,"./point-line-distance":466}],462:[function(require,module,exports){
1779
1767
  class Vertex{constructor(t,e){this.point=t,this.index=e,this.next=null,this.prev=null,this.face=null}}module.exports=Vertex;
1780
1768
 
1781
- },{}],467:[function(require,module,exports){
1769
+ },{}],463:[function(require,module,exports){
1782
1770
  class VertexList{constructor(){this.head=null,this.tail=null}clear(){this.head=this.tail=null}insertBefore(e,t){t.prev=e.prev,t.next=e,t.prev?t.prev.next=t:this.head=t,e.prev=t}insertAfter(e,t){t.prev=e,t.next=e.next,t.next?t.next.prev=t:this.tail=t,e.next=t}add(e){this.head?this.tail.next=e:this.head=e,e.prev=this.tail,e.next=null,this.tail=e}addAll(e){for(this.head?this.tail.next=e:this.head=e,e.prev=this.tail;e.next;)e=e.next;this.tail=e}remove(e){e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev}removeChain(e,t){e.prev?e.prev.next=t.next:this.head=t.next,t.next?t.next.prev=e.prev:this.tail=e.prev}first(){return this.head}isEmpty(){return!this.head}}module.exports=VertexList;
1783
1771
 
1784
- },{}],468:[function(require,module,exports){
1772
+ },{}],464:[function(require,module,exports){
1785
1773
  const cross=require("../../../maths/vec3/cross"),normalize=require("../../../maths/vec3/normalize"),subtract=require("../../../maths/vec3/subtract"),planeNormal=(r,e,s,t)=>{const a=[0,0,0];return subtract(r,e,s),subtract(a,s,t),cross(r,r,a),normalize(r,r)};module.exports=planeNormal;
1786
1774
 
1787
- },{"../../../maths/vec3/cross":336,"../../../maths/vec3/normalize":351,"../../../maths/vec3/subtract":360}],469:[function(require,module,exports){
1775
+ },{"../../../maths/vec3/cross":333,"../../../maths/vec3/normalize":348,"../../../maths/vec3/subtract":357}],465:[function(require,module,exports){
1788
1776
  const QuickHull=require("./QuickHull"),runner=(u,l={})=>{const e=new QuickHull(u);return e.build(),e.collectFaces(l.skipTriangulation)};module.exports=runner;
1789
1777
 
1790
- },{"./QuickHull":465}],470:[function(require,module,exports){
1778
+ },{"./QuickHull":461}],466:[function(require,module,exports){
1791
1779
  const cross=require("../../../maths/vec3/cross"),subtract=require("../../../maths/vec3/subtract"),squaredLength=require("../../../maths/vec3/squaredLength"),distanceSquared=(e,t,r)=>{const s=[],a=[];subtract(s,r,t),subtract(a,e,t);const n=squaredLength(cross([],a,s)),c=squaredLength(s);if(0===c)throw Error("a and b are the same point");return n/c},pointLineDistance=(e,t,r)=>Math.sqrt(distanceSquared(e,t,r));module.exports=pointLineDistance;
1792
1780
 
1793
- },{"../../../maths/vec3/cross":336,"../../../maths/vec3/squaredLength":359,"../../../maths/vec3/subtract":360}],471:[function(require,module,exports){
1781
+ },{"../../../maths/vec3/cross":333,"../../../maths/vec3/squaredLength":356,"../../../maths/vec3/subtract":357}],467:[function(require,module,exports){
1794
1782
  const geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),toUniquePoints=o=>{const e=new Set,t=[],r=o=>{const r=o.toString();e.has(r)||(t.push(o),e.add(r))};return o.forEach(o=>{geom2.isA(o)?geom2.toPoints(o).forEach(r):geom3.isA(o)?geom3.toPoints(o).forEach(o=>o.forEach(r)):path2.isA(o)&&path2.toPoints(o).forEach(r)}),t};module.exports=toUniquePoints;
1795
1783
 
1796
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185}],472:[function(require,module,exports){
1784
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182}],468:[function(require,module,exports){
1797
1785
  const flatten=require("../../utils/flatten"),measureEpsilon=require("../../measurements/measureEpsilon"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),snapPolygons=require("./snapPolygons"),mergePolygons=require("./mergePolygons"),insertTjunctions=require("./insertTjunctions"),triangulatePolygons=require("./triangulatePolygons"),generalizePath2=(e,r)=>r,generalizeGeom2=(e,r)=>r,generalizeGeom3=(e,r)=>{const{snap:n,simplify:o,triangulate:t}=Object.assign({},{snap:!1,simplify:!1,triangulate:!1},e),i=measureEpsilon(r);let s=geom3.toPolygons(r);n&&(s=snapPolygons(i,s)),o&&(s=mergePolygons(i,s)),t&&(s=insertTjunctions(s),s=triangulatePolygons(i,s));const g=Object.assign({},r);return g.polygons=s,g},generalize=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const n=r.map(r=>{if(path2.isA(r))return generalizePath2(0,r);if(geom2.isA(r))return generalizeGeom2(0,r);if(geom3.isA(r))return generalizeGeom3(e,r);throw new Error("invalid geometry")});return 1===n.length?n[0]:n};module.exports=generalize;
1798
1786
 
1799
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../measurements/measureEpsilon":385,"../../utils/flatten":519,"./insertTjunctions":474,"./mergePolygons":475,"./snapPolygons":479,"./triangulatePolygons":480}],473:[function(require,module,exports){
1800
- module.exports={generalize:require("./generalize"),snap:require("./snap"),retessellate:require("./retessellate")};
1787
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../measurements/measureEpsilon":382,"../../utils/flatten":515,"./insertTjunctions":470,"./mergePolygons":471,"./snapPolygons":475,"./triangulatePolygons":476}],469:[function(require,module,exports){
1788
+ module.exports={generalize:require("./generalize"),snap:require("./snap")};
1801
1789
 
1802
- },{"./generalize":472,"./retessellate":477,"./snap":478}],474:[function(require,module,exports){
1790
+ },{"./generalize":468,"./snap":474}],470:[function(require,module,exports){
1803
1791
  const constants=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),assert=!1,getTag=e=>`${e}`,addSide=(e,t,s,n,r,c)=>{const o=getTag(n),g=getTag(r);const l=`${o}/${g}`,a=`${g}/${o}`;if(e.has(a))return deleteSide(e,t,s,r,n,null),null;const i={vertex0:n,vertex1:r,polygonindex:c};return e.has(l)?e.get(l).push(i):e.set(l,[i]),t.has(o)?t.get(o).push(l):t.set(o,[l]),s.has(g)?s.get(g).push(l):s.set(g,[l]),l},deleteSide=(e,t,s,n,r,c)=>{const o=getTag(n),g=getTag(r),l=`${o}/${g}`;let a=-1;const i=e.get(l);for(let e=0;e<i.length;e++){const t=i[e];let s=getTag(t.vertex0);if(s===o&&((s=getTag(t.vertex1))===g&&(null===c||t.polygonindex===c))){a=e;break}}i.splice(a,1),0===i.length&&e.delete(l),a=t.get(o).indexOf(l),t.get(o).splice(a,1),0===t.get(o).length&&t.delete(o),a=s.get(g).indexOf(l),s.get(g).splice(a,1),0===s.get(g).length&&s.delete(g)},insertTjunctions=e=>{const t=new Map;for(let s=0;s<e.length;s++){const n=e[s],r=n.vertices.length;if(r>=3){let e=n.vertices[0],c=getTag(e);for(let o=0;o<r;o++){let g=o+1;g===r&&(g=0);const l=n.vertices[g],a=getTag(l),i=`${c}/${a}`,v=`${a}/${c}`;if(t.has(v)){const e=t.get(v);e.splice(-1,1),0===e.length&&t.delete(v)}else{const n={vertex0:e,vertex1:l,polygonindex:s};t.has(i)?t.get(i).push(n):t.set(i,[n])}e=l,c=a}}else console.warn("warning: invalid polygon found during insertTjunctions")}if(t.size>0){const s=new Map,n=new Map,r=new Map;for(const[e,c]of t)r.set(e,!0),c.forEach(t=>{const r=getTag(t.vertex0),c=getTag(t.vertex1);s.has(r)?s.get(r).push(e):s.set(r,[e]),n.has(c)?n.get(c).push(e):n.set(c,[e])});const c=e.slice(0);for(;0!==t.size;){for(const e of t.keys())r.set(e,!0);let e=!1;for(;;){const o=Array.from(r.keys());if(0===o.length)break;const g=o[0];let l=!0;if(t.has(g)){const o=t.get(g);0;const a=o[0];for(let o=0;o<2;o++){const g=0===o?a.vertex0:a.vertex1,i=0===o?a.vertex1:a.vertex0,v=getTag(g),d=getTag(i);let h=[];0===o?n.has(v)&&(h=n.get(v)):s.has(v)&&(h=s.get(v));for(let a=0;a<h.length;a++){const v=h[a],f=t.get(v)[0],u=0===o?f.vertex0:f.vertex1,x=0===o?f.vertex1:f.vertex0,p=getTag(u);getTag(x);if(p===d){deleteSide(t,s,n,g,i,null),deleteSide(t,s,n,i,g,null),l=!1,o=2,e=!0;break}{const a=g,v=i,d=u,h=vec3.subtract(vec3.create(),d,a),x=vec3.dot(vec3.subtract(vec3.create(),v,a),h)/vec3.dot(h,h);if(x>0&&x<1){const g=vec3.scale(vec3.create(),h,x);if(vec3.add(g,g,a),vec3.squaredDistance(g,v)<constants.EPS*constants.EPS){const g=f.polygonindex,a=c[g],v=getTag(f.vertex1);let d=-1;for(let e=0;e<a.vertices.length;e++)if(getTag(a.vertices[e])===v){d=e;break}0;const h=a.vertices.slice(0);h.splice(d,0,i);const u=poly3.create(h);c[g]=u,deleteSide(t,s,n,f.vertex0,f.vertex1,g);const x=addSide(t,s,n,f.vertex0,i,g),p=addSide(t,s,n,i,f.vertex1,g);null!==x&&r.set(x,!0),null!==p&&r.set(p,!0),l=!1,o=2,e=!0;break}}}}}}l&&r.delete(g)}if(!e)break}e=c}return t.clear(),e};module.exports=insertTjunctions;
1804
1792
 
1805
- },{"../../geometries/poly3":202,"../../maths/constants":217,"../../maths/vec3":344}],475:[function(require,module,exports){
1793
+ },{"../../geometries/poly3":199,"../../maths/constants":214,"../../maths/vec3":341}],471:[function(require,module,exports){
1806
1794
  const aboutEqualNormals=require("../../maths/utils/aboutEqualNormals"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),createEdges=e=>{const n=poly3.toPoints(e),t=[];for(let e=0;e<n.length;e++){const l=(e+1)%n.length,r={v1:n[e],v2:n[l]};t.push(r)}for(let e=0;e<t.length;e++){const l=(e+1)%n.length;t[e].next=t[l],t[l].prev=t[e]}return t},insertEdge=(e,n)=>{const t=`${n.v1}:${n.v2}`;e.set(t,n)},deleteEdge=(e,n)=>{const t=`${n.v1}:${n.v2}`;e.delete(t)},findOppositeEdge=(e,n)=>{const t=`${n.v2}:${n.v1}`;return e.get(t)},calculateAnglesBetween=(e,n,t)=>{let l=e.prev.v1,r=e.prev.v2,o=n.next.v2;const v=calculateAngle(l,r,o,t);return l=n.prev.v1,r=n.prev.v2,o=e.next.v2,[v,calculateAngle(l,r,o,t)]},v1=vec3.create(),v2=vec3.create(),calculateAngle=(e,n,t,l)=>{const r=vec3.subtract(v1,n,e),o=vec3.subtract(v2,t,n);return vec3.cross(r,r,o),vec3.dot(r,l)},createPolygonAnd=e=>{let n;const t=[];for(;e.next;){const n=e.next;t.push(e.v1),e.v1=null,e.v2=null,e.next=null,e.prev=null,e=n}return t.length>0&&(n=poly3.create(t)),n},mergeCoplanarPolygons=e=>{if(e.length<2)return e;const n=e[0].plane,t=e.slice(),l=new Map;for(;t.length>0;){const e=t.shift(),r=createEdges(e);for(let e=0;e<r.length;e++){const t=r[e],o=findOppositeEdge(l,t);if(o){const e=calculateAnglesBetween(t,o,n);if(e[0]>=0&&e[1]>=0){const n=o.next,r=t.next;t.prev.next=o.next,t.next.prev=o.prev,o.prev.next=t.next,o.next.prev=t.prev,t.v1=null,t.v2=null,t.next=null,t.prev=null,deleteEdge(l,o),o.v1=null,o.v2=null,o.next=null,o.prev=null;const v=(e,n,t)=>{const l={v1:t.v1,v2:n.v2,next:n.next,prev:t.prev};t.prev.next=l,n.next.prev=l,deleteEdge(e,n),n.v1=null,n.v2=null,n.next=null,n.prev=null,deleteEdge(e,t),t.v1=null,t.v2=null,t.next=null,t.prev=null};0===e[0]&&v(l,n,n.prev),0===e[1]&&v(l,r,r.prev)}}else t.next&&insertEdge(l,t)}}const r=[];return l.forEach(e=>{const n=createPolygonAnd(e);n&&r.push(n)}),l.clear(),r},coplanar=(e,n)=>Math.abs(e[3]-n[3])<1.5e-7&&aboutEqualNormals(e,n),mergePolygons=(e,n)=>{const t=[];n.forEach(e=>{const n=t.find(n=>coplanar(n[0],poly3.plane(e)));if(n){n[1].push(e)}else t.push([poly3.plane(e),[e]])});let l=[];return t.forEach(e=>{const n=e[1],t=mergeCoplanarPolygons(n);l=l.concat(t)}),l};module.exports=mergePolygons;
1807
1795
 
1808
- },{"../../geometries/poly3":202,"../../maths/utils/aboutEqualNormals":289,"../../maths/vec3":344}],476:[function(require,module,exports){
1796
+ },{"../../geometries/poly3":199,"../../maths/utils/aboutEqualNormals":286,"../../maths/vec3":341}],472:[function(require,module,exports){
1809
1797
  const{EPS:EPS}=require("../../maths/constants"),line2=require("../../maths/line2"),vec2=require("../../maths/vec2"),OrthoNormalBasis=require("../../maths/OrthoNormalBasis"),interpolateBetween2DPointsForY=require("../../maths/utils/interpolateBetween2DPointsForY"),{insertSorted:insertSorted,fnNumberSort:fnNumberSort}=require("../../utils"),poly3=require("../../geometries/poly3"),reTesselateCoplanarPolygons=t=>{if(t.length<2)return t;const e=[],o=t.length,n=poly3.plane(t[0]),l=new OrthoNormalBasis(n),i=[],r=[],s=new Map,f=new Map,p=new Map,h=10/EPS;for(let e=0;e<o;e++){const o=t[e];let n=[],g=o.vertices.length,c=-1;if(g>0){let t,i;for(let r=0;r<g;r++){let s=l.to2D(o.vertices[r]);const g=Math.floor(s[1]*h);let a;p.has(g)?a=p.get(g):p.has(g+1)?a=p.get(g+1):p.has(g-1)?a=p.get(g-1):(a=s[1],p.set(g,s[1])),s=vec2.fromValues(s[0],a),n.push(s);const u=s[1];(0===r||u<t)&&(t=u,c=r),(0===r||u>i)&&(i=u);let m=f.get(u);m||(m={},f.set(u,m)),m[e]=!0}if(t>=i)n=[],g=0,c=-1;else{let o=s.get(t);o||(o=[],s.set(t,o)),o.push(e)}}n.reverse(),c=g-c-1,i.push(n),r.push(c)}const g=[];f.forEach((t,e)=>g.push(e)),g.sort(fnNumberSort);let c=[],a=[];for(let t=0;t<g.length;t++){const o=[],p=g[t],h=f.get(p);for(let t=0;t<c.length;++t){const e=c[t],o=e.polygonindex;if(h[o]){const n=i[o],l=n.length;let r=e.leftvertexindex,s=e.rightvertexindex;for(;;){let t=r+1;if(t>=l&&(t=0),n[t][1]!==p)break;r=t}let f=s-1;if(f<0&&(f=l-1),n[f][1]===p&&(s=f),r!==e.leftvertexindex&&r===s)c.splice(t,1),--t;else{e.leftvertexindex=r,e.rightvertexindex=s,e.topleft=n[r],e.topright=n[s];let t=r+1;t>=l&&(t=0),e.bottomleft=n[t];let o=s-1;o<0&&(o=l-1),e.bottomright=n[o]}}}let u;if(t>=g.length-1)c=[],u=null;else{const e=.5*(p+(u=Number(g[t+1]))),o=s.get(p);for(const t in o){const n=o[t],l=i[n],s=l.length,f=r[n];let h=f;for(;;){let t=h+1;if(t>=s&&(t=0),l[t][1]!==p)break;if(t===f)break;h=t}let g=f;for(;;){let t=g-1;if(t<0&&(t=s-1),l[t][1]!==p)break;if(t===h)break;g=t}let a=h+1;a>=s&&(a=0);let u=g-1;u<0&&(u=s-1);const m={polygonindex:n,leftvertexindex:h,rightvertexindex:g,topleft:l[h],topright:l[g],bottomleft:l[a],bottomright:l[u]};insertSorted(c,m,(t,o)=>{const n=interpolateBetween2DPointsForY(t.topleft,t.bottomleft,e),l=interpolateBetween2DPointsForY(o.topleft,o.bottomleft,e);return n>l?1:n<l?-1:0})}}for(const t in c){const e=c[t];let n=interpolateBetween2DPointsForY(e.topleft,e.bottomleft,p);const l=vec2.fromValues(n,p);n=interpolateBetween2DPointsForY(e.topright,e.bottomright,p);const i=vec2.fromValues(n,p);n=interpolateBetween2DPointsForY(e.topleft,e.bottomleft,u);const r=vec2.fromValues(n,u);n=interpolateBetween2DPointsForY(e.topright,e.bottomright,u);const s=vec2.fromValues(n,u),f={topleft:l,topright:i,bottomleft:r,bottomright:s,leftline:line2.fromPoints(line2.create(),l,r),rightline:line2.fromPoints(line2.create(),s,i)};if(o.length>0){const t=o[o.length-1],e=vec2.distance(f.topleft,t.topright),n=vec2.distance(f.bottomleft,t.bottomright);e<EPS&&n<EPS&&(f.topleft=t.topleft,f.leftline=t.leftline,f.bottomleft=t.bottomleft,o.splice(o.length-1,1))}o.push(f)}if(t>0){const t=new Set,i=new Set;for(let e=0;e<o.length;e++){const n=o[e];for(let e=0;e<a.length;e++)if(!i.has(e)){const o=a[e];if(vec2.distance(o.bottomleft,n.topleft)<EPS&&vec2.distance(o.bottomright,n.topright)<EPS){i.add(e);const l=line2.direction(n.leftline),r=line2.direction(o.leftline),s=l[0]-r[0],f=line2.direction(n.rightline),p=line2.direction(o.rightline),h=f[0]-p[0],g=Math.abs(s)<EPS,c=Math.abs(h)<EPS,a=c||h>=0;(g||s>=0)&&a&&(n.outpolygon=o.outpolygon,n.leftlinecontinues=g,n.rightlinecontinues=c,t.add(e));break}}}for(let o=0;o<a.length;o++)if(!t.has(o)){const t=a[o];t.outpolygon.rightpoints.push(t.bottomright),vec2.distance(t.bottomright,t.bottomleft)>EPS&&t.outpolygon.leftpoints.push(t.bottomleft),t.outpolygon.leftpoints.reverse();const i=t.outpolygon.rightpoints.concat(t.outpolygon.leftpoints).map(t=>l.to3D(t)),r=poly3.fromPointsAndPlane(i,n);r.vertices.length&&e.push(r)}}for(let t=0;t<o.length;t++){const e=o[t];e.outpolygon?(e.leftlinecontinues||e.outpolygon.leftpoints.push(e.topleft),e.rightlinecontinues||e.outpolygon.rightpoints.push(e.topright)):(e.outpolygon={leftpoints:[],rightpoints:[]},e.outpolygon.leftpoints.push(e.topleft),vec2.distance(e.topleft,e.topright)>EPS&&e.outpolygon.rightpoints.push(e.topright))}a=o}return e};module.exports=reTesselateCoplanarPolygons;
1810
1798
 
1811
- },{"../../geometries/poly3":202,"../../maths/OrthoNormalBasis":216,"../../maths/constants":217,"../../maths/line2":228,"../../maths/utils/interpolateBetween2DPointsForY":292,"../../maths/vec2":313,"../../utils":521}],477:[function(require,module,exports){
1799
+ },{"../../geometries/poly3":199,"../../maths/OrthoNormalBasis":213,"../../maths/constants":214,"../../maths/line2":225,"../../maths/utils/interpolateBetween2DPointsForY":289,"../../maths/vec2":310,"../../utils":517}],473:[function(require,module,exports){
1812
1800
  const geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),aboutEqualNormals=require("../../maths/utils/aboutEqualNormals"),reTesselateCoplanarPolygons=require("./reTesselateCoplanarPolygons"),coplanar=(e,o)=>Math.abs(e[3]-o[3])<1.5e-7&&aboutEqualNormals(e,o),retessellate=e=>{if(e.isRetesselated)return e;const o=geom3.toPolygons(e),s=[];o.forEach(e=>{const o=s.find(o=>coplanar(o[0],poly3.plane(e)));if(o){o[1].push(e)}else s.push([poly3.plane(e),[e]])});let a=[];s.forEach(e=>{const o=e[1],s=reTesselateCoplanarPolygons(o);a=a.concat(s)});const l=geom3.create(a);return l.isRetesselated=!0,l};module.exports=retessellate;
1813
1801
 
1814
- },{"../../geometries/geom3":164,"../../geometries/poly3":202,"../../maths/utils/aboutEqualNormals":289,"./reTesselateCoplanarPolygons":476}],478:[function(require,module,exports){
1802
+ },{"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/utils/aboutEqualNormals":286,"./reTesselateCoplanarPolygons":472}],474:[function(require,module,exports){
1815
1803
  const flatten=require("../../utils/flatten"),vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),measureEpsilon=require("../../measurements/measureEpsilon"),snapPolygons=require("./snapPolygons"),snapPath2=e=>{const s=measureEpsilon(e),r=path2.toPoints(e).map(e=>vec2.snap(vec2.create(),e,s));return path2.create(r)},snapGeom2=e=>{const s=measureEpsilon(e);let r=geom2.toSides(e).map(e=>[vec2.snap(vec2.create(),e[0],s),vec2.snap(vec2.create(),e[1],s)]);return r=r.filter(e=>!vec2.equals(e[0],e[1])),geom2.create(r)},snapGeom3=e=>{const s=measureEpsilon(e),r=geom3.toPolygons(e),o=snapPolygons(s,r);return geom3.create(o)},snap=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const s=e.map(e=>path2.isA(e)?snapPath2(e):geom2.isA(e)?snapGeom2(e):geom3.isA(e)?snapGeom3(e):e);return 1===s.length?s[0]:s};module.exports=snap;
1816
1804
 
1817
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../maths/vec2":313,"../../measurements/measureEpsilon":385,"../../utils/flatten":519,"./snapPolygons":479}],479:[function(require,module,exports){
1805
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/vec2":310,"../../measurements/measureEpsilon":382,"../../utils/flatten":515,"./snapPolygons":475}],475:[function(require,module,exports){
1818
1806
  const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),isValidPoly3=(e,o)=>{const r=Math.abs(poly3.measureArea(o));return Number.isFinite(r)&&r>e},snapPolygons=(e,o)=>{let r=o.map(o=>{const r=o.vertices.map(o=>vec3.snap(vec3.create(),o,e)),t=[];for(let e=0;e<r.length;e++){const o=(e+1)%r.length;vec3.equals(r[e],r[o])||t.push(r[e])}const s=poly3.create(t);return o.color&&(s.color=o.color),s});const t=e*e*Math.sqrt(3)/4;return r=r.filter(e=>isValidPoly3(t,e))};module.exports=snapPolygons;
1819
1807
 
1820
- },{"../../geometries/poly3":202,"../../maths/vec3":344}],480:[function(require,module,exports){
1808
+ },{"../../geometries/poly3":199,"../../maths/vec3":341}],476:[function(require,module,exports){
1821
1809
  const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),triangulatePolygon=(e,o,r)=>{const t=o.vertices.length;if(t>3){if(t>4){const c=[0,0,0];o.vertices.forEach(e=>vec3.add(c,c,e)),vec3.snap(c,vec3.divide(c,c,[t,t,t]),e);for(let e=0;e<t;e++){const s=poly3.create([c,o.vertices[e],o.vertices[(e+1)%t]]);o.color&&(s.color=o.color),r.push(s)}return}const c=poly3.create([o.vertices[0],o.vertices[1],o.vertices[2]]),s=poly3.create([o.vertices[0],o.vertices[2],o.vertices[3]]);return o.color&&(c.color=o.color,s.color=o.color),void r.push(c,s)}r.push(o)},triangulatePolygons=(e,o)=>{const r=[];return o.forEach(o=>{triangulatePolygon(e,o,r)}),r};module.exports=triangulatePolygons;
1822
1810
 
1823
- },{"../../geometries/poly3":202,"../../maths/vec3":344}],481:[function(require,module,exports){
1811
+ },{"../../geometries/poly3":199,"../../maths/vec3":341}],477:[function(require,module,exports){
1824
1812
  const flatten=require("../../utils/flatten"),padArrayToLength=require("../../utils/padArrayToLength"),measureAggregateBoundingBox=require("../../measurements/measureAggregateBoundingBox"),{translate:translate}=require("./translate"),validateOptions=e=>{if(!Array.isArray(e.modes)||e.modes.length>3)throw new Error("align(): modes must be an array of length <= 3");if(e.modes=padArrayToLength(e.modes,"none",3),3!==e.modes.filter(e=>["center","max","min","none"].includes(e)).length)throw new Error('align(): all modes must be one of "center", "max" or "min"');if(!Array.isArray(e.relativeTo)||e.relativeTo.length>3)throw new Error("align(): relativeTo must be an array of length <= 3");if(e.relativeTo=padArrayToLength(e.relativeTo,0,3),3!==e.relativeTo.filter(e=>Number.isFinite(e)||null==e).length)throw new Error("align(): all relativeTo values must be a number, or null.");if("boolean"!=typeof e.grouped)throw new Error("align(): grouped must be a boolean value.");return e},populateRelativeToFromBounds=(e,r,t)=>{for(let n=0;n<3;n++)null==e[n]&&("center"===r[n]?e[n]=(t[0][n]+t[1][n])/2:"max"===r[n]?e[n]=t[1][n]:"min"===r[n]&&(e[n]=t[0][n]));return e},alignGeometries=(e,r,t)=>{const n=measureAggregateBoundingBox(e),o=[0,0,0];for(let e=0;e<3;e++)"center"===r[e]?o[e]=t[e]-(n[0][e]+n[1][e])/2:"max"===r[e]?o[e]=t[e]-n[1][e]:"min"===r[e]&&(o[e]=t[e]-n[0][e]);return translate(o,e)},align=(e,...r)=>{e=Object.assign({},{modes:["center","center","min"],relativeTo:[0,0,0],grouped:!1},e),e=validateOptions(e);let{modes:t,relativeTo:n,grouped:o}=e;if(0===(r=flatten(r)).length)throw new Error("align(): No geometries were provided to act upon");if(n.filter(e=>null==e).length){const e=measureAggregateBoundingBox(r);n=populateRelativeToFromBounds(n,t,e)}return 1===(r=o?alignGeometries(r,t,n):r.map(e=>alignGeometries(e,t,n))).length?r[0]:r};module.exports=align;
1825
1813
 
1826
- },{"../../measurements/measureAggregateBoundingBox":376,"../../utils/flatten":519,"../../utils/padArrayToLength":523,"./translate":488}],482:[function(require,module,exports){
1814
+ },{"../../measurements/measureAggregateBoundingBox":373,"../../utils/flatten":515,"../../utils/padArrayToLength":519,"./translate":484}],478:[function(require,module,exports){
1827
1815
  const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),measureBoundingBox=require("../../measurements/measureBoundingBox"),{translate:translate}=require("./translate"),centerGeometry=(e,r)=>{const{axes:t,relativeTo:n}=Object.assign({},{axes:[!0,!0,!0],relativeTo:[0,0,0]},e),a=measureBoundingBox(r),o=[0,0,0];return t[0]&&(o[0]=n[0]-(a[0][0]+(a[1][0]-a[0][0])/2)),t[1]&&(o[1]=n[1]-(a[0][1]+(a[1][1]-a[0][1])/2)),t[2]&&(o[2]=n[2]-(a[0][2]+(a[1][2]-a[0][2])/2)),translate(o,r)},center=(e,...r)=>{const{axes:t,relativeTo:n}=Object.assign({},{axes:[!0,!0,!0],relativeTo:[0,0,0]},e);if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");if(3!==n.length)throw new Error("relativeTo must be an array of length 3");e={axes:t,relativeTo:n};const a=r.map(r=>path2.isA(r)?centerGeometry(e,r):geom2.isA(r)?centerGeometry(e,r):geom3.isA(r)?centerGeometry(e,r):r);return 1===a.length?a[0]:a},centerX=(...e)=>center({axes:[!0,!1,!1]},e),centerY=(...e)=>center({axes:[!1,!0,!1]},e),centerZ=(...e)=>center({axes:[!1,!1,!0]},e);module.exports={center:center,centerX:centerX,centerY:centerY,centerZ:centerZ};
1828
1816
 
1829
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../measurements/measureBoundingBox":380,"../../utils/flatten":519,"./translate":488}],483:[function(require,module,exports){
1817
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../measurements/measureBoundingBox":377,"../../utils/flatten":515,"./translate":484}],479:[function(require,module,exports){
1830
1818
  module.exports={align:require("./align"),center:require("./center").center,centerX:require("./center").centerX,centerY:require("./center").centerY,centerZ:require("./center").centerZ,mirror:require("./mirror").mirror,mirrorX:require("./mirror").mirrorX,mirrorY:require("./mirror").mirrorY,mirrorZ:require("./mirror").mirrorZ,rotate:require("./rotate").rotate,rotateX:require("./rotate").rotateX,rotateY:require("./rotate").rotateY,rotateZ:require("./rotate").rotateZ,scale:require("./scale").scale,scaleX:require("./scale").scaleX,scaleY:require("./scale").scaleY,scaleZ:require("./scale").scaleZ,transform:require("./transform"),translate:require("./translate").translate,translateX:require("./translate").translateX,translateY:require("./translate").translateY,translateZ:require("./translate").translateZ};
1831
1819
 
1832
- },{"./align":481,"./center":482,"./mirror":484,"./rotate":485,"./scale":486,"./transform":487,"./translate":488}],484:[function(require,module,exports){
1820
+ },{"./align":477,"./center":478,"./mirror":480,"./rotate":481,"./scale":482,"./transform":483,"./translate":484}],480:[function(require,module,exports){
1833
1821
  const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),plane=require("../../maths/plane"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),mirror=(r,...e)=>{const{origin:o,normal:m}=Object.assign({},{origin:[0,0,0],normal:[0,0,1]},r);if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const i=plane.fromNormalAndPoint(plane.create(),m,o);if(Number.isNaN(i[0]))throw new Error("the given origin and normal do not define a proper plane");const n=mat4.mirrorByPlane(mat4.create(),i),t=e.map(r=>path2.isA(r)?path2.transform(n,r):geom2.isA(r)?geom2.transform(n,r):geom3.isA(r)?geom3.transform(n,r):r);return 1===t.length?t[0]:t},mirrorX=(...r)=>mirror({normal:[1,0,0]},r),mirrorY=(...r)=>mirror({normal:[0,1,0]},r),mirrorZ=(...r)=>mirror({normal:[0,0,1]},r);module.exports={mirror:mirror,mirrorX:mirrorX,mirrorY:mirrorY,mirrorZ:mirrorZ};
1834
1822
 
1835
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../maths/mat4":266,"../../maths/plane":285,"../../utils/flatten":519}],485:[function(require,module,exports){
1823
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/mat4":263,"../../maths/plane":282,"../../utils/flatten":515}],481:[function(require,module,exports){
1836
1824
  const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),rotate=(t,...e)=>{if(!Array.isArray(t))throw new Error("angles must be an array");if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");for(t=t.slice();t.length<3;)t.push(0);const r=t[2],o=t[1],a=t[0],m=mat4.fromTaitBryanRotation(mat4.create(),r,o,a),n=e.map(t=>path2.isA(t)?path2.transform(m,t):geom2.isA(t)?geom2.transform(m,t):geom3.isA(t)?geom3.transform(m,t):t);return 1===n.length?n[0]:n},rotateX=(t,...e)=>rotate([t,0,0],e),rotateY=(t,...e)=>rotate([0,t,0],e),rotateZ=(t,...e)=>rotate([0,0,t],e);module.exports={rotate:rotate,rotateX:rotateX,rotateY:rotateY,rotateZ:rotateZ};
1837
1825
 
1838
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../maths/mat4":266,"../../utils/flatten":519}],486:[function(require,module,exports){
1826
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/mat4":263,"../../utils/flatten":515}],482:[function(require,module,exports){
1839
1827
  const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),scale=(e,...r)=>{if(!Array.isArray(e))throw new Error("factors must be an array");if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");for(e=e.slice();e.length<3;)e.push(1);if(e[0]<=0||e[1]<=0||e[2]<=0)throw new Error("factors must be positive");const a=mat4.fromScaling(mat4.create(),e),t=r.map(e=>path2.isA(e)?path2.transform(a,e):geom2.isA(e)?geom2.transform(a,e):geom3.isA(e)?geom3.transform(a,e):e);return 1===t.length?t[0]:t},scaleX=(e,...r)=>scale([e,1,1],r),scaleY=(e,...r)=>scale([1,e,1],r),scaleZ=(e,...r)=>scale([1,1,e],r);module.exports={scale:scale,scaleX:scaleX,scaleY:scaleY,scaleZ:scaleZ};
1840
1828
 
1841
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../maths/mat4":266,"../../utils/flatten":519}],487:[function(require,module,exports){
1829
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/mat4":263,"../../utils/flatten":515}],483:[function(require,module,exports){
1842
1830
  const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),transform=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const t=r.map(r=>path2.isA(r)?path2.transform(e,r):geom2.isA(r)?geom2.transform(e,r):geom3.isA(r)?geom3.transform(e,r):r);return 1===t.length?t[0]:t};module.exports=transform;
1843
1831
 
1844
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../utils/flatten":519}],488:[function(require,module,exports){
1832
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../utils/flatten":515}],484:[function(require,module,exports){
1845
1833
  const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),translate=(t,...e)=>{if(!Array.isArray(t))throw new Error("offset must be an array");if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");for(t=t.slice();t.length<3;)t.push(0);const r=mat4.fromTranslation(mat4.create(),t),a=e.map(t=>path2.isA(t)?path2.transform(r,t):geom2.isA(t)?geom2.transform(r,t):geom3.isA(t)?geom3.transform(r,t):t);return 1===a.length?a[0]:a},translateX=(t,...e)=>translate([t,0,0],e),translateY=(t,...e)=>translate([0,t,0],e),translateZ=(t,...e)=>translate([0,0,t],e);module.exports={translate:translate,translateX:translateX,translateY:translateY,translateZ:translateZ};
1846
1834
 
1847
- },{"../../geometries/geom2":149,"../../geometries/geom3":164,"../../geometries/path2":185,"../../maths/mat4":266,"../../utils/flatten":519}],489:[function(require,module,exports){
1835
+ },{"../../geometries/geom2":146,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/mat4":263,"../../utils/flatten":515}],485:[function(require,module,exports){
1848
1836
  const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),path2=require("../geometries/path2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),arc=e=>{const r={center:[0,0],radius:1,startAngle:0,endAngle:TAU,makeTangent:!1,segments:32};let{center:t,radius:s,startAngle:n,endAngle:a,makeTangent:o,segments:c}=Object.assign({},r,e);if(!isNumberArray(t,2))throw new Error("center must be an array of X and Y values");if(!isGT(s,0))throw new Error("radius must be greater than zero");if(!isGTE(n,0))throw new Error("startAngle must be positive");if(!isGTE(a,0))throw new Error("endAngle must be positive");if(!isGTE(c,4))throw new Error("segments must be four or more");let i=TAU;(n%=TAU)<(a%=TAU)&&(i=a-n),n>a&&(i=a+(TAU-n));const m=Math.acos((s*s+s*s-EPS*EPS)/(2*s*s)),l=vec2.clone(t);let u;const A=[];if(i<m)u=vec2.fromAngleRadians(vec2.create(),n),vec2.scale(u,u,s),vec2.add(u,u,l),A.push(u);else{const e=Math.max(1,Math.floor(c*(i/TAU)))+1;let r=.5*e/i;r>.25&&(r=.25);const t=o?e+2:e;for(let a=0;a<=t;a++){let t=a;o&&((t=(a-1)*(e-2*r)/e+r)<0&&(t=0),t>e&&(t=e));const c=n+t*(i/e);u=vec2.fromAngleRadians(vec2.create(),c),vec2.scale(u,u,s),vec2.add(u,u,l),A.push(u)}}return path2.fromPoints({closed:!1},A)};module.exports=arc;
1849
1837
 
1850
- },{"../geometries/path2":185,"../maths/constants":217,"../maths/vec2":313,"./commonChecks":491}],490:[function(require,module,exports){
1838
+ },{"../geometries/path2":182,"../maths/constants":214,"../maths/vec2":310,"./commonChecks":487}],486:[function(require,module,exports){
1851
1839
  const{TAU:TAU}=require("../maths/constants"),ellipse=require("./ellipse"),{isGT:isGT}=require("./commonChecks"),circle=e=>{const s={center:[0,0],radius:1,startAngle:0,endAngle:TAU,segments:32};let{center:r,radius:t,startAngle:n,endAngle:i,segments:l}=Object.assign({},s,e);if(!isGT(t,0))throw new Error("radius must be greater than zero");return ellipse({center:r,radius:t=[t,t],startAngle:n,endAngle:i,segments:l})};module.exports=circle;
1852
1840
 
1853
- },{"../maths/constants":217,"./commonChecks":491,"./ellipse":496}],491:[function(require,module,exports){
1841
+ },{"../maths/constants":214,"./commonChecks":487,"./ellipse":492}],487:[function(require,module,exports){
1854
1842
  const isNumberArray=(i,r)=>!!(Array.isArray(i)&&i.length>=r)&&i.every(i=>Number.isFinite(i)),isGT=(i,r)=>Number.isFinite(i)&&i>r,isGTE=(i,r)=>Number.isFinite(i)&&i>=r;module.exports={isNumberArray:isNumberArray,isGT:isGT,isGTE:isGTE};
1855
1843
 
1856
- },{}],492:[function(require,module,exports){
1844
+ },{}],488:[function(require,module,exports){
1857
1845
  const cuboid=require("./cuboid"),{isGT:isGT}=require("./commonChecks"),cube=e=>{let{center:r,size:i}=Object.assign({},{center:[0,0,0],size:2},e);if(!isGT(i,0))throw new Error("size must be greater than zero");return cuboid({center:r,size:i=[i,i,i]})};module.exports=cube;
1858
1846
 
1859
- },{"./commonChecks":491,"./cuboid":493}],493:[function(require,module,exports){
1847
+ },{"./commonChecks":487,"./cuboid":489}],489:[function(require,module,exports){
1860
1848
  const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),cuboid=e=>{const{center:r,size:o}=Object.assign({},{center:[0,0,0],size:[2,2,2]},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(o,3))throw new Error("size must be an array of width, depth and height values");if(!o.every(e=>e>0))throw new Error("size values must be greater than zero");return geom3.create([[[0,4,6,2],[-1,0,0]],[[1,3,7,5],[1,0,0]],[[0,1,5,4],[0,-1,0]],[[2,6,7,3],[0,1,0]],[[0,2,3,1],[0,0,-1]],[[4,5,7,6],[0,0,1]]].map(e=>{const t=e[0].map(e=>{return[r[0]+o[0]/2*(2*!!(1&e)-1),r[1]+o[1]/2*(2*!!(2&e)-1),r[2]+o[2]/2*(2*!!(4&e)-1)]});return poly3.create(t)}))};module.exports=cuboid;
1861
1849
 
1862
- },{"../geometries/geom3":164,"../geometries/poly3":202,"./commonChecks":491}],494:[function(require,module,exports){
1850
+ },{"../geometries/geom3":161,"../geometries/poly3":199,"./commonChecks":487}],490:[function(require,module,exports){
1863
1851
  const cylinderElliptic=require("./cylinderElliptic"),{isGT:isGT}=require("./commonChecks"),cylinder=e=>{const{center:i,height:r,radius:t,segments:s}=Object.assign({},{center:[0,0,0],height:2,radius:1,segments:32},e);if(!isGT(t,0))throw new Error("radius must be greater than zero");return cylinderElliptic({center:i,height:r,startRadius:[t,t],endRadius:[t,t],segments:s})};module.exports=cylinder;
1864
1852
 
1865
- },{"./commonChecks":491,"./cylinderElliptic":495}],495:[function(require,module,exports){
1853
+ },{"./commonChecks":487,"./cylinderElliptic":491}],491:[function(require,module,exports){
1866
1854
  const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cylinderElliptic=e=>{const r={center:[0,0,0],height:2,startRadius:[1,1],startAngle:0,endRadius:[1,1],endAngle:TAU,segments:32};let{center:s,height:t,startRadius:a,startAngle:i,endRadius:o,endAngle:n,segments:u}=Object.assign({},r,e);if(!isNumberArray(s,3))throw new Error("center must be an array of X, Y and Z values");if(!isGT(t,0))throw new Error("height must be greater then zero");if(!isNumberArray(a,2))throw new Error("startRadius must be an array of X and Y values");if(!a.every(e=>e>=0))throw new Error("startRadius values must be positive");if(!isNumberArray(o,2))throw new Error("endRadius must be an array of X and Y values");if(!o.every(e=>e>=0))throw new Error("endRadius values must be positive");if(o.every(e=>0===e)&&a.every(e=>0===e))throw new Error("at least one radius must be positive");if(!isGTE(i,0))throw new Error("startAngle must be positive");if(!isGTE(n,0))throw new Error("endAngle must be positive");if(!isGTE(u,4))throw new Error("segments must be four or more");let c=TAU;(i%=TAU)<(n%=TAU)&&(c=n-i),i>n&&(c=n+(TAU-i));const l=Math.min(a[0],a[1],o[0],o[1]),m=Math.acos((l*l+l*l-EPS*EPS)/(2*l*l));if(c<m)throw new Error("startAngle and endAngle do not define a significant rotation");const h=Math.floor(u*(c/TAU)),d=vec3.fromValues(0,0,-t/2),v=vec3.fromValues(0,0,t/2),f=vec3.subtract(vec3.create(),v,d),g=vec3.fromValues(1,0,0),p=vec3.fromValues(0,1,0),A=vec3.create(),w=vec3.create(),E=vec3.create(),y=(e,r,s)=>{const t=r*c+i;return vec3.scale(A,g,s[0]*cos(t)),vec3.scale(w,p,s[1]*sin(t)),vec3.add(A,A,w),vec3.scale(E,f,e),vec3.add(E,E,d),vec3.add(vec3.create(),A,E)},T=(...e)=>{const r=e.map(e=>vec3.add(vec3.create(),e,s));return poly3.create(r)},b=[];for(let e=0;e<h;e++){const r=e/h;let s=(e+1)/h;c===TAU&&e===h-1&&(s=0),o[0]===a[0]&&o[1]===a[1]?(b.push(T(d,y(0,s,o),y(0,r,o))),b.push(T(y(0,s,o),y(1,s,o),y(1,r,o),y(0,r,o))),b.push(T(v,y(1,r,o),y(1,s,o)))):(a[0]>0&&a[1]>0&&b.push(T(d,y(0,s,a),y(0,r,a))),(a[0]>0||a[1]>0)&&b.push(T(y(0,r,a),y(0,s,a),y(1,r,o))),o[0]>0&&o[1]>0&&b.push(T(v,y(1,r,o),y(1,s,o))),(o[0]>0||o[1]>0)&&b.push(T(y(1,r,o),y(0,s,a),y(1,s,o))))}return c<TAU&&(b.push(T(d,y(0,0,a),v)),b.push(T(y(0,0,a),y(1,0,o),v)),b.push(T(d,v,y(0,1,a))),b.push(T(y(0,1,a),v,y(1,1,o)))),geom3.create(b)};module.exports=cylinderElliptic;
1867
1855
 
1868
- },{"../geometries/geom3":164,"../geometries/poly3":202,"../maths/constants":217,"../maths/utils/trigonometry":295,"../maths/vec3":344,"./commonChecks":491}],496:[function(require,module,exports){
1856
+ },{"../geometries/geom3":161,"../geometries/poly3":199,"../maths/constants":214,"../maths/utils/trigonometry":292,"../maths/vec3":341,"./commonChecks":487}],492:[function(require,module,exports){
1869
1857
  const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),ellipse=e=>{const r={center:[0,0],radius:[1,1],startAngle:0,endAngle:TAU,segments:32};let{center:s,radius:t,startAngle:n,endAngle:o,segments:i}=Object.assign({},r,e);if(!isNumberArray(s,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("radius must be an array of X and Y values");if(!t.every(e=>e>0))throw new Error("radius values must be greater than zero");if(!isGTE(n,0))throw new Error("startAngle must be positive");if(!isGTE(o,0))throw new Error("endAngle must be positive");if(!isGTE(i,3))throw new Error("segments must be three or more");let a=TAU;(n%=TAU)<(o%=TAU)&&(a=o-n),n>o&&(a=o+(TAU-n));const m=Math.min(t[0],t[1]);if(a<Math.acos((m*m+m*m-EPS*EPS)/(2*m*m)))throw new Error("startAngle and endAngle do not define a significant rotation");i=Math.floor(i*(a/TAU));const u=vec2.clone(s),c=a/i,l=[];i=a<TAU?i+1:i;for(let e=0;e<i;e++){const r=c*e+n,s=vec2.fromValues(t[0]*cos(r),t[1]*sin(r));vec2.add(s,u,s),l.push(s)}return a<TAU&&l.push(u),geom2.fromPoints(l)};module.exports=ellipse;
1870
1858
 
1871
- },{"../geometries/geom2":149,"../maths/constants":217,"../maths/utils/trigonometry":295,"../maths/vec2":313,"./commonChecks":491}],497:[function(require,module,exports){
1859
+ },{"../geometries/geom2":146,"../maths/constants":214,"../maths/utils/trigonometry":292,"../maths/vec2":310,"./commonChecks":487}],493:[function(require,module,exports){
1872
1860
  const{TAU:TAU}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),ellipsoid=e=>{const{center:c,radius:r,segments:a,axes:s}=Object.assign({},{center:[0,0,0],radius:[1,1,1],segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(r,3))throw new Error("radius must be an array of X, Y and Z values");if(!r.every(e=>e>0))throw new Error("radius values must be greater than zero");if(!isGTE(a,4))throw new Error("segments must be four or more");const t=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[0]),r[0]),v=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[1]),r[1]),o=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[2]),r[2]),l=Math.round(a/4);let u;const i=[],d=vec3.create(),n=vec3.create();for(let e=0;e<=a;e++){const r=TAU*e/a,s=vec3.add(vec3.create(),vec3.scale(d,t,cos(r)),vec3.scale(n,v,sin(r)));if(e>0){let e,r;for(let a=0;a<=l;a++){const t=TAU/4*a/l,v=cos(t),m=sin(t);if(a>0){let t,h=[];t=vec3.subtract(vec3.create(),vec3.scale(d,u,e),vec3.scale(n,o,r)),h.push(vec3.add(t,t,c)),t=vec3.subtract(vec3.create(),vec3.scale(d,s,e),vec3.scale(n,o,r)),h.push(vec3.add(t,t,c)),a<l&&(t=vec3.subtract(vec3.create(),vec3.scale(d,s,v),vec3.scale(n,o,m)),h.push(vec3.add(t,t,c))),t=vec3.subtract(vec3.create(),vec3.scale(d,u,v),vec3.scale(n,o,m)),h.push(vec3.add(t,t,c)),i.push(poly3.create(h)),h=[],t=vec3.add(vec3.create(),vec3.scale(d,u,e),vec3.scale(n,o,r)),h.push(vec3.add(vec3.create(),c,t)),t=vec3.add(t,vec3.scale(d,s,e),vec3.scale(n,o,r)),h.push(vec3.add(vec3.create(),c,t)),a<l&&(t=vec3.add(t,vec3.scale(d,s,v),vec3.scale(n,o,m)),h.push(vec3.add(vec3.create(),c,t))),t=vec3.add(t,vec3.scale(d,u,v),vec3.scale(n,o,m)),h.push(vec3.add(vec3.create(),c,t)),h.reverse(),i.push(poly3.create(h))}e=v,r=m}}u=s}return geom3.create(i)};module.exports=ellipsoid;
1873
1861
 
1874
- },{"../geometries/geom3":164,"../geometries/poly3":202,"../maths/constants":217,"../maths/utils/trigonometry":295,"../maths/vec3":344,"./commonChecks":491}],498:[function(require,module,exports){
1862
+ },{"../geometries/geom3":161,"../geometries/poly3":199,"../maths/constants":214,"../maths/utils/trigonometry":292,"../maths/vec3":341,"./commonChecks":487}],494:[function(require,module,exports){
1875
1863
  const mat4=require("../maths/mat4"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),polyhedron=require("./polyhedron"),{isGT:isGT,isGTE:isGTE}=require("./commonChecks"),geodesicSphere=e=>{let{radius:r,frequency:t}=Object.assign({},{radius:1,frequency:6},e);if(!isGT(r,0))throw new Error("radius must be greater than zero");if(!isGTE(t,6))throw new Error("frequency must be six or more");t=Math.floor(t/6);const o=[[.850651,0,-.525731],[.850651,-0,.525731],[-.850651,-0,.525731],[-.850651,0,-.525731],[0,-.525731,.850651],[0,.525731,.850651],[0,.525731,-.850651],[0,-.525731,-.850651],[-.525731,-.850651,-0],[.525731,-.850651,-0],[.525731,.850651,0],[-.525731,.850651,0]],s=[[0,9,1],[1,10,0],[6,7,0],[10,6,0],[7,9,0],[5,1,4],[4,1,9],[5,10,1],[2,8,3],[3,11,2],[2,5,4],[4,8,2],[2,11,5],[3,7,6],[6,11,3],[8,7,3],[9,8,4],[11,10,5],[10,11,6],[8,9,7]],n=(e,r,t)=>{const o=e[0],s=e[1],n=e[2];let c=t;const a=[],l=[];for(let e=0;e<r;e++)for(let t=0;t<r-e;t++){const f=e/r,u=(e+1)/r,h=t/(r-e),m=(t+1)/(r-e),g=r-e-1?t/(r-e-1):1,p=[];p[0]=i(i(o,s,h),n,f),p[1]=i(i(o,s,m),n,f),p[2]=i(i(o,s,g),n,u);for(let e=0;e<3;e++){const r=vec3.length(p[e]);for(let t=0;t<3;t++)p[e][t]/=r}if(a.push(p[0],p[1],p[2]),l.push([c,c+1,c+2]),c+=3,t<r-e-1){const h=r-e-1?(t+1)/(r-e-1):1;p[0]=i(i(o,s,m),n,f),p[1]=i(i(o,s,h),n,u),p[2]=i(i(o,s,g),n,u);for(let e=0;e<3;e++){const r=vec3.length(p[e]);for(let t=0;t<3;t++)p[e][t]/=r}a.push(p[0],p[1],p[2]),l.push([c,c+1,c+2]),c+=3}}return{points:a,triangles:l,offset:c}},i=(e,r,t)=>{const o=1-t,s=[];for(let n=0;n<3;n++)s[n]=e[n]*o+r[n]*t;return s};let c=[],a=[],l=0;for(let e=0;e<s.length;e++){const r=n([o[s[e][0]],o[s[e][1]],o[s[e][2]]],t,l);c=c.concat(r.points),a=a.concat(r.triangles),l=r.offset}let f=polyhedron({points:c,faces:a,orientation:"inward"});return 1!==r&&(f=geom3.transform(mat4.fromScaling(mat4.create(),[r,r,r]),f)),f};module.exports=geodesicSphere;
1876
1864
 
1877
- },{"../geometries/geom3":164,"../maths/mat4":266,"../maths/vec3":344,"./commonChecks":491,"./polyhedron":502}],499:[function(require,module,exports){
1865
+ },{"../geometries/geom3":161,"../maths/mat4":263,"../maths/vec3":341,"./commonChecks":487,"./polyhedron":498}],495:[function(require,module,exports){
1878
1866
  module.exports={arc:require("./arc"),circle:require("./circle"),cube:require("./cube"),cuboid:require("./cuboid"),cylinder:require("./cylinder"),cylinderElliptic:require("./cylinderElliptic"),ellipse:require("./ellipse"),ellipsoid:require("./ellipsoid"),geodesicSphere:require("./geodesicSphere"),line:require("./line"),polygon:require("./polygon"),polyhedron:require("./polyhedron"),rectangle:require("./rectangle"),roundedCuboid:require("./roundedCuboid"),roundedCylinder:require("./roundedCylinder"),roundedRectangle:require("./roundedRectangle"),sphere:require("./sphere"),square:require("./square"),star:require("./star"),torus:require("./torus"),triangle:require("./triangle")};
1879
1867
 
1880
- },{"./arc":489,"./circle":490,"./cube":492,"./cuboid":493,"./cylinder":494,"./cylinderElliptic":495,"./ellipse":496,"./ellipsoid":497,"./geodesicSphere":498,"./line":500,"./polygon":501,"./polyhedron":502,"./rectangle":503,"./roundedCuboid":504,"./roundedCylinder":505,"./roundedRectangle":506,"./sphere":507,"./square":508,"./star":509,"./torus":510,"./triangle":511}],500:[function(require,module,exports){
1868
+ },{"./arc":485,"./circle":486,"./cube":488,"./cuboid":489,"./cylinder":490,"./cylinderElliptic":491,"./ellipse":492,"./ellipsoid":493,"./geodesicSphere":494,"./line":496,"./polygon":497,"./polyhedron":498,"./rectangle":499,"./roundedCuboid":500,"./roundedCylinder":501,"./roundedRectangle":502,"./sphere":503,"./square":504,"./star":505,"./torus":506,"./triangle":507}],496:[function(require,module,exports){
1881
1869
  const path2=require("../geometries/path2"),line=r=>{if(!Array.isArray(r))throw new Error("points must be an array");return path2.fromPoints({},r)};module.exports=line;
1882
1870
 
1883
- },{"../geometries/path2":185}],501:[function(require,module,exports){
1871
+ },{"../geometries/path2":182}],497:[function(require,module,exports){
1884
1872
  const geom2=require("../geometries/geom2"),polygon=r=>{const{points:o,paths:t}=Object.assign({},{points:[],paths:[]},r);if(!Array.isArray(o)||!Array.isArray(t))throw new Error("points and paths must be arrays");let a=o;Array.isArray(o[0])&&(Array.isArray(o[0][0])||(a=[o])),a.forEach((r,o)=>{if(!Array.isArray(r))throw new Error("list of points "+o+" must be an array");if(r.length<3)throw new Error("list of points "+o+" must contain three or more points");r.forEach((r,t)=>{if(!Array.isArray(r))throw new Error("list of points "+o+", point "+t+" must be an array");if(r.length<2)throw new Error("list of points "+o+", point "+t+" must contain by X and Y values")})});let s=t;if(0===t.length){let r=0;s=a.map(o=>o.map(o=>r++))}const e=[];a.forEach(r=>r.forEach(r=>e.push(r)));let n=[];return s.forEach(r=>{const o=r.map(r=>e[r]),t=geom2.fromPoints(o);n=n.concat(geom2.toSides(t))}),geom2.create(n)};module.exports=polygon;
1885
1873
 
1886
- },{"../geometries/geom2":149}],502:[function(require,module,exports){
1874
+ },{"../geometries/geom2":146}],498:[function(require,module,exports){
1887
1875
  const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),polyhedron=r=>{const e={points:[],faces:[],colors:void 0,orientation:"outward"},{points:o,faces:a,colors:t,orientation:n}=Object.assign({},e,r);if(!Array.isArray(o)||!Array.isArray(a))throw new Error("points and faces must be arrays");if(o.length<3)throw new Error("three or more points are required");if(a.length<1)throw new Error("one or more faces are required");if(t){if(!Array.isArray(t))throw new Error("colors must be an array");if(t.length!==a.length)throw new Error("faces and colors must have the same length")}o.forEach((r,e)=>{if(!isNumberArray(r,3))throw new Error(`point ${e} must be an array of X, Y, Z values`)}),a.forEach((r,e)=>{if(r.length<3)throw new Error(`face ${e} must contain 3 or more indexes`);if(!isNumberArray(r,r.length))throw new Error(`face ${e} must be an array of numbers`)}),"outward"!==n&&a.forEach(r=>r.reverse());const s=a.map((r,e)=>{const a=poly3.create(r.map(r=>o[r]));return t&&t[e]&&(a.color=t[e]),a});return geom3.create(s)};module.exports=polyhedron;
1888
1876
 
1889
- },{"../geometries/geom3":164,"../geometries/poly3":202,"./commonChecks":491}],503:[function(require,module,exports){
1877
+ },{"../geometries/geom3":161,"../geometries/poly3":199,"./commonChecks":487}],499:[function(require,module,exports){
1890
1878
  const vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),rectangle=e=>{const{center:r,size:t}=Object.assign({},{center:[0,0],size:[2,2]},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("size must be an array of X and Y values");if(!t.every(e=>e>0))throw new Error("size values must be greater than zero");const a=[t[0]/2,t[1]/2],c=[a[0],-a[1]],s=[vec2.subtract(vec2.create(),r,a),vec2.add(vec2.create(),r,c),vec2.add(vec2.create(),r,a),vec2.subtract(vec2.create(),r,c)];return geom2.fromPoints(s)};module.exports=rectangle;
1891
1879
 
1892
- },{"../geometries/geom2":149,"../maths/vec2":313,"./commonChecks":491}],504:[function(require,module,exports){
1880
+ },{"../geometries/geom2":146,"../maths/vec2":310,"./commonChecks":487}],500:[function(require,module,exports){
1893
1881
  const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),createCorners=(e,r,t,s,c,o)=>{const a=TAU/4*c/s,n=cos(a),i=sin(a),u=s-c;let l=t*n,h=r[2]-(t-t*i);o||(h=t-t*i-r[2]),l=l>EPS?l:0;const d=vec3.add(vec3.create(),e,[r[0]-t,r[1]-t,h]),v=vec3.add(vec3.create(),e,[t-r[0],r[1]-t,h]),m=vec3.add(vec3.create(),e,[t-r[0],t-r[1],h]),p=vec3.add(vec3.create(),e,[r[0]-t,t-r[1],h]),f=[],g=[],E=[],y=[];for(let e=0;e<=u;e++){const r=u>0?TAU/4*e/u:0,t=vec2.fromAngleRadians(vec2.create(),r);vec2.scale(t,t,l);const s=vec3.fromVec2(vec3.create(),t);f.push(vec3.add(vec3.create(),d,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),g.push(vec3.add(vec3.create(),v,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),E.push(vec3.add(vec3.create(),m,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),y.push(vec3.add(vec3.create(),p,s))}return o?[f,g,E,y]:(f.reverse(),g.reverse(),E.reverse(),y.reverse(),[y,E,g,f])},stitchCorners=(e,r)=>{const t=[];for(let s=0;s<e.length;s++){const c=e[s],o=r[s];for(let e=0;e<c.length-1;e++)t.push(poly3.create([c[e],c[e+1],o[e]])),e<o.length-1&&t.push(poly3.create([o[e],c[e+1],o[e+1]]))}return t},stitchWalls=(e,r)=>{const t=[];for(let s=0;s<e.length;s++){let c=e[s],o=r[s];const a=c[c.length-1],n=o[o.length-1],i=(s+1)%e.length;c=e[i],o=r[i];const u=c[0],l=o[0];t.push(poly3.create([a,u,l,n]))}return t},stitchSides=(e,r)=>{e=(e=[e[3],e[2],e[1],e[0]]).map(e=>e.slice().reverse());const t=[];e.forEach(e=>{e.forEach(e=>t.push(e))});const s=[];r.forEach(e=>{e.forEach(e=>s.push(e))});const c=[];for(let e=0;e<s.length;e++){const r=(e+1)%s.length;c.push(poly3.create([t[e],t[r],s[r],s[e]]))}return c},roundedCuboid=e=>{let{center:r,size:t,roundRadius:s,segments:c}=Object.assign({},{center:[0,0,0],size:[2,2,2],roundRadius:.2,segments:32},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(t,3))throw new Error("size must be an array of X, Y and Z values");if(!t.every(e=>e>0))throw new Error("size values must be greater than zero");if(!isGT(s,0))throw new Error("roundRadius must be greater than zero");if(!isGTE(c,4))throw new Error("segments must be four or more");if(s>(t=t.map(e=>e/2))[0]-EPS||s>t[1]-EPS||s>t[2]-EPS)throw new Error("roundRadius must be smaller then the radius of all dimensions");c=Math.floor(c/4);let o=null,a=null,n=[];for(let e=0;e<=c;e++){const i=createCorners(r,t,s,c,e,!0),u=createCorners(r,t,s,c,e,!1);if(0===e&&(n=n.concat(stitchSides(u,i))),o&&(n=n.concat(stitchCorners(o,i),stitchWalls(o,i))),a&&(n=n.concat(stitchCorners(a,u),stitchWalls(a,u))),e===c){let e=i.map(e=>e[0]);n.push(poly3.create(e)),e=u.map(e=>e[0]),n.push(poly3.create(e))}o=i,a=u}return geom3.create(n)};module.exports=roundedCuboid;
1894
1882
 
1895
- },{"../geometries/geom3":164,"../geometries/poly3":202,"../maths/constants":217,"../maths/utils/trigonometry":295,"../maths/vec2":313,"../maths/vec3":344,"./commonChecks":491}],505:[function(require,module,exports){
1883
+ },{"../geometries/geom3":161,"../geometries/poly3":199,"../maths/constants":214,"../maths/utils/trigonometry":292,"../maths/vec2":310,"../maths/vec3":341,"./commonChecks":487}],501:[function(require,module,exports){
1896
1884
  const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),roundedCylinder=e=>{const{center:c,height:r,radius:s,roundRadius:a,segments:t}=Object.assign({},{center:[0,0,0],height:2,radius:1,roundRadius:.2,segments:32},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isGT(r,0))throw new Error("height must be greater then zero");if(!isGT(s,0))throw new Error("radius must be greater then zero");if(!isGT(a,0))throw new Error("roundRadius must be greater then zero");if(a>s-EPS)throw new Error("roundRadius must be smaller then the radius");if(!isGTE(t,4))throw new Error("segments must be four or more");const v=[0,0,-r/2],o=[0,0,r/2],u=vec3.subtract(vec3.create(),o,v);if(2*a>vec3.length(u)-EPS)throw new Error("height must be larger than twice roundRadius");let d;d=Math.abs(u[0])>Math.abs(u[1])?vec3.fromValues(0,1,0):vec3.fromValues(1,0,0);const i=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),u),a),n=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),i,d)),s),l=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),n,i)),s);vec3.add(v,v,i),vec3.subtract(o,o,i);const h=Math.floor(.25*t),m=e=>{const r=e.map(e=>vec3.add(e,e,c));return poly3.create(r)},p=[],b=vec3.create(),g=vec3.create();let f;for(let e=0;e<=t;e++){const c=TAU*e/t,r=vec3.add(vec3.create(),vec3.scale(b,n,cos(c)),vec3.scale(g,l,sin(c)));if(e>0){let e,c,s=[];s.push(vec3.add(vec3.create(),v,r)),s.push(vec3.add(vec3.create(),v,f)),s.push(vec3.add(vec3.create(),o,f)),s.push(vec3.add(vec3.create(),o,r)),p.push(m(s));for(let a=0;a<=h;a++){const t=TAU/4*a/h,u=cos(t),d=sin(t);if(a>0){let t;s=[],t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,f,e),vec3.scale(g,i,c))),s.push(t),t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,r,e),vec3.scale(g,i,c))),s.push(t),a<h&&(t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,r,u),vec3.scale(g,i,d))),s.push(t)),t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,f,u),vec3.scale(g,i,d))),s.push(t),p.push(m(s)),s=[],t=vec3.add(vec3.create(),vec3.scale(b,f,e),vec3.scale(g,i,c)),vec3.add(t,t,o),s.push(t),t=vec3.add(vec3.create(),vec3.scale(b,r,e),vec3.scale(g,i,c)),vec3.add(t,t,o),s.push(t),a<h&&(t=vec3.add(vec3.create(),vec3.scale(b,r,u),vec3.scale(g,i,d)),vec3.add(t,t,o),s.push(t)),t=vec3.add(vec3.create(),vec3.scale(b,f,u),vec3.scale(g,i,d)),vec3.add(t,t,o),s.push(t),s.reverse(),p.push(m(s))}e=u,c=d}}f=r}return geom3.create(p)};module.exports=roundedCylinder;
1897
1885
 
1898
- },{"../geometries/geom3":164,"../geometries/poly3":202,"../maths/constants":217,"../maths/utils/trigonometry":295,"../maths/vec3":344,"./commonChecks":491}],506:[function(require,module,exports){
1886
+ },{"../geometries/geom3":161,"../geometries/poly3":199,"../maths/constants":214,"../maths/utils/trigonometry":292,"../maths/vec3":341,"./commonChecks":487}],502:[function(require,module,exports){
1899
1887
  const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),roundedRectangle=e=>{let{center:r,size:a,roundRadius:t,segments:s}=Object.assign({},{center:[0,0],size:[2,2],roundRadius:.2,segments:32},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(a,2))throw new Error("size must be an array of X and Y values");if(!a.every(e=>e>0))throw new Error("size values must be greater than zero");if(!isGT(t,0))throw new Error("roundRadius must be greater than zero");if(!isGTE(s,4))throw new Error("segments must be four or more");if(t>(a=a.map(e=>e/2))[0]-EPS||t>a[1]-EPS)throw new Error("roundRadius must be smaller then the radius of all dimensions");const c=Math.floor(s/4),o=vec2.add(vec2.create(),r,[a[0]-t,a[1]-t]),n=vec2.add(vec2.create(),r,[t-a[0],a[1]-t]),i=vec2.add(vec2.create(),r,[t-a[0],t-a[1]]),u=vec2.add(vec2.create(),r,[a[0]-t,t-a[1]]),d=[],v=[],m=[],h=[];for(let e=0;e<=c;e++){const r=TAU/4*e/c,a=vec2.fromAngleRadians(vec2.create(),r);vec2.scale(a,a,t),d.push(vec2.add(vec2.create(),o,a)),vec2.rotate(a,a,vec2.create(),TAU/4),v.push(vec2.add(vec2.create(),n,a)),vec2.rotate(a,a,vec2.create(),TAU/4),m.push(vec2.add(vec2.create(),i,a)),vec2.rotate(a,a,vec2.create(),TAU/4),h.push(vec2.add(vec2.create(),u,a))}return geom2.fromPoints(d.concat(v,m,h))};module.exports=roundedRectangle;
1900
1888
 
1901
- },{"../geometries/geom2":149,"../maths/constants":217,"../maths/vec2":313,"./commonChecks":491}],507:[function(require,module,exports){
1889
+ },{"../geometries/geom2":146,"../maths/constants":214,"../maths/vec2":310,"./commonChecks":487}],503:[function(require,module,exports){
1902
1890
  const ellipsoid=require("./ellipsoid"),{isGT:isGT}=require("./commonChecks"),sphere=e=>{let{center:s,radius:r,segments:i,axes:t}=Object.assign({},{center:[0,0,0],radius:1,segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isGT(r,0))throw new Error("radius must be greater than zero");return ellipsoid({center:s,radius:r=[r,r,r],segments:i,axes:t})};module.exports=sphere;
1903
1891
 
1904
- },{"./commonChecks":491,"./ellipsoid":497}],508:[function(require,module,exports){
1892
+ },{"./commonChecks":487,"./ellipsoid":493}],504:[function(require,module,exports){
1905
1893
  const rectangle=require("./rectangle"),{isGT:isGT}=require("./commonChecks"),square=e=>{let{center:r,size:s}=Object.assign({},{center:[0,0],size:2},e);if(!isGT(s,0))throw new Error("size must be greater than zero");return rectangle({center:r,size:s=[s,s]})};module.exports=square;
1906
1894
 
1907
- },{"./commonChecks":491,"./rectangle":503}],509:[function(require,module,exports){
1895
+ },{"./commonChecks":487,"./rectangle":499}],505:[function(require,module,exports){
1908
1896
  const{TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),getRadiusRatio=(e,r)=>e>0&&r>1&&r<e/2?Math.cos(Math.PI*r/e)/Math.cos(Math.PI*(r-1)/e):0,getPoints=(e,r,t,s)=>{const o=TAU/e,i=[];for(let a=0;a<e;a++){const e=vec2.fromAngleRadians(vec2.create(),o*a+t);vec2.scale(e,e,r),vec2.add(e,s,e),i.push(e)}return i},star=e=>{let{center:r,vertices:t,outerRadius:s,innerRadius:o,density:i,startAngle:a}=Object.assign({},{center:[0,0],vertices:5,outerRadius:1,innerRadius:0,density:2,startAngle:0},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isGTE(t,2))throw new Error("vertices must be two or more");if(!isGT(s,0))throw new Error("outerRadius must be greater than zero");if(!isGTE(o,0))throw new Error("innerRadius must be greater than zero");if(!isGTE(a,0))throw new Error("startAngle must be greater than zero");if(t=Math.floor(t),i=Math.floor(i),a%=TAU,0===o){if(!isGTE(i,2))throw new Error("density must be two or more");o=s*getRadiusRatio(t,i)}const n=vec2.clone(r),u=getPoints(t,s,a,n),c=getPoints(t,o,a+Math.PI/t,n),h=[];for(let e=0;e<t;e++)h.push(u[e]),h.push(c[e]);return geom2.fromPoints(h)};module.exports=star;
1909
1897
 
1910
- },{"../geometries/geom2":149,"../maths/constants":217,"../maths/vec2":313,"./commonChecks":491}],510:[function(require,module,exports){
1898
+ },{"../geometries/geom2":146,"../maths/constants":214,"../maths/vec2":310,"./commonChecks":487}],506:[function(require,module,exports){
1911
1899
  const{TAU:TAU}=require("../maths/constants"),extrudeRotate=require("../operations/extrusions/extrudeRotate"),{rotate:rotate}=require("../operations/transforms/rotate"),{translate:translate}=require("../operations/transforms/translate"),circle=require("./circle"),{isGT:isGT,isGTE:isGTE}=require("./commonChecks"),torus=e=>{const r={innerRadius:1,innerSegments:32,outerRadius:4,outerSegments:32,innerRotation:0,startAngle:0,outerRotation:TAU},{innerRadius:t,innerSegments:o,outerRadius:n,outerSegments:s,innerRotation:i,startAngle:a,outerRotation:u}=Object.assign({},r,e);if(!isGT(t,0))throw new Error("innerRadius must be greater than zero");if(!isGTE(o,3))throw new Error("innerSegments must be three or more");if(!isGT(n,0))throw new Error("outerRadius must be greater than zero");if(!isGTE(s,3))throw new Error("outerSegments must be three or more");if(!isGTE(a,0))throw new Error("startAngle must be positive");if(!isGT(u,0))throw new Error("outerRotation must be greater than zero");if(t>=n)throw new Error("inner circle is two large to rotate about the outer circle");let m=circle({radius:t,segments:o});return 0!==i&&(m=rotate([0,0,i],m)),m=translate([n,0],m),extrudeRotate({startAngle:a,angle:u,segments:s},m)};module.exports=torus;
1912
1900
 
1913
- },{"../maths/constants":217,"../operations/extrusions/extrudeRotate":438,"../operations/transforms/rotate":485,"../operations/transforms/translate":488,"./circle":490,"./commonChecks":491}],511:[function(require,module,exports){
1901
+ },{"../maths/constants":214,"../operations/extrusions/extrudeRotate":434,"../operations/transforms/rotate":481,"../operations/transforms/translate":484,"./circle":486,"./commonChecks":487}],507:[function(require,module,exports){
1914
1902
  const{NEPS:NEPS}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),solveAngleFromSSS=(e,r,t)=>Math.acos((e*e+r*r-t*t)/(2*e*r)),solveSideFromSAS=(e,r,t)=>r>NEPS?Math.sqrt(e*e+t*t-2*e*t*Math.cos(r)):Math.sqrt((e-t)*(e-t)+e*t*r*r*(1-r*r/12)),solveAAA=e=>{if(Math.abs(e[0]+e[1]+e[2]-Math.PI)>NEPS)throw new Error("AAA triangles require angles that sum to PI");const r=e[0],t=e[1],s=Math.PI-r-t,a=1/Math.sin(s)*Math.sin(r),n=1/Math.sin(s)*Math.sin(t);return createTriangle(r,t,s,a,n,1)},solveAAS=e=>{const r=e[0],t=e[1],s=Math.PI+NEPS-r-t;if(s<NEPS)throw new Error("AAS triangles require angles that sum to PI");const a=e[2],n=a/Math.sin(r)*Math.sin(t),o=a/Math.sin(r)*Math.sin(s);return createTriangle(r,t,s,a,n,o)},solveASA=e=>{const r=e[0],t=e[2],s=Math.PI+NEPS-r-t;if(s<NEPS)throw new Error("ASA triangles require angles that sum to PI");const a=e[1],n=a/Math.sin(s)*Math.sin(r),o=a/Math.sin(s)*Math.sin(t);return createTriangle(r,t,s,n,o,a)},solveSAS=e=>{const r=e[0],t=e[1],s=e[2],a=solveSideFromSAS(r,t,s),n=solveAngleFromSSS(a,r,s),o=Math.PI-n-t;return createTriangle(n,t,o,s,a,r)},solveSSA=e=>{const r=e[0],t=e[1],s=e[2],a=Math.asin(t*Math.sin(s)/r),n=Math.PI-a-s,o=r/Math.sin(s)*Math.sin(n);return createTriangle(a,n,s,t,o,r)},solveSSS=e=>{const r=e[1],t=e[2],s=e[0];if(r+t<=s||t+s<=r||s+r<=t)throw new Error("SSS triangle is incorrect, as the longest side is longer than the sum of the other sides");const a=solveAngleFromSSS(t,s,r),n=solveAngleFromSSS(s,r,t),o=Math.PI-a-n;return createTriangle(a,n,o,r,t,s)},createTriangle=(e,r,t,s,a,n)=>{const o=vec2.fromValues(0,0),i=vec2.fromValues(n,0),S=vec2.fromValues(s,0);return vec2.add(S,vec2.rotate(S,S,[0,0],Math.PI-r),i),geom2.fromPoints([o,i,S])},triangle=e=>{let{type:r,values:t}=Object.assign({},{type:"SSS",values:[1,1,1]},e);if("string"!=typeof r)throw new Error("triangle type must be a string");if("A"!==(r=r.toUpperCase())[0]&&"S"!==r[0]||"A"!==r[1]&&"S"!==r[1]||"A"!==r[2]&&"S"!==r[2])throw new Error("triangle type must contain three letters; A or S");if(!isNumberArray(t,3))throw new Error("triangle values must contain three values");if(!t.every(e=>e>0))throw new Error("triangle values must be greater than zero");switch(r){case"AAA":return solveAAA(t);case"AAS":return solveAAS(t);case"ASA":return solveASA(t);case"SAS":return solveSAS(t);case"SSA":return solveSSA(t);case"SSS":return solveSSS(t);default:throw new Error("invalid triangle type, try again")}};module.exports=triangle;
1915
1903
 
1916
- },{"../geometries/geom2":149,"../maths/constants":217,"../maths/vec2":313,"./commonChecks":491}],512:[function(require,module,exports){
1904
+ },{"../geometries/geom2":146,"../maths/constants":214,"../maths/vec2":310,"./commonChecks":487}],508:[function(require,module,exports){
1917
1905
  module.exports={height:14,32:[16],33:[10,5,21,5,7,void 0,5,2,4,1,5,0,6,1,5,2],34:[16,4,21,4,14,void 0,12,21,12,14],35:[21,11,25,4,-7,void 0,17,25,10,-7,void 0,4,12,18,12,void 0,3,6,17,6],36:[20,8,25,8,-4,void 0,12,25,12,-4,void 0,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3],37:[24,21,21,3,0,void 0,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,void 0,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7],38:[26,23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2],39:[10,5,19,4,20,5,21,6,20,6,18,5,16,4,15],40:[14,11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7],41:[14,3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7],42:[16,8,21,8,9,void 0,3,18,13,12,void 0,13,18,3,12],43:[26,13,18,13,0,void 0,4,9,22,9],44:[10,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4],45:[26,4,9,22,9],46:[10,5,2,4,1,5,0,6,1,5,2],47:[22,20,25,2,-7],48:[20,9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21],49:[20,6,17,8,18,11,21,11,0],50:[20,4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0],51:[20,5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4],52:[20,13,21,3,7,18,7,void 0,13,21,13,0],53:[20,15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4],54:[20,16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7],55:[20,17,21,7,0,void 0,3,21,17,21],56:[20,8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21],57:[20,16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3],58:[10,5,14,4,13,5,12,6,13,5,14,void 0,5,2,4,1,5,0,6,1,5,2],59:[10,5,14,4,13,5,12,6,13,5,14,void 0,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4],60:[24,20,18,4,9,20,0],61:[26,4,12,22,12,void 0,4,6,22,6],62:[24,4,18,20,9,4,0],63:[18,3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,void 0,9,2,8,1,9,0,10,1,9,2],64:[27,18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,void 0,12,16,10,14,9,11,9,8,10,6,11,5,void 0,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,void 0,19,16,18,8,18,6,19,5],65:[18,9,21,1,0,void 0,9,21,17,0,void 0,4,7,14,7],66:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,void 0,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0],67:[21,18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5],68:[21,4,21,4,0,void 0,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0],69:[19,4,21,4,0,void 0,4,21,17,21,void 0,4,11,12,11,void 0,4,0,17,0],70:[18,4,21,4,0,void 0,4,21,17,21,void 0,4,11,12,11],71:[21,18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,void 0,13,8,18,8],72:[22,4,21,4,0,void 0,18,21,18,0,void 0,4,11,18,11],73:[8,4,21,4,0],74:[16,12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7],75:[21,4,21,4,0,void 0,18,21,4,7,void 0,9,12,18,0],76:[17,4,21,4,0,void 0,4,0,16,0],77:[24,4,21,4,0,void 0,4,21,12,0,void 0,20,21,12,0,void 0,20,21,20,0],78:[22,4,21,4,0,void 0,4,21,18,0,void 0,18,21,18,0],79:[22,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21],80:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10],81:[22,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,void 0,12,4,18,-2],82:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,void 0,11,11,18,0],83:[20,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3],84:[16,8,21,8,0,void 0,1,21,15,21],85:[22,4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21],86:[18,1,21,9,0,void 0,17,21,9,0],87:[24,2,21,7,0,void 0,12,21,7,0,void 0,12,21,17,0,void 0,22,21,17,0],88:[20,3,21,17,0,void 0,17,21,3,0],89:[18,1,21,9,11,9,0,void 0,17,21,9,11],90:[20,17,21,3,0,void 0,3,21,17,21,void 0,3,0,17,0],91:[14,4,25,4,-7,void 0,5,25,5,-7,void 0,4,25,11,25,void 0,4,-7,11,-7],92:[14,0,21,14,-3],93:[14,9,25,9,-7,void 0,10,25,10,-7,void 0,3,25,10,25,void 0,3,-7,10,-7],94:[16,6,15,8,18,10,15,void 0,3,12,8,17,13,12,void 0,8,17,8,0],95:[16,0,-2,16,-2],96:[10,6,21,5,20,4,18,4,16,5,15,6,16,5,17],97:[19,15,14,15,0,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],98:[19,4,21,4,0,void 0,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3],99:[18,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],100:[19,15,21,15,0,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],101:[18,3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],102:[12,10,21,8,21,6,20,5,17,5,0,void 0,2,14,9,14],103:[19,15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],104:[19,4,21,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0],105:[8,3,21,4,20,5,21,4,22,3,21,void 0,4,14,4,0],106:[10,5,21,6,20,7,21,6,22,5,21,void 0,6,14,6,-3,5,-6,3,-7,1,-7],107:[17,4,21,4,0,void 0,14,14,4,4,void 0,8,8,15,0],108:[8,4,21,4,0],109:[30,4,14,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0,void 0,15,10,18,13,20,14,23,14,25,13,26,10,26,0],110:[19,4,14,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0],111:[19,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14],112:[19,4,14,4,-7,void 0,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3],113:[19,15,14,15,-7,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],114:[13,4,14,4,0,void 0,4,8,5,11,7,13,9,14,12,14],115:[17,14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3],116:[12,5,21,5,4,6,1,8,0,10,0,void 0,2,14,9,14],117:[19,4,14,4,4,5,1,7,0,10,0,12,1,15,4,void 0,15,14,15,0],118:[16,2,14,8,0,void 0,14,14,8,0],119:[22,3,14,7,0,void 0,11,14,7,0,void 0,11,14,15,0,void 0,19,14,15,0],120:[17,3,14,14,0,void 0,14,14,3,0],121:[16,2,14,8,0,void 0,14,14,8,0,6,-4,4,-6,2,-7,1,-7],122:[17,14,14,3,0,void 0,3,14,14,14,void 0,3,0,14,0],123:[14,9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,void 0,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,void 0,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7],124:[8,4,25,4,-7],125:[14,5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,void 0,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,void 0,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7],126:[24,3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,void 0,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]};
1918
1906
 
1919
- },{}],513:[function(require,module,exports){
1907
+ },{}],509:[function(require,module,exports){
1920
1908
  module.exports={vectorChar:require("./vectorChar"),vectorText:require("./vectorText")};
1921
1909
 
1922
- },{"./vectorChar":514,"./vectorText":516}],514:[function(require,module,exports){
1910
+ },{"./vectorChar":510,"./vectorText":512}],510:[function(require,module,exports){
1923
1911
  const vectorParams=require("./vectorParams"),vectorChar=(t,e)=>{const{xOffset:r,yOffset:s,input:h,font:o,height:c,extrudeOffset:n}=vectorParams(t,e);let a=h.charCodeAt(0);a&&o[a]||(a=63);const f=[].concat(o[a]),i=(c-n)/o.height,u=n/2,g=f.shift()*i,l=[];let v=[];for(let t=0,e=f.length;t<e;t+=2){const e=i*f[t]+r,h=i*f[t+1]+s+u;void 0===f[t]?(l.push(v),v=[],t--):v.push([e,h])}return v.length&&l.push(v),{width:g,height:c,segments:l}};module.exports=vectorChar;
1924
1912
 
1925
- },{"./vectorParams":515}],515:[function(require,module,exports){
1913
+ },{"./vectorParams":511}],511:[function(require,module,exports){
1926
1914
  const defaultFont=require("./fonts/single-line/hershey/simplex.js"),defaultsVectorParams={xOffset:0,yOffset:0,input:"?",align:"left",font:defaultFont,height:14,lineSpacing:2.142857142857143,letterSpacing:1,extrudeOffset:0},vectorParams=(t,e)=>{e||"string"!=typeof t||(t={input:t}),t=t||{};const s=Object.assign({},defaultsVectorParams,t);return s.input=e||s.input,s};module.exports=vectorParams;
1927
1915
 
1928
- },{"./fonts/single-line/hershey/simplex.js":512}],516:[function(require,module,exports){
1916
+ },{"./fonts/single-line/hershey/simplex.js":508}],512:[function(require,module,exports){
1929
1917
  const vectorChar=require("./vectorChar"),vectorParams=require("./vectorParams"),translateLine=(t,e)=>{const{x:n,y:s}=Object.assign({x:0,y:0},t||{}),r=e.segments;let h=null,a=null;for(let t=0,e=r.length;t<e;t++)for(let e=0,o=(h=r[t]).length;e<o;e++)a=h[e],h[e]=[a[0]+n,a[1]+s];return e},vectorText=(t,e)=>{const{xOffset:n,yOffset:s,input:r,font:h,height:a,align:o,extrudeOffset:i,lineSpacing:c,letterSpacing:g}=vectorParams(t,e);let l,f,m,x,u,d,[v,w]=[n,s],O={width:0,segments:[]};const p=[];let y=[],C=0;const L=v,P=()=>{p.push(O),C=Math.max(C,O.width),O={width:0,segments:[]}};for(l=0,f=r.length;l<f;l++)m=r[l],x=vectorChar({xOffset:v,yOffset:w,font:h,height:a,extrudeOffset:i},m),"\n"!==m?(u=x.width*g,O.width+=u,v+=u," "!==m&&(O.segments=O.segments.concat(x.segments))):(v=L,w-=x.height*c,P());for(O.segments.length&&P(),l=0,f=p.length;l<f;l++)O=p[l],C>O.width&&(d=C-O.width,"right"===o?O=translateLine({x:d},O):"center"===o&&(O=translateLine({x:d/2},O))),y=y.concat(O.segments);return y};module.exports=vectorText;
1930
1918
 
1931
- },{"./vectorChar":514,"./vectorParams":515}],517:[function(require,module,exports){
1919
+ },{"./vectorChar":510,"./vectorParams":511}],513:[function(require,module,exports){
1932
1920
  const geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),areAllShapesTheSameType=e=>{let r;for(const o of e){let e=0;if(geom2.isA(o)&&(e=1),geom3.isA(o)&&(e=2),path2.isA(o)&&(e=3),r&&e!==r)return!1;r=e}return!0};module.exports=areAllShapesTheSameType;
1933
1921
 
1934
- },{"../geometries/geom2":149,"../geometries/geom3":164,"../geometries/path2":185}],518:[function(require,module,exports){
1922
+ },{"../geometries/geom2":146,"../geometries/geom3":161,"../geometries/path2":182}],514:[function(require,module,exports){
1935
1923
  const degToRad=d=>.017453292519943295*d;module.exports=degToRad;
1936
1924
 
1937
- },{}],519:[function(require,module,exports){
1925
+ },{}],515:[function(require,module,exports){
1938
1926
  const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten;
1939
1927
 
1940
- },{}],520:[function(require,module,exports){
1928
+ },{}],516:[function(require,module,exports){
1941
1929
  const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort;
1942
1930
 
1943
- },{}],521:[function(require,module,exports){
1931
+ },{}],517:[function(require,module,exports){
1944
1932
  module.exports={areAllShapesTheSameType:require("./areAllShapesTheSameType"),degToRad:require("./degToRad"),flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),insertSorted:require("./insertSorted"),radiusToSegments:require("./radiusToSegments"),radToDeg:require("./radToDeg")};
1945
1933
 
1946
- },{"./areAllShapesTheSameType":517,"./degToRad":518,"./flatten":519,"./fnNumberSort":520,"./insertSorted":522,"./radToDeg":524,"./radiusToSegments":525}],522:[function(require,module,exports){
1934
+ },{"./areAllShapesTheSameType":513,"./degToRad":514,"./flatten":515,"./fnNumberSort":516,"./insertSorted":518,"./radToDeg":520,"./radiusToSegments":521}],518:[function(require,module,exports){
1947
1935
  const insertSorted=(t,e,o)=>{let r=0,s=t.length;for(;s>r;){const l=Math.floor((r+s)/2);o(e,t[l])>0?r=l+1:s=l}t.splice(r,0,e)};module.exports=insertSorted;
1948
1936
 
1949
- },{}],523:[function(require,module,exports){
1937
+ },{}],519:[function(require,module,exports){
1950
1938
  const padArrayToLength=(r,e,o)=>{for(r=r.slice();r.length<o;)r.push(e);return r};module.exports=padArrayToLength;
1951
1939
 
1952
- },{}],524:[function(require,module,exports){
1940
+ },{}],520:[function(require,module,exports){
1953
1941
  const radToDeg=o=>57.29577951308232*o;module.exports=radToDeg;
1954
1942
 
1955
- },{}],525:[function(require,module,exports){
1943
+ },{}],521:[function(require,module,exports){
1956
1944
  const{TAU:TAU}=require("../maths/constants"),radiusToSegments=(t,e,s)=>{const a=e>0?t*TAU/e:0,n=s>0?TAU/s:0;return Math.ceil(Math.max(a,n,4))};module.exports=radiusToSegments;
1957
1945
 
1958
- },{"../maths/constants":217}],526:[function(require,module,exports){
1946
+ },{"../maths/constants":214}],522:[function(require,module,exports){
1959
1947
  const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten;
1960
1948
 
1961
- },{}],527:[function(require,module,exports){
1949
+ },{}],523:[function(require,module,exports){
1962
1950
  const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort;
1963
1951
 
1964
- },{}],528:[function(require,module,exports){
1952
+ },{}],524:[function(require,module,exports){
1965
1953
  const head=r=>{if(Array.isArray(r)&&0!==r.length)return r[0]};module.exports=head;
1966
1954
 
1967
- },{}],529:[function(require,module,exports){
1955
+ },{}],525:[function(require,module,exports){
1968
1956
  module.exports={flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),head:require("./head"),insertSorted:require("./insertSorted"),nth:require("./nth"),padToLength:require("./padToLength"),toArray:require("./toArray")};
1969
1957
 
1970
- },{"./flatten":526,"./fnNumberSort":527,"./head":528,"./insertSorted":530,"./nth":531,"./padToLength":532,"./toArray":533}],530:[function(require,module,exports){
1958
+ },{"./flatten":522,"./fnNumberSort":523,"./head":524,"./insertSorted":526,"./nth":527,"./padToLength":528,"./toArray":529}],526:[function(require,module,exports){
1971
1959
  const insertSorted=(t,e,o)=>{let r=0,n=t.length;for(;n>r;){const s=Math.floor((r+n)/2);o(e,t[s])>0?r=s+1:n=s}return t.splice(r,0,e),t};module.exports=insertSorted;
1972
1960
 
1973
- },{}],531:[function(require,module,exports){
1961
+ },{}],527:[function(require,module,exports){
1974
1962
  const nth=(r,t)=>{if(Array.isArray(r)&&!(r.length<t))return r[t]};module.exports=nth;
1975
1963
 
1976
- },{}],532:[function(require,module,exports){
1964
+ },{}],528:[function(require,module,exports){
1977
1965
  const padToLength=(e,o,t)=>{for(e=e.slice();e.length<t;)e.push(o);return e};module.exports=padToLength;
1978
1966
 
1979
- },{}],533:[function(require,module,exports){
1967
+ },{}],529:[function(require,module,exports){
1980
1968
  const toArray=r=>Array.isArray(r)?r:null==r?[]:[r];module.exports=toArray;
1981
1969
 
1982
1970
  },{}]},{},[24])(24)