@jscad/core 2.5.0 → 2.5.1
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.
- package/CHANGELOG.md +8 -0
- package/dist/jscad-core.min.js +122 -119
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.5.1](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/core@2.5.0...@jscad/core@2.5.1) (2021-12-11)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @jscad/core
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
6
14
|
# [2.5.0](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/core@2.4.0...@jscad/core@2.5.0) (2021-11-07)
|
|
7
15
|
|
|
8
16
|
|
package/dist/jscad-core.min.js
CHANGED
|
@@ -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.5.
|
|
29
|
+
"version": "2.5.1",
|
|
30
30
|
"description": "Core functionality for JSCAD Applications",
|
|
31
31
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
32
32
|
"main": "src/index.js",
|
|
@@ -61,9 +61,9 @@ module.exports={
|
|
|
61
61
|
"license": "MIT",
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"@jscad/array-utils": "2.1.0",
|
|
64
|
-
"@jscad/io": "2.2.
|
|
65
|
-
"@jscad/io-utils": "2.0.
|
|
66
|
-
"@jscad/modeling": "2.
|
|
64
|
+
"@jscad/io": "2.2.1",
|
|
65
|
+
"@jscad/io-utils": "2.0.11",
|
|
66
|
+
"@jscad/modeling": "2.7.0",
|
|
67
67
|
"json5": "2.2.0",
|
|
68
68
|
"strip-bom": "4.0.0"
|
|
69
69
|
},
|
|
@@ -86,13 +86,13 @@ module.exports={rebuildGeometry:require("./rebuildGeometry"),rebuildGeometryCli:
|
|
|
86
86
|
},{"./rebuildGeometry":11,"./rebuildGeometryCli":12,"./rebuildGeometryWorker":13,"./serializeSolids":14}],10:[function(require,module,exports){
|
|
87
87
|
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;
|
|
88
88
|
|
|
89
|
-
},{"./serializeSolids":14,"@jscad/array-utils":
|
|
89
|
+
},{"./serializeSolids":14,"@jscad/array-utils":891,"@jscad/modeling":587}],11:[function(require,module,exports){
|
|
90
90
|
const loadDesign=require("../code-loading/loadDesign"),instanciateDesign=require("./instanciateDesign"),applyParameterDefinitions=require("../parameters/applyParameterDefinitions"),rebuildSolids=(e,a)=>{console.log("rebuildSolids",e);let{mainPath:i,apiMainPath:o,serialize:s,lookup:l,lookupCounts:n,parameterValues:t}=Object.assign({},{mainPath:"",apiMainPath:"@jscad/modeling",serialize:!1,lookup:null,lookupCounts:null,parameterValues:{}},e);const r=e.filesAndFolders,u=loadDesign(i,o,r,t);a(null,{type:"params",parameterDefaults:u.parameterValues,parameterDefinitions:u.parameterDefinitions}),t=applyParameterDefinitions(t,u.parameterDefinitions),t=Object.assign({},u.parameterValues,t);const p={lookup:l,lookupCounts:n,serialize:s},d=instanciateDesign(u.rootModule,t,p);a(null,{type:"solids",solids:d.solids,lookup:d.lookup,lookupCounts:d.lookupCounts})};module.exports=rebuildSolids;
|
|
91
91
|
|
|
92
92
|
},{"../code-loading/loadDesign":17,"../parameters/applyParameterDefinitions":29,"./instanciateDesign":10}],12:[function(require,module,exports){
|
|
93
93
|
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,serialize:a,mainPath:i,parameterValues:s,useFakeFs:t}=Object.assign({},{apiMainPath:"@jscad/modeling",serialize:!1},e),u=require;if(t){const a=path.parse(i),s=`${a.name}.js`,t=`/${a.name}.js`,n=[{ext:"js",fullPath:t,name:s,source:e.source}];u=makeWebRequire(n,{apiMainPath:r}),i=t}const n=requireDesignFromModule(i,u),l=getAllParameterDefintionsAndValues(n,s);return toArray(n.main(l.parameterValues))};module.exports=rebuildSolids;
|
|
94
94
|
|
|
95
|
-
},{"../code-loading/requireDesignFromModule":21,"../code-loading/webRequire":25,"../parameters/getParameterDefinitionsAndValues":30,"@jscad/array-utils":
|
|
95
|
+
},{"../code-loading/requireDesignFromModule":21,"../code-loading/webRequire":25,"../parameters/getParameterDefinitionsAndValues":30,"@jscad/array-utils":891,"path":4}],13:[function(require,module,exports){
|
|
96
96
|
const rebuildGeometryWorker=e=>{const o=require("./rebuildGeometry");e.onmessage=function(r){if(r.data instanceof Object){const{data:t}=r;"generate"===t.cmd&&o(t,(o,r)=>e.postMessage(r))}}};module.exports=rebuildGeometryWorker;
|
|
97
97
|
|
|
98
98
|
},{"./rebuildGeometry":11}],14:[function(require,module,exports){
|
|
@@ -122,7 +122,7 @@ const validateDesignModule=require("./validateDesignModule"),normalizeDesignModu
|
|
|
122
122
|
},{"./normalizeDesignModule":20,"./validateDesignModule":24}],22:[function(require,module,exports){
|
|
123
123
|
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};
|
|
124
124
|
|
|
125
|
-
},{"@jscad/array-utils":
|
|
125
|
+
},{"@jscad/array-utils":891,"path":4}],23:[function(require,module,exports){
|
|
126
126
|
const{deserializers:deserializers}=require("@jscad/io"),isCommonJsModule=require("./isCommonJsModule"),modulifySource=require("./modulifySource"),passThroughTransform=(e,r)=>r,modulifyTransform=(e,r)=>{const{apiMainPath:s}=e,o=isCommonJsModule(r.source)?r.source:modulifySource(r.source,s);return Object.assign({},r,{source:o})},createJscadEntry=(e,r)=>{const s=e.name.substring(0,e.name.lastIndexOf(".")+1)+"jscad",o="/"+s;return Object.assign({},e,{ext:"jscad",name:s,fullPath:o,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 o=Object.assign({},e,{filename:r.name,output:"script"});if(r.ext in deserializers){const e=(0,deserializers[r.ext])(o,r.source);return createJscadEntry(r,e)}if(r.ext in s)return s[r.ext].reduce((e,r)=>r(o,e),r)}return r})(r))),r};module.exports=transformSources;
|
|
127
127
|
|
|
128
128
|
},{"./isCommonJsModule":16,"./modulifySource":19,"@jscad/io":72}],24:[function(require,module,exports){
|
|
@@ -131,7 +131,7 @@ const validateDesignModule=n=>{if(!n)throw new Error("undefined root module pass
|
|
|
131
131
|
},{}],25:[function(require,module,exports){
|
|
132
132
|
const path=require("path"),posix=path.posix?path.posix:path,getFileExtensionFromString=require("../utils/getFileExtensionFromString"),{combineParameterDefinitions:combineParameterDefinitions,getParameterDefinitionsFromSource:getParameterDefinitionsFromSource}=require("../parameters/getParameterDefinitionsFromSource"),findMatch=(e,r)=>{for(let t=0;t<r.length;t++){const n=r[t];if(e===n.fullPath||"/"+e===n.fullPath)return n;if(n.children){const r=findMatch(e,n.children);if(void 0!==r)return r}}},registerJsExtension=(e,r)=>{const t=require("strip-bom");r.extensions[".js"]=((r,n)=>{const i=e.readFileSync(n,"utf8");r._compile(t(i),n)})},registerJsonExtension=(e,r)=>{r.extensions[".json"]=((r,t)=>{const n=e.readFileSync(t,"utf8");r.exports=JSON.parse(n)})},makeWebRequire=(e,r)=>{const t={apiMainPath:"@jscad/modeling",fakeFs:require("./makeFakeFs")(e)},{apiMainPath:n,fakeFs:i}=Object.assign({},t,r),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=(r,t)=>{const n=o[t];if(n)return n.exports;r&&!t.startsWith("/")||(r="/");const i=r=>{let t=getFileExtensionFromString(r);t||(t="js",r+=".js"),t="."+t;const n=findMatch(r,e);if(!n)return null;if(n.children)return null;if(a[t]){const e={exports:{},_compile:(r,t)=>{new Function("require","module",r)(l.bind(null,n.fullPath),e);const i=r.includes("@jscad-params")?getParameterDefinitionsFromSource(r,t):[],s=e.exports.getParameterDefinitions;e.exports.getParameterDefinitions=(()=>combineParameterDefinitions(i,s&&s()||[]))}};return a[t](e,n.fullPath),e.exports}return null},s=r=>{if(!findMatch(r,e))return null;"/"===r&&(r="");let t=r+"/index.js",n=i(t);return n||((n=i(t=r+"/index.json"))||null)},u=r=>{let t,n=findMatch(r,e);if(!n)return null;if(!n.children)return null;if(n=findMatch(r+"/package.json",e)){const e=JSON.parse(n.source).main;if(e){const n=posix.normalize(r+"/"+e);return(t=i(n))?t:(t=s(n))||null}}return(t=s(r))||null};if(t.startsWith("./")||t.startsWith("/")||t.startsWith("../")){t=posix.normalize(posix.dirname(r)+posix.sep+t);let e=i(t);if(e)return e;if(e=u(t))return e;throw new Error(`Cannot find relative path to module ${t}`)}const c=((e,r)=>{const t=(e=>{const r=e.split("/"),t=[];for(let e=r.length-1;e>0;e--){if("node_modules"===r[e])continue;const n=posix.sep+posix.join(...r.slice(1,e+1),"node_modules");t.push(n)}return t})(r);for(let r=0;r<t.length;r++){const n=t[r],s=posix.join(n,e);let o=i(s);if(o)return o;if(o=u(s))return o}return null})(t,posix.dirname(r));if(c)return c;throw new Error(`Cannot find module ${t}`)},u=l.bind(null,"/");return u.extensions=a,u.resolve=(()=>{}),registerJsExtension(i,u),registerJsonExtension(i,u),u};module.exports=makeWebRequire;
|
|
133
133
|
|
|
134
|
-
},{"../parameters/getParameterDefinitionsFromSource":31,"../utils/getFileExtensionFromString":35,"./makeFakeFs":18,"@jscad/array-utils":
|
|
134
|
+
},{"../parameters/getParameterDefinitionsFromSource":31,"../utils/getFileExtensionFromString":35,"./makeFakeFs":18,"@jscad/array-utils":891,"@jscad/io":72,"@jscad/modeling":587,"path":4,"strip-bom":7}],26:[function(require,module,exports){
|
|
135
135
|
module.exports={evaluation:require("./code-evaluation"),io:require("./io"),loading:require("./code-loading"),parameters:require("./parameters"),utils:require("./utils"),web:require("./web")};
|
|
136
136
|
|
|
137
137
|
},{"./code-evaluation":9,"./code-loading":15,"./io":27,"./parameters":34,"./utils":36,"./web":38}],27:[function(require,module,exports){
|
|
@@ -173,7 +173,7 @@ module.exports={walkFileTree:require("./walkFileTree")};
|
|
|
173
173
|
},{"./walkFileTree":39}],39:[function(require,module,exports){
|
|
174
174
|
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;
|
|
175
175
|
|
|
176
|
-
},{"../utils/getFileExtensionFromString":35,"@jscad/array-utils":
|
|
176
|
+
},{"../utils/getFileExtensionFromString":35,"@jscad/array-utils":891,"@jscad/io/formats":71,"path":4}],40:[function(require,module,exports){
|
|
177
177
|
"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;
|
|
178
178
|
|
|
179
179
|
},{}],41:[function(require,module,exports){
|
|
@@ -188,7 +188,7 @@ const{flatten:flatten}=require("@jscad/array-utils"),{formats:formats}=require("
|
|
|
188
188
|
},{"xmlchars/xml/1.0/ed5":40,"xmlchars/xml/1.1/ed2":41,"xmlchars/xmlns/1.0/ed3":42}],44:[function(require,module,exports){
|
|
189
189
|
module.exports={
|
|
190
190
|
"name": "@jscad/amf-deserializer",
|
|
191
|
-
"version": "2.2.
|
|
191
|
+
"version": "2.2.4",
|
|
192
192
|
"description": "AMF Deserializer for JSCAD",
|
|
193
193
|
"repository": "https://github.com/jscad/OpenJSCAD.org/",
|
|
194
194
|
"main": "src/index.js",
|
|
@@ -219,7 +219,7 @@ module.exports={
|
|
|
219
219
|
],
|
|
220
220
|
"license": "MIT",
|
|
221
221
|
"dependencies": {
|
|
222
|
-
"@jscad/modeling": "2.
|
|
222
|
+
"@jscad/modeling": "2.7.0",
|
|
223
223
|
"saxes": "5.0.1"
|
|
224
224
|
},
|
|
225
225
|
"devDependencies": {
|
|
@@ -252,7 +252,7 @@ const createObject=require("./objectBuilder"),parse=require("./parse"),translate
|
|
|
252
252
|
},{"./constants":45,"./objectBuilder":49,"./parse":50}],52:[function(require,module,exports){
|
|
253
253
|
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};
|
|
254
254
|
|
|
255
|
-
},{"@jscad/array-utils":
|
|
255
|
+
},{"@jscad/array-utils":891,"@jscad/modeling":587,"onml/lib/stringify":53}],53:[function(require,module,exports){
|
|
256
256
|
"use strict";function isObject(n){return n&&"[object Object]"===Object.prototype.toString.call(n)}function indenter(n){var t=" ".repeat(n);return function(n){var e,r=[];return"string"!=typeof n?n:1===(e=n.split("\n")).length?t+n:(e.forEach(function(n){""!==n.trim()?r.push(t+n):r.push(n)}),r.join("\n"))}}function clean(n){var t=n.split("\n"),e=[];return t.forEach(function(n){""!==n.trim()&&e.push(n)}),e.join("\n")}function stringify(n,t){var e="",r=function(n){return n};return t>0&&(e="\n",r=indenter(t)),function n(t){var i,o,c;return o="",c=!0,t.some(function(t,r,u){if(0===r)return i="<"+t,1===u.length||void 0;if(1===r){if(isObject(t))return Object.keys(t).forEach(function(n){i+=" "+n+'="'+t[n]+'"'}),2===u.length||void(i+=">");i+=">"}switch(typeof t){case"string":case"number":case"boolean":case"undefined":return void(o+=t+e)}c=!1,o+=n(t)})?i+"/>"+e:c?i+clean(o)+"</"+t[0]+">"+e:i+e+r(o)+"</"+t[0]+">"+e}(n)}module.exports=stringify;
|
|
257
257
|
|
|
258
258
|
},{}],54:[function(require,module,exports){
|
|
@@ -276,7 +276,7 @@ const{geometries:geometries,maths:maths,primitives:primitives}=require("@jscad/m
|
|
|
276
276
|
},{"./helpers":57,"@jscad/modeling":587}],60:[function(require,module,exports){
|
|
277
277
|
module.exports={
|
|
278
278
|
"name": "@jscad/dxf-deserializer",
|
|
279
|
-
"version": "2.3.
|
|
279
|
+
"version": "2.3.8",
|
|
280
280
|
"description": "DXF Deserializer for JSCAD",
|
|
281
281
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
282
282
|
"main": "index.js",
|
|
@@ -303,7 +303,7 @@ module.exports={
|
|
|
303
303
|
],
|
|
304
304
|
"license": "MIT",
|
|
305
305
|
"dependencies": {
|
|
306
|
-
"@jscad/modeling": "2.
|
|
306
|
+
"@jscad/modeling": "2.7.0"
|
|
307
307
|
},
|
|
308
308
|
"devDependencies": {
|
|
309
309
|
"ava": "3.15.0",
|
|
@@ -323,7 +323,7 @@ const colorIndex=[[0,0,0,255],[255,0,0,255],[255,255,0,255],[0,255,0,255],[0,255
|
|
|
323
323
|
},{}],64:[function(require,module,exports){
|
|
324
324
|
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};
|
|
325
325
|
|
|
326
|
-
},{"./autocad_AC2017":62,"./colorindex2017":63,"@jscad/array-utils":
|
|
326
|
+
},{"./autocad_AC2017":62,"./colorindex2017":63,"@jscad/array-utils":891,"@jscad/modeling":587}],65:[function(require,module,exports){
|
|
327
327
|
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;
|
|
328
328
|
|
|
329
329
|
},{}],66:[function(require,module,exports){
|
|
@@ -352,13 +352,13 @@ const{makeBlob:makeBlob,convertToBlob:convertToBlob}=require("@jscad/io-utils"),
|
|
|
352
352
|
},{"./deserializers":70,"./prepareOutput":73,"@jscad/amf-serializer":52,"@jscad/dxf-serializer":64,"@jscad/io-utils":68,"@jscad/json-serializer":76,"@jscad/obj-serializer":79,"@jscad/stl-serializer":84,"@jscad/svg-serializer":96,"@jscad/x3d-serializer":501}],73:[function(require,module,exports){
|
|
353
353
|
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"),prepareOutput=(e,r)=>{const i={format:void 0,version:"0.0.0"},{format:a,version:s}=Object.assign({},i,r),t={producer:"JSCAD "+s,date:new Date,version:s},l={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,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({},t,r);return{data:l[a].serialize(o,e),mimeType:l[a].mimeType}};module.exports=prepareOutput;
|
|
354
354
|
|
|
355
|
-
},{"./formats":71,"@jscad/amf-serializer":52,"@jscad/array-utils":
|
|
355
|
+
},{"./formats":71,"@jscad/amf-serializer":52,"@jscad/array-utils":891,"@jscad/dxf-serializer":64,"@jscad/json-serializer":76,"@jscad/obj-serializer":79,"@jscad/stl-serializer":84,"@jscad/svg-serializer":96,"@jscad/x3d-serializer":501}],74:[function(require,module,exports){
|
|
356
356
|
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"};
|
|
357
357
|
|
|
358
|
-
},{"./package.json":75,"@jscad/array-utils":
|
|
358
|
+
},{"./package.json":75,"@jscad/array-utils":891}],75:[function(require,module,exports){
|
|
359
359
|
module.exports={
|
|
360
360
|
"name": "@jscad/json-deserializer",
|
|
361
|
-
"version": "2.0.
|
|
361
|
+
"version": "2.0.12",
|
|
362
362
|
"description": "JSON Deserializer for JSCAD",
|
|
363
363
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
364
364
|
"main": "index.js",
|
|
@@ -388,7 +388,7 @@ module.exports={
|
|
|
388
388
|
"@jscad/array-utils": "2.1.0"
|
|
389
389
|
},
|
|
390
390
|
"devDependencies": {
|
|
391
|
-
"@jscad/modeling": "2.
|
|
391
|
+
"@jscad/modeling": "2.7.0",
|
|
392
392
|
"ava": "3.15.0",
|
|
393
393
|
"nyc": "15.1.0"
|
|
394
394
|
}
|
|
@@ -403,7 +403,7 @@ const{colors:colors,primitives:primitives}=require("@jscad/modeling"),version=re
|
|
|
403
403
|
},{"./package.json":78,"@jscad/modeling":587}],78:[function(require,module,exports){
|
|
404
404
|
module.exports={
|
|
405
405
|
"name": "@jscad/obj-deserializer",
|
|
406
|
-
"version": "2.0.
|
|
406
|
+
"version": "2.0.11",
|
|
407
407
|
"description": "OBJ Deserializer for JSCAD",
|
|
408
408
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
409
409
|
"main": "index.js",
|
|
@@ -434,7 +434,7 @@ module.exports={
|
|
|
434
434
|
],
|
|
435
435
|
"license": "MIT",
|
|
436
436
|
"dependencies": {
|
|
437
|
-
"@jscad/modeling": "2.
|
|
437
|
+
"@jscad/modeling": "2.7.0"
|
|
438
438
|
},
|
|
439
439
|
"devDependencies": {
|
|
440
440
|
"ava": "3.15.0",
|
|
@@ -445,13 +445,13 @@ module.exports={
|
|
|
445
445
|
},{}],79:[function(require,module,exports){
|
|
446
446
|
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};
|
|
447
447
|
|
|
448
|
-
},{"@jscad/array-utils":
|
|
448
|
+
},{"@jscad/array-utils":891,"@jscad/modeling":587}],80:[function(require,module,exports){
|
|
449
449
|
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"};
|
|
450
450
|
|
|
451
451
|
},{"./package.json":81,"@jscad/io-utils":68,"@jscad/modeling":587}],81:[function(require,module,exports){
|
|
452
452
|
module.exports={
|
|
453
453
|
"name": "@jscad/stl-deserializer",
|
|
454
|
-
"version": "2.1.
|
|
454
|
+
"version": "2.1.8",
|
|
455
455
|
"description": "STL Deserializer for JSCAD",
|
|
456
456
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
457
457
|
"main": "index.js",
|
|
@@ -482,8 +482,8 @@ module.exports={
|
|
|
482
482
|
],
|
|
483
483
|
"license": "MIT",
|
|
484
484
|
"dependencies": {
|
|
485
|
-
"@jscad/io-utils": "2.0.
|
|
486
|
-
"@jscad/modeling": "2.
|
|
485
|
+
"@jscad/io-utils": "2.0.11",
|
|
486
|
+
"@jscad/modeling": "2.7.0"
|
|
487
487
|
},
|
|
488
488
|
"devDependencies": {
|
|
489
489
|
"ava": "3.15.0",
|
|
@@ -500,7 +500,7 @@ const{geometries:geometries}=require("@jscad/modeling"),serializeBinary=(e,r)=>{
|
|
|
500
500
|
},{"@jscad/modeling":587}],84:[function(require,module,exports){
|
|
501
501
|
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};
|
|
502
502
|
|
|
503
|
-
},{"./CSGToStla":82,"./CSGToStlb":83,"@jscad/array-utils":
|
|
503
|
+
},{"./CSGToStla":82,"./CSGToStlb":83,"@jscad/array-utils":891,"@jscad/modeling":587}],85:[function(require,module,exports){
|
|
504
504
|
"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;
|
|
505
505
|
|
|
506
506
|
},{}],86:[function(require,module,exports){
|
|
@@ -515,7 +515,7 @@ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{fla
|
|
|
515
515
|
},{"xmlchars/xml/1.0/ed5":85,"xmlchars/xml/1.1/ed2":86,"xmlchars/xmlns/1.0/ed3":87}],89:[function(require,module,exports){
|
|
516
516
|
module.exports={
|
|
517
517
|
"name": "@jscad/svg-deserializer",
|
|
518
|
-
"version": "2.4.
|
|
518
|
+
"version": "2.4.4",
|
|
519
519
|
"description": "SVG Deserializer for JSCAD",
|
|
520
520
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
521
521
|
"main": "src/index.js",
|
|
@@ -547,7 +547,7 @@ module.exports={
|
|
|
547
547
|
"license": "MIT",
|
|
548
548
|
"dependencies": {
|
|
549
549
|
"@jscad/array-utils": "2.1.0",
|
|
550
|
-
"@jscad/modeling": "2.
|
|
550
|
+
"@jscad/modeling": "2.7.0",
|
|
551
551
|
"saxes": "5.0.1"
|
|
552
552
|
},
|
|
553
553
|
"devDependencies": {
|
|
@@ -565,7 +565,7 @@ const{inchMM:inchMM,ptMM:ptMM,pcMM:pcMM,svgColors:svgColors}=require("./constant
|
|
|
565
565
|
},{"./constants":90}],92:[function(require,module,exports){
|
|
566
566
|
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"};
|
|
567
567
|
|
|
568
|
-
},{"../package.json":89,"./constants":90,"./helpers":91,"./shapesMapGeometry":93,"./shapesMapJscad":94,"./svgElementHelpers":95,"@jscad/array-utils":
|
|
568
|
+
},{"../package.json":89,"./constants":90,"./helpers":91,"./shapesMapGeometry":93,"./shapesMapJscad":94,"./svgElementHelpers":95,"@jscad/array-utils":891,"@jscad/modeling":587,"saxes":88}],93:[function(require,module,exports){
|
|
569
569
|
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};
|
|
570
570
|
|
|
571
571
|
},{"./helpers":91,"@jscad/modeling":587}],94:[function(require,module,exports){
|
|
@@ -583,7 +583,7 @@ const{geometries:geometries,maths:maths,measurements:measurements,utils:utils}=r
|
|
|
583
583
|
},{}],98:[function(require,module,exports){
|
|
584
584
|
module.exports={
|
|
585
585
|
"name": "@jscad/svg-serializer",
|
|
586
|
-
"version": "2.2.
|
|
586
|
+
"version": "2.2.9",
|
|
587
587
|
"description": "SVG Serializer for JSCAD",
|
|
588
588
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
589
589
|
"main": "index.js",
|
|
@@ -614,7 +614,7 @@ module.exports={
|
|
|
614
614
|
],
|
|
615
615
|
"license": "MIT",
|
|
616
616
|
"dependencies": {
|
|
617
|
-
"@jscad/modeling": "2.
|
|
617
|
+
"@jscad/modeling": "2.7.0",
|
|
618
618
|
"onml": "1.2.0"
|
|
619
619
|
},
|
|
620
620
|
"devDependencies": {
|
|
@@ -1829,7 +1829,7 @@ const version=require("../package.json").version,translate=require("./translate"
|
|
|
1829
1829
|
},{"../package.json":483,"./instantiate":488,"./translate":495}],488:[function(require,module,exports){
|
|
1830
1830
|
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;
|
|
1831
1831
|
|
|
1832
|
-
},{"./constants":484,"./instantiateDefinitions":489,"./objects":493,"./parse":494,"@jscad/array-utils":
|
|
1832
|
+
},{"./constants":484,"./instantiateDefinitions":489,"./objects":493,"./parse":494,"@jscad/array-utils":891}],489:[function(require,module,exports){
|
|
1833
1833
|
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;
|
|
1834
1834
|
|
|
1835
1835
|
},{"./createTransform":485,"./instantiateLine":490,"./instantiateMesh":491,"./instantiatePrimitive":492,"./objects":493,"./translateHelpers":497,"@jscad/modeling":183}],490:[function(require,module,exports){
|
|
@@ -1868,7 +1868,7 @@ const{geometries:geometries}=require("@jscad/modeling"),{geom3:geom3,poly3:poly3
|
|
|
1868
1868
|
},{"./extrudeX3D":486,"./objects":493,"./translateHelpers":497,"./translateLine":498,"./translateMesh":499,"@jscad/modeling":183}],501:[function(require,module,exports){
|
|
1869
1869
|
const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),stringify=require("onml/lib/stringify"),mimeType="model/x3d+xml",serialize=(e,...o)=>{e=Object.assign({},{unit:"millimeter",color:[0,0,1,1],decimals:1e3,statusCallback:null},e);let t=(o=flatten(o)).filter(e=>geometries.geom3.isA(e));if(0===t.length)throw new Error("only 3D geometries can be serialized to X3D");o.length!==t.length&&console.warn("some objects could not be serialized to X3D"),t=toArray(modifiers.generalize({snap:!0,triangulate:!0},t)),e.statusCallback&&e.statusCallback({progress:0});let r=["X3D",{profile:"Interchange",version:"3.3","xmlns:xsd":"http://www.w3.org/2001/XMLSchema-instance","xsd:noNamespaceSchemaLocation":"http://www.web3d.org/specifications/x3d-3.3.xsd"},["head",{},["meta",{name:"creator",content:"Created by JSCAD"}]]];r=r.concat(convertObjects(t,e));const s=`<?xml version="1.0" encoding="UTF-8"?>\n${stringify(r,2)}`;return e&&e.statusCallback&&e.statusCallback({progress:100}),[s]},convertObjects=(e,o)=>{let t=["Scene",{}];const r=[];return e.forEach((t,s)=>{if(o.statusCallback&&o.statusCallback({progress:100*s/e.length}),geometries.geom3.isA(t)){geometries.geom3.toPolygons(t).length>0&&r.push(convertShape(t,o))}}),[t=t.concat(r)]},convertShape=(e,o)=>{return["Shape",{},convertMesh(e,o)]},convertMesh=(e,o)=>{const t=convertToTriangles(e,o),r=polygons2coordinates(t,o);return["IndexedTriangleSet",{ccw:"true",colorPerVertex:"false",solid:"false",index:r[0].join(" ")},["Coordinate",{point:r[1].join(" ")}],["Color",{color:r[2].join(" ")}]]},convertToTriangles=(e,o)=>{const t=[];return geometries.geom3.toPolygons(e).forEach(r=>{const s=r.vertices[0];for(let n=r.vertices.length-3;n>=0;n--){const l=geometries.poly3.fromPoints([s,r.vertices[n+1],r.vertices[n+2]]);let i=o.color;e.color&&(i=e.color),r.color&&(i=r.color),l.color=i,t.push(l)}}),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=[],s=[],n=new Map;return e.forEach(e=>{const l=[],i=e.vertices.length;for(let t=0;t<i;t++){const s=e.vertices[t],i=`${s[0]},${s[1]},${s[2]}`;if(!n.has(i)){const e=Math.round(s[0]*o.decimals)/o.decimals,t=Math.round(s[1]*o.decimals)/o.decimals,l=Math.round(s[2]*o.decimals)/o.decimals;r.push(`${e} ${t} ${l}`),n.set(i,r.length-1)}l.push(n.get(i))}t.push(l.join(" ")),s.push(convertToColor(e,o))}),n.clear(),[t,r,s]};module.exports={serialize:serialize,mimeType:mimeType};
|
|
1870
1870
|
|
|
1871
|
-
},{"@jscad/array-utils":
|
|
1871
|
+
},{"@jscad/array-utils":891,"@jscad/modeling":587,"onml/lib/stringify":502}],502:[function(require,module,exports){
|
|
1872
1872
|
"use strict";function isObject(n){return n&&"[object Object]"===Object.prototype.toString.call(n)}function indenter(n){var t=" ".repeat(n);return function(n){var e,r=[];return"string"!=typeof n?n:1===(e=n.split("\n")).length?t+n:(e.forEach(function(n){""!==n.trim()?r.push(t+n):r.push(n)}),r.join("\n"))}}function clean(n){var t=n.split("\n"),e=[];return t.forEach(function(n){""!==n.trim()&&e.push(n)}),e.join("\n")}function stringify(n,t){var e="",r=function(n){return n};return t>0&&(e="\n",r=indenter(t)),function n(t){var i,o,c;return o="",c=!0,t.some(function(t,r,u){if(0===r)return i="<"+t,1===u.length||void 0;if(1===r){if(isObject(t))return Object.keys(t).forEach(function(n){i+=" "+n+'="'+t[n]+'"'}),2===u.length||void(i+=">");i+=">"}switch(typeof t){case"string":case"number":case"boolean":case"undefined":return void(o+=t+e)}c=!1,o+=n(t)})?i+"/>"+e:c?i+clean(o)+"</"+t[0]+">"+e:i+e+r(o)+"</"+t[0]+">"+e}(n)}module.exports=stringify;
|
|
1873
1873
|
|
|
1874
1874
|
},{}],503:[function(require,module,exports){
|
|
@@ -1877,7 +1877,7 @@ const cssColors=require("./cssColors"),colorNameToRgb=o=>cssColors[o.toLowerCase
|
|
|
1877
1877
|
},{"./cssColors":505}],504:[function(require,module,exports){
|
|
1878
1878
|
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;
|
|
1879
1879
|
|
|
1880
|
-
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../utils/flatten":
|
|
1880
|
+
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../utils/flatten":881}],505:[function(require,module,exports){
|
|
1881
1881
|
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;
|
|
1882
1882
|
|
|
1883
1883
|
},{}],506:[function(require,module,exports){
|
|
@@ -1886,10 +1886,10 @@ const hexToRgb=t=>{if((t=t.replace("#","")).length<6)throw new Error("the given
|
|
|
1886
1886
|
},{}],507:[function(require,module,exports){
|
|
1887
1887
|
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;
|
|
1888
1888
|
|
|
1889
|
-
},{"../utils/flatten":
|
|
1889
|
+
},{"../utils/flatten":881,"./hueToColorComponent":509}],508:[function(require,module,exports){
|
|
1890
1890
|
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;
|
|
1891
1891
|
|
|
1892
|
-
},{"../utils/flatten":
|
|
1892
|
+
},{"../utils/flatten":881}],509:[function(require,module,exports){
|
|
1893
1893
|
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;
|
|
1894
1894
|
|
|
1895
1895
|
},{}],510:[function(require,module,exports){
|
|
@@ -1898,13 +1898,13 @@ module.exports={colorize:require("./colorize"),colorNameToRgb:require("./colorNa
|
|
|
1898
1898
|
},{"./colorNameToRgb":503,"./colorize":504,"./cssColors":505,"./hexToRgb":506,"./hslToRgb":507,"./hsvToRgb":508,"./hueToColorComponent":509,"./rgbToHex":511,"./rgbToHsl":512,"./rgbToHsv":513}],511:[function(require,module,exports){
|
|
1899
1899
|
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;
|
|
1900
1900
|
|
|
1901
|
-
},{"../utils/flatten":
|
|
1901
|
+
},{"../utils/flatten":881}],512:[function(require,module,exports){
|
|
1902
1902
|
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;
|
|
1903
1903
|
|
|
1904
|
-
},{"../utils/flatten":
|
|
1904
|
+
},{"../utils/flatten":881}],513:[function(require,module,exports){
|
|
1905
1905
|
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;
|
|
1906
1906
|
|
|
1907
|
-
},{"../utils/flatten":
|
|
1907
|
+
},{"../utils/flatten":881}],514:[function(require,module,exports){
|
|
1908
1908
|
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;
|
|
1909
1909
|
|
|
1910
1910
|
},{}],515:[function(require,module,exports){
|
|
@@ -1959,9 +1959,9 @@ const applyTransforms=require("./applyTransforms"),toSides=s=>applyTransforms(s)
|
|
|
1959
1959
|
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;
|
|
1960
1960
|
|
|
1961
1961
|
},{"../../maths/vec2":685,"./toSides":530}],532:[function(require,module,exports){
|
|
1962
|
-
const mat4=require("../../maths/mat4"),
|
|
1962
|
+
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;
|
|
1963
1963
|
|
|
1964
|
-
},{"../../maths/mat4":639
|
|
1964
|
+
},{"../../maths/mat4":639}],533:[function(require,module,exports){
|
|
1965
1965
|
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;
|
|
1966
1966
|
|
|
1967
1967
|
},{"../../maths/mat4":639,"../poly3":575}],534:[function(require,module,exports){
|
|
@@ -1998,9 +1998,9 @@ const applyTransforms=require("./applyTransforms"),toPolygons=o=>applyTransforms
|
|
|
1998
1998
|
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;
|
|
1999
1999
|
|
|
2000
2000
|
},{"../poly3":575,"./toPolygons":543}],545:[function(require,module,exports){
|
|
2001
|
-
const mat4=require("../../maths/mat4"),
|
|
2001
|
+
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;
|
|
2002
2002
|
|
|
2003
|
-
},{"../../maths/mat4":639
|
|
2003
|
+
},{"../../maths/mat4":639}],546:[function(require,module,exports){
|
|
2004
2004
|
module.exports={geom2:require("./geom2"),geom3:require("./geom3"),path2:require("./path2"),poly2:require("./poly2"),poly3:require("./poly3")};
|
|
2005
2005
|
|
|
2006
2006
|
},{"./geom2":524,"./geom3":538,"./path2":559,"./poly2":569,"./poly3":575}],547:[function(require,module,exports){
|
|
@@ -2058,9 +2058,9 @@ const applyTransforms=require("./applyTransforms"),toPoints=o=>applyTransforms(o
|
|
|
2058
2058
|
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;
|
|
2059
2059
|
|
|
2060
2060
|
},{"../../maths/vec2":685,"./toPoints":563}],565:[function(require,module,exports){
|
|
2061
|
-
const mat4=require("../../maths/mat4"),
|
|
2061
|
+
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;
|
|
2062
2062
|
|
|
2063
|
-
},{"../../maths/mat4":639
|
|
2063
|
+
},{"../../maths/mat4":639}],566:[function(require,module,exports){
|
|
2064
2064
|
const measureArea=require("./measureArea"),flip=require("./flip"),arePointsInside=(e,t)=>{if(0===e.length)return 0;const n=t.vertices;return n.length<3?0:(measureArea(t)<0&&(t=flip(t)),e.reduce((e,t)=>e+isPointInside(t,n),0)===e.length?1:0)},isPointInsideOld=(e,t)=>{let n=0;const r=t.length,s=e[0],i=e[1];for(let o=0;o<t.length;o++){const l=t[o],u=t[(o+1)%r];s!==l[0]&&i!==l[1]&&s!==u[0]&&i!==u[1]&&(l[1]<=i?u[1]>i&&isLeft(l,u,e)>0&&n++:u[1]<=i&&isLeft(l,u,e)<0&&n--)}return 0===n?1:0},isPointInside=(e,t)=>{const n=t.length,r=e[0],s=e[1];let i=t[n-1],o=t[0],l=i[1]>s,u=0,f=0;for(let e=n+1;--e;){const e=o[1]>s;if(l!==e){const e=i[0]>r,t=o[0]>r;e&&t?u=!u:o[0]-(o[1]-s)*(i[0]-o[0])/(i[1]-o[1])>=r&&(u=!u)}l=e,i=o,o=t[++f]}return u},isLeft=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(n[0]-e[0])*(t[1]-e[1]);module.exports=arePointsInside;
|
|
2065
2065
|
|
|
2066
2066
|
},{"./flip":568,"./measureArea":570}],567:[function(require,module,exports){
|
|
@@ -2097,12 +2097,12 @@ const create=require("./create"),invert=e=>{const r=e.vertices.slice().reverse()
|
|
|
2097
2097
|
const isA=e=>!!(e&&"object"==typeof e&&"vertices"in e&&Array.isArray(e.vertices));module.exports=isA;
|
|
2098
2098
|
|
|
2099
2099
|
},{}],578:[function(require,module,exports){
|
|
2100
|
-
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()
|
|
2100
|
+
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;
|
|
2101
2101
|
|
|
2102
2102
|
},{"../../maths/plane":658,"../../maths/vec3":716}],579:[function(require,module,exports){
|
|
2103
|
-
const
|
|
2103
|
+
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;
|
|
2104
2104
|
|
|
2105
|
-
},{"
|
|
2105
|
+
},{"./plane":583}],580:[function(require,module,exports){
|
|
2106
2106
|
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;
|
|
2107
2107
|
|
|
2108
2108
|
},{"../../maths/vec3":716}],581:[function(require,module,exports){
|
|
@@ -2112,7 +2112,7 @@ const vec3=require("../../maths/vec3"),measureBoundingBox=require("./measureBoun
|
|
|
2112
2112
|
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;
|
|
2113
2113
|
|
|
2114
2114
|
},{"../../maths/vec3":716}],583:[function(require,module,exports){
|
|
2115
|
-
const mplane=require("../../maths/plane/"),plane=e=>
|
|
2115
|
+
const mplane=require("../../maths/plane/"),plane=e=>(e.plane||(e.plane=mplane.fromPoints(mplane.create(),...e.vertices)),e.plane);module.exports=plane;
|
|
2116
2116
|
|
|
2117
2117
|
},{"../../maths/plane/":658}],584:[function(require,module,exports){
|
|
2118
2118
|
const toPoints=o=>o.vertices;module.exports=toPoints;
|
|
@@ -2126,7 +2126,7 @@ const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),create=r
|
|
|
2126
2126
|
},{"../../maths/mat4":639,"../../maths/vec3":716,"./create":572}],587:[function(require,module,exports){
|
|
2127
2127
|
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")};
|
|
2128
2128
|
|
|
2129
|
-
},{"./colors":510,"./curves":518,"./geometries":546,"./maths":590,"./measurements":746,"./operations/booleans":760,"./operations/expansions":791,"./operations/extrusions":804,"./operations/hulls":825,"./operations/modifiers":836,"./operations/transforms":845,"./primitives":861,"./text":
|
|
2129
|
+
},{"./colors":510,"./curves":518,"./geometries":546,"./maths":590,"./measurements":746,"./operations/booleans":760,"./operations/expansions":791,"./operations/extrusions":804,"./operations/hulls":825,"./operations/modifiers":836,"./operations/transforms":845,"./primitives":861,"./text":875,"./utils":883}],588:[function(require,module,exports){
|
|
2130
2130
|
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;
|
|
2131
2131
|
|
|
2132
2132
|
},{"./mat4":639,"./vec2":685,"./vec3":716}],589:[function(require,module,exports){
|
|
@@ -2331,7 +2331,7 @@ const flip=(l,o)=>(l[0]=-o[0],l[1]=-o[1],l[2]=-o[2],l[3]=-o[3],l);module.exports
|
|
|
2331
2331
|
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;
|
|
2332
2332
|
|
|
2333
2333
|
},{"../vec3":716}],656:[function(require,module,exports){
|
|
2334
|
-
const vec3=require("../vec3"),fromPoints=(e
|
|
2334
|
+
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;
|
|
2335
2335
|
|
|
2336
2336
|
},{"../vec3":716}],657:[function(require,module,exports){
|
|
2337
2337
|
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;
|
|
@@ -2606,40 +2606,40 @@ module.exports={measureAggregateArea:require("./measureAggregateArea"),measureAg
|
|
|
2606
2606
|
},{"./measureAggregateArea":747,"./measureAggregateBoundingBox":748,"./measureAggregateEpsilon":749,"./measureAggregateVolume":750,"./measureArea":751,"./measureBoundingBox":752,"./measureBoundingSphere":753,"./measureCenter":754,"./measureCenterOfMass":755,"./measureDimensions":756,"./measureEpsilon":757,"./measureVolume":758}],747:[function(require,module,exports){
|
|
2607
2607
|
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;
|
|
2608
2608
|
|
|
2609
|
-
},{"../utils/flatten":
|
|
2609
|
+
},{"../utils/flatten":881,"./measureArea":751}],748:[function(require,module,exports){
|
|
2610
2610
|
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;
|
|
2611
2611
|
|
|
2612
|
-
},{"../maths/vec3/max":719,"../maths/vec3/min":720,"../utils/flatten":
|
|
2612
|
+
},{"../maths/vec3/max":719,"../maths/vec3/min":720,"../utils/flatten":881,"./measureBoundingBox":752}],749:[function(require,module,exports){
|
|
2613
2613
|
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;
|
|
2614
2614
|
|
|
2615
|
-
},{"../geometries":546,"../utils/flatten":
|
|
2615
|
+
},{"../geometries":546,"../utils/flatten":881,"./calculateEpsilonFromBounds":745,"./measureAggregateBoundingBox":748}],750:[function(require,module,exports){
|
|
2616
2616
|
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;
|
|
2617
2617
|
|
|
2618
|
-
},{"../utils/flatten":
|
|
2618
|
+
},{"../utils/flatten":881,"./measureVolume":758}],751:[function(require,module,exports){
|
|
2619
2619
|
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;
|
|
2620
2620
|
|
|
2621
|
-
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../utils/flatten":
|
|
2622
|
-
const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),mat4=require("../maths/mat4"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureBoundingBoxOfPath2Points=e=>{let o,n=cache.get(e);if(n)return n;o=0===e.length?vec2.create():vec2.clone(e[0]);const t=vec2.clone(o);return e.forEach(e=>{vec2.min(o,o,e),vec2.max(t,t,e)}),n=[[o[0],o[1],0],[t[0],t[1],0]],cache.set(e,n),n},measureBoundingBoxOfPath2=e=>{let o=cache.get(e);return o||(o=mat4.isOnlyTransformScale(e.transforms)?transformBoundingBox(measureBoundingBoxOfPath2Points(e.points),e.transforms):measureBoundingBoxOfPath2Points(path2.toPoints(e)),cache.set(e,o),o)},measureBoundingBoxOfGeom2Points=({points:e,sides:o})=>{const n=e||o;let t,r,s=cache.get(n);return s||(e?(t=0===e.length?vec2.create():vec2.clone(e[0]),r=vec2.clone(t),e.forEach(e=>{vec2.min(t,t,e),vec2.max(r,r,e)})):(t=0===o.length?vec2.create():vec2.clone(o[0][0]),r=vec2.clone(t),o.forEach(e=>{vec2.min(t,t,e[0]),vec2.max(r,r,e[0])})),s=[[t[0],t[1],0],[r[0],r[1],0]],cache.set(n,s),s)},measureBoundingBoxOfGeom2=e=>{let o=cache.get(e);return o||(o=mat4.isOnlyTransformScale(e.transforms)?transformBoundingBox(measureBoundingBoxOfGeom2Points(e),e.transforms):measureBoundingBoxOfGeom2Points({points:geom2.toPoints(e)}),cache.set(e,o),o)},measureBoundingBoxOfGeom3Polygons=e=>{let o=cache.get(e);if(o)return o;const n=vec3.create();if(e.length>0){const o=poly3.toPoints(e[0]);vec3.copy(n,o[0])}const t=vec3.clone(n);return e.forEach(e=>{poly3.toPoints(e).forEach(e=>{vec3.min(n,n,e),vec3.max(t,t,e)})}),o=[[n[0],n[1],n[2]],[t[0],t[1],t[2]]],cache.set(e,o),o},measureBoundingBoxOfGeom3=e=>{let o=cache.get(e);return o||(o=mat4.isOnlyTransformScale(e.transforms)?transformBoundingBox(measureBoundingBoxOfGeom3Polygons(e.polygons),e.transforms):measureBoundingBoxOfGeom3Polygons(geom3.toPolygons(e)),cache.set(e,o),o)},fixBound=(e,o,n)=>{if(o[e]>n[e]){const t=o[e];o[e]=n[e],n[e]=t}},transformBoundingBox=(e,o)=>
|
|
2621
|
+
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../utils/flatten":881}],752:[function(require,module,exports){
|
|
2622
|
+
const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),mat4=require("../maths/mat4"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureBoundingBoxOfPath2Points=e=>{let o,n=cache.get(e);if(n)return n;o=0===e.length?vec2.create():vec2.clone(e[0]);const t=vec2.clone(o);return e.forEach(e=>{vec2.min(o,o,e),vec2.max(t,t,e)}),n=[[o[0],o[1],0],[t[0],t[1],0]],cache.set(e,n),n},measureBoundingBoxOfPath2=e=>{let o=cache.get(e);return o||(o=mat4.isOnlyTransformScale(e.transforms)?transformBoundingBox(measureBoundingBoxOfPath2Points(e.points),e.transforms):measureBoundingBoxOfPath2Points(path2.toPoints(e)),cache.set(e,o),o)},measureBoundingBoxOfGeom2Points=({points:e,sides:o})=>{const n=e||o;let t,r,s=cache.get(n);return s||(e?(t=0===e.length?vec2.create():vec2.clone(e[0]),r=vec2.clone(t),e.forEach(e=>{vec2.min(t,t,e),vec2.max(r,r,e)})):(t=0===o.length?vec2.create():vec2.clone(o[0][0]),r=vec2.clone(t),o.forEach(e=>{vec2.min(t,t,e[0]),vec2.max(r,r,e[0])})),s=[[t[0],t[1],0],[r[0],r[1],0]],cache.set(n,s),s)},measureBoundingBoxOfGeom2=e=>{let o=cache.get(e);return o||(o=mat4.isOnlyTransformScale(e.transforms)?transformBoundingBox(measureBoundingBoxOfGeom2Points(e),e.transforms):measureBoundingBoxOfGeom2Points({points:geom2.toPoints(e)}),cache.set(e,o),o)},measureBoundingBoxOfGeom3Polygons=e=>{let o=cache.get(e);if(o)return o;const n=vec3.create();if(e.length>0){const o=poly3.toPoints(e[0]);vec3.copy(n,o[0])}const t=vec3.clone(n);return e.forEach(e=>{poly3.toPoints(e).forEach(e=>{vec3.min(n,n,e),vec3.max(t,t,e)})}),o=[[n[0],n[1],n[2]],[t[0],t[1],t[2]]],cache.set(e,o),o},measureBoundingBoxOfGeom3=e=>{let o=cache.get(e);return o||(o=mat4.isOnlyTransformScale(e.transforms)?transformBoundingBox(measureBoundingBoxOfGeom3Polygons(e.polygons),e.transforms):measureBoundingBoxOfGeom3Polygons(geom3.toPolygons(e)),cache.set(e,o),o)},fixBound=(e,o,n)=>{if(o[e]>n[e]){const t=o[e];o[e]=n[e],n[e]=t}},transformBoundingBox=(e,o)=>(mat4.isIdentity(o)||(vec3.transform(e[0],e[0],o),vec3.transform(e[1],e[1],o),fixBound(0,...e),fixBound(1,...e),fixBound(2,...e)),e),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;
|
|
2623
2623
|
|
|
2624
|
-
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../maths/mat4":639,"../maths/vec2":685,"../maths/vec3":716,"../utils/flatten":
|
|
2624
|
+
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../maths/mat4":639,"../maths/vec2":685,"../maths/vec3":716,"../utils/flatten":881}],753:[function(require,module,exports){
|
|
2625
2625
|
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;
|
|
2626
2626
|
|
|
2627
|
-
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../maths/vec2":685,"../maths/vec3":716,"../utils/flatten":
|
|
2627
|
+
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../maths/vec2":685,"../maths/vec3":716,"../utils/flatten":881}],754:[function(require,module,exports){
|
|
2628
2628
|
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;
|
|
2629
2629
|
|
|
2630
|
-
},{"../utils/flatten":
|
|
2631
|
-
const flatten=require("../utils/flatten"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),
|
|
2630
|
+
},{"../utils/flatten":881,"./measureBoundingBox":752}],755:[function(require,module,exports){
|
|
2631
|
+
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;
|
|
2632
2632
|
|
|
2633
|
-
},{"../geometries/geom2":524,"../geometries/geom3":538,"../
|
|
2633
|
+
},{"../geometries/geom2":524,"../geometries/geom3":538,"../maths/vec3":716,"../utils/flatten":881}],756:[function(require,module,exports){
|
|
2634
2634
|
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;
|
|
2635
2635
|
|
|
2636
|
-
},{"../utils/flatten":
|
|
2636
|
+
},{"../utils/flatten":881,"./measureBoundingBox":752}],757:[function(require,module,exports){
|
|
2637
2637
|
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;
|
|
2638
2638
|
|
|
2639
|
-
},{"../geometries":546,"../utils/flatten":
|
|
2639
|
+
},{"../geometries":546,"../utils/flatten":881,"./calculateEpsilonFromBounds":745,"./measureBoundingBox":752}],758:[function(require,module,exports){
|
|
2640
2640
|
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;
|
|
2641
2641
|
|
|
2642
|
-
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../utils/flatten":
|
|
2642
|
+
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559,"../geometries/poly3":575,"../utils/flatten":881}],759:[function(require,module,exports){
|
|
2643
2643
|
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;
|
|
2644
2644
|
|
|
2645
2645
|
},{"../../geometries/geom2":524,"../../maths/vec2":685}],760:[function(require,module,exports){
|
|
@@ -2648,13 +2648,13 @@ module.exports={intersect:require("./intersect"),scission:require("./scission"),
|
|
|
2648
2648
|
},{"./intersect":761,"./scission":768,"./subtract":770,"./union":781}],761:[function(require,module,exports){
|
|
2649
2649
|
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;
|
|
2650
2650
|
|
|
2651
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../utils/areAllShapesTheSameType":
|
|
2651
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../utils/areAllShapesTheSameType":879,"../../utils/flatten":881,"./intersectGeom2":762,"./intersectGeom3":763}],762:[function(require,module,exports){
|
|
2652
2652
|
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;
|
|
2653
2653
|
|
|
2654
|
-
},{"../../geometries/geom3":538,"../../measurements/measureEpsilon":757,"../../utils/flatten":
|
|
2654
|
+
},{"../../geometries/geom3":538,"../../measurements/measureEpsilon":757,"../../utils/flatten":881,"./fromFakePolygons":759,"./intersectGeom3":763,"./to3DWalls":774}],763:[function(require,module,exports){
|
|
2655
2655
|
const flatten=require("../../utils/flatten"),retessellate=require("./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;
|
|
2656
2656
|
|
|
2657
|
-
},{"../../utils/flatten":
|
|
2657
|
+
},{"../../utils/flatten":881,"./intersectGeom3Sub":764,"./retessellate":767}],764:[function(require,module,exports){
|
|
2658
2658
|
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;
|
|
2659
2659
|
|
|
2660
2660
|
},{"../../geometries/geom3":538,"./mayOverlap":765,"./trees":778}],765:[function(require,module,exports){
|
|
@@ -2663,25 +2663,25 @@ const{EPS:EPS}=require("../../maths/constants"),measureBoundingBox=require("../.
|
|
|
2663
2663
|
},{"../../maths/constants":589,"../../measurements/measureBoundingBox":752}],766:[function(require,module,exports){
|
|
2664
2664
|
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={},f={},p={},h=1/EPS*10;for(let e=0;e<o;e++){const o=t[e];let n=[],c=o.vertices.length,g=-1;if(c>0){let t,i;for(let r=0;r<c;r++){let s=l.to2D(o.vertices[r]);const c=Math.floor(s[1]*h);let a;c in p?a=p[c]:c+1 in p?a=p[c+1]:c-1 in p?a=p[c-1]:(a=s[1],p[c]=s[1]),s=vec2.fromValues(s[0],a),n.push(s);const u=s[1];(0===r||u<t)&&(t=u,g=r),(0===r||u>i)&&(i=u),u in f||(f[u]={}),f[u][e]=!0}t>=i?(n=[],c=0,g=-1):(t in s||(s[t]=[]),s[t].push(e))}n.reverse(),g=c-g-1,i.push(n),r.push(g)}const c=[];for(const t in f)c.push(t);c.sort(fnNumberSort);let g=[],a=[];for(let t=0;t<c.length;t++){const o=[],p=c[t],h=Number(p),u=f[p];for(let t=0;t<g.length;++t){const e=g[t],o=e.polygonindex;if(u[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]!==h)break;r=t}let f=s-1;if(f<0&&(f=l-1),n[f][1]===h&&(s=f),r!==e.leftvertexindex&&r===s)g.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 m;if(t>=c.length-1)g=[],m=null;else{const e=.5*(h+(m=Number(c[t+1]))),o=s[p];for(const t in o){const n=o[t],l=i[n],s=l.length,f=r[n];let p=f;for(;;){let t=p+1;if(t>=s&&(t=0),l[t][1]!==h)break;if(t===f)break;p=t}let c=f;for(;;){let t=c-1;if(t<0&&(t=s-1),l[t][1]!==h)break;if(t===p)break;c=t}let a=p+1;a>=s&&(a=0);let u=c-1;u<0&&(u=s-1);const m={polygonindex:n,leftvertexindex:p,rightvertexindex:c,topleft:l[p],topright:l[c],bottomleft:l[a],bottomright:l[u]};insertSorted(g,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 g){const e=g[t];let n=interpolateBetween2DPointsForY(e.topleft,e.bottomleft,h);const l=vec2.fromValues(n,h);n=interpolateBetween2DPointsForY(e.topright,e.bottomright,h);const i=vec2.fromValues(n,h);n=interpolateBetween2DPointsForY(e.topleft,e.bottomleft,m);const r=vec2.fromValues(n,m);n=interpolateBetween2DPointsForY(e.topright,e.bottomright,m);const s=vec2.fromValues(n,m),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={},i={};for(let e=0;e<o.length;e++){const n=o[e];for(let e=0;e<a.length;e++)if(!i[e]){const o=a[e];if(vec2.distance(o.bottomleft,n.topleft)<EPS&&vec2.distance(o.bottomright,n.topright)<EPS){i[e]=!0;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],c=Math.abs(s)<EPS,g=Math.abs(h)<EPS,a=g||h>=0;(c||s>=0)&&a&&(n.outpolygon=o.outpolygon,n.leftlinecontinues=c,n.rightlinecontinues=g,t[e]=!0);break}}}for(let o=0;o<a.length;o++)if(!t[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;
|
|
2665
2665
|
|
|
2666
|
-
},{"../../geometries/poly3":575,"../../maths/OrthoNormalBasis":588,"../../maths/constants":589,"../../maths/line2":600,"../../maths/utils/interpolateBetween2DPointsForY":665,"../../maths/vec2":685,"../../utils":
|
|
2666
|
+
},{"../../geometries/poly3":575,"../../maths/OrthoNormalBasis":588,"../../maths/constants":589,"../../maths/line2":600,"../../maths/utils/interpolateBetween2DPointsForY":665,"../../maths/vec2":685,"../../utils":883}],767:[function(require,module,exports){
|
|
2667
2667
|
const geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),reTesselateCoplanarPolygons=require("./reTesselateCoplanarPolygons"),NEPS=1e-13,aboutEqualNormals=(e,o)=>Math.abs(e[0]-o[0])<=NEPS&&Math.abs(e[1]-o[1])<=NEPS&&Math.abs(e[2]-o[2])<=NEPS,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),a=[];o.forEach(e=>{const o=a.find(o=>coplanar(o[0],poly3.plane(e)));if(o){o[1].push(e)}else a.push([poly3.plane(e),[e]])});let s=[];a.forEach(e=>{const o=e[1],a=reTesselateCoplanarPolygons(o);s=s.concat(a)});const l=geom3.create(s);return l.isRetesselated=!0,l};module.exports=retessellate;
|
|
2668
2668
|
|
|
2669
2669
|
},{"../../geometries/geom3":538,"../../geometries/poly3":575,"./reTesselateCoplanarPolygons":766}],768:[function(require,module,exports){
|
|
2670
2670
|
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;
|
|
2671
2671
|
|
|
2672
|
-
},{"../../geometries/geom3":538,"../../utils/flatten":
|
|
2672
|
+
},{"../../geometries/geom3":538,"../../utils/flatten":881,"./scissionGeom3":769}],769:[function(require,module,exports){
|
|
2673
2673
|
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;
|
|
2674
2674
|
|
|
2675
2675
|
},{"../../geometries/geom3":538,"../../maths/vec3":716,"../../measurements/measureEpsilon":757}],770:[function(require,module,exports){
|
|
2676
2676
|
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;
|
|
2677
2677
|
|
|
2678
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../utils/areAllShapesTheSameType":
|
|
2678
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../utils/areAllShapesTheSameType":879,"../../utils/flatten":881,"./subtractGeom2":771,"./subtractGeom3":772}],771:[function(require,module,exports){
|
|
2679
2679
|
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;
|
|
2680
2680
|
|
|
2681
|
-
},{"../../geometries/geom3":538,"../../measurements/measureEpsilon":757,"../../utils/flatten":
|
|
2681
|
+
},{"../../geometries/geom3":538,"../../measurements/measureEpsilon":757,"../../utils/flatten":881,"./fromFakePolygons":759,"./subtractGeom3":772,"./to3DWalls":774}],772:[function(require,module,exports){
|
|
2682
2682
|
const flatten=require("../../utils/flatten"),retessellate=require("./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;
|
|
2683
2683
|
|
|
2684
|
-
},{"../../utils/flatten":
|
|
2684
|
+
},{"../../utils/flatten":881,"./retessellate":767,"./subtractGeom3Sub":773}],773:[function(require,module,exports){
|
|
2685
2685
|
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;
|
|
2686
2686
|
|
|
2687
2687
|
},{"../../geometries/geom3":538,"./mayOverlap":765,"./trees":778}],774:[function(require,module,exports){
|
|
@@ -2708,19 +2708,19 @@ const{EPS:EPS}=require("../../../maths/constants"),plane=require("../../../maths
|
|
|
2708
2708
|
},{"../../../geometries/poly3":575,"../../../maths/constants":589,"../../../maths/plane":658,"../../../maths/vec3":716,"./splitLineSegmentByPlane":779}],781:[function(require,module,exports){
|
|
2709
2709
|
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;
|
|
2710
2710
|
|
|
2711
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../utils/areAllShapesTheSameType":
|
|
2711
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../utils/areAllShapesTheSameType":879,"../../utils/flatten":881,"./unionGeom2":782,"./unionGeom3":783}],782:[function(require,module,exports){
|
|
2712
2712
|
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;
|
|
2713
2713
|
|
|
2714
|
-
},{"../../geometries/geom3":538,"../../measurements/measureEpsilon":757,"../../utils/flatten":
|
|
2714
|
+
},{"../../geometries/geom3":538,"../../measurements/measureEpsilon":757,"../../utils/flatten":881,"./fromFakePolygons":759,"./to3DWalls":774,"./unionGeom3":783}],783:[function(require,module,exports){
|
|
2715
2715
|
const flatten=require("../../utils/flatten"),retessellate=require("./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;
|
|
2716
2716
|
|
|
2717
|
-
},{"../../utils/flatten":
|
|
2717
|
+
},{"../../utils/flatten":881,"./retessellate":767,"./unionGeom3Sub":784}],784:[function(require,module,exports){
|
|
2718
2718
|
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;
|
|
2719
2719
|
|
|
2720
2720
|
},{"../../geometries/geom3":538,"./mayOverlap":765,"./trees":778}],785:[function(require,module,exports){
|
|
2721
2721
|
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;
|
|
2722
2722
|
|
|
2723
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../utils/flatten":
|
|
2723
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../utils/flatten":881,"./expandGeom2":786,"./expandGeom3":787,"./expandPath2":788}],786:[function(require,module,exports){
|
|
2724
2724
|
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;
|
|
2725
2725
|
|
|
2726
2726
|
},{"../../geometries/geom2":524,"./offsetFromPoints":793}],787:[function(require,module,exports){
|
|
@@ -2732,7 +2732,7 @@ const area=require("../../maths/utils/area"),vec2=require("../../maths/vec2"),ge
|
|
|
2732
2732
|
},{"../../geometries/geom2":524,"../../geometries/path2":559,"../../maths/utils/area":663,"../../maths/vec2":685,"./offsetFromPoints":793}],789:[function(require,module,exports){
|
|
2733
2733
|
const{EPS:EPS}=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("../booleans/retessellate"),unionGeom3Sub=require("../booleans/unionGeom3Sub"),extrudePolygon=require("./extrudePolygon"),mapPlaneToVertex=(e,t,o)=>{const n=e.findIndex(e=>vec3.equals(e[0],t));if(n<0){const n=[t,[o]];return e.push(n),e.length}return e[n][1].push(o),n},mapPlaneToEdge=(e,t,o)=>{const n=e.findIndex(e=>vec3.equals(e[0],t[0])&&vec3.equals(e[1],t[1])||vec3.equals(e[0],t[1])&&vec3.equals(e[1],t[0]));if(n<0){const n=[t,[o]];return e.push(n),e.length}return e[n][1].push(o),n},addUniqueAngle=(e,t)=>{const o=e.findIndex(e=>e===t);return o<0?(e.push(t),e.length):o},expandShell=(e,t)=>{const{delta:o,segments:n}=Object.assign({},{delta:1,segments:12},e);let s=geom3.create();const r=[],c=[],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 h=r[0],m=vec3.cross(vec3.create(),h,i);let v=[];for(let e=0;e<n;e++)addUniqueAngle(v,e*Math.PI*2/n);for(let e=0,t=r.length;e<t;e++){const t=r[e],o=vec3.dot(m,t),n=vec3.dot(h,t);let s=Math.atan2(o,n);s<0&&(s+=2*Math.PI),addUniqueAngle(v,s),(s=Math.atan2(-o,-n))<0&&(s+=2*Math.PI),addUniqueAngle(v,s)}const d=(v=v.sort(fnNumberSort)).length;let p,g;const f=[],q=[],P=[];for(let e=-1;e<d;e++){const t=v[e<0?e+d:e],n=Math.sin(t),s=Math.cos(t);vec3.scale(a,h,s*o),vec3.scale(l,m,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,p)<EPS&&(y=!0),!y){if(e>=0){f.push(r),q.push(i);const e=[g,i,r,p],t=poly3.fromPoints(e);P.push(t)}p=r,g=i}}q.reverse(),P.push(poly3.fromPoints(f)),P.push(poly3.fromPoints(q));const y=geom3.create(P);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 h=vec3.cross(a,c,u);vec3.normalize(h,h);const m=vec3.cross(l,h,c),v=sphere({center:[t[0],t[1],t[2]],radius:o,segments:n,axes:[c,h,m]});s=unionGeom3Sub(s,v)}),retessellate(s)};module.exports=expandShell;
|
|
2734
2734
|
|
|
2735
|
-
},{"../../geometries/geom3":538,"../../geometries/poly3":575,"../../maths/constants":589,"../../maths/mat4":639,"../../maths/vec3":716,"../../primitives/sphere":869,"../../utils/fnNumberSort":
|
|
2735
|
+
},{"../../geometries/geom3":538,"../../geometries/poly3":575,"../../maths/constants":589,"../../maths/mat4":639,"../../maths/vec3":716,"../../primitives/sphere":869,"../../utils/fnNumberSort":882,"../booleans/retessellate":767,"../booleans/unionGeom3Sub":784,"./extrudePolygon":790}],790:[function(require,module,exports){
|
|
2736
2736
|
const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),extrudePolygon=(e,t)=>{vec3.dot(poly3.plane(t),e)>0&&(t=poly3.invert(t));const r=[t],o=poly3.transform(mat4.fromTranslation(mat4.create(),e),t),s=t.vertices.length;for(let e=0;e<s;e++){const i=[],m=e<s-1?e+1:0;i.push(t.vertices[e]),i.push(o.vertices[e]),i.push(o.vertices[m]),i.push(t.vertices[m]);const n=poly3.fromPoints(i);r.push(n)}return r.push(poly3.invert(o)),geom3.create(r)};module.exports=extrudePolygon;
|
|
2737
2737
|
|
|
2738
2738
|
},{"../../geometries/geom3":538,"../../geometries/poly3":575,"../../maths/mat4":639,"../../maths/vec3":716}],791:[function(require,module,exports){
|
|
@@ -2741,7 +2741,7 @@ module.exports={expand:require("./expand"),offset:require("./offset")};
|
|
|
2741
2741
|
},{"./expand":785,"./offset":792}],792:[function(require,module,exports){
|
|
2742
2742
|
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;
|
|
2743
2743
|
|
|
2744
|
-
},{"../../geometries/geom2":524,"../../geometries/path2":559,"../../utils/flatten":
|
|
2744
|
+
},{"../../geometries/geom2":524,"../../geometries/path2":559,"../../utils/flatten":881,"./offsetGeom2":794,"./offsetPath2":795}],793:[function(require,module,exports){
|
|
2745
2745
|
const{EPS:EPS}=require("../../maths/constants"),intersect=require("../../maths/utils/intersect"),line2=require("../../maths/line2"),vec2=require("../../maths/vec2"),area=require("../../maths/utils/area"),offsetFromPoints=(e,s)=>{let{delta:t,corners:c,closed:n,segments:a}=Object.assign({},{delta:1,corners:"edge",closed:!1,segments:16},e);if(Math.abs(t)<EPS)return s;let l=e.closed?area(s):1;0===l&&(l=1);const r=l>0&&t>=0||l<0&&t<0;t=Math.abs(t);let i=null;const o=[],u=[],f=vec2.create(),v=s.length;for(let e=0;e<v;e++){const c=(e+1)%v,a=s[e],l=s[c];r?vec2.subtract(f,a,l):vec2.subtract(f,l,a),vec2.normal(f,f),vec2.normalize(f,f),vec2.scale(f,f,t);const h=vec2.add(vec2.create(),a,f),d=vec2.add(vec2.create(),l,f),m=[h,d];if(null!=i&&(n||!n&&0!==c)){const e=intersect(i[0],i[1],m[0],m[1]);e?(o.pop(),m[0]=e):u.push({c:a,s0:i,s1:m})}i=[h,d],(0!==c||n)&&(o.push(m[0]),o.push(m[1]))}if(n&&null!=i){const e=o[0],t=o[1],c=intersect(i[0],i[1],e,t);if(c)o[0]=c,o.pop();else{const c=s[0],n=[e,t];u.push({c:c,s0:i,s1:n})}}if("edge"===c){const e=line2.create(),s=line2.create();u.forEach(t=>{line2.fromPoints(e,t.s0[0],t.s0[1]),line2.fromPoints(s,t.s1[0],t.s1[1]);const c=line2.intersectPointOfLines(e,s);if(Number.isFinite(c[0])&&Number.isFinite(c[1])){const e=t.s0[1];let s=o.findIndex(s=>vec2.equals(e,s));s=(s+1)%o.length,o.splice(s,0,c)}else{const e=t.s1[0],s=o.findIndex(s=>vec2.equals(e,s));o.splice(s,1)}})}if("round"===c){let e=Math.floor(a/4);const s=vec2.create();u.forEach(c=>{let n=vec2.angle(vec2.subtract(s,c.s1[0],c.c));if(n-=vec2.angle(vec2.subtract(s,c.s0[1],c.c)),r&&n<0&&(n+=Math.PI)<0&&(n+=Math.PI),!r&&n>0&&(n-=Math.PI)>0&&(n-=Math.PI),0!==n){const l=n/(e=Math.floor(a*(Math.abs(n)/(2*Math.PI)))),r=vec2.angle(vec2.subtract(s,c.s0[1],c.c)),i=[];for(let s=1;s<e;s++){const e=r+l*s,n=vec2.fromAngleRadians(vec2.create(),e);vec2.scale(n,n,t),vec2.add(n,n,c.c),i.push(n)}if(i.length>0){const e=c.s0[1];let s=o.findIndex(s=>vec2.equals(e,s));s=(s+1)%o.length,o.splice(s,0,...i)}}else{const e=c.s1[0],s=o.findIndex(s=>vec2.equals(e,s));o.splice(s,1)}})}return o};module.exports=offsetFromPoints;
|
|
2746
2746
|
|
|
2747
2747
|
},{"../../maths/constants":589,"../../maths/line2":600,"../../maths/utils/area":663,"../../maths/utils/intersect":666,"../../maths/vec2":685}],794:[function(require,module,exports){
|
|
@@ -2756,13 +2756,13 @@ const mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),g
|
|
|
2756
2756
|
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/poly3":575,"../../maths/mat4":639,"./extrudeWalls":803,"./slice":812}],797:[function(require,module,exports){
|
|
2757
2757
|
const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeLinear=(e,...t)=>{const{height:r,twistAngle:n,twistSteps:i}=Object.assign({},{height:1,twistAngle:0,twistSteps:1},e);if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");e={offset:[0,0,r],twistAngle:n,twistSteps:i};const s=t.map(t=>geom2.isA(t)?extrudeLinearGeom2(e,t):t);return 1===s.length?s[0]:s};module.exports=extrudeLinear;
|
|
2758
2758
|
|
|
2759
|
-
},{"../../geometries/geom2":524,"../../utils/flatten":
|
|
2759
|
+
},{"../../geometries/geom2":524,"../../utils/flatten":881,"./extrudeLinearGeom2":798}],798:[function(require,module,exports){
|
|
2760
2760
|
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}=Object.assign({},{offset:[0,0,1],twistAngle:0,twistSteps:12},e);if(o<1)throw new Error("twistSteps must be 1 or more");0===s&&(o=1);const c=vec3.clone(r),i=geom2.toSides(t);if(0===i.length)throw new Error("the given geometry cannot be empty");const m=slice.fromSides(i);c[2]<0&&slice.reverse(m,m);const a=mat4.create();return extrudeFromSlices(e={numberOfSlices:o+1,capStart:!0,capEnd:!0,callback:(e,t,r)=>{const i=t/o*s,m=vec3.scale(vec3.create(),c,t/o);return mat4.multiply(a,mat4.fromZRotation(a,i),mat4.fromTranslation(mat4.create(),m)),slice.transform(a,r)}},m)};module.exports=extrudeGeom2;
|
|
2761
2761
|
|
|
2762
2762
|
},{"../../geometries/geom2":524,"../../maths/mat4":639,"../../maths/vec3":716,"./extrudeFromSlices":796,"./slice":812}],799:[function(require,module,exports){
|
|
2763
2763
|
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;
|
|
2764
2764
|
|
|
2765
|
-
},{"../../geometries/geom2":524,"../../geometries/path2":559,"../../utils/flatten":
|
|
2765
|
+
},{"../../geometries/geom2":524,"../../geometries/path2":559,"../../utils/flatten":881,"./extrudeRectangularGeom2":800,"./extrudeRectangularPath2":801}],800:[function(require,module,exports){
|
|
2766
2766
|
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;
|
|
2767
2767
|
|
|
2768
2768
|
},{"../../geometries/geom2":524,"../../geometries/path2":559,"../../maths/utils":664,"../expansions/expand":785,"./extrudeLinearGeom2":798}],801:[function(require,module,exports){
|
|
@@ -2780,7 +2780,7 @@ module.exports={extrudeFromSlices:require("./extrudeFromSlices"),extrudeLinear:r
|
|
|
2780
2780
|
},{"./extrudeFromSlices":796,"./extrudeLinear":797,"./extrudeRectangular":799,"./extrudeRotate":802,"./project":805,"./slice":812}],805:[function(require,module,exports){
|
|
2781
2781
|
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"),unionGeom3=require("../booleans/unionGeom3"),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),n=t*t*Math.sqrt(3)/4;if(0===t)return geom2.create();const a=geom3.toPolygons(o),i=[];for(let e=0;e<a.length;e++){const o=a[e].vertices.map(e=>plane.projectionOfPoint(r,e)),t=poly3.create(o);if(poly3.measureArea(t)<n)continue;const s=poly3.plane(t);aboutEqualNormals(r,s)&&i.push(t)}let s=geom3.create(i);if(s=unionGeom3(s,s),!aboutEqualNormals(r,[0,0,1])){const e=mat4.fromVectorRotation(mat4.create(),r,[0,0,1]);s=geom3.transform(e,s)}const m=geom3.toPolygons(s).map(e=>geom2.fromPoints(poly3.toPoints(e)));return s=unionGeom2(m)},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 n=o.map(o=>geom3.isA(o)?projectGeom3(e,o):o);return 1===n.length?n[0]:n};module.exports=project;
|
|
2782
2782
|
|
|
2783
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/poly3":575,"../../maths/mat4":639,"../../maths/plane":658,"../../maths/utils/aboutEqualNormals":662,"../../measurements/measureEpsilon":757,"../../utils/flatten":
|
|
2783
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/poly3":575,"../../maths/mat4":639,"../../maths/plane":658,"../../maths/utils/aboutEqualNormals":662,"../../measurements/measureEpsilon":757,"../../utils/flatten":881,"../booleans/unionGeom2":782,"../booleans/unionGeom3":783}],806:[function(require,module,exports){
|
|
2784
2784
|
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=>{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;
|
|
2785
2785
|
|
|
2786
2786
|
},{"../../../maths/plane":658,"../../../maths/vec3":716}],807:[function(require,module,exports){
|
|
@@ -2822,19 +2822,19 @@ const vec3=require("../../../maths/vec3"),create=require("./create"),transform=(
|
|
|
2822
2822
|
},{"../../../maths/vec3":716,"./create":808}],819:[function(require,module,exports){
|
|
2823
2823
|
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;
|
|
2824
2824
|
|
|
2825
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../utils/areAllShapesTheSameType":
|
|
2825
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../utils/areAllShapesTheSameType":879,"../../utils/flatten":881,"./hullGeom2":821,"./hullGeom3":822,"./hullPath2":823}],820:[function(require,module,exports){
|
|
2826
2826
|
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;
|
|
2827
2827
|
|
|
2828
|
-
},{"../../utils/flatten":
|
|
2828
|
+
},{"../../utils/flatten":881,"../booleans/union":781,"./hull":819}],821:[function(require,module,exports){
|
|
2829
2829
|
const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),hullPoints2=require("./hullPoints2"),hullGeom2=(...e)=>{e=flatten(e);const t=[],o=new Map;for(let l=0;l<e.length;l++){const n=geom2.toSides(e[l]);for(let e=0;e<n.length;e++){const l=n[e][0],s=`${l[0]},${l[1]}`;o.has(s)||(t.push(l),o.set(s,!0))}}o.clear();const l=hullPoints2(t);return l.length<3?geom2.create():geom2.fromPoints(l)};module.exports=hullGeom2;
|
|
2830
2830
|
|
|
2831
|
-
},{"../../geometries/geom2":524,"../../utils/flatten":
|
|
2831
|
+
},{"../../geometries/geom2":524,"../../utils/flatten":881,"./hullPoints2":824}],822:[function(require,module,exports){
|
|
2832
2832
|
const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),quickhull=require("./quickhull"),hullGeom3=(...e)=>{if(1===(e=flatten(e)).length)return e[0];const t=[],l=new Map;for(let o=0;o<e.length;++o){const r=geom3.toPolygons(e[o]);for(let e=0;e<r.length;++e){const o=r[e].vertices;for(let e=0;e<o.length;++e){const r=`${o[e]}`;l.has(r)||(t.push(o[e]),l.set(r,!0))}}}l.clear();const o=quickhull(t,{skipTriangulation:!0}).map(e=>{const l=e.map(e=>t[e]);return poly3.create(l)});return geom3.create(o)};module.exports=hullGeom3;
|
|
2833
2833
|
|
|
2834
|
-
},{"../../geometries/geom3":538,"../../geometries/poly3":575,"../../utils/flatten":
|
|
2834
|
+
},{"../../geometries/geom3":538,"../../geometries/poly3":575,"../../utils/flatten":881,"./quickhull":832}],823:[function(require,module,exports){
|
|
2835
2835
|
const flatten=require("../../utils/flatten"),vec2=require("../../maths/vec2"),path2=require("../../geometries/path2"),hullPoints2=require("./hullPoints2"),hullPath2=(...t)=>{t=flatten(t);const e=[];t.forEach(t=>{path2.toPoints(t).forEach(t=>{e.findIndex(e=>vec2.equals(e,t))<0&&e.push(t)})});const l=hullPoints2(e);return path2.fromPoints({closed:!0},l)};module.exports=hullPath2;
|
|
2836
2836
|
|
|
2837
|
-
},{"../../geometries/path2":559,"../../maths/vec2":685,"../../utils/flatten":
|
|
2837
|
+
},{"../../geometries/path2":559,"../../maths/vec2":685,"../../utils/flatten":881,"./hullPoints2":824}],824:[function(require,module,exports){
|
|
2838
2838
|
const vec2=require("../../maths/vec2"),angleBetweenPoints=(e,t)=>Math.atan2(t[1]-e[1],t[0]-e[0]),compareIndex=(e,t)=>e.angle<t.angle?-1:e.angle>t.angle?1:e.distance<t.distance?-1:e.distance>t.distance?1:0,compute=e=>{if(e.length<3)return e;let t=0;e.forEach((n,r)=>{const a=e[t];n[1]===a[1]?n[0]<a[0]&&(t=r):n[1]<a[1]&&(t=r)});const n=[];let r=0,a=0;for(let l=0;l<e.length;l++)l!==t&&((r=angleBetweenPoints(e[t],e[l]))<0&&(r+=Math.PI),a=vec2.squaredDistance(e[t],e[l]),n.push({index:l,angle:r,distance:a}));n.sort((e,t)=>compareIndex(e,t));const l=new Array(e.length+1);let o=2;for(let r=0;r<e.length;r++)r!==t&&(l[o]=n[o-2].index,o++);l[0]=l[e.length],l[1]=t;const s=(t,n,r)=>(e[n][0]-e[t][0])*(e[r][1]-e[t][1])-(e[n][1]-e[t][1])*(e[r][0]-e[t][0]);let c,i=2;for(let t=3;t<=e.length;t++){for(;s(l[i-1],l[i],l[t])<Number.EPSILON;)i--;i++,c=l[t],l[t]=l[i],l[i]=c}const g=new Array(i);for(let e=0;e<i;e++)g[e]=l[e+1];return g},hullPoints2=e=>{const t=compute(e);let n=[];return Array.isArray(t)&&(n=t.map(t=>e[t])),n};module.exports=hullPoints2;
|
|
2839
2839
|
|
|
2840
2840
|
},{"../../maths/vec2":685}],825:[function(require,module,exports){
|
|
@@ -2870,7 +2870,7 @@ const vec3=require("../../maths/vec3"),line3=require("../../maths/line3"),poly3=
|
|
|
2870
2870
|
},{"../../geometries/poly3":575,"../../maths/line3":617,"../../maths/vec3":716}],835:[function(require,module,exports){
|
|
2871
2871
|
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"),repairTjunctions=require("./repairTjunctions"),generalizePath2=(e,r)=>r,generalizeGeom2=(e,r)=>r,generalizeGeom3=(e,r)=>{const{snap:n,simplify:i,triangulate:o,repair:t}=Object.assign({},{snap:!1,simplify:!1,triangulate:!1,repair:!1},e),s=measureEpsilon(r);let a=geom3.toPolygons(r);n&&(a=snapPolygons(s,a)),i&&(a=mergePolygons(s,a)),o&&(a=insertTjunctions(a),a=triangulatePolygons(s,a)),t&&(a=repairTjunctions(s,a));const g=Object.assign({},r);return g.polygons=a,g},generalize=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const n=r.map((r,n)=>{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;
|
|
2872
2872
|
|
|
2873
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../measurements/measureEpsilon":757,"../../utils/flatten":
|
|
2873
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../measurements/measureEpsilon":757,"../../utils/flatten":881,"./insertTjunctions":837,"./mergePolygons":838,"./repairTjunctions":839,"./snapPolygons":841,"./triangulatePolygons":842}],836:[function(require,module,exports){
|
|
2874
2874
|
module.exports={generalize:require("./generalize"),snap:require("./snap")};
|
|
2875
2875
|
|
|
2876
2876
|
},{"./generalize":835,"./snap":840}],837:[function(require,module,exports){
|
|
@@ -2885,7 +2885,7 @@ const{polygonsToEdges:polygonsToEdges,edgesToPolygons:edgesToPolygons,cullOpenEd
|
|
|
2885
2885
|
},{"./edges":834}],840:[function(require,module,exports){
|
|
2886
2886
|
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;
|
|
2887
2887
|
|
|
2888
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/vec2":685,"../../measurements/measureEpsilon":757,"../../utils/flatten":
|
|
2888
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/vec2":685,"../../measurements/measureEpsilon":757,"../../utils/flatten":881,"./snapPolygons":841}],841:[function(require,module,exports){
|
|
2889
2889
|
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;
|
|
2890
2890
|
|
|
2891
2891
|
},{"../../geometries/poly3":575,"../../maths/vec3":716}],842:[function(require,module,exports){
|
|
@@ -2894,28 +2894,28 @@ const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),t
|
|
|
2894
2894
|
},{"../../geometries/poly3":575,"../../maths/vec3":716}],843:[function(require,module,exports){
|
|
2895
2895
|
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;
|
|
2896
2896
|
|
|
2897
|
-
},{"../../measurements/measureAggregateBoundingBox":748,"../../utils/flatten":
|
|
2897
|
+
},{"../../measurements/measureAggregateBoundingBox":748,"../../utils/flatten":881,"../../utils/padArrayToLength":885,"./translate":850}],844:[function(require,module,exports){
|
|
2898
2898
|
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};
|
|
2899
2899
|
|
|
2900
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../measurements/measureBoundingBox":752,"../../utils/flatten":
|
|
2900
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../measurements/measureBoundingBox":752,"../../utils/flatten":881,"./translate":850}],845:[function(require,module,exports){
|
|
2901
2901
|
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};
|
|
2902
2902
|
|
|
2903
2903
|
},{"./align":843,"./center":844,"./mirror":846,"./rotate":847,"./scale":848,"./transform":849,"./translate":850}],846:[function(require,module,exports){
|
|
2904
2904
|
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};
|
|
2905
2905
|
|
|
2906
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/mat4":639,"../../maths/plane":658,"../../utils/flatten":
|
|
2906
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/mat4":639,"../../maths/plane":658,"../../utils/flatten":881}],847:[function(require,module,exports){
|
|
2907
2907
|
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};
|
|
2908
2908
|
|
|
2909
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/mat4":639,"../../utils/flatten":
|
|
2909
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/mat4":639,"../../utils/flatten":881}],848:[function(require,module,exports){
|
|
2910
2910
|
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};
|
|
2911
2911
|
|
|
2912
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/mat4":639,"../../utils/flatten":
|
|
2912
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/mat4":639,"../../utils/flatten":881}],849:[function(require,module,exports){
|
|
2913
2913
|
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;
|
|
2914
2914
|
|
|
2915
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../utils/flatten":
|
|
2915
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../utils/flatten":881}],850:[function(require,module,exports){
|
|
2916
2916
|
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};
|
|
2917
2917
|
|
|
2918
|
-
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/mat4":639,"../../utils/flatten":
|
|
2918
|
+
},{"../../geometries/geom2":524,"../../geometries/geom3":538,"../../geometries/path2":559,"../../maths/mat4":639,"../../utils/flatten":881}],851:[function(require,module,exports){
|
|
2919
2919
|
const{EPS:EPS}=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:2*Math.PI,makeTangent:!1,segments:32};let{center:t,radius:s,startAngle:a,endAngle:n,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(a,0))throw new Error("startAngle must be positive");if(!isGTE(n,0))throw new Error("endAngle must be positive");if(!isGTE(c,4))throw new Error("segments must be four or more");a%=2*Math.PI,n%=2*Math.PI;let i=2*Math.PI;a<n&&(i=n-a),a>n&&(i=n+(2*Math.PI-a));const m=Math.acos((s*s+s*s-EPS*EPS)/(2*s*s)),h=vec2.clone(t);let l;const u=[];if(i<m)l=vec2.fromAngleRadians(vec2.create(),a),vec2.scale(l,l,s),vec2.add(l,l,h),u.push(l);else{const e=Math.max(1,Math.floor(c*(i/(2*Math.PI))))+1;let r=.5*e/i;r>.25&&(r=.25);const t=o?e+2:e;for(let n=0;n<=t;n++){let t=n;o&&((t=(n-1)*(e-2*r)/e+r)<0&&(t=0),t>e&&(t=e));const c=a+t*(i/e);l=vec2.fromAngleRadians(vec2.create(),c),vec2.scale(l,l,s),vec2.add(l,l,h),u.push(l)}}return path2.fromPoints({close:!1},u)};module.exports=arc;
|
|
2920
2920
|
|
|
2921
2921
|
},{"../geometries/path2":559,"../maths/constants":589,"../maths/vec2":685,"./commonChecks":853}],852:[function(require,module,exports){
|
|
@@ -2946,9 +2946,9 @@ const vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=r
|
|
|
2946
2946
|
const mat4=require("../maths/mat4"),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=[],f=[];for(let e=0;e<r;e++)for(let t=0;t<r-e;t++){const l=e/r,u=(e+1)/r,h=t/(r-e),m=(t+1)/(r-e),p=r-e-1?t/(r-e-1):1,g=[];g[0]=i(i(o,s,h),n,l),g[1]=i(i(o,s,m),n,l),g[2]=i(i(o,s,p),n,u);for(let e=0;e<3;e++){const r=Math.sqrt(g[e][0]*g[e][0]+g[e][1]*g[e][1]+g[e][2]*g[e][2]);for(let t=0;t<3;t++)g[e][t]/=r}if(a.push(g[0],g[1],g[2]),f.push([c,c+1,c+2]),c+=3,t<r-e-1){const h=r-e-1?(t+1)/(r-e-1):1;g[0]=i(i(o,s,m),n,l),g[1]=i(i(o,s,h),n,u),g[2]=i(i(o,s,p),n,u);for(let e=0;e<3;e++){const r=Math.sqrt(g[e][0]*g[e][0]+g[e][1]*g[e][1]+g[e][2]*g[e][2]);for(let t=0;t<3;t++)g[e][t]/=r}a.push(g[0],g[1],g[2]),f.push([c,c+1,c+2]),c+=3}}return{points:a,triangles:f,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=[],f=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,f);c=c.concat(r.points),a=a.concat(r.triangles),f=r.offset}let l=polyhedron({points:c,faces:a,orientation:"inward"});return 1!==r&&(l=geom3.transform(mat4.fromScaling(mat4.create(),[r,r,r]),l)),l};module.exports=geodesicSphere;
|
|
2947
2947
|
|
|
2948
2948
|
},{"../geometries/geom3":538,"../maths/mat4":639,"./commonChecks":853,"./polyhedron":864}],861:[function(require,module,exports){
|
|
2949
|
-
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")};
|
|
2949
|
+
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")};
|
|
2950
2950
|
|
|
2951
|
-
},{"./arc":851,"./circle":852,"./cube":854,"./cuboid":855,"./cylinder":856,"./cylinderElliptic":857,"./ellipse":858,"./ellipsoid":859,"./geodesicSphere":860,"./line":862,"./polygon":863,"./polyhedron":864,"./rectangle":865,"./roundedCuboid":866,"./roundedCylinder":867,"./roundedRectangle":868,"./sphere":869,"./square":870,"./star":871,"./torus":872}],862:[function(require,module,exports){
|
|
2951
|
+
},{"./arc":851,"./circle":852,"./cube":854,"./cuboid":855,"./cylinder":856,"./cylinderElliptic":857,"./ellipse":858,"./ellipsoid":859,"./geodesicSphere":860,"./line":862,"./polygon":863,"./polyhedron":864,"./rectangle":865,"./roundedCuboid":866,"./roundedCylinder":867,"./roundedRectangle":868,"./sphere":869,"./square":870,"./star":871,"./torus":872,"./triangle":873}],862:[function(require,module,exports){
|
|
2952
2952
|
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;
|
|
2953
2953
|
|
|
2954
2954
|
},{"../geometries/path2":559}],863:[function(require,module,exports){
|
|
@@ -2982,69 +2982,72 @@ const vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isGT:i
|
|
|
2982
2982
|
const 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:2*Math.PI},{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;
|
|
2983
2983
|
|
|
2984
2984
|
},{"../operations/extrusions/extrudeRotate":802,"../operations/transforms/rotate":847,"../operations/transforms/translate":850,"./circle":852,"./commonChecks":853}],873:[function(require,module,exports){
|
|
2985
|
+
const vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),NEPS=1e-13,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;
|
|
2986
|
+
|
|
2987
|
+
},{"../geometries/geom2":524,"../maths/vec2":685,"./commonChecks":853}],874:[function(require,module,exports){
|
|
2985
2988
|
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]};
|
|
2986
2989
|
|
|
2987
|
-
},{}],
|
|
2990
|
+
},{}],875:[function(require,module,exports){
|
|
2988
2991
|
module.exports={vectorChar:require("./vectorChar"),vectorText:require("./vectorText")};
|
|
2989
2992
|
|
|
2990
|
-
},{"./vectorChar":
|
|
2993
|
+
},{"./vectorChar":876,"./vectorText":878}],876:[function(require,module,exports){
|
|
2991
2994
|
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;
|
|
2992
2995
|
|
|
2993
|
-
},{"./vectorParams":
|
|
2996
|
+
},{"./vectorParams":877}],877:[function(require,module,exports){
|
|
2994
2997
|
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;
|
|
2995
2998
|
|
|
2996
|
-
},{"./fonts/single-line/hershey/simplex.js":
|
|
2999
|
+
},{"./fonts/single-line/hershey/simplex.js":874}],878:[function(require,module,exports){
|
|
2997
3000
|
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]=[n,s],[m,x,u,d,v,w]=[],O={width:0,segments:[]};const p=[];let y=[],C=0;const L=l,P=()=>{p.push(O),C=Math.max(C,O.width),O={width:0,segments:[]}};for(m=0,x=r.length;m<x;m++)u=r[m],d=vectorChar({xOffset:l,yOffset:f,font:h,height:a,extrudeOffset:i},u),"\n"!==u?(v=d.width*g,O.width+=v,l+=v," "!==u&&(O.segments=O.segments.concat(d.segments))):(l=L,f-=d.height*c,P());for(O.segments.length&&P(),m=0,x=p.length;m<x;m++)O=p[m],C>O.width&&(w=C-O.width,"right"===o?O=translateLine({x:w},O):"center"===o&&(O=translateLine({x:w/2},O))),y=y.concat(O.segments);return y};module.exports=vectorText;
|
|
2998
3001
|
|
|
2999
|
-
},{"./vectorChar":
|
|
3002
|
+
},{"./vectorChar":876,"./vectorParams":877}],879:[function(require,module,exports){
|
|
3000
3003
|
const geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),areAllShapesTheSameType=e=>{let r;return e.forEach(e=>{let o=0;if(geom2.isA(e)&&(o=1),geom3.isA(e)&&(o=2),path2.isA(e)&&(o=3),r&&o!==r)return!1;r=o}),!0};module.exports=areAllShapesTheSameType;
|
|
3001
3004
|
|
|
3002
|
-
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559}],
|
|
3005
|
+
},{"../geometries/geom2":524,"../geometries/geom3":538,"../geometries/path2":559}],880:[function(require,module,exports){
|
|
3003
3006
|
const degToRad=d=>.017453292519943295*d;module.exports=degToRad;
|
|
3004
3007
|
|
|
3005
|
-
},{}],
|
|
3008
|
+
},{}],881:[function(require,module,exports){
|
|
3006
3009
|
const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten;
|
|
3007
3010
|
|
|
3008
|
-
},{}],
|
|
3011
|
+
},{}],882:[function(require,module,exports){
|
|
3009
3012
|
const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort;
|
|
3010
3013
|
|
|
3011
|
-
},{}],
|
|
3014
|
+
},{}],883:[function(require,module,exports){
|
|
3012
3015
|
module.exports={areAllShapesTheSameType:require("./areAllShapesTheSameType"),degToRad:require("./degToRad"),flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),insertSorted:require("./insertSorted"),radiusToSegments:require("./radiusToSegments"),radToDeg:require("./radToDeg")};
|
|
3013
3016
|
|
|
3014
|
-
},{"./areAllShapesTheSameType":
|
|
3017
|
+
},{"./areAllShapesTheSameType":879,"./degToRad":880,"./flatten":881,"./fnNumberSort":882,"./insertSorted":884,"./radToDeg":886,"./radiusToSegments":887}],884:[function(require,module,exports){
|
|
3015
3018
|
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;
|
|
3016
3019
|
|
|
3017
|
-
},{}],
|
|
3020
|
+
},{}],885:[function(require,module,exports){
|
|
3018
3021
|
const padArrayToLength=(r,e,o)=>{for(r=r.slice();r.length<o;)r.push(e);return r};module.exports=padArrayToLength;
|
|
3019
3022
|
|
|
3020
|
-
},{}],
|
|
3023
|
+
},{}],886:[function(require,module,exports){
|
|
3021
3024
|
const radToDeg=o=>57.29577951308232*o;module.exports=radToDeg;
|
|
3022
3025
|
|
|
3023
|
-
},{}],
|
|
3026
|
+
},{}],887:[function(require,module,exports){
|
|
3024
3027
|
const radiusToSegments=(t,e,a)=>{const s=e>0?2*t*Math.PI/e:0,o=a>0?2*Math.PI/a:0;return Math.ceil(Math.max(s,o,4))};module.exports=radiusToSegments;
|
|
3025
3028
|
|
|
3026
|
-
},{}],
|
|
3029
|
+
},{}],888:[function(require,module,exports){
|
|
3027
3030
|
const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten;
|
|
3028
3031
|
|
|
3029
|
-
},{}],
|
|
3032
|
+
},{}],889:[function(require,module,exports){
|
|
3030
3033
|
const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort;
|
|
3031
3034
|
|
|
3032
|
-
},{}],
|
|
3035
|
+
},{}],890:[function(require,module,exports){
|
|
3033
3036
|
const head=r=>{if(Array.isArray(r)&&0!==r.length)return r[0]};module.exports=head;
|
|
3034
3037
|
|
|
3035
|
-
},{}],
|
|
3038
|
+
},{}],891:[function(require,module,exports){
|
|
3036
3039
|
module.exports={flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),head:require("./head"),insertSorted:require("./insertSorted"),nth:require("./nth"),padToLength:require("./padToLength"),toArray:require("./toArray")};
|
|
3037
3040
|
|
|
3038
|
-
},{"./flatten":
|
|
3041
|
+
},{"./flatten":888,"./fnNumberSort":889,"./head":890,"./insertSorted":892,"./nth":893,"./padToLength":894,"./toArray":895}],892:[function(require,module,exports){
|
|
3039
3042
|
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;
|
|
3040
3043
|
|
|
3041
|
-
},{}],
|
|
3044
|
+
},{}],893:[function(require,module,exports){
|
|
3042
3045
|
const nth=(r,t)=>{if(Array.isArray(r)&&!(r.length<t))return r[t]};module.exports=nth;
|
|
3043
3046
|
|
|
3044
|
-
},{}],
|
|
3047
|
+
},{}],894:[function(require,module,exports){
|
|
3045
3048
|
const padToLength=(e,o,t)=>{for(e=e.slice();e.length<t;)e.push(o);return e};module.exports=padToLength;
|
|
3046
3049
|
|
|
3047
|
-
},{}],
|
|
3050
|
+
},{}],895:[function(require,module,exports){
|
|
3048
3051
|
const toArray=r=>Array.isArray(r)?r:null==r?[]:[r];module.exports=toArray;
|
|
3049
3052
|
|
|
3050
3053
|
},{}]},{},[26])(26)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jscad/core",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "Core functionality for JSCAD Applications",
|
|
5
5
|
"repository": "https://github.com/jscad/OpenJSCAD.org",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -35,9 +35,9 @@
|
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@jscad/array-utils": "2.1.0",
|
|
38
|
-
"@jscad/io": "2.2.
|
|
39
|
-
"@jscad/io-utils": "2.0.
|
|
40
|
-
"@jscad/modeling": "2.
|
|
38
|
+
"@jscad/io": "2.2.1",
|
|
39
|
+
"@jscad/io-utils": "2.0.11",
|
|
40
|
+
"@jscad/modeling": "2.7.0",
|
|
41
41
|
"json5": "2.2.0",
|
|
42
42
|
"strip-bom": "4.0.0"
|
|
43
43
|
},
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"url": "https://opencollective.com/openjscad",
|
|
53
53
|
"logo": "https://opencollective.com/openjscad/logo.txt"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "fbc9b90f0ae02bea4e6e7b974c65e751c3858269"
|
|
56
56
|
}
|