@jscad/modeling 2.9.2 → 2.9.3
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 +20 -0
- package/README.md +4 -4
- package/dist/jscad-modeling.min.js +411 -417
- package/package.json +3 -2
- package/src/colors/colorize.test.js +1 -1
- package/src/geometries/geom2/toOutlines.js +66 -52
- package/src/geometries/geom3/create.js +1 -1
- package/src/geometries/geom3/create.test.js +1 -1
- package/src/geometries/geom3/fromPoints.js +1 -1
- package/src/geometries/path2/index.d.ts +0 -1
- package/src/geometries/path2/index.js +0 -1
- package/src/geometries/poly3/create.js +1 -1
- package/src/geometries/poly3/validate.js +14 -0
- package/src/maths/constants.d.ts +1 -0
- package/src/maths/constants.js +11 -0
- package/src/maths/utils/aboutEqualNormals.js +1 -5
- package/src/operations/booleans/intersectGeom3.js +2 -1
- package/src/operations/booleans/subtractGeom3.js +2 -1
- package/src/operations/booleans/to3DWalls.js +1 -1
- package/src/operations/booleans/unionGeom3.js +2 -1
- package/src/operations/expansions/expandGeom3.test.js +14 -14
- package/src/operations/expansions/expandShell.js +5 -4
- package/src/operations/expansions/extrudePolygon.js +7 -7
- package/src/operations/extrusions/extrudeFromSlices.test.js +2 -2
- package/src/operations/extrusions/extrudeRotate.js +5 -1
- package/src/operations/extrusions/extrudeRotate.test.js +5 -5
- package/src/operations/extrusions/extrudeWalls.js +2 -2
- package/src/operations/extrusions/project.js +11 -14
- package/src/operations/extrusions/project.test.js +50 -50
- package/src/operations/hulls/hullChain.test.js +4 -4
- package/src/operations/hulls/hullGeom2.js +6 -18
- package/src/operations/hulls/hullGeom3.js +5 -18
- package/src/operations/hulls/hullPath2.js +4 -14
- package/src/operations/hulls/hullPoints2.js +43 -92
- package/src/operations/hulls/toUniquePoints.js +34 -0
- package/src/operations/modifiers/generalize.js +2 -13
- package/src/operations/modifiers/generalize.test.js +0 -32
- package/src/operations/modifiers/insertTjunctions.js +1 -1
- package/src/operations/modifiers/insertTjunctions.test.js +21 -21
- package/src/operations/modifiers/mergePolygons.js +11 -14
- package/src/operations/{booleans → modifiers}/reTesselateCoplanarPolygons.js +1 -1
- package/src/operations/{booleans → modifiers}/reTesselateCoplanarPolygons.test.js +5 -5
- package/src/operations/{booleans → modifiers}/retessellate.js +2 -9
- package/src/operations/{booleans → modifiers}/retessellate.test.js +0 -0
- package/src/operations/modifiers/snapPolygons.test.js +12 -12
- package/src/operations/modifiers/triangulatePolygons.js +3 -3
- package/src/operations/transforms/center.js +1 -1
- package/src/primitives/cuboid.js +1 -1
- package/src/primitives/cylinderElliptic.js +1 -1
- package/src/primitives/ellipsoid.js +2 -2
- package/src/primitives/polyhedron.js +1 -1
- package/src/primitives/roundedCuboid.js +6 -6
- package/src/primitives/roundedCylinder.js +1 -1
- package/src/primitives/torus.test.js +6 -6
- package/src/primitives/triangle.js +1 -2
- package/src/utils/trigonometry.js +1 -2
- package/src/geometries/path2/eachPoint.d.ts +0 -9
- package/src/geometries/path2/eachPoint.js +0 -17
- package/src/geometries/path2/eachPoint.test.js +0 -11
- package/src/operations/modifiers/edges.js +0 -195
- package/src/operations/modifiers/repairTjunctions.js +0 -44
|
@@ -4,7 +4,7 @@ const cssColors=require("./cssColors"),colorNameToRgb=o=>cssColors[o.toLowerCase
|
|
|
4
4
|
},{"./cssColors":3}],2:[function(require,module,exports){
|
|
5
5
|
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;
|
|
6
6
|
|
|
7
|
-
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":
|
|
7
|
+
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":58,"../geometries/poly3":75,"../utils/flatten":391}],3:[function(require,module,exports){
|
|
8
8
|
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;
|
|
9
9
|
|
|
10
10
|
},{}],4:[function(require,module,exports){
|
|
@@ -13,10 +13,10 @@ const hexToRgb=t=>{if((t=t.replace("#","")).length<6)throw new Error("the given
|
|
|
13
13
|
},{}],5:[function(require,module,exports){
|
|
14
14
|
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;
|
|
15
15
|
|
|
16
|
-
},{"../utils/flatten":
|
|
16
|
+
},{"../utils/flatten":391,"./hueToColorComponent":7}],6:[function(require,module,exports){
|
|
17
17
|
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;
|
|
18
18
|
|
|
19
|
-
},{"../utils/flatten":
|
|
19
|
+
},{"../utils/flatten":391}],7:[function(require,module,exports){
|
|
20
20
|
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;
|
|
21
21
|
|
|
22
22
|
},{}],8:[function(require,module,exports){
|
|
@@ -25,13 +25,13 @@ module.exports={colorize:require("./colorize"),colorNameToRgb:require("./colorNa
|
|
|
25
25
|
},{"./colorNameToRgb":1,"./colorize":2,"./cssColors":3,"./hexToRgb":4,"./hslToRgb":5,"./hsvToRgb":6,"./hueToColorComponent":7,"./rgbToHex":9,"./rgbToHsl":10,"./rgbToHsv":11}],9:[function(require,module,exports){
|
|
26
26
|
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;
|
|
27
27
|
|
|
28
|
-
},{"../utils/flatten":
|
|
28
|
+
},{"../utils/flatten":391}],10:[function(require,module,exports){
|
|
29
29
|
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;
|
|
30
30
|
|
|
31
|
-
},{"../utils/flatten":
|
|
31
|
+
},{"../utils/flatten":391}],11:[function(require,module,exports){
|
|
32
32
|
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;
|
|
33
33
|
|
|
34
|
-
},{"../utils/flatten":
|
|
34
|
+
},{"../utils/flatten":391}],12:[function(require,module,exports){
|
|
35
35
|
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;
|
|
36
36
|
|
|
37
37
|
},{}],13:[function(require,module,exports){
|
|
@@ -49,19 +49,19 @@ module.exports={bezier:require("./bezier")};
|
|
|
49
49
|
},{"./bezier":13}],17:[function(require,module,exports){
|
|
50
50
|
const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.sides=r.sides.map(s=>{return[vec2.transform(vec2.create(),s[0],r.transforms),vec2.transform(vec2.create(),s[1],r.transforms)]}),r.transforms=mat4.create(),r);module.exports=applyTransforms;
|
|
51
51
|
|
|
52
|
-
},{"../../maths/mat4":
|
|
52
|
+
},{"../../maths/mat4":140,"../../maths/vec2":186}],18:[function(require,module,exports){
|
|
53
53
|
const clone=e=>Object.assign({},e);module.exports=clone;
|
|
54
54
|
|
|
55
55
|
},{}],19:[function(require,module,exports){
|
|
56
56
|
const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{sides:e,transforms:mat4.create()});module.exports=create;
|
|
57
57
|
|
|
58
|
-
},{"../../maths/mat4":
|
|
58
|
+
},{"../../maths/mat4":140}],20:[function(require,module,exports){
|
|
59
59
|
const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),create=require("./create"),fromCompactBinary=e=>{if(0!==e[0])throw new Error("invalid compact binary data");const r=create();r.transforms=mat4.clone(e.slice(1,17));for(let t=21;t<e.length;t+=4){const a=vec2.fromValues(e[t+0],e[t+1]),o=vec2.fromValues(e[t+2],e[t+3]);r.sides.push([a,o])}return e[17]>=0&&(r.color=[e[17],e[18],e[19],e[20]]),r};module.exports=fromCompactBinary;
|
|
60
60
|
|
|
61
|
-
},{"../../maths/mat4":
|
|
61
|
+
},{"../../maths/mat4":140,"../../maths/vec2":186,"./create":19}],21:[function(require,module,exports){
|
|
62
62
|
const vec2=require("../../maths/vec2"),create=require("./create"),fromPoints=e=>{if(!Array.isArray(e))throw new Error("the given points must be an array");let r=e.length;if(r<3)throw new Error("the given points must define a closed geometry with three or more points");vec2.equals(e[0],e[r-1])&&--r;const t=[];let o=e[r-1];for(let n=0;n<r;n++){const r=e[n];t.push([vec2.clone(o),vec2.clone(r)]),o=r}return create(t)};module.exports=fromPoints;
|
|
63
63
|
|
|
64
|
-
},{"../../maths/vec2":
|
|
64
|
+
},{"../../maths/vec2":186,"./create":19}],22:[function(require,module,exports){
|
|
65
65
|
module.exports={clone:require("./clone"),create:require("./create"),fromPoints:require("./fromPoints"),fromCompactBinary:require("./fromCompactBinary"),isA:require("./isA"),reverse:require("./reverse"),toOutlines:require("./toOutlines"),toPoints:require("./toPoints"),toSides:require("./toSides"),toString:require("./toString"),toCompactBinary:require("./toCompactBinary"),transform:require("./transform"),validate:require("./validate")};
|
|
66
66
|
|
|
67
67
|
},{"./clone":18,"./create":19,"./fromCompactBinary":20,"./fromPoints":21,"./isA":23,"./reverse":24,"./toCompactBinary":25,"./toOutlines":26,"./toPoints":27,"./toSides":28,"./toString":29,"./transform":30,"./validate":31}],23:[function(require,module,exports){
|
|
@@ -74,9 +74,9 @@ const create=require("./create"),toSides=require("./toSides"),reverse=e=>{const
|
|
|
74
74
|
const toCompactBinary=o=>{const t=o.sides,r=o.transforms;let n=[-1,-1,-1,-1];o.color&&(n=o.color);const e=new Float32Array(21+4*t.length);e[0]=0,e[1]=r[0],e[2]=r[1],e[3]=r[2],e[4]=r[3],e[5]=r[4],e[6]=r[5],e[7]=r[6],e[8]=r[7],e[9]=r[8],e[10]=r[9],e[11]=r[10],e[12]=r[11],e[13]=r[12],e[14]=r[13],e[15]=r[14],e[16]=r[15],e[17]=n[0],e[18]=n[1],e[19]=n[2],e[20]=n[3];for(let o=0;o<t.length;o++){const r=4*o+21,n=t[o][0],s=t[o][1];e[r+0]=n[0],e[r+1]=n[1],e[r+2]=s[0],e[r+3]=s[1]}return e};module.exports=toCompactBinary;
|
|
75
75
|
|
|
76
76
|
},{}],26:[function(require,module,exports){
|
|
77
|
-
const vec2=require("../../maths/vec2"),toSides=require("./toSides"),
|
|
77
|
+
const vec2=require("../../maths/vec2"),toSides=require("./toSides"),toSharedVertices=e=>{const t=new Map,r=e=>{const r=e.toString();return t.has(r)?t.get(r):(t.set(r,e),e)};return e.map(e=>e.map(r))},toVertexMap=e=>{const t=new Map;return toSharedVertices(e).forEach(e=>{t.has(e[0])?t.get(e[0]).push(e):t.set(e[0],[e])}),t},toOutlines=e=>{const t=toVertexMap(toSides(e)),r=[];for(;;){let e;for(const[r,o]of t){if(e=o.shift())break;t.delete(r)}if(void 0===e)break;const o=[],s=e[0];for(;;){o.push(e[0]);const r=e[1];if(r===s)break;const n=t.get(r);if(!n)throw new Error(`geometry is not closed at vertex ${r}`);const c=popNextSide(e,n);0===n.length&&t.delete(r),e=c}o.length>0&&o.push(o.shift()),r.push(o)}return t.clear(),r},popNextSide=(e,t)=>{if(1===t.length)return t.pop();const r=vec2.create(),o=vec2.angleDegrees(vec2.subtract(r,e[1],e[0]));let s,n;t.forEach((e,t)=>{let c=vec2.angleDegrees(vec2.subtract(r,e[1],e[0]))-o;c<-180&&(c+=360),c>=180&&(c-=360),(void 0===n||c>s)&&(n=t,s=c)});const c=t[n];return t.splice(n,1),c};module.exports=toOutlines;
|
|
78
78
|
|
|
79
|
-
},{"../../maths/vec2":
|
|
79
|
+
},{"../../maths/vec2":186,"./toSides":28}],27:[function(require,module,exports){
|
|
80
80
|
const toSides=require("./toSides"),toPoints=t=>{const o=toSides(t).map(t=>t[0]);return o.length>0&&o.push(o.shift()),o};module.exports=toPoints;
|
|
81
81
|
|
|
82
82
|
},{"./toSides":28}],28:[function(require,module,exports){
|
|
@@ -85,1118 +85,1112 @@ const applyTransforms=require("./applyTransforms"),toSides=s=>applyTransforms(s)
|
|
|
85
85
|
},{"./applyTransforms":17}],29:[function(require,module,exports){
|
|
86
86
|
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;
|
|
87
87
|
|
|
88
|
-
},{"../../maths/vec2":
|
|
88
|
+
},{"../../maths/vec2":186,"./toSides":28}],30:[function(require,module,exports){
|
|
89
89
|
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;
|
|
90
90
|
|
|
91
|
-
},{"../../maths/mat4":
|
|
91
|
+
},{"../../maths/mat4":140}],31:[function(require,module,exports){
|
|
92
92
|
const vec2=require("../../maths/vec2"),isA=require("./isA"),toOutlines=require("./toOutlines"),validate=e=>{if(!isA(e))throw new Error("invalid geom2 structure");if(toOutlines(e),e.sides.forEach(e=>{if(vec2.equals(e[0],e[1]))throw new Error(`geom2 self-edge ${e[0]}`)}),!e.transforms.every(Number.isFinite))throw new Error(`geom2 invalid transforms ${e.transforms}`)};module.exports=validate;
|
|
93
93
|
|
|
94
|
-
},{"../../maths/vec2":
|
|
94
|
+
},{"../../maths/vec2":186,"./isA":23,"./toOutlines":26}],32:[function(require,module,exports){
|
|
95
95
|
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;
|
|
96
96
|
|
|
97
|
-
},{"../../maths/mat4":
|
|
97
|
+
},{"../../maths/mat4":140,"../poly3":75}],33:[function(require,module,exports){
|
|
98
98
|
const clone=e=>Object.assign({},e);module.exports=clone;
|
|
99
99
|
|
|
100
100
|
},{}],34:[function(require,module,exports){
|
|
101
101
|
const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{polygons:e,transforms:mat4.create()});module.exports=create;
|
|
102
102
|
|
|
103
|
-
},{"../../maths/mat4":
|
|
103
|
+
},{"../../maths/mat4":140}],35:[function(require,module,exports){
|
|
104
104
|
const vec3=require("../../maths/vec3"),mat4=require("../../maths/mat4"),poly3=require("../poly3"),create=require("./create"),fromCompactBinary=e=>{if(1!==e[0])throw new Error("invalid compact binary data");const r=create();r.transforms=mat4.clone(e.slice(1,17));const o=e[21];let t=22,a=e.length-3*o;for(;a<e.length;){const o=e[t];t++;const c=[];for(let r=0;r<o;r++)c.push(vec3.fromValues(e[a],e[a+1],e[a+2])),a+=3;r.polygons.push(poly3.create(c))}return e[17]>=0&&(r.color=[e[17],e[18],e[19],e[20]]),r};module.exports=fromCompactBinary;
|
|
105
105
|
|
|
106
|
-
},{"../../maths/mat4":
|
|
107
|
-
const poly3=require("../poly3"),create=require("./create"),fromPoints=r=>{if(!Array.isArray(r))throw new Error("the given points must be an array");const e=r.map((r,e)=>{return poly3.
|
|
106
|
+
},{"../../maths/mat4":140,"../../maths/vec3":217,"../poly3":75,"./create":34}],36:[function(require,module,exports){
|
|
107
|
+
const poly3=require("../poly3"),create=require("./create"),fromPoints=r=>{if(!Array.isArray(r))throw new Error("the given points must be an array");const e=r.map((r,e)=>{return poly3.create(r)});return create(e)};module.exports=fromPoints;
|
|
108
108
|
|
|
109
|
-
},{"../poly3":
|
|
109
|
+
},{"../poly3":75,"./create":34}],37:[function(require,module,exports){
|
|
110
110
|
module.exports={clone:require("./clone"),create:require("./create"),fromPoints:require("./fromPoints"),fromCompactBinary:require("./fromCompactBinary"),invert:require("./invert"),isA:require("./isA"),toPoints:require("./toPoints"),toPolygons:require("./toPolygons"),toString:require("./toString"),toCompactBinary:require("./toCompactBinary"),transform:require("./transform"),validate:require("./validate")};
|
|
111
111
|
|
|
112
112
|
},{"./clone":33,"./create":34,"./fromCompactBinary":35,"./fromPoints":36,"./invert":38,"./isA":39,"./toCompactBinary":40,"./toPoints":41,"./toPolygons":42,"./toString":43,"./transform":44,"./validate":45}],38:[function(require,module,exports){
|
|
113
113
|
const poly3=require("../poly3"),create=require("./create"),toPolygons=require("./toPolygons"),invert=e=>{const o=toPolygons(e).map(e=>poly3.invert(e));return create(o)};module.exports=invert;
|
|
114
114
|
|
|
115
|
-
},{"../poly3":
|
|
115
|
+
},{"../poly3":75,"./create":34,"./toPolygons":42}],39:[function(require,module,exports){
|
|
116
116
|
const isA=o=>!!(o&&"object"==typeof o&&"polygons"in o&&"transforms"in o&&Array.isArray(o.polygons)&&"length"in o.transforms);module.exports=isA;
|
|
117
117
|
|
|
118
118
|
},{}],40:[function(require,module,exports){
|
|
119
119
|
const poly3=require("../poly3"),toCompactBinary=o=>{const t=o.polygons,e=o.transforms,r=t.length,n=t.reduce((o,t)=>o+t.vertices.length,0);let l=[-1,-1,-1,-1];o.color&&(l=o.color);const c=new Float32Array(22+r+3*n);c[0]=1,c[1]=e[0],c[2]=e[1],c[3]=e[2],c[4]=e[3],c[5]=e[4],c[6]=e[5],c[7]=e[6],c[8]=e[7],c[9]=e[8],c[10]=e[9],c[11]=e[10],c[12]=e[11],c[13]=e[12],c[14]=e[13],c[15]=e[14],c[16]=e[15],c[17]=l[0],c[18]=l[1],c[19]=l[2],c[20]=l[3],c[21]=n;let s=22,a=s+r;return t.forEach(o=>{const t=poly3.toPoints(o);c[s]=t.length,s++;for(let o=0;o<t.length;o++){const e=t[o];c[a+0]=e[0],c[a+1]=e[1],c[a+2]=e[2],a+=3}}),c};module.exports=toCompactBinary;
|
|
120
120
|
|
|
121
|
-
},{"../poly3":
|
|
121
|
+
},{"../poly3":75}],41:[function(require,module,exports){
|
|
122
122
|
const poly3=require("../poly3"),toPolygons=require("./toPolygons"),toPoints=o=>{return toPolygons(o).map(o=>poly3.toPoints(o))};module.exports=toPoints;
|
|
123
123
|
|
|
124
|
-
},{"../poly3":
|
|
124
|
+
},{"../poly3":75,"./toPolygons":42}],42:[function(require,module,exports){
|
|
125
125
|
const applyTransforms=require("./applyTransforms"),toPolygons=o=>applyTransforms(o).polygons;module.exports=toPolygons;
|
|
126
126
|
|
|
127
127
|
},{"./applyTransforms":32}],43:[function(require,module,exports){
|
|
128
128
|
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;
|
|
129
129
|
|
|
130
|
-
},{"../poly3":
|
|
130
|
+
},{"../poly3":75,"./toPolygons":42}],44:[function(require,module,exports){
|
|
131
131
|
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;
|
|
132
132
|
|
|
133
|
-
},{"../../maths/mat4":
|
|
133
|
+
},{"../../maths/mat4":140}],45:[function(require,module,exports){
|
|
134
134
|
const poly3=require("../poly3"),isA=require("./isA"),validate=e=>{if(!isA(e))throw new Error("invalid geom3 structure");if(e.polygons.forEach(poly3.validate),validateManifold(e),!e.transforms.every(Number.isFinite))throw new Error(`geom3 invalid transforms ${e.transforms}`)},validateManifold=e=>{const o=new Map;e.polygons.forEach(({vertices:e})=>{e.forEach((r,n)=>{const t=`${`${r}`}/${`${e[(n+1)%e.length]}`}`,i=o.has(t)?o.get(t):0;o.set(t,i+1)})});const r=[];if(o.forEach((e,n)=>{const t=n.split("/").reverse().join("/");e!==o.get(t)&&r.push(n.replace("/"," -> "))}),r.length>0)throw new Error(`non-manifold edges ${r.length}\n${r.join("\n")}`)};module.exports=validate;
|
|
135
135
|
|
|
136
|
-
},{"../poly3":
|
|
136
|
+
},{"../poly3":75,"./isA":39}],46:[function(require,module,exports){
|
|
137
137
|
module.exports={geom2:require("./geom2"),geom3:require("./geom3"),path2:require("./path2"),poly2:require("./poly2"),poly3:require("./poly3")};
|
|
138
138
|
|
|
139
|
-
},{"./geom2":22,"./geom3":37,"./path2":
|
|
139
|
+
},{"./geom2":22,"./geom3":37,"./path2":58,"./poly2":69,"./poly3":75}],47:[function(require,module,exports){
|
|
140
140
|
const vec2=require("../../maths/vec2"),fromPoints=require("./fromPoints"),toPoints=require("./toPoints"),appendArc=(e,t)=>{let{endpoint:r,radius:a,xaxisrotation:o,clockwise:n,large:s,segments:c}=Object.assign({},{radius:[0,0],xaxisrotation:0,clockwise:!1,large:!1,segments:16},e);if(!Array.isArray(r))throw new Error("endpoint must be an array of X and Y values");if(r.length<2)throw new Error("endpoint must contain X and Y values");if(r=vec2.clone(r),!Array.isArray(a))throw new Error("radius must be an array of X and Y values");if(a.length<2)throw new Error("radius must contain X and Y values");if(c<4)throw new Error("segments must be four or more");if(t.isClosed)throw new Error("the given path cannot be closed");const i=toPoints(t);if(i.length<1)throw new Error("the given path must contain one or more points (as the starting point for the arc)");let h=a[0],u=a[1];const l=i[i.length-1];h=Math.round(1e5*h)/1e5,u=Math.round(1e5*u)/1e5,r=vec2.fromValues(Math.round(1e5*r[0])/1e5,Math.round(1e5*r[1])/1e5);const d=!n;let v=[];if(0===h||0===u)v.push(r);else{h=Math.abs(h),u=Math.abs(u);const t=o,a=Math.cos(t),n=Math.sin(t),i=vec2.subtract(vec2.create(),l,r);vec2.scale(i,i,.5);const f=Math.round(1e5*(a*i[0]+n*i[1]))/1e5,m=Math.round(1e5*(-n*i[0]+a*i[1]))/1e5,M=vec2.fromValues(f,m),p=M[0]*M[0]/(h*h)+M[1]*M[1]/(u*u);if(p>1){const e=Math.sqrt(p);h*=e,u*=e,h=Math.round(1e5*h)/1e5,u=Math.round(1e5*u)/1e5}let w=Math.sqrt((h*h*u*u-h*h*M[1]*M[1]-u*u*M[0]*M[0])/(h*h*M[1]*M[1]+u*u*M[0]*M[0]));d===s&&(w=-w);const g=vec2.fromValues(h*M[1]/u,-u*M[0]/h);vec2.scale(g,g,w);let P=vec2.fromValues(a*g[0]-n*g[1],n*g[0]+a*g[1]);P=vec2.add(P,P,vec2.scale(vec2.create(),vec2.add(vec2.create(),l,r),.5));const b=vec2.fromValues((M[0]-g[0])/h,(M[1]-g[1])/u),E=vec2.fromValues((-M[0]-g[0])/h,(-M[1]-g[1])/u),V=vec2.angleRadians(b);let y=vec2.angleRadians(E)-V;y%=2*Math.PI,!d&&y>0?y-=2*Math.PI:d&&y<0&&(y+=2*Math.PI);let A=Math.ceil(Math.abs(y)/(2*Math.PI)*c)+1;A<1&&(A=1);for(let e=1;e<A;e++){const t=V+e/A*y,r=Math.cos(t),o=Math.sin(t),s=vec2.fromValues(a*h*r-n*u*o,n*h*r+a*u*o);vec2.add(s,s,P),v.push(s)}A&&v.push(e.endpoint)}return v=i.concat(v),fromPoints({},v)};module.exports=appendArc;
|
|
141
141
|
|
|
142
|
-
},{"../../maths/vec2":
|
|
142
|
+
},{"../../maths/vec2":186,"./fromPoints":57,"./toPoints":62}],48:[function(require,module,exports){
|
|
143
143
|
const vec2=require("../../maths/vec2"),vec3=require("../../maths/vec2"),appendPoints=require("./appendPoints"),toPoints=require("./toPoints"),appendBezier=(e,t)=>{let{controlPoints:o,segments:r}=Object.assign({},{segments:16},e);if(!Array.isArray(o))throw new Error("controlPoints must be an array of one or more points");if(o.length<1)throw new Error("controlPoints must be an array of one or more points");if(r<4)throw new Error("segments must be four or more");if(t.isClosed)throw new Error("the given geometry cannot be closed");const n=toPoints(t);if(n.length<1)throw new Error("the given path must contain one or more points (as the starting point for the bezier curve)");if(null===(o=o.slice())[0]){if(o.length<2)throw new Error("a null control point must be passed with one more control points");let e=n[n.length-2];if("lastBezierControlPoint"in t&&(e=t.lastBezierControlPoint),!Array.isArray(e))throw new Error("the given path must contain TWO or more points if given a null control point");const r=vec2.scale(vec2.create(),n[n.length-1],2);vec2.subtract(r,r,e),o[0]=r}o.unshift(n[n.length-1]);const s=o.length-1,i=[];let c=1;for(let e=0;e<=s;++e)e>0&&(c*=e),i.push(c);const a=[];for(let e=0;e<=s;++e){const t=i[s]/(i[e]*i[s-e]);a.push(t)}const l=vec2.create(),h=vec2.create(),p=vec3.create(),u=e=>{let t=1,r=Math.pow(1-e,s);const n=1!==e?1/(1-e):1,i=vec2.create();for(let c=0;c<=s;++c){c===s&&(r=1);const h=a[c]*t*r,p=vec2.scale(l,o[c],h);vec2.add(i,i,p),t*=e,r*=n}return i},v=[],f=[],m=s+1;for(let e=0;e<m;++e){const t=e/(m-1),o=u(t);v.push(o),f.push(t)}let g=1;const w=2*Math.PI/r,P=Math.sin(w);for(;g<v.length-1;){const e=vec2.subtract(l,v[g],v[g-1]);vec2.normalize(e,e);const t=vec2.subtract(h,v[g+1],v[g]);vec2.normalize(t,t);const o=vec2.cross(p,e,t);if(Math.abs(o[2])>P){const e=f[g-1],t=f[g+1],o=e+1*(t-e)/3,r=e+2*(t-e)/3,n=u(o),s=u(r);v.splice(g,1,n,s),f.splice(g,1,o,r),--g<1&&(g=1)}else++g}v.shift();const b=appendPoints(v,t);return b.lastBezierControlPoint=o[o.length-2],b};module.exports=appendBezier;
|
|
144
144
|
|
|
145
|
-
},{"../../maths/vec2":
|
|
145
|
+
},{"../../maths/vec2":186,"./appendPoints":49,"./toPoints":62}],49:[function(require,module,exports){
|
|
146
146
|
const fromPoints=require("./fromPoints"),toPoints=require("./toPoints"),appendPoints=(o,t)=>{if(t.isClosed)throw new Error("cannot append points to a closed path");let n=toPoints(t);return n=n.concat(o),fromPoints({},n)};module.exports=appendPoints;
|
|
147
147
|
|
|
148
|
-
},{"./fromPoints":
|
|
148
|
+
},{"./fromPoints":57,"./toPoints":62}],50:[function(require,module,exports){
|
|
149
149
|
const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.points=r.points.map(s=>vec2.transform(vec2.create(),s,r.transforms)),r.transforms=mat4.create(),r);module.exports=applyTransforms;
|
|
150
150
|
|
|
151
|
-
},{"../../maths/mat4":
|
|
151
|
+
},{"../../maths/mat4":140,"../../maths/vec2":186}],51:[function(require,module,exports){
|
|
152
152
|
const clone=e=>Object.assign({},e);module.exports=clone;
|
|
153
153
|
|
|
154
154
|
},{}],52:[function(require,module,exports){
|
|
155
155
|
const{EPS:EPS}=require("../../maths/constants"),vec2=require("../../maths/vec2"),clone=require("./clone"),close=e=>{if(e.isClosed)return e;const t=clone(e);if(t.isClosed=!0,t.points.length>1){const e=t.points,n=e[0];let o=e[e.length-1];for(;vec2.distance(n,o)<EPS*EPS&&(e.pop(),1!==e.length);)o=e[e.length-1]}return t};module.exports=close;
|
|
156
156
|
|
|
157
|
-
},{"../../maths/constants":
|
|
157
|
+
},{"../../maths/constants":90,"../../maths/vec2":186,"./clone":51}],53:[function(require,module,exports){
|
|
158
158
|
const fromPoints=require("./fromPoints"),toPoints=require("./toPoints"),{equals:equals}=require("../../maths/vec2"),concat=(...o)=>{let t=!1;for(const e of o){if(t)throw new Error("Cannot concatenate to a closed path");t=e.isClosed}let e=[];return o.forEach(o=>{const t=toPoints(o);e.length>0&&t.length>0&&equals(t[0],e[e.length-1])&&t.shift(),e=e.concat(t)}),fromPoints({closed:t},e)};module.exports=concat;
|
|
159
159
|
|
|
160
|
-
},{"../../maths/vec2":
|
|
160
|
+
},{"../../maths/vec2":186,"./fromPoints":57,"./toPoints":62}],54:[function(require,module,exports){
|
|
161
161
|
const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{points:e,isClosed:!1,transforms:mat4.create()});module.exports=create;
|
|
162
162
|
|
|
163
|
-
},{"../../maths/mat4":
|
|
164
|
-
const toPoints=require("./toPoints"),eachPoint=(o,t,e)=>{toPoints(e).forEach(t)};module.exports=eachPoint;
|
|
165
|
-
|
|
166
|
-
},{"./toPoints":63}],56:[function(require,module,exports){
|
|
163
|
+
},{"../../maths/mat4":140}],55:[function(require,module,exports){
|
|
167
164
|
const vec2=require("../../maths/vec2"),toPoints=require("./toPoints"),equals=(e,t)=>{if(e.isClosed!==t.isClosed)return!1;if(e.points.length!==t.points.length)return!1;const o=toPoints(e),s=toPoints(t),i=o.length;let r=0;do{let t=!1;for(let e=0;e<i;e++)if(!vec2.equals(o[e],s[(e+r)%i])){t=!0;break}if(!1===t)return!0;if(!e.isClosed)return!1}while(++r<i);return!1};module.exports=equals;
|
|
168
165
|
|
|
169
|
-
},{"../../maths/vec2":
|
|
166
|
+
},{"../../maths/vec2":186,"./toPoints":62}],56:[function(require,module,exports){
|
|
170
167
|
const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),create=require("./create"),fromCompactBinary=r=>{if(2!==r[0])throw new Error("invalid compact binary data");const e=create();e.transforms=mat4.clone(r.slice(1,17)),e.isClosed=!!r[17];for(let t=22;t<r.length;t+=2){const o=vec2.fromValues(r[t],r[t+1]);e.points.push(o)}return r[18]>=0&&(e.color=[r[18],r[19],r[20],r[21]]),e};module.exports=fromCompactBinary;
|
|
171
168
|
|
|
172
|
-
},{"../../maths/mat4":
|
|
169
|
+
},{"../../maths/mat4":140,"../../maths/vec2":186,"./create":54}],57:[function(require,module,exports){
|
|
173
170
|
const{EPS:EPS}=require("../../maths/constants"),vec2=require("../../maths/vec2"),close=require("./close"),create=require("./create"),fromPoints=(e,t)=>{let{closed:s}=Object.assign({},{closed:!1},e),o=create();if(o.points=t.map(e=>vec2.clone(e)),o.points.length>1){const e=o.points[0],t=o.points[o.points.length-1];vec2.distance(e,t)<EPS*EPS&&(s=!0)}return!0===s&&(o=close(o)),o};module.exports=fromPoints;
|
|
174
171
|
|
|
175
|
-
},{"../../maths/constants":
|
|
176
|
-
module.exports={appendArc:require("./appendArc"),appendBezier:require("./appendBezier"),appendPoints:require("./appendPoints"),clone:require("./clone"),close:require("./close"),concat:require("./concat"),create:require("./create"),
|
|
172
|
+
},{"../../maths/constants":90,"../../maths/vec2":186,"./close":52,"./create":54}],58:[function(require,module,exports){
|
|
173
|
+
module.exports={appendArc:require("./appendArc"),appendBezier:require("./appendBezier"),appendPoints:require("./appendPoints"),clone:require("./clone"),close:require("./close"),concat:require("./concat"),create:require("./create"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromCompactBinary:require("./fromCompactBinary"),isA:require("./isA"),reverse:require("./reverse"),toPoints:require("./toPoints"),toString:require("./toString"),toCompactBinary:require("./toCompactBinary"),transform:require("./transform"),validate:require("./validate")};
|
|
177
174
|
|
|
178
|
-
},{"./appendArc":47,"./appendBezier":48,"./appendPoints":49,"./clone":51,"./close":52,"./concat":53,"./create":54,"./
|
|
175
|
+
},{"./appendArc":47,"./appendBezier":48,"./appendPoints":49,"./clone":51,"./close":52,"./concat":53,"./create":54,"./equals":55,"./fromCompactBinary":56,"./fromPoints":57,"./isA":59,"./reverse":60,"./toCompactBinary":61,"./toPoints":62,"./toString":63,"./transform":64,"./validate":65}],59:[function(require,module,exports){
|
|
179
176
|
const isA=s=>!!(s&&"object"==typeof s&&"points"in s&&"transforms"in s&&"isClosed"in s&&Array.isArray(s.points)&&"length"in s.transforms);module.exports=isA;
|
|
180
177
|
|
|
181
|
-
},{}],
|
|
178
|
+
},{}],60:[function(require,module,exports){
|
|
182
179
|
const clone=require("./clone"),reverse=e=>{const r=clone(e);return r.points=e.points.slice().reverse(),r};module.exports=reverse;
|
|
183
180
|
|
|
184
|
-
},{"./clone":51}],
|
|
181
|
+
},{"./clone":51}],61:[function(require,module,exports){
|
|
185
182
|
const toCompactBinary=o=>{const t=o.points,n=o.transforms;let r=[-1,-1,-1,-1];o.color&&(r=o.color);const s=new Float32Array(22+2*t.length);s[0]=2,s[1]=n[0],s[2]=n[1],s[3]=n[2],s[4]=n[3],s[5]=n[4],s[6]=n[5],s[7]=n[6],s[8]=n[7],s[9]=n[8],s[10]=n[9],s[11]=n[10],s[12]=n[11],s[13]=n[12],s[14]=n[13],s[15]=n[14],s[16]=n[15],s[17]=o.isClosed?1:0,s[18]=r[0],s[19]=r[1],s[20]=r[2],s[21]=r[3];for(let o=0;o<t.length;o++){const n=2*o+22,r=t[o];s[n]=r[0],s[n+1]=r[1]}return s};module.exports=toCompactBinary;
|
|
186
183
|
|
|
187
|
-
},{}],
|
|
184
|
+
},{}],62:[function(require,module,exports){
|
|
188
185
|
const applyTransforms=require("./applyTransforms"),toPoints=o=>applyTransforms(o).points;module.exports=toPoints;
|
|
189
186
|
|
|
190
|
-
},{"./applyTransforms":50}],
|
|
187
|
+
},{"./applyTransforms":50}],63:[function(require,module,exports){
|
|
191
188
|
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;
|
|
192
189
|
|
|
193
|
-
},{"../../maths/vec2":
|
|
190
|
+
},{"../../maths/vec2":186,"./toPoints":62}],64:[function(require,module,exports){
|
|
194
191
|
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;
|
|
195
192
|
|
|
196
|
-
},{"../../maths/mat4":
|
|
193
|
+
},{"../../maths/mat4":140}],65:[function(require,module,exports){
|
|
197
194
|
const vec2=require("../../maths/vec2"),isA=require("./isA"),validate=r=>{if(!isA(r))throw new Error("invalid path2 structure");if(r.points.length>1)for(let i=0;i<r.points.length;i++)if(vec2.equals(r.points[i],r.points[(i+1)%r.points.length]))throw new Error(`path2 duplicate points ${r.points[i]}`);if(r.points.forEach(r=>{if(!r.every(Number.isFinite))throw new Error(`path2 invalid point ${r}`)}),!r.transforms.every(Number.isFinite))throw new Error(`path2 invalid transforms ${r.transforms}`)};module.exports=validate;
|
|
198
195
|
|
|
199
|
-
},{"../../maths/vec2":
|
|
196
|
+
},{"../../maths/vec2":186,"./isA":59}],66:[function(require,module,exports){
|
|
200
197
|
const measureArea=require("./measureArea"),flip=require("./flip"),arePointsInside=(e,r)=>{if(0===e.length)return 0;const t=r.vertices;return t.length<3?0:(measureArea(r)<0&&(r=flip(r)),e.reduce((e,r)=>e+isPointInside(r,t),0)===e.length?1:0)},isPointInside=(e,r)=>{const t=r.length,n=e[0],i=e[1];let s=r[t-1],o=r[0],l=s[1]>i,u=0,a=0;for(let e=t+1;--e;){const e=o[1]>i;if(l!==e){const e=s[0]>n,r=o[0]>n;e&&r?u=!u:o[0]-(o[1]-i)*(s[0]-o[0])/(s[1]-o[1])>=n&&(u=!u)}l=e,s=o,o=r[++a]}return u},isLeft=(e,r,t)=>(r[0]-e[0])*(t[1]-e[1])-(t[0]-e[0])*(r[1]-e[1]);module.exports=arePointsInside;
|
|
201
198
|
|
|
202
|
-
},{"./flip":
|
|
199
|
+
},{"./flip":68,"./measureArea":70}],67:[function(require,module,exports){
|
|
203
200
|
const create=e=>((void 0===e||e.length<3)&&(e=[]),{vertices:e});module.exports=create;
|
|
204
201
|
|
|
205
|
-
},{}],
|
|
202
|
+
},{}],68:[function(require,module,exports){
|
|
206
203
|
const create=require("./create"),flip=e=>{const r=e.vertices.slice().reverse();return create(r)};module.exports=flip;
|
|
207
204
|
|
|
208
|
-
},{"./create":
|
|
205
|
+
},{"./create":67}],69:[function(require,module,exports){
|
|
209
206
|
module.exports={arePointsInside:require("./arePointsInside"),create:require("./create"),flip:require("./flip"),measureArea:require("./measureArea")};
|
|
210
207
|
|
|
211
|
-
},{"./arePointsInside":
|
|
208
|
+
},{"./arePointsInside":66,"./create":67,"./flip":68,"./measureArea":70}],70:[function(require,module,exports){
|
|
212
209
|
const area=require("../../maths/utils/area"),measureArea=e=>area(e.vertices);module.exports=measureArea;
|
|
213
210
|
|
|
214
|
-
},{"../../maths/utils/area":
|
|
211
|
+
},{"../../maths/utils/area":164}],71:[function(require,module,exports){
|
|
215
212
|
const create=require("./create"),vec3=require("../../maths/vec3"),clone=(...e)=>{let c,r;return 1===e.length?(c=create(),r=e[0]):(c=e[0],r=e[1]),c.vertices=r.vertices.map(e=>vec3.clone(e)),c};module.exports=clone;
|
|
216
213
|
|
|
217
|
-
},{"../../maths/vec3":
|
|
214
|
+
},{"../../maths/vec3":217,"./create":72}],72:[function(require,module,exports){
|
|
218
215
|
const create=e=>((void 0===e||e.length<3)&&(e=[]),{vertices:e});module.exports=create;
|
|
219
216
|
|
|
220
|
-
},{}],
|
|
217
|
+
},{}],73:[function(require,module,exports){
|
|
221
218
|
const vec3=require("../../maths/vec3"),create=require("./create"),fromPoints=e=>{const r=e.map(e=>vec3.clone(e));return create(r)};module.exports=fromPoints;
|
|
222
219
|
|
|
223
|
-
},{"../../maths/vec3":
|
|
220
|
+
},{"../../maths/vec3":217,"./create":72}],74:[function(require,module,exports){
|
|
224
221
|
const create=require("./create"),fromPointsAndPlane=(e,n)=>{const r=create(e);return r.plane=n,r};module.exports=fromPointsAndPlane;
|
|
225
222
|
|
|
226
|
-
},{"./create":
|
|
223
|
+
},{"./create":72}],75:[function(require,module,exports){
|
|
227
224
|
module.exports={clone:require("./clone"),create:require("./create"),fromPoints:require("./fromPoints"),fromPointsAndPlane:require("./fromPointsAndPlane"),invert:require("./invert"),isA:require("./isA"),isConvex:require("./isConvex"),measureArea:require("./measureArea"),measureBoundingBox:require("./measureBoundingBox"),measureBoundingSphere:require("./measureBoundingSphere"),measureSignedVolume:require("./measureSignedVolume"),plane:require("./plane"),toPoints:require("./toPoints"),toString:require("./toString"),transform:require("./transform"),validate:require("./validate")};
|
|
228
225
|
|
|
229
|
-
},{"./clone":
|
|
226
|
+
},{"./clone":71,"./create":72,"./fromPoints":73,"./fromPointsAndPlane":74,"./invert":76,"./isA":77,"./isConvex":78,"./measureArea":79,"./measureBoundingBox":80,"./measureBoundingSphere":81,"./measureSignedVolume":82,"./plane":83,"./toPoints":84,"./toString":85,"./transform":86,"./validate":87}],76:[function(require,module,exports){
|
|
230
227
|
const plane=require("../../maths/plane"),create=require("./create"),invert=e=>{const r=e.vertices.slice().reverse(),a=create(r);return e.plane&&(a.plane=plane.flip(plane.create(),e.plane)),a};module.exports=invert;
|
|
231
228
|
|
|
232
|
-
},{"../../maths/plane":
|
|
229
|
+
},{"../../maths/plane":159,"./create":72}],77:[function(require,module,exports){
|
|
233
230
|
const isA=e=>!!(e&&"object"==typeof e&&"vertices"in e&&Array.isArray(e.vertices));module.exports=isA;
|
|
234
231
|
|
|
235
|
-
},{}],
|
|
232
|
+
},{}],78:[function(require,module,exports){
|
|
236
233
|
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;
|
|
237
234
|
|
|
238
|
-
},{"../../maths/plane":
|
|
235
|
+
},{"../../maths/plane":159,"../../maths/vec3":217}],79:[function(require,module,exports){
|
|
239
236
|
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;
|
|
240
237
|
|
|
241
|
-
},{"./plane":
|
|
238
|
+
},{"./plane":83}],80:[function(require,module,exports){
|
|
242
239
|
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;
|
|
243
240
|
|
|
244
|
-
},{"../../maths/vec3":
|
|
241
|
+
},{"../../maths/vec3":217}],81:[function(require,module,exports){
|
|
245
242
|
const vec3=require("../../maths/vec3"),measureBoundingBox=require("./measureBoundingBox"),measureBoundingSphere=e=>{const n=measureBoundingBox(e),r=n[0];return vec3.add(r,n[0],n[1]),vec3.scale(r,r,.5),[r,vec3.distance(r,n[1])]};module.exports=measureBoundingSphere;
|
|
246
243
|
|
|
247
|
-
},{"../../maths/vec3":
|
|
244
|
+
},{"../../maths/vec3":217,"./measureBoundingBox":80}],82:[function(require,module,exports){
|
|
248
245
|
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;
|
|
249
246
|
|
|
250
|
-
},{"../../maths/vec3":
|
|
247
|
+
},{"../../maths/vec3":217}],83:[function(require,module,exports){
|
|
251
248
|
const mplane=require("../../maths/plane/"),plane=e=>(e.plane||(e.plane=mplane.fromPoints(mplane.create(),...e.vertices)),e.plane);module.exports=plane;
|
|
252
249
|
|
|
253
|
-
},{"../../maths/plane/":
|
|
250
|
+
},{"../../maths/plane/":159}],84:[function(require,module,exports){
|
|
254
251
|
const toPoints=o=>o.vertices;module.exports=toPoints;
|
|
255
252
|
|
|
256
|
-
},{}],
|
|
253
|
+
},{}],85:[function(require,module,exports){
|
|
257
254
|
const vec3=require("../../maths/vec3/"),toString=e=>{let t="poly3: vertices: [";return e.vertices.forEach(e=>{t+=`${vec3.toString(e)}, `}),t+="]"};module.exports=toString;
|
|
258
255
|
|
|
259
|
-
},{"../../maths/vec3/":
|
|
256
|
+
},{"../../maths/vec3/":217}],86:[function(require,module,exports){
|
|
260
257
|
const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),create=require("./create"),transform=(e,r)=>{const t=r.vertices.map(r=>vec3.transform(vec3.create(),r,e));return mat4.isMirroring(e)&&t.reverse(),create(t)};module.exports=transform;
|
|
261
258
|
|
|
262
|
-
},{"../../maths/mat4":
|
|
263
|
-
const vec3=require("../../maths/vec3"),isA=require("./isA"),isConvex=require("./isConvex"),measureArea=require("./measureArea"),validate=e=>{if(!isA(e))throw new Error("invalid poly3 structure");if(e.vertices.length<3)throw new Error(`poly3 not enough vertices ${e.vertices.length}`);if(measureArea(e)<=0)throw new Error("poly3 area must be greater than zero");for(let r=0;r<e.vertices.length;r++)if(vec3.equals(e.vertices[r],e.vertices[(r+1)%e.vertices.length]))throw new Error(`poly3 duplicate vertex ${e.vertices[r]}`);if(!isConvex(e))throw new Error("poly3 must be convex");e.vertices.forEach(e=>{if(!e.every(Number.isFinite))throw new Error(`poly3 invalid vertex ${e}`)})};module.exports=validate;
|
|
259
|
+
},{"../../maths/mat4":140,"../../maths/vec3":217,"./create":72}],87:[function(require,module,exports){
|
|
260
|
+
const signedDistanceToPoint=require("../../maths/plane/signedDistanceToPoint"),{NEPS:NEPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),isA=require("./isA"),isConvex=require("./isConvex"),measureArea=require("./measureArea"),plane=require("./plane"),validate=e=>{if(!isA(e))throw new Error("invalid poly3 structure");if(e.vertices.length<3)throw new Error(`poly3 not enough vertices ${e.vertices.length}`);if(measureArea(e)<=0)throw new Error("poly3 area must be greater than zero");for(let r=0;r<e.vertices.length;r++)if(vec3.equals(e.vertices[r],e.vertices[(r+1)%e.vertices.length]))throw new Error(`poly3 duplicate vertex ${e.vertices[r]}`);if(!isConvex(e))throw new Error("poly3 must be convex");if(e.vertices.forEach(e=>{if(!e.every(Number.isFinite))throw new Error(`poly3 invalid vertex ${e}`)}),e.vertices.length>3){const r=plane(e);e.vertices.forEach(e=>{const t=Math.abs(signedDistanceToPoint(r,e));if(t>NEPS)throw new Error(`poly3 must be coplanar: vertex ${e} distance ${t}`)})}};module.exports=validate;
|
|
264
261
|
|
|
265
|
-
},{"../../maths/vec3":
|
|
262
|
+
},{"../../maths/constants":90,"../../maths/plane/signedDistanceToPoint":161,"../../maths/vec3":217,"./isA":77,"./isConvex":78,"./measureArea":79,"./plane":83}],88:[function(require,module,exports){
|
|
266
263
|
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")};
|
|
267
264
|
|
|
268
|
-
},{"./colors":8,"./curves":16,"./geometries":46,"./maths":
|
|
265
|
+
},{"./colors":8,"./curves":16,"./geometries":46,"./maths":91,"./measurements":247,"./operations/booleans":261,"./operations/expansions":290,"./operations/extrusions":312,"./operations/hulls":334,"./operations/modifiers":345,"./operations/transforms":355,"./primitives":371,"./text":385,"./utils":393}],89:[function(require,module,exports){
|
|
269
266
|
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;
|
|
270
267
|
|
|
271
|
-
},{"./mat4":
|
|
272
|
-
const spatialResolution=1e5,EPS=1e-5;module.exports={EPS:EPS,spatialResolution:1e5};
|
|
268
|
+
},{"./mat4":140,"./vec2":186,"./vec3":217}],90:[function(require,module,exports){
|
|
269
|
+
const spatialResolution=1e5,EPS=1e-5,NEPS=1e-13;module.exports={EPS:EPS,NEPS:NEPS,spatialResolution:1e5};
|
|
273
270
|
|
|
274
|
-
},{}],
|
|
271
|
+
},{}],91:[function(require,module,exports){
|
|
275
272
|
module.exports={constants:require("./constants"),line2:require("./line2"),line3:require("./line3"),mat4:require("./mat4"),plane:require("./plane"),utils:require("./utils"),vec2:require("./vec2"),vec3:require("./vec3"),vec4:require("./vec4")};
|
|
276
273
|
|
|
277
|
-
},{"./constants":
|
|
274
|
+
},{"./constants":90,"./line2":101,"./line3":118,"./mat4":140,"./plane":159,"./utils":165,"./vec2":186,"./vec3":217,"./vec4":243}],92:[function(require,module,exports){
|
|
278
275
|
const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r};module.exports=clone;
|
|
279
276
|
|
|
280
|
-
},{"./create":
|
|
277
|
+
},{"./create":95}],93:[function(require,module,exports){
|
|
281
278
|
const vec2=require("../vec2"),direction=require("./direction"),origin=require("./origin"),closestPoint=(e,i)=>{const r=origin(e),o=direction(e),n=(o[1]-r[1])/(o[0]-r[0]),t=r[1]-n*r[0],c=-1/n,s=(i[1]-c*i[0]-t)/(n-c),u=n*s+t;return vec2.fromValues(s,u)};module.exports=closestPoint;
|
|
282
279
|
|
|
283
|
-
},{"../vec2":
|
|
280
|
+
},{"../vec2":186,"./direction":96,"./origin":103}],94:[function(require,module,exports){
|
|
284
281
|
const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o);module.exports=copy;
|
|
285
282
|
|
|
286
|
-
},{}],
|
|
283
|
+
},{}],95:[function(require,module,exports){
|
|
287
284
|
const create=()=>[0,1,0];module.exports=create;
|
|
288
285
|
|
|
289
|
-
},{}],
|
|
286
|
+
},{}],96:[function(require,module,exports){
|
|
290
287
|
const vec2=require("../vec2"),direction=e=>{const c=vec2.normal(vec2.create(),e);return vec2.negate(c,c),c};module.exports=direction;
|
|
291
288
|
|
|
292
|
-
},{"../vec2":
|
|
289
|
+
},{"../vec2":186}],97:[function(require,module,exports){
|
|
293
290
|
const vec2=require("../vec2"),distanceToPoint=(e,t)=>{let o=vec2.dot(t,e);return o=Math.abs(o-e[2])};module.exports=distanceToPoint;
|
|
294
291
|
|
|
295
|
-
},{"../vec2":
|
|
292
|
+
},{"../vec2":186}],98:[function(require,module,exports){
|
|
296
293
|
const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2];module.exports=equals;
|
|
297
294
|
|
|
298
|
-
},{}],
|
|
295
|
+
},{}],99:[function(require,module,exports){
|
|
299
296
|
const vec2=require("../vec2"),fromPoints=(e,c,o)=>{const r=vec2.subtract(vec2.create(),o,c);vec2.normal(r,r),vec2.normalize(r,r);const t=vec2.dot(c,r);return e[0]=r[0],e[1]=r[1],e[2]=t,e};module.exports=fromPoints;
|
|
300
297
|
|
|
301
|
-
},{"../vec2":
|
|
298
|
+
},{"../vec2":186}],100:[function(require,module,exports){
|
|
302
299
|
const create=require("./create"),fromValues=(e,r,t)=>{const o=create();return o[0]=e,o[1]=r,o[2]=t,o};module.exports=fromValues;
|
|
303
300
|
|
|
304
|
-
},{"./create":
|
|
301
|
+
},{"./create":95}],101:[function(require,module,exports){
|
|
305
302
|
module.exports={clone:require("./clone"),closestPoint:require("./closestPoint"),copy:require("./copy"),create:require("./create"),direction:require("./direction"),distanceToPoint:require("./distanceToPoint"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromValues:require("./fromValues"),intersectPointOfLines:require("./intersectPointOfLines"),origin:require("./origin"),reverse:require("./reverse"),toString:require("./toString"),transform:require("./transform"),xAtY:require("./xAtY")};
|
|
306
303
|
|
|
307
|
-
},{"./clone":
|
|
304
|
+
},{"./clone":92,"./closestPoint":93,"./copy":94,"./create":95,"./direction":96,"./distanceToPoint":97,"./equals":98,"./fromPoints":99,"./fromValues":100,"./intersectPointOfLines":102,"./origin":103,"./reverse":104,"./toString":105,"./transform":106,"./xAtY":107}],102:[function(require,module,exports){
|
|
308
305
|
const vec2=require("../vec2"),{solve2Linear:solve2Linear}=require("../utils"),intersectToLine=(e,r)=>{const n=solve2Linear(e[0],e[1],r[0],r[1],e[2],r[2]);return vec2.clone(n)};module.exports=intersectToLine;
|
|
309
306
|
|
|
310
|
-
},{"../utils":
|
|
307
|
+
},{"../utils":165,"../vec2":186}],103:[function(require,module,exports){
|
|
311
308
|
const vec2=require("../vec2"),origin=e=>vec2.scale(vec2.create(),e,e[2]);module.exports=origin;
|
|
312
309
|
|
|
313
|
-
},{"../vec2":
|
|
310
|
+
},{"../vec2":186}],104:[function(require,module,exports){
|
|
314
311
|
const vec2=require("../vec2"),copy=require("./copy"),fromValues=require("./fromValues"),reverse=(e,r)=>{const c=vec2.negate(vec2.create(),r),o=-r[2];return copy(e,fromValues(c[0],c[1],o))};module.exports=reverse;
|
|
315
312
|
|
|
316
|
-
},{"../vec2":
|
|
313
|
+
},{"../vec2":186,"./copy":94,"./fromValues":100}],105:[function(require,module,exports){
|
|
317
314
|
const toString=t=>`line2: (${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)})`;module.exports=toString;
|
|
318
315
|
|
|
319
|
-
},{}],
|
|
316
|
+
},{}],106:[function(require,module,exports){
|
|
320
317
|
const vec2=require("../vec2"),fromPoints=require("./fromPoints"),origin=require("./origin"),direction=require("./direction"),transform=(r,o,i)=>{const e=origin(o),n=direction(o);return vec2.transform(e,e,i),vec2.transform(n,n,i),fromPoints(r,e,n)};module.exports=transform;
|
|
321
318
|
|
|
322
|
-
},{"../vec2":
|
|
319
|
+
},{"../vec2":186,"./direction":96,"./fromPoints":99,"./origin":103}],107:[function(require,module,exports){
|
|
323
320
|
const origin=require("./origin"),xAtY=(i,r)=>{let e=(i[2]-i[1]*r)/i[0];if(Number.isNaN(e)){e=origin(i)[0]}return e};module.exports=xAtY;
|
|
324
321
|
|
|
325
|
-
},{"./origin":
|
|
322
|
+
},{"./origin":103}],108:[function(require,module,exports){
|
|
326
323
|
const vec3=require("../vec3"),create=require("./create"),clone=e=>{const c=create();return vec3.copy(c[0],e[0]),vec3.copy(c[1],e[1]),c};module.exports=clone;
|
|
327
324
|
|
|
328
|
-
},{"../vec3":
|
|
325
|
+
},{"../vec3":217,"./create":111}],109:[function(require,module,exports){
|
|
329
326
|
const vec3=require("../vec3"),closestPoint=(e,c)=>{const t=e[0],o=e[1],s=vec3.dot(vec3.subtract(vec3.create(),c,t),o)/vec3.dot(o,o),v=vec3.scale(vec3.create(),o,s);return vec3.add(v,v,t),v};module.exports=closestPoint;
|
|
330
327
|
|
|
331
|
-
},{"../vec3":
|
|
328
|
+
},{"../vec3":217}],110:[function(require,module,exports){
|
|
332
329
|
const vec3=require("../vec3"),copy=(c,e)=>(vec3.copy(c[0],e[0]),vec3.copy(c[1],e[1]),c);module.exports=copy;
|
|
333
330
|
|
|
334
|
-
},{"../vec3":
|
|
331
|
+
},{"../vec3":217}],111:[function(require,module,exports){
|
|
335
332
|
const vec3=require("../vec3"),create=()=>[vec3.fromValues(0,0,0),vec3.fromValues(0,0,1)];module.exports=create;
|
|
336
333
|
|
|
337
|
-
},{"../vec3":
|
|
334
|
+
},{"../vec3":217}],112:[function(require,module,exports){
|
|
338
335
|
const direction=o=>o[1];module.exports=direction;
|
|
339
336
|
|
|
340
|
-
},{}],
|
|
337
|
+
},{}],113:[function(require,module,exports){
|
|
341
338
|
const vec3=require("../vec3"),closestPoint=require("./closestPoint"),distanceToPoint=(e,t)=>{const c=closestPoint(e,t),o=vec3.subtract(vec3.create(),t,c);return vec3.length(o)};module.exports=distanceToPoint;
|
|
342
339
|
|
|
343
|
-
},{"../vec3":
|
|
340
|
+
},{"../vec3":217,"./closestPoint":109}],114:[function(require,module,exports){
|
|
344
341
|
const vec3=require("../vec3"),equals=(e,s)=>!!vec3.equals(e[1],s[1])&&!!vec3.equals(e[0],s[0]);module.exports=equals;
|
|
345
342
|
|
|
346
|
-
},{"../vec3":
|
|
343
|
+
},{"../vec3":217}],115:[function(require,module,exports){
|
|
347
344
|
const vec3=require("../vec3"),{solve2Linear:solve2Linear}=require("../utils"),{EPS:EPS}=require("../constants"),fromPointAndDirection=require("./fromPointAndDirection"),fromPlanes=(e,r,o)=>{let n=vec3.cross(vec3.create(),r,o),s=vec3.length(n);if(s<EPS)throw new Error("parallel planes do not intersect");s=1/s,n=vec3.scale(n,n,s);const t=Math.abs(n[0]),a=Math.abs(n[1]),i=Math.abs(n[2]);let l,c;return t>=a&&t>=i?(c=solve2Linear(r[1],r[2],o[1],o[2],r[3],o[3]),l=vec3.fromValues(0,c[0],c[1])):a>=t&&a>=i?(c=solve2Linear(r[0],r[2],o[0],o[2],r[3],o[3]),l=vec3.fromValues(c[0],0,c[1])):(c=solve2Linear(r[0],r[1],o[0],o[1],r[3],o[3]),l=vec3.fromValues(c[0],c[1],0)),fromPointAndDirection(e,l,n)};module.exports=fromPlanes;
|
|
348
345
|
|
|
349
|
-
},{"../constants":
|
|
346
|
+
},{"../constants":90,"../utils":165,"../vec3":217,"./fromPointAndDirection":116}],116:[function(require,module,exports){
|
|
350
347
|
const vec3=require("../vec3"),fromPointAndDirection=(e,c,o)=>{const r=vec3.normalize(vec3.create(),o);return vec3.copy(e[0],c),vec3.copy(e[1],r),e};module.exports=fromPointAndDirection;
|
|
351
348
|
|
|
352
|
-
},{"../vec3":
|
|
349
|
+
},{"../vec3":217}],117:[function(require,module,exports){
|
|
353
350
|
const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),fromPoints=(o,r,e)=>{const t=vec3.subtract(vec3.create(),e,r);return fromPointAndDirection(o,r,t)};module.exports=fromPoints;
|
|
354
351
|
|
|
355
|
-
},{"../vec3":
|
|
352
|
+
},{"../vec3":217,"./fromPointAndDirection":116}],118:[function(require,module,exports){
|
|
356
353
|
module.exports={clone:require("./clone"),closestPoint:require("./closestPoint"),copy:require("./copy"),create:require("./create"),direction:require("./direction"),distanceToPoint:require("./distanceToPoint"),equals:require("./equals"),fromPlanes:require("./fromPlanes"),fromPointAndDirection:require("./fromPointAndDirection"),fromPoints:require("./fromPoints"),intersectPointOfLineAndPlane:require("./intersectPointOfLineAndPlane"),origin:require("./origin"),reverse:require("./reverse"),toString:require("./toString"),transform:require("./transform")};
|
|
357
354
|
|
|
358
|
-
},{"./clone":
|
|
355
|
+
},{"./clone":108,"./closestPoint":109,"./copy":110,"./create":111,"./direction":112,"./distanceToPoint":113,"./equals":114,"./fromPlanes":115,"./fromPointAndDirection":116,"./fromPoints":117,"./intersectPointOfLineAndPlane":119,"./origin":120,"./reverse":121,"./toString":122,"./transform":123}],119:[function(require,module,exports){
|
|
359
356
|
const vec3=require("../vec3"),intersectToPlane=(e,c)=>{const t=c,r=c[3],o=e[0],v=e[1],n=(r-vec3.dot(t,o))/vec3.dot(t,v);return vec3.add(vec3.create(),o,vec3.scale(vec3.create(),v,n))};module.exports=intersectToPlane;
|
|
360
357
|
|
|
361
|
-
},{"../vec3":
|
|
358
|
+
},{"../vec3":217}],120:[function(require,module,exports){
|
|
362
359
|
const origin=o=>o[0];module.exports=origin;
|
|
363
360
|
|
|
364
|
-
},{}],
|
|
361
|
+
},{}],121:[function(require,module,exports){
|
|
365
362
|
const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),reverse=(e,r)=>{const n=vec3.clone(r[0]),o=vec3.negate(vec3.create(),r[1]);return fromPointAndDirection(e,n,o)};module.exports=reverse;
|
|
366
363
|
|
|
367
|
-
},{"../vec3":
|
|
364
|
+
},{"../vec3":217,"./fromPointAndDirection":116}],122:[function(require,module,exports){
|
|
368
365
|
const toString=t=>{const o=t[0],i=t[1];return`line3: point: (${o[0].toFixed(7)}, ${o[1].toFixed(7)}, ${o[2].toFixed(7)}) direction: (${i[0].toFixed(7)}, ${i[1].toFixed(7)}, ${i[2].toFixed(7)})`};module.exports=toString;
|
|
369
366
|
|
|
370
|
-
},{}],
|
|
367
|
+
},{}],123:[function(require,module,exports){
|
|
371
368
|
const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),transform=(r,e,t)=>{const o=e[0],c=e[1],n=vec3.add(vec3.create(),o,c),i=vec3.transform(vec3.create(),o,t),a=vec3.transform(n,n,t),m=vec3.subtract(a,a,i);return fromPointAndDirection(r,i,m)};module.exports=transform;
|
|
372
369
|
|
|
373
|
-
},{"../vec3":
|
|
370
|
+
},{"../vec3":217,"./fromPointAndDirection":116}],124:[function(require,module,exports){
|
|
374
371
|
const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d[2]=o[2]+a[2],d[3]=o[3]+a[3],d[4]=o[4]+a[4],d[5]=o[5]+a[5],d[6]=o[6]+a[6],d[7]=o[7]+a[7],d[8]=o[8]+a[8],d[9]=o[9]+a[9],d[10]=o[10]+a[10],d[11]=o[11]+a[11],d[12]=o[12]+a[12],d[13]=o[13]+a[13],d[14]=o[14]+a[14],d[15]=o[15]+a[15],d);module.exports=add;
|
|
375
372
|
|
|
376
|
-
},{}],
|
|
373
|
+
},{}],125:[function(require,module,exports){
|
|
377
374
|
const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r};module.exports=clone;
|
|
378
375
|
|
|
379
|
-
},{"./create":
|
|
376
|
+
},{"./create":128}],126:[function(require,module,exports){
|
|
380
377
|
const EPSILON=1e-6;module.exports={EPSILON:1e-6};
|
|
381
378
|
|
|
382
|
-
},{}],
|
|
379
|
+
},{}],127:[function(require,module,exports){
|
|
383
380
|
const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o[4]=c[4],o[5]=c[5],o[6]=c[6],o[7]=c[7],o[8]=c[8],o[9]=c[9],o[10]=c[10],o[11]=c[11],o[12]=c[12],o[13]=c[13],o[14]=c[14],o[15]=c[15],o);module.exports=copy;
|
|
384
381
|
|
|
385
|
-
},{}],
|
|
382
|
+
},{}],128:[function(require,module,exports){
|
|
386
383
|
const create=()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];module.exports=create;
|
|
387
384
|
|
|
388
|
-
},{}],
|
|
385
|
+
},{}],129:[function(require,module,exports){
|
|
389
386
|
const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2]&&e[3]===s[3]&&e[4]===s[4]&&e[5]===s[5]&&e[6]===s[6]&&e[7]===s[7]&&e[8]===s[8]&&e[9]===s[9]&&e[10]===s[10]&&e[11]===s[11]&&e[12]===s[12]&&e[13]===s[13]&&e[14]===s[14]&&e[15]===s[15];module.exports=equals;
|
|
390
387
|
|
|
391
|
-
},{}],
|
|
388
|
+
},{}],130:[function(require,module,exports){
|
|
392
389
|
const identity=require("./identity"),{EPSILON:EPSILON}=require("./constants"),fromRotation=(t,o,e)=>{let[i,n,r]=e,a=Math.hypot(i,n,r);if(Math.abs(a)<EPSILON)return identity(t);i*=a=1/a,n*=a,r*=a;const s=Math.sin(o),h=Math.cos(o),u=1-h;return t[0]=i*i*u+h,t[1]=n*i*u+r*s,t[2]=r*i*u-n*s,t[3]=0,t[4]=i*n*u-r*s,t[5]=n*n*u+h,t[6]=r*n*u+i*s,t[7]=0,t[8]=i*r*u+n*s,t[9]=n*r*u-i*s,t[10]=r*r*u+h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};module.exports=fromRotation;
|
|
393
390
|
|
|
394
|
-
},{"./constants":
|
|
391
|
+
},{"./constants":126,"./identity":139}],131:[function(require,module,exports){
|
|
395
392
|
const fromScaling=(o,c)=>(o[0]=c[0],o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=c[1],o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=c[2],o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o);module.exports=fromScaling;
|
|
396
393
|
|
|
397
|
-
},{}],
|
|
394
|
+
},{}],132:[function(require,module,exports){
|
|
398
395
|
const fromTaitBryanRotation=(t,o,a,n)=>{const s=Math.sin(o),i=Math.cos(o),r=Math.sin(a),h=Math.cos(a),M=Math.sin(n),c=Math.cos(n);return t[0]=h*i,t[1]=h*s,t[2]=-r,t[3]=0,t[4]=M*r*i-c*s,t[5]=c*i+M*r*s,t[6]=M*h,t[7]=0,t[8]=M*s+c*r*i,t[9]=c*r*s-M*i,t[10]=c*h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};module.exports=fromTaitBryanRotation;
|
|
399
396
|
|
|
400
|
-
},{}],
|
|
397
|
+
},{}],133:[function(require,module,exports){
|
|
401
398
|
const fromTranslation=(o,n)=>(o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=n[0],o[13]=n[1],o[14]=n[2],o[15]=1,o);module.exports=fromTranslation;
|
|
402
399
|
|
|
403
|
-
},{}],
|
|
400
|
+
},{}],134:[function(require,module,exports){
|
|
404
401
|
const create=require("./create"),fromValues=(e,r,t,o,a,c,s,u,l,m,n,f,V,d,i,p)=>{const q=create();return q[0]=e,q[1]=r,q[2]=t,q[3]=o,q[4]=a,q[5]=c,q[6]=s,q[7]=u,q[8]=l,q[9]=m,q[10]=n,q[11]=f,q[12]=V,q[13]=d,q[14]=i,q[15]=p,q};module.exports=fromValues;
|
|
405
402
|
|
|
406
|
-
},{"./create":
|
|
403
|
+
},{"./create":128}],135:[function(require,module,exports){
|
|
407
404
|
const vec3=require("../vec3"),fromRotation=require("./fromRotation"),fromVectorRotation=(o,e,t)=>{const r=vec3.normalize(vec3.create(),e),c=vec3.normalize(vec3.create(),t),n=vec3.cross(vec3.create(),c,r),a=vec3.dot(c,r);if(-1===a)return fromRotation(o,Math.PI,vec3.orthogonal(n,r));const i=1/(1+a);return o[0]=n[0]*n[0]*i+a,o[1]=n[1]*n[0]*i-n[2],o[2]=n[2]*n[0]*i+n[1],o[3]=0,o[4]=n[0]*n[1]*i+n[2],o[5]=n[1]*n[1]*i+a,o[6]=n[2]*n[1]*i-n[0],o[7]=0,o[8]=n[0]*n[2]*i-n[1],o[9]=n[1]*n[2]*i+n[0],o[10]=n[2]*n[2]*i+a,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromVectorRotation;
|
|
408
405
|
|
|
409
|
-
},{"../vec3":
|
|
406
|
+
},{"../vec3":217,"./fromRotation":130}],136:[function(require,module,exports){
|
|
410
407
|
const fromXRotation=(o,t)=>{const n=Math.sin(t),r=Math.cos(t);return o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=r,o[6]=n,o[7]=0,o[8]=0,o[9]=-n,o[10]=r,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromXRotation;
|
|
411
408
|
|
|
412
|
-
},{}],
|
|
409
|
+
},{}],137:[function(require,module,exports){
|
|
413
410
|
const fromYRotation=(o,t)=>{const n=Math.sin(t),r=Math.cos(t);return o[0]=r,o[1]=0,o[2]=-n,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=n,o[9]=0,o[10]=r,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromYRotation;
|
|
414
411
|
|
|
415
|
-
},{}],
|
|
412
|
+
},{}],138:[function(require,module,exports){
|
|
416
413
|
const fromZRotation=(o,t)=>{const n=Math.sin(t),r=Math.cos(t);return o[0]=r,o[1]=n,o[2]=0,o[3]=0,o[4]=-n,o[5]=r,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromZRotation;
|
|
417
414
|
|
|
418
|
-
},{}],
|
|
415
|
+
},{}],139:[function(require,module,exports){
|
|
419
416
|
const identity=t=>(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t);module.exports=identity;
|
|
420
417
|
|
|
421
|
-
},{}],
|
|
418
|
+
},{}],140:[function(require,module,exports){
|
|
422
419
|
module.exports={add:require("./add"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),invert:require("./invert"),equals:require("./equals"),fromRotation:require("./fromRotation"),fromScaling:require("./fromScaling"),fromTaitBryanRotation:require("./fromTaitBryanRotation"),fromTranslation:require("./fromTranslation"),fromValues:require("./fromValues"),fromVectorRotation:require("./fromVectorRotation"),fromXRotation:require("./fromXRotation"),fromYRotation:require("./fromYRotation"),fromZRotation:require("./fromZRotation"),identity:require("./identity"),isIdentity:require("./isIdentity"),isOnlyTransformScale:require("./isOnlyTransformScale"),isMirroring:require("./isMirroring"),mirrorByPlane:require("./mirrorByPlane"),multiply:require("./multiply"),rotate:require("./rotate"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),scale:require("./scale"),subtract:require("./subtract"),toString:require("./toString"),translate:require("./translate")};
|
|
423
420
|
|
|
424
|
-
},{"./add":
|
|
421
|
+
},{"./add":124,"./clone":125,"./copy":127,"./create":128,"./equals":129,"./fromRotation":130,"./fromScaling":131,"./fromTaitBryanRotation":132,"./fromTranslation":133,"./fromValues":134,"./fromVectorRotation":135,"./fromXRotation":136,"./fromYRotation":137,"./fromZRotation":138,"./identity":139,"./invert":141,"./isIdentity":142,"./isMirroring":143,"./isOnlyTransformScale":144,"./mirrorByPlane":145,"./multiply":146,"./rotate":147,"./rotateX":148,"./rotateY":149,"./rotateZ":150,"./scale":151,"./subtract":152,"./toString":153,"./translate":154}],141:[function(require,module,exports){
|
|
425
422
|
const invert=(t,e)=>{const n=e[0],r=e[1],l=e[2],o=e[3],s=e[4],u=e[5],c=e[6],i=e[7],v=e[8],d=e[9],m=e[10],p=e[11],x=e[12],a=e[13],b=e[14],f=e[15],g=n*u-r*s,h=n*c-l*s,j=n*i-o*s,k=r*c-l*u,q=r*i-o*u,w=l*i-o*c,y=v*a-d*x,z=v*b-m*x,A=v*f-p*x,B=d*b-m*a,C=d*f-p*a,D=m*f-p*b;let E=g*D-h*C+j*B+k*A-q*z+w*y;return E?(E=1/E,t[0]=(u*D-c*C+i*B)*E,t[1]=(l*C-r*D-o*B)*E,t[2]=(a*w-b*q+f*k)*E,t[3]=(m*q-d*w-p*k)*E,t[4]=(c*A-s*D-i*z)*E,t[5]=(n*D-l*A+o*z)*E,t[6]=(b*j-x*w-f*h)*E,t[7]=(v*w-m*j+p*h)*E,t[8]=(s*C-u*A+i*y)*E,t[9]=(r*A-n*C-o*y)*E,t[10]=(x*q-a*j+f*g)*E,t[11]=(d*j-v*q-p*g)*E,t[12]=(u*z-s*B-c*y)*E,t[13]=(n*B-r*z+l*y)*E,t[14]=(a*h-x*k-b*g)*E,t[15]=(v*k-d*h+m*g)*E,t):null};module.exports=invert;
|
|
426
423
|
|
|
427
|
-
},{}],
|
|
424
|
+
},{}],142:[function(require,module,exports){
|
|
428
425
|
const isIdentity=t=>1===t[0]&&0===t[1]&&0===t[2]&&0===t[3]&&0===t[4]&&1===t[5]&&0===t[6]&&0===t[7]&&0===t[8]&&0===t[9]&&1===t[10]&&0===t[11]&&0===t[12]&&0===t[13]&&0===t[14]&&1===t[15];module.exports=isIdentity;
|
|
429
426
|
|
|
430
|
-
},{}],
|
|
427
|
+
},{}],143:[function(require,module,exports){
|
|
431
428
|
const cross=require("../vec3/cross"),dot=require("../vec3/dot"),fromValues=require("../vec3/fromValues"),isMirroring=r=>{const e=fromValues(r[0],r[4],r[8]),o=fromValues(r[1],r[5],r[9]),s=fromValues(r[2],r[6],r[10]);return dot(cross(e,e,o),s)<0};module.exports=isMirroring;
|
|
432
429
|
|
|
433
|
-
},{"../vec3/cross":
|
|
430
|
+
},{"../vec3/cross":209,"../vec3/dot":212,"../vec3/fromValues":215}],144:[function(require,module,exports){
|
|
434
431
|
const isOnlyTransformScale=s=>isZero(s[1])&&isZero(s[2])&&isZero(s[3])&&isZero(s[4])&&isZero(s[6])&&isZero(s[7])&&isZero(s[8])&&isZero(s[9])&&isZero(s[11])&&1===s[15],isZero=s=>Math.abs(s)<Number.EPSILON;module.exports=isOnlyTransformScale;
|
|
435
432
|
|
|
436
|
-
},{}],
|
|
433
|
+
},{}],145:[function(require,module,exports){
|
|
437
434
|
const mirrorByPlane=(r,o)=>{const[e,n,t,l]=o;return r[0]=1-2*e*e,r[1]=-2*n*e,r[2]=-2*t*e,r[3]=0,r[4]=-2*e*n,r[5]=1-2*n*n,r[6]=-2*t*n,r[7]=0,r[8]=-2*e*t,r[9]=-2*n*t,r[10]=1-2*t*t,r[11]=0,r[12]=2*e*l,r[13]=2*n*l,r[14]=2*t*l,r[15]=1,r};module.exports=mirrorByPlane;
|
|
438
435
|
|
|
439
|
-
},{}],
|
|
436
|
+
},{}],146:[function(require,module,exports){
|
|
440
437
|
const multiply=(t,l,e)=>{const o=l[0],u=l[1],m=l[2],n=l[3],p=l[4],r=l[5],s=l[6],c=l[7],i=l[8],y=l[9],d=l[10],x=l[11],a=l[12],b=l[13],f=l[14],g=l[15];let h=e[0],j=e[1],k=e[2],q=e[3];return t[0]=h*o+j*p+k*i+q*a,t[1]=h*u+j*r+k*y+q*b,t[2]=h*m+j*s+k*d+q*f,t[3]=h*n+j*c+k*x+q*g,h=e[4],j=e[5],k=e[6],q=e[7],t[4]=h*o+j*p+k*i+q*a,t[5]=h*u+j*r+k*y+q*b,t[6]=h*m+j*s+k*d+q*f,t[7]=h*n+j*c+k*x+q*g,h=e[8],j=e[9],k=e[10],q=e[11],t[8]=h*o+j*p+k*i+q*a,t[9]=h*u+j*r+k*y+q*b,t[10]=h*m+j*s+k*d+q*f,t[11]=h*n+j*c+k*x+q*g,h=e[12],j=e[13],k=e[14],q=e[15],t[12]=h*o+j*p+k*i+q*a,t[13]=h*u+j*r+k*y+q*b,t[14]=h*m+j*s+k*d+q*f,t[15]=h*n+j*c+k*x+q*g,t};module.exports=multiply;
|
|
441
438
|
|
|
442
|
-
},{}],
|
|
439
|
+
},{}],147:[function(require,module,exports){
|
|
443
440
|
const copy=require("./copy"),rotate=(t,o,e,r)=>{let[a,c,s]=r,h=Math.hypot(a,c,s);if(Math.abs(h)<1e-6)return copy(t,o);a*=h=1/h,c*=h,s*=h;const n=Math.sin(e),p=Math.cos(e),u=1-p,y=o[0],M=o[1],i=o[2],l=o[3],b=o[4],d=o[5],f=o[6],m=o[7],q=o[8],x=o[9],g=o[10],j=o[11],k=a*a*u+p,v=c*a*u+s*n,w=s*a*u-c*n,z=a*c*u-s*n,A=c*c*u+p,B=s*c*u+a*n,C=a*s*u+c*n,D=c*s*u-a*n,E=s*s*u+p;return t[0]=y*k+b*v+q*w,t[1]=M*k+d*v+x*w,t[2]=i*k+f*v+g*w,t[3]=l*k+m*v+j*w,t[4]=y*z+b*A+q*B,t[5]=M*z+d*A+x*B,t[6]=i*z+f*A+g*B,t[7]=l*z+m*A+j*B,t[8]=y*C+b*D+q*E,t[9]=M*C+d*D+x*E,t[10]=i*C+f*D+g*E,t[11]=l*C+m*D+j*E,o!==t&&(t[12]=o[12],t[13]=o[13],t[14]=o[14],t[15]=o[15]),t};module.exports=rotate;
|
|
444
441
|
|
|
445
|
-
},{"./copy":
|
|
442
|
+
},{"./copy":127}],148:[function(require,module,exports){
|
|
446
443
|
const rotateX=(t,o,e)=>{const r=Math.sin(e),s=Math.cos(e),a=o[4],n=o[5],c=o[6],h=o[7],u=o[8],M=o[9],X=o[10],d=o[11];return o!==t&&(t[0]=o[0],t[1]=o[1],t[2]=o[2],t[3]=o[3],t[12]=o[12],t[13]=o[13],t[14]=o[14],t[15]=o[15]),t[4]=a*s+u*r,t[5]=n*s+M*r,t[6]=c*s+X*r,t[7]=h*s+d*r,t[8]=u*s-a*r,t[9]=M*s-n*r,t[10]=X*s-c*r,t[11]=d*s-h*r,t};module.exports=rotateX;
|
|
447
444
|
|
|
448
|
-
},{}],
|
|
445
|
+
},{}],149:[function(require,module,exports){
|
|
449
446
|
const rotateY=(t,o,e)=>{const r=Math.sin(e),s=Math.cos(e),a=o[0],n=o[1],c=o[2],h=o[3],u=o[8],M=o[9],Y=o[10],d=o[11];return o!==t&&(t[4]=o[4],t[5]=o[5],t[6]=o[6],t[7]=o[7],t[12]=o[12],t[13]=o[13],t[14]=o[14],t[15]=o[15]),t[0]=a*s-u*r,t[1]=n*s-M*r,t[2]=c*s-Y*r,t[3]=h*s-d*r,t[8]=a*r+u*s,t[9]=n*r+M*s,t[10]=c*r+Y*s,t[11]=h*r+d*s,t};module.exports=rotateY;
|
|
450
447
|
|
|
451
|
-
},{}],
|
|
448
|
+
},{}],150:[function(require,module,exports){
|
|
452
449
|
const rotateZ=(t,o,e)=>{const r=Math.sin(e),s=Math.cos(e),a=o[0],n=o[1],c=o[2],h=o[3],u=o[4],M=o[5],Z=o[6],d=o[7];return o!==t&&(t[8]=o[8],t[9]=o[9],t[10]=o[10],t[11]=o[11],t[12]=o[12],t[13]=o[13],t[14]=o[14],t[15]=o[15]),t[0]=a*s+u*r,t[1]=n*s+M*r,t[2]=c*s+Z*r,t[3]=h*s+d*r,t[4]=u*s-a*r,t[5]=M*s-n*r,t[6]=Z*s-c*r,t[7]=d*s-h*r,t};module.exports=rotateZ;
|
|
453
450
|
|
|
454
|
-
},{}],
|
|
451
|
+
},{}],151:[function(require,module,exports){
|
|
455
452
|
const scale=(e,s,c)=>{const o=c[0],t=c[1],l=c[2];return e[0]=s[0]*o,e[1]=s[1]*o,e[2]=s[2]*o,e[3]=s[3]*o,e[4]=s[4]*t,e[5]=s[5]*t,e[6]=s[6]*t,e[7]=s[7]*t,e[8]=s[8]*l,e[9]=s[9]*l,e[10]=s[10]*l,e[11]=s[11]*l,e[12]=s[12],e[13]=s[13],e[14]=s[14],e[15]=s[15],e};module.exports=scale;
|
|
456
453
|
|
|
457
|
-
},{}],
|
|
454
|
+
},{}],152:[function(require,module,exports){
|
|
458
455
|
const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t[2]=s[2]-c[2],t[3]=s[3]-c[3],t[4]=s[4]-c[4],t[5]=s[5]-c[5],t[6]=s[6]-c[6],t[7]=s[7]-c[7],t[8]=s[8]-c[8],t[9]=s[9]-c[9],t[10]=s[10]-c[10],t[11]=s[11]-c[11],t[12]=s[12]-c[12],t[13]=s[13]-c[13],t[14]=s[14]-c[14],t[15]=s[15]-c[15],t);module.exports=subtract;
|
|
459
456
|
|
|
460
|
-
},{}],
|
|
457
|
+
},{}],153:[function(require,module,exports){
|
|
461
458
|
const toString=t=>t.map(t=>t.toFixed(7)).toString();module.exports=toString;
|
|
462
459
|
|
|
463
|
-
},{}],
|
|
460
|
+
},{}],154:[function(require,module,exports){
|
|
464
461
|
const translate=(t,e,n)=>{const r=n[0],s=n[1],a=n[2];let l,o,c,u,d,m,p,x,b,f,g,h;return e===t?(t[12]=e[0]*r+e[4]*s+e[8]*a+e[12],t[13]=e[1]*r+e[5]*s+e[9]*a+e[13],t[14]=e[2]*r+e[6]*s+e[10]*a+e[14],t[15]=e[3]*r+e[7]*s+e[11]*a+e[15]):(l=e[0],o=e[1],c=e[2],u=e[3],d=e[4],m=e[5],p=e[6],x=e[7],b=e[8],f=e[9],g=e[10],h=e[11],t[0]=l,t[1]=o,t[2]=c,t[3]=u,t[4]=d,t[5]=m,t[6]=p,t[7]=x,t[8]=b,t[9]=f,t[10]=g,t[11]=h,t[12]=l*r+d*s+b*a+e[12],t[13]=o*r+m*s+f*a+e[13],t[14]=c*r+p*s+g*a+e[14],t[15]=u*r+x*s+h*a+e[15]),t};module.exports=translate;
|
|
465
462
|
|
|
466
|
-
},{}],
|
|
463
|
+
},{}],155:[function(require,module,exports){
|
|
467
464
|
const flip=(l,o)=>(l[0]=-o[0],l[1]=-o[1],l[2]=-o[2],l[3]=-o[3],l);module.exports=flip;
|
|
468
465
|
|
|
469
|
-
},{}],
|
|
466
|
+
},{}],156:[function(require,module,exports){
|
|
470
467
|
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;
|
|
471
468
|
|
|
472
|
-
},{"../vec3":
|
|
469
|
+
},{"../vec3":217}],157:[function(require,module,exports){
|
|
473
470
|
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;
|
|
474
471
|
|
|
475
|
-
},{"../vec3":
|
|
472
|
+
},{"../vec3":217}],158:[function(require,module,exports){
|
|
476
473
|
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;
|
|
477
474
|
|
|
478
|
-
},{"../constants":
|
|
475
|
+
},{"../constants":90,"../vec3":217}],159:[function(require,module,exports){
|
|
479
476
|
module.exports={clone:require("../vec4/clone"),copy:require("../vec4/copy"),create:require("../vec4/create"),equals:require("../vec4/equals"),flip:require("./flip"),fromNormalAndPoint:require("./fromNormalAndPoint"),fromValues:require("../vec4/fromValues"),fromPoints:require("./fromPoints"),fromPointsRandom:require("./fromPointsRandom"),projectionOfPoint:require("./projectionOfPoint"),signedDistanceToPoint:require("./signedDistanceToPoint"),toString:require("../vec4/toString"),transform:require("./transform")};
|
|
480
477
|
|
|
481
|
-
},{"../vec4/clone":
|
|
478
|
+
},{"../vec4/clone":236,"../vec4/copy":237,"../vec4/create":238,"../vec4/equals":240,"../vec4/fromValues":242,"../vec4/toString":244,"./flip":155,"./fromNormalAndPoint":156,"./fromPoints":157,"./fromPointsRandom":158,"./projectionOfPoint":160,"./signedDistanceToPoint":161,"./transform":162}],160:[function(require,module,exports){
|
|
482
479
|
const vec3=require("../vec3"),projectionOfPoint=(e,o)=>{const r=o[0]*e[0]+o[1]*e[1]+o[2]*e[2]-e[3],t=o[0]-r*e[0],c=o[1]-r*e[1],n=o[2]-r*e[2];return vec3.fromValues(t,c,n)};module.exports=projectionOfPoint;
|
|
483
480
|
|
|
484
|
-
},{"../vec3":
|
|
481
|
+
},{"../vec3":217}],161:[function(require,module,exports){
|
|
485
482
|
const vec3=require("../vec3"),signedDistanceToPoint=(e,o)=>vec3.dot(e,o)-e[3];module.exports=signedDistanceToPoint;
|
|
486
483
|
|
|
487
|
-
},{"../vec3":
|
|
484
|
+
},{"../vec3":217}],162:[function(require,module,exports){
|
|
488
485
|
const mat4=require("../mat4"),vec3=require("../vec3"),fromPoints=require("./fromPoints"),flip=require("./flip"),transform=(e,r,c)=>{const t=mat4.isMirroring(c),o=vec3.orthogonal(vec3.create(),r),a=vec3.cross(o,r,o),v=vec3.cross(vec3.create(),r,a);let s=vec3.fromScalar(vec3.create(),r[3]);vec3.multiply(s,s,r);let i=vec3.add(vec3.create(),s,a),m=vec3.add(vec3.create(),s,v);return s=vec3.transform(s,s,c),i=vec3.transform(i,i,c),m=vec3.transform(m,m,c),fromPoints(e,s,i,m),t&&flip(e,e),e};module.exports=transform;
|
|
489
486
|
|
|
490
|
-
},{"../mat4":
|
|
491
|
-
const
|
|
487
|
+
},{"../mat4":140,"../vec3":217,"./flip":155,"./fromPoints":157}],163:[function(require,module,exports){
|
|
488
|
+
const{NEPS:NEPS}=require("../constants"),aboutEqualNormals=(a,s)=>Math.abs(a[0]-s[0])<=NEPS&&Math.abs(a[1]-s[1])<=NEPS&&Math.abs(a[2]-s[2])<=NEPS;module.exports=aboutEqualNormals;
|
|
492
489
|
|
|
493
|
-
},{}],
|
|
490
|
+
},{"../constants":90}],164:[function(require,module,exports){
|
|
494
491
|
const area=e=>{let t=0;for(let r=0;r<e.length;r++){const l=(r+1)%e.length;t+=e[r][0]*e[l][1],t-=e[l][0]*e[r][1]}return t/2};module.exports=area;
|
|
495
492
|
|
|
496
|
-
},{}],
|
|
493
|
+
},{}],165:[function(require,module,exports){
|
|
497
494
|
module.exports={aboutEqualNormals:require("./aboutEqualNormals"),area:require("./area"),interpolateBetween2DPointsForY:require("./interpolateBetween2DPointsForY"),intersect:require("./intersect"),solve2Linear:require("./solve2Linear")};
|
|
498
495
|
|
|
499
|
-
},{"./aboutEqualNormals":
|
|
496
|
+
},{"./aboutEqualNormals":163,"./area":164,"./interpolateBetween2DPointsForY":166,"./intersect":167,"./solve2Linear":168}],166:[function(require,module,exports){
|
|
500
497
|
const interpolateBetween2DPointsForY=(e,t,o)=>{let n,r=o-e[1],i=t[1]-e[1];return i<0&&(r=-r,i=-i),n=r<=0?0:r>=i?1:i<1e-10?.5:r/i,e[0]+n*(t[0]-e[0])};module.exports=interpolateBetween2DPointsForY;
|
|
501
498
|
|
|
502
|
-
},{}],
|
|
499
|
+
},{}],167:[function(require,module,exports){
|
|
503
500
|
const intersect=(t,e,r,n)=>{if(t[0]===e[0]&&t[1]===e[1]||r[0]===n[0]&&r[1]===n[1])return;const s=(n[1]-r[1])*(e[0]-t[0])-(n[0]-r[0])*(e[1]-t[1]);if(Math.abs(s)<Number.MIN_VALUE)return;const o=((n[0]-r[0])*(t[1]-r[1])-(n[1]-r[1])*(t[0]-r[0]))/s,c=((e[0]-t[0])*(t[1]-r[1])-(e[1]-t[1])*(t[0]-r[0]))/s;return o<0||o>1||c<0||c>1?void 0:[t[0]+o*(e[0]-t[0]),t[1]+o*(e[1]-t[1])]};module.exports=intersect;
|
|
504
501
|
|
|
505
|
-
},{}],
|
|
502
|
+
},{}],168:[function(require,module,exports){
|
|
506
503
|
const solve2Linear=(e,o,n,r,s,t)=>{const l=1/(e*r-o*n);let a=s*r-o*t,c=-s*n+e*t;return[a*=l,c*=l]};module.exports=solve2Linear;
|
|
507
504
|
|
|
508
|
-
},{}],
|
|
505
|
+
},{}],169:[function(require,module,exports){
|
|
509
506
|
const abs=(a,s)=>(a[0]=Math.abs(s[0]),a[1]=Math.abs(s[1]),a);module.exports=abs;
|
|
510
507
|
|
|
511
|
-
},{}],
|
|
508
|
+
},{}],170:[function(require,module,exports){
|
|
512
509
|
const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d);module.exports=add;
|
|
513
510
|
|
|
514
|
-
},{}],
|
|
511
|
+
},{}],171:[function(require,module,exports){
|
|
515
512
|
module.exports=require("./angleRadians");
|
|
516
513
|
|
|
517
|
-
},{"./angleRadians":
|
|
514
|
+
},{"./angleRadians":173}],172:[function(require,module,exports){
|
|
518
515
|
const angleRadians=require("./angleRadians"),angleDegrees=e=>57.29577951308232*angleRadians(e);module.exports=angleDegrees;
|
|
519
516
|
|
|
520
|
-
},{"./angleRadians":
|
|
517
|
+
},{"./angleRadians":173}],173:[function(require,module,exports){
|
|
521
518
|
const angleRadians=a=>Math.atan2(a[1],a[0]);module.exports=angleRadians;
|
|
522
519
|
|
|
523
|
-
},{}],
|
|
520
|
+
},{}],174:[function(require,module,exports){
|
|
524
521
|
const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r};module.exports=clone;
|
|
525
522
|
|
|
526
|
-
},{"./create":
|
|
523
|
+
},{"./create":176}],175:[function(require,module,exports){
|
|
527
524
|
const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o);module.exports=copy;
|
|
528
525
|
|
|
529
|
-
},{}],
|
|
526
|
+
},{}],176:[function(require,module,exports){
|
|
530
527
|
const create=()=>[0,0];module.exports=create;
|
|
531
528
|
|
|
532
|
-
},{}],
|
|
529
|
+
},{}],177:[function(require,module,exports){
|
|
533
530
|
const cross=(s,o,c)=>(s[0]=0,s[1]=0,s[2]=o[0]*c[1]-o[1]*c[0],s);module.exports=cross;
|
|
534
531
|
|
|
535
|
-
},{}],
|
|
532
|
+
},{}],178:[function(require,module,exports){
|
|
536
533
|
const distance=(t,e)=>{const n=e[0]-t[0],o=e[1]-t[1];return Math.hypot(n,o)};module.exports=distance;
|
|
537
534
|
|
|
538
|
-
},{}],
|
|
535
|
+
},{}],179:[function(require,module,exports){
|
|
539
536
|
const divide=(d,e,i)=>(d[0]=e[0]/i[0],d[1]=e[1]/i[1],d);module.exports=divide;
|
|
540
537
|
|
|
541
|
-
},{}],
|
|
538
|
+
},{}],180:[function(require,module,exports){
|
|
542
539
|
const dot=(o,t)=>o[0]*t[0]+o[1]*t[1];module.exports=dot;
|
|
543
540
|
|
|
544
|
-
},{}],
|
|
541
|
+
},{}],181:[function(require,module,exports){
|
|
545
542
|
const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1];module.exports=equals;
|
|
546
543
|
|
|
547
|
-
},{}],
|
|
544
|
+
},{}],182:[function(require,module,exports){
|
|
548
545
|
const fromAngleRadians=require("./fromAngleRadians"),fromAngleDegrees=(e,r)=>fromAngleRadians(e,Math.PI*r/180);module.exports=fromAngleDegrees;
|
|
549
546
|
|
|
550
|
-
},{"./fromAngleRadians":
|
|
547
|
+
},{"./fromAngleRadians":183}],183:[function(require,module,exports){
|
|
551
548
|
const fromAngleRadians=(a,n)=>(a[0]=Math.cos(n),a[1]=Math.sin(n),a);module.exports=fromAngleRadians;
|
|
552
549
|
|
|
553
|
-
},{}],
|
|
550
|
+
},{}],184:[function(require,module,exports){
|
|
554
551
|
const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o);module.exports=fromScalar;
|
|
555
552
|
|
|
556
|
-
},{}],
|
|
553
|
+
},{}],185:[function(require,module,exports){
|
|
557
554
|
const create=require("./create"),fromValues=(e,r)=>{const t=create();return t[0]=e,t[1]=r,t};module.exports=fromValues;
|
|
558
555
|
|
|
559
|
-
},{"./create":
|
|
556
|
+
},{"./create":176}],186:[function(require,module,exports){
|
|
560
557
|
module.exports={abs:require("./abs"),add:require("./add"),angle:require("./angle"),angleDegrees:require("./angleDegrees"),angleRadians:require("./angleRadians"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),cross:require("./cross"),distance:require("./distance"),divide:require("./divide"),dot:require("./dot"),equals:require("./equals"),fromAngleDegrees:require("./fromAngleDegrees"),fromAngleRadians:require("./fromAngleRadians"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),length:require("./length"),lerp:require("./lerp"),max:require("./max"),min:require("./min"),multiply:require("./multiply"),negate:require("./negate"),normal:require("./normal"),normalize:require("./normalize"),rotate:require("./rotate"),scale:require("./scale"),snap:require("./snap"),squaredDistance:require("./squaredDistance"),squaredLength:require("./squaredLength"),subtract:require("./subtract"),toString:require("./toString"),transform:require("./transform")};
|
|
561
558
|
|
|
562
|
-
},{"./abs":
|
|
559
|
+
},{"./abs":169,"./add":170,"./angle":171,"./angleDegrees":172,"./angleRadians":173,"./clone":174,"./copy":175,"./create":176,"./cross":177,"./distance":178,"./divide":179,"./dot":180,"./equals":181,"./fromAngleDegrees":182,"./fromAngleRadians":183,"./fromScalar":184,"./fromValues":185,"./length":187,"./lerp":188,"./max":189,"./min":190,"./multiply":191,"./negate":192,"./normal":193,"./normalize":194,"./rotate":195,"./scale":196,"./snap":197,"./squaredDistance":198,"./squaredLength":199,"./subtract":200,"./toString":201,"./transform":202}],187:[function(require,module,exports){
|
|
563
560
|
const length=t=>Math.hypot(t[0],t[1]);module.exports=length;
|
|
564
561
|
|
|
565
|
-
},{}],
|
|
562
|
+
},{}],188:[function(require,module,exports){
|
|
566
563
|
const lerp=(e,r,o,t)=>{const l=r[0],n=r[1];return e[0]=l+t*(o[0]-l),e[1]=n+t*(o[1]-n),e};module.exports=lerp;
|
|
567
564
|
|
|
568
|
-
},{}],
|
|
565
|
+
},{}],189:[function(require,module,exports){
|
|
569
566
|
const max=(a,m,x)=>(a[0]=Math.max(m[0],x[0]),a[1]=Math.max(m[1],x[1]),a);module.exports=max;
|
|
570
567
|
|
|
571
|
-
},{}],
|
|
568
|
+
},{}],190:[function(require,module,exports){
|
|
572
569
|
const min=(m,n,i)=>(m[0]=Math.min(n[0],i[0]),m[1]=Math.min(n[1],i[1]),m);module.exports=min;
|
|
573
570
|
|
|
574
|
-
},{}],
|
|
571
|
+
},{}],191:[function(require,module,exports){
|
|
575
572
|
const multiply=(l,t,m)=>(l[0]=t[0]*m[0],l[1]=t[1]*m[1],l);module.exports=multiply;
|
|
576
573
|
|
|
577
|
-
},{}],
|
|
574
|
+
},{}],192:[function(require,module,exports){
|
|
578
575
|
const negate=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e);module.exports=negate;
|
|
579
576
|
|
|
580
|
-
},{}],
|
|
577
|
+
},{}],193:[function(require,module,exports){
|
|
581
578
|
const create=require("./create"),rotate=require("./rotate"),normal=(e,r)=>rotate(e,r,create(),Math.PI/2);module.exports=normal;
|
|
582
579
|
|
|
583
|
-
},{"./create":
|
|
580
|
+
},{"./create":176,"./rotate":195}],194:[function(require,module,exports){
|
|
584
581
|
const normalize=(t,e)=>{const o=e[0],r=e[1];let n=o*o+r*r;return n>0&&(n=1/Math.sqrt(n)),t[0]=o*n,t[1]=r*n,t};module.exports=normalize;
|
|
585
582
|
|
|
586
|
-
},{}],
|
|
583
|
+
},{}],195:[function(require,module,exports){
|
|
587
584
|
const rotate=(t,o,e,r)=>{const s=o[0]-e[0],a=o[1]-e[1],n=Math.cos(r),c=Math.sin(r);return t[0]=s*n-a*c+e[0],t[1]=s*c+a*n+e[1],t};module.exports=rotate;
|
|
588
585
|
|
|
589
|
-
},{}],
|
|
586
|
+
},{}],196:[function(require,module,exports){
|
|
590
587
|
const scale=(e,s,c)=>(e[0]=s[0]*c,e[1]=s[1]*c,e);module.exports=scale;
|
|
591
588
|
|
|
592
|
-
},{}],
|
|
589
|
+
},{}],197:[function(require,module,exports){
|
|
593
590
|
const snap=(n,o,a)=>(n[0]=Math.round(o[0]/a)*a+0,n[1]=Math.round(o[1]/a)*a+0,n);module.exports=snap;
|
|
594
591
|
|
|
595
|
-
},{}],
|
|
592
|
+
},{}],198:[function(require,module,exports){
|
|
596
593
|
const squaredDistance=(e,s)=>{const t=s[0]-e[0],n=s[1]-e[1];return t*t+n*n};module.exports=squaredDistance;
|
|
597
594
|
|
|
598
|
-
},{}],
|
|
595
|
+
},{}],199:[function(require,module,exports){
|
|
599
596
|
const squaredLength=e=>{const t=e[0],n=e[1];return t*t+n*n};module.exports=squaredLength;
|
|
600
597
|
|
|
601
|
-
},{}],
|
|
598
|
+
},{}],200:[function(require,module,exports){
|
|
602
599
|
const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t);module.exports=subtract;
|
|
603
600
|
|
|
604
|
-
},{}],
|
|
601
|
+
},{}],201:[function(require,module,exports){
|
|
605
602
|
const toString=t=>`[${t[0].toFixed(7)}, ${t[1].toFixed(7)}]`;module.exports=toString;
|
|
606
603
|
|
|
607
|
-
},{}],
|
|
604
|
+
},{}],202:[function(require,module,exports){
|
|
608
605
|
const transform=(r,o,t)=>{const n=o[0],s=o[1];return r[0]=t[0]*n+t[4]*s+t[12],r[1]=t[1]*n+t[5]*s+t[13],r};module.exports=transform;
|
|
609
606
|
|
|
610
|
-
},{}],
|
|
607
|
+
},{}],203:[function(require,module,exports){
|
|
611
608
|
const abs=(a,s)=>(a[0]=Math.abs(s[0]),a[1]=Math.abs(s[1]),a[2]=Math.abs(s[2]),a);module.exports=abs;
|
|
612
609
|
|
|
613
|
-
},{}],
|
|
610
|
+
},{}],204:[function(require,module,exports){
|
|
614
611
|
const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d[2]=o[2]+a[2],d);module.exports=add;
|
|
615
612
|
|
|
616
|
-
},{}],
|
|
613
|
+
},{}],205:[function(require,module,exports){
|
|
617
614
|
const dot=require("./dot"),angle=(t,o)=>{const a=t[0],e=t[1],h=t[2],n=o[0],r=o[1],M=o[2],d=Math.hypot(a,e,h)*Math.hypot(n,r,M),s=d&&dot(t,o)/d;return Math.acos(Math.min(Math.max(s,-1),1))};module.exports=angle;
|
|
618
615
|
|
|
619
|
-
},{"./dot":
|
|
616
|
+
},{"./dot":212}],206:[function(require,module,exports){
|
|
620
617
|
const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r};module.exports=clone;
|
|
621
618
|
|
|
622
|
-
},{"./create":
|
|
619
|
+
},{"./create":208}],207:[function(require,module,exports){
|
|
623
620
|
const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o);module.exports=copy;
|
|
624
621
|
|
|
625
|
-
},{}],
|
|
622
|
+
},{}],208:[function(require,module,exports){
|
|
626
623
|
const create=()=>[0,0,0];module.exports=create;
|
|
627
624
|
|
|
628
|
-
},{}],
|
|
625
|
+
},{}],209:[function(require,module,exports){
|
|
629
626
|
const cross=(s,o,r)=>{const c=o[0],t=o[1],e=o[2],n=r[0],u=r[1],d=r[2];return s[0]=t*d-e*u,s[1]=e*n-c*d,s[2]=c*u-t*n,s};module.exports=cross;
|
|
630
627
|
|
|
631
|
-
},{}],
|
|
628
|
+
},{}],210:[function(require,module,exports){
|
|
632
629
|
const distance=(t,e)=>{const n=e[0]-t[0],o=e[1]-t[1],s=e[2]-t[2];return Math.hypot(n,o,s)};module.exports=distance;
|
|
633
630
|
|
|
634
|
-
},{}],
|
|
631
|
+
},{}],211:[function(require,module,exports){
|
|
635
632
|
const divide=(d,e,i)=>(d[0]=e[0]/i[0],d[1]=e[1]/i[1],d[2]=e[2]/i[2],d);module.exports=divide;
|
|
636
633
|
|
|
637
|
-
},{}],
|
|
634
|
+
},{}],212:[function(require,module,exports){
|
|
638
635
|
const dot=(o,t)=>o[0]*t[0]+o[1]*t[1]+o[2]*t[2];module.exports=dot;
|
|
639
636
|
|
|
640
|
-
},{}],
|
|
637
|
+
},{}],213:[function(require,module,exports){
|
|
641
638
|
const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2];module.exports=equals;
|
|
642
639
|
|
|
643
|
-
},{}],
|
|
640
|
+
},{}],214:[function(require,module,exports){
|
|
644
641
|
const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o[2]=r,o);module.exports=fromScalar;
|
|
645
642
|
|
|
646
|
-
},{}],
|
|
643
|
+
},{}],215:[function(require,module,exports){
|
|
647
644
|
const create=require("./create"),fromValues=(e,r,t)=>{const o=create();return o[0]=e,o[1]=r,o[2]=t,o};module.exports=fromValues;
|
|
648
645
|
|
|
649
|
-
},{"./create":
|
|
646
|
+
},{"./create":208}],216:[function(require,module,exports){
|
|
650
647
|
const fromVector2=(o,r,e=0)=>(o[0]=r[0],o[1]=r[1],o[2]=e,o);module.exports=fromVector2;
|
|
651
648
|
|
|
652
|
-
},{}],
|
|
649
|
+
},{}],217:[function(require,module,exports){
|
|
653
650
|
module.exports={abs:require("./abs"),add:require("./add"),angle:require("./angle"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),cross:require("./cross"),distance:require("./distance"),divide:require("./divide"),dot:require("./dot"),equals:require("./equals"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),fromVec2:require("./fromVec2"),length:require("./length"),lerp:require("./lerp"),max:require("./max"),min:require("./min"),multiply:require("./multiply"),negate:require("./negate"),normalize:require("./normalize"),orthogonal:require("./orthogonal"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),scale:require("./scale"),snap:require("./snap"),squaredDistance:require("./squaredDistance"),squaredLength:require("./squaredLength"),subtract:require("./subtract"),toString:require("./toString"),transform:require("./transform")};
|
|
654
651
|
|
|
655
|
-
},{"./abs":
|
|
652
|
+
},{"./abs":203,"./add":204,"./angle":205,"./clone":206,"./copy":207,"./create":208,"./cross":209,"./distance":210,"./divide":211,"./dot":212,"./equals":213,"./fromScalar":214,"./fromValues":215,"./fromVec2":216,"./length":218,"./lerp":219,"./max":220,"./min":221,"./multiply":222,"./negate":223,"./normalize":224,"./orthogonal":225,"./rotateX":226,"./rotateY":227,"./rotateZ":228,"./scale":229,"./snap":230,"./squaredDistance":231,"./squaredLength":232,"./subtract":233,"./toString":234,"./transform":235}],218:[function(require,module,exports){
|
|
656
653
|
const length=t=>{const e=t[0],n=t[1],o=t[2];return Math.hypot(e,n,o)};module.exports=length;
|
|
657
654
|
|
|
658
|
-
},{}],
|
|
655
|
+
},{}],219:[function(require,module,exports){
|
|
659
656
|
const lerp=(e,l,o,p)=>(e[0]=l[0]+p*(o[0]-l[0]),e[1]=l[1]+p*(o[1]-l[1]),e[2]=l[2]+p*(o[2]-l[2]),e);module.exports=lerp;
|
|
660
657
|
|
|
661
|
-
},{}],
|
|
658
|
+
},{}],220:[function(require,module,exports){
|
|
662
659
|
const max=(a,m,x)=>(a[0]=Math.max(m[0],x[0]),a[1]=Math.max(m[1],x[1]),a[2]=Math.max(m[2],x[2]),a);module.exports=max;
|
|
663
660
|
|
|
664
|
-
},{}],
|
|
661
|
+
},{}],221:[function(require,module,exports){
|
|
665
662
|
const min=(m,n,i)=>(m[0]=Math.min(n[0],i[0]),m[1]=Math.min(n[1],i[1]),m[2]=Math.min(n[2],i[2]),m);module.exports=min;
|
|
666
663
|
|
|
667
|
-
},{}],
|
|
664
|
+
},{}],222:[function(require,module,exports){
|
|
668
665
|
const multiply=(l,t,m)=>(l[0]=t[0]*m[0],l[1]=t[1]*m[1],l[2]=t[2]*m[2],l);module.exports=multiply;
|
|
669
666
|
|
|
670
|
-
},{}],
|
|
667
|
+
},{}],223:[function(require,module,exports){
|
|
671
668
|
const negate=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e);module.exports=negate;
|
|
672
669
|
|
|
673
|
-
},{}],
|
|
670
|
+
},{}],224:[function(require,module,exports){
|
|
674
671
|
const normalize=(t,e)=>{const o=e[0],r=e[1],n=e[2];let l=o*o+r*r+n*n;return l>0&&(l=1/Math.sqrt(l)),t[0]=o*l,t[1]=r*l,t[2]=n*l,t};module.exports=normalize;
|
|
675
672
|
|
|
676
|
-
},{}],
|
|
673
|
+
},{}],225:[function(require,module,exports){
|
|
677
674
|
const abs=require("./abs"),create=require("./create"),cross=require("./cross"),orthogonal=(r,e)=>{const o=abs(create(),e),s=0+(o[0]<o[1]&&o[0]<o[2]),t=0+(o[1]<=o[0]&&o[1]<o[2]),a=0+(o[2]<=o[0]&&o[2]<=o[1]);return cross(r,e,[s,t,a])};module.exports=orthogonal;
|
|
678
675
|
|
|
679
|
-
},{"./abs":
|
|
676
|
+
},{"./abs":203,"./create":208,"./cross":209}],226:[function(require,module,exports){
|
|
680
677
|
const rotateX=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],e[2]=o[2]-s[2],n[0]=e[0],n[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),n[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=n[2]+s[2],t};module.exports=rotateX;
|
|
681
678
|
|
|
682
|
-
},{}],
|
|
679
|
+
},{}],227:[function(require,module,exports){
|
|
683
680
|
const rotateY=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],e[2]=o[2]-s[2],n[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),n[1]=e[1],n[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=n[2]+s[2],t};module.exports=rotateY;
|
|
684
681
|
|
|
685
|
-
},{}],
|
|
682
|
+
},{}],228:[function(require,module,exports){
|
|
686
683
|
const rotateZ=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],n[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),n[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=o[2],t};module.exports=rotateZ;
|
|
687
684
|
|
|
688
|
-
},{}],
|
|
685
|
+
},{}],229:[function(require,module,exports){
|
|
689
686
|
const scale=(e,s,c)=>(e[0]=s[0]*c,e[1]=s[1]*c,e[2]=s[2]*c,e);module.exports=scale;
|
|
690
687
|
|
|
691
|
-
},{}],
|
|
688
|
+
},{}],230:[function(require,module,exports){
|
|
692
689
|
const snap=(n,o,a)=>(n[0]=Math.round(o[0]/a)*a+0,n[1]=Math.round(o[1]/a)*a+0,n[2]=Math.round(o[2]/a)*a+0,n);module.exports=snap;
|
|
693
690
|
|
|
694
|
-
},{}],
|
|
691
|
+
},{}],231:[function(require,module,exports){
|
|
695
692
|
const squaredDistance=(e,s)=>{const t=s[0]-e[0],n=s[1]-e[1],r=s[2]-e[2];return t*t+n*n+r*r};module.exports=squaredDistance;
|
|
696
693
|
|
|
697
|
-
},{}],
|
|
694
|
+
},{}],232:[function(require,module,exports){
|
|
698
695
|
const squaredLength=e=>{const t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r};module.exports=squaredLength;
|
|
699
696
|
|
|
700
|
-
},{}],
|
|
697
|
+
},{}],233:[function(require,module,exports){
|
|
701
698
|
const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t[2]=s[2]-c[2],t);module.exports=subtract;
|
|
702
699
|
|
|
703
|
-
},{}],
|
|
700
|
+
},{}],234:[function(require,module,exports){
|
|
704
701
|
const toString=t=>`[${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)}]`;module.exports=toString;
|
|
705
702
|
|
|
706
|
-
},{}],
|
|
703
|
+
},{}],235:[function(require,module,exports){
|
|
707
704
|
const transform=(r,t,o)=>{const n=t[0],s=t[1],e=t[2];let m=o[3]*n+o[7]*s+o[11]*e+o[15];return m=m||1,r[0]=(o[0]*n+o[4]*s+o[8]*e+o[12])/m,r[1]=(o[1]*n+o[5]*s+o[9]*e+o[13])/m,r[2]=(o[2]*n+o[6]*s+o[10]*e+o[14])/m,r};module.exports=transform;
|
|
708
705
|
|
|
709
|
-
},{}],
|
|
706
|
+
},{}],236:[function(require,module,exports){
|
|
710
707
|
const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r};module.exports=clone;
|
|
711
708
|
|
|
712
|
-
},{"./create":
|
|
709
|
+
},{"./create":238}],237:[function(require,module,exports){
|
|
713
710
|
const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o);module.exports=copy;
|
|
714
711
|
|
|
715
|
-
},{}],
|
|
712
|
+
},{}],238:[function(require,module,exports){
|
|
716
713
|
const create=()=>[0,0,0,0];module.exports=create;
|
|
717
714
|
|
|
718
|
-
},{}],
|
|
715
|
+
},{}],239:[function(require,module,exports){
|
|
719
716
|
const dot=(o,t)=>o[0]*t[0]+o[1]*t[1]+o[2]*t[2]+o[3]*t[3];module.exports=dot;
|
|
720
717
|
|
|
721
|
-
},{}],
|
|
718
|
+
},{}],240:[function(require,module,exports){
|
|
722
719
|
const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2]&&e[3]===s[3];module.exports=equals;
|
|
723
720
|
|
|
724
|
-
},{}],
|
|
721
|
+
},{}],241:[function(require,module,exports){
|
|
725
722
|
const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o[2]=r,o[3]=r,o);module.exports=fromScalar;
|
|
726
723
|
|
|
727
|
-
},{}],
|
|
724
|
+
},{}],242:[function(require,module,exports){
|
|
728
725
|
const create=require("./create"),fromValues=(e,r,t,o)=>{const a=create();return a[0]=e,a[1]=r,a[2]=t,a[3]=o,a};module.exports=fromValues;
|
|
729
726
|
|
|
730
|
-
},{"./create":
|
|
727
|
+
},{"./create":238}],243:[function(require,module,exports){
|
|
731
728
|
module.exports={clone:require("./clone"),copy:require("./copy"),create:require("./create"),dot:require("./dot"),equals:require("./equals"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),toString:require("./toString"),transform:require("./transform")};
|
|
732
729
|
|
|
733
|
-
},{"./clone":
|
|
730
|
+
},{"./clone":236,"./copy":237,"./create":238,"./dot":239,"./equals":240,"./fromScalar":241,"./fromValues":242,"./toString":244,"./transform":245}],244:[function(require,module,exports){
|
|
734
731
|
const toString=t=>`(${t[0].toFixed(9)}, ${t[1].toFixed(9)}, ${t[2].toFixed(9)}, ${t[3].toFixed(9)})`;module.exports=toString;
|
|
735
732
|
|
|
736
|
-
},{}],
|
|
733
|
+
},{}],245:[function(require,module,exports){
|
|
737
734
|
const transform=(r,o,t)=>{const[n,s,e,m]=o;return r[0]=t[0]*n+t[4]*s+t[8]*e+t[12]*m,r[1]=t[1]*n+t[5]*s+t[9]*e+t[13]*m,r[2]=t[2]*n+t[6]*s+t[10]*e+t[14]*m,r[3]=t[3]*n+t[7]*s+t[11]*e+t[15]*m,r};module.exports=transform;
|
|
738
735
|
|
|
739
|
-
},{}],
|
|
736
|
+
},{}],246:[function(require,module,exports){
|
|
740
737
|
const{EPS:EPS}=require("../maths/constants"),calculateEpsilonFromBounds=(o,t)=>{let e=0;for(let l=0;l<t;l++)e+=o[1][l]-o[0][l];return EPS*e/t};module.exports=calculateEpsilonFromBounds;
|
|
741
738
|
|
|
742
|
-
},{"../maths/constants":
|
|
739
|
+
},{"../maths/constants":90}],247:[function(require,module,exports){
|
|
743
740
|
module.exports={measureAggregateArea:require("./measureAggregateArea"),measureAggregateBoundingBox:require("./measureAggregateBoundingBox"),measureAggregateEpsilon:require("./measureAggregateEpsilon"),measureAggregateVolume:require("./measureAggregateVolume"),measureArea:require("./measureArea"),measureBoundingBox:require("./measureBoundingBox"),measureBoundingSphere:require("./measureBoundingSphere"),measureCenter:require("./measureCenter"),measureCenterOfMass:require("./measureCenterOfMass"),measureDimensions:require("./measureDimensions"),measureEpsilon:require("./measureEpsilon"),measureVolume:require("./measureVolume")};
|
|
744
741
|
|
|
745
|
-
},{"./measureAggregateArea":
|
|
742
|
+
},{"./measureAggregateArea":248,"./measureAggregateBoundingBox":249,"./measureAggregateEpsilon":250,"./measureAggregateVolume":251,"./measureArea":252,"./measureBoundingBox":253,"./measureBoundingSphere":254,"./measureCenter":255,"./measureCenterOfMass":256,"./measureDimensions":257,"./measureEpsilon":258,"./measureVolume":259}],248:[function(require,module,exports){
|
|
746
743
|
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;
|
|
747
744
|
|
|
748
|
-
},{"../utils/flatten":
|
|
745
|
+
},{"../utils/flatten":391,"./measureArea":252}],249:[function(require,module,exports){
|
|
749
746
|
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;
|
|
750
747
|
|
|
751
|
-
},{"../maths/vec3/max":
|
|
748
|
+
},{"../maths/vec3/max":220,"../maths/vec3/min":221,"../utils/flatten":391,"./measureBoundingBox":253}],250:[function(require,module,exports){
|
|
752
749
|
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;
|
|
753
750
|
|
|
754
|
-
},{"../geometries":46,"../utils/flatten":
|
|
751
|
+
},{"../geometries":46,"../utils/flatten":391,"./calculateEpsilonFromBounds":246,"./measureAggregateBoundingBox":249}],251:[function(require,module,exports){
|
|
755
752
|
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;
|
|
756
753
|
|
|
757
|
-
},{"../utils/flatten":
|
|
754
|
+
},{"../utils/flatten":391,"./measureVolume":259}],252:[function(require,module,exports){
|
|
758
755
|
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;
|
|
759
756
|
|
|
760
|
-
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":
|
|
757
|
+
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":58,"../geometries/poly3":75,"../utils/flatten":391}],253:[function(require,module,exports){
|
|
761
758
|
const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureBoundingBoxOfPath2=e=>{let o=cache.get(e);if(o)return o;const t=path2.toPoints(e);let n;n=0===t.length?vec2.create():vec2.clone(t[0]);let r=vec2.clone(n);return t.forEach(e=>{vec2.min(n,n,e),vec2.max(r,r,e)}),n=[n[0],n[1],0],r=[r[0],r[1],0],o=[n,r],cache.set(e,o),o},measureBoundingBoxOfGeom2=e=>{let o=cache.get(e);if(o)return o;const t=geom2.toPoints(e);let n;n=0===t.length?vec2.create():vec2.clone(t[0]);let r=vec2.clone(n);return t.forEach(e=>{vec2.min(n,n,e),vec2.max(r,r,e)}),n=[n[0],n[1],0],r=[r[0],r[1],0],o=[n,r],cache.set(e,o),o},measureBoundingBoxOfGeom3=e=>{let o=cache.get(e);if(o)return o;const t=geom3.toPolygons(e);let n=vec3.create();if(t.length>0){const e=poly3.toPoints(t[0]);vec3.copy(n,e[0])}let r=vec3.clone(n);return t.forEach(e=>{poly3.toPoints(e).forEach(e=>{vec3.min(n,n,e),vec3.max(r,r,e)})}),n=[n[0],n[1],n[2]],r=[r[0],r[1],r[2]],o=[n,r],cache.set(e,o),o},measureBoundingBox=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const o=e.map(e=>path2.isA(e)?measureBoundingBoxOfPath2(e):geom2.isA(e)?measureBoundingBoxOfGeom2(e):geom3.isA(e)?measureBoundingBoxOfGeom3(e):[[0,0,0],[0,0,0]]);return 1===o.length?o[0]:o};module.exports=measureBoundingBox;
|
|
762
759
|
|
|
763
|
-
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":
|
|
760
|
+
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":58,"../geometries/poly3":75,"../maths/vec2":186,"../maths/vec3":217,"../utils/flatten":391}],254:[function(require,module,exports){
|
|
764
761
|
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;
|
|
765
762
|
|
|
766
|
-
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":
|
|
763
|
+
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":58,"../geometries/poly3":75,"../maths/vec2":186,"../maths/vec3":217,"../utils/flatten":391}],255:[function(require,module,exports){
|
|
767
764
|
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;
|
|
768
765
|
|
|
769
|
-
},{"../utils/flatten":
|
|
766
|
+
},{"../utils/flatten":391,"./measureBoundingBox":253}],256:[function(require,module,exports){
|
|
770
767
|
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;
|
|
771
768
|
|
|
772
|
-
},{"../geometries/geom2":22,"../geometries/geom3":37,"../maths/vec3":
|
|
769
|
+
},{"../geometries/geom2":22,"../geometries/geom3":37,"../maths/vec3":217,"../utils/flatten":391}],257:[function(require,module,exports){
|
|
773
770
|
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;
|
|
774
771
|
|
|
775
|
-
},{"../utils/flatten":
|
|
772
|
+
},{"../utils/flatten":391,"./measureBoundingBox":253}],258:[function(require,module,exports){
|
|
776
773
|
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;
|
|
777
774
|
|
|
778
|
-
},{"../geometries":46,"../utils/flatten":
|
|
775
|
+
},{"../geometries":46,"../utils/flatten":391,"./calculateEpsilonFromBounds":246,"./measureBoundingBox":253}],259:[function(require,module,exports){
|
|
779
776
|
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;
|
|
780
777
|
|
|
781
|
-
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":
|
|
778
|
+
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":58,"../geometries/poly3":75,"../utils/flatten":391}],260:[function(require,module,exports){
|
|
782
779
|
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;
|
|
783
780
|
|
|
784
|
-
},{"../../geometries/geom2":22,"../../maths/vec2":
|
|
781
|
+
},{"../../geometries/geom2":22,"../../maths/vec2":186}],261:[function(require,module,exports){
|
|
785
782
|
module.exports={intersect:require("./intersect"),scission:require("./scission"),subtract:require("./subtract"),union:require("./union")};
|
|
786
783
|
|
|
787
|
-
},{"./intersect":
|
|
784
|
+
},{"./intersect":262,"./scission":267,"./subtract":269,"./union":280}],262:[function(require,module,exports){
|
|
788
785
|
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;
|
|
789
786
|
|
|
790
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../utils/areAllShapesTheSameType":
|
|
787
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../utils/areAllShapesTheSameType":389,"../../utils/flatten":391,"./intersectGeom2":263,"./intersectGeom3":264}],263:[function(require,module,exports){
|
|
791
788
|
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;
|
|
792
789
|
|
|
793
|
-
},{"../../geometries/geom3":37,"../../measurements/measureEpsilon":
|
|
794
|
-
const flatten=require("../../utils/flatten"),retessellate=require("
|
|
790
|
+
},{"../../geometries/geom3":37,"../../measurements/measureEpsilon":258,"../../utils/flatten":391,"./fromFakePolygons":260,"./intersectGeom3":264,"./to3DWalls":273}],264:[function(require,module,exports){
|
|
791
|
+
const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),intersectSub=require("./intersectGeom3Sub"),intersect=(...e)=>{let t=(e=flatten(e)).shift();return e.forEach(e=>{t=intersectSub(t,e)}),t=retessellate(t)};module.exports=intersect;
|
|
795
792
|
|
|
796
|
-
},{"../../utils/flatten":
|
|
793
|
+
},{"../../utils/flatten":391,"../modifiers/retessellate":349,"./intersectGeom3Sub":265}],265:[function(require,module,exports){
|
|
797
794
|
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;
|
|
798
795
|
|
|
799
|
-
},{"../../geometries/geom3":37,"./mayOverlap":
|
|
796
|
+
},{"../../geometries/geom3":37,"./mayOverlap":266,"./trees":277}],266:[function(require,module,exports){
|
|
800
797
|
const{EPS:EPS}=require("../../maths/constants"),measureBoundingBox=require("../../measurements/measureBoundingBox"),mayOverlap=(e,n)=>{if(0===e.polygons.length||0===n.polygons.length)return!1;const o=measureBoundingBox(e),r=o[0],s=o[1],u=measureBoundingBox(n),a=u[0],t=u[1];return!(a[0]-s[0]>EPS)&&(!(r[0]-t[0]>EPS)&&(!(a[1]-s[1]>EPS)&&(!(r[1]-t[1]>EPS)&&(!(a[2]-s[2]>EPS)&&!(r[2]-t[2]>EPS)))))};module.exports=mayOverlap;
|
|
801
798
|
|
|
802
|
-
},{"../../maths/constants":
|
|
803
|
-
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;
|
|
804
|
-
|
|
805
|
-
},{"../../geometries/poly3":76,"../../maths/OrthoNormalBasis":90,"../../maths/constants":91,"../../maths/line2":102,"../../maths/utils/interpolateBetween2DPointsForY":167,"../../maths/vec2":187,"../../utils":395}],269:[function(require,module,exports){
|
|
806
|
-
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;
|
|
807
|
-
|
|
808
|
-
},{"../../geometries/geom3":37,"../../geometries/poly3":76,"./reTesselateCoplanarPolygons":268}],270:[function(require,module,exports){
|
|
799
|
+
},{"../../maths/constants":90,"../../measurements/measureBoundingBox":253}],267:[function(require,module,exports){
|
|
809
800
|
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;
|
|
810
801
|
|
|
811
|
-
},{"../../geometries/geom3":37,"../../utils/flatten":
|
|
802
|
+
},{"../../geometries/geom3":37,"../../utils/flatten":391,"./scissionGeom3":268}],268:[function(require,module,exports){
|
|
812
803
|
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;
|
|
813
804
|
|
|
814
|
-
},{"../../geometries/geom3":37,"../../maths/vec3":
|
|
805
|
+
},{"../../geometries/geom3":37,"../../maths/vec3":217,"../../measurements/measureEpsilon":258}],269:[function(require,module,exports){
|
|
815
806
|
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;
|
|
816
807
|
|
|
817
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../utils/areAllShapesTheSameType":
|
|
808
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../utils/areAllShapesTheSameType":389,"../../utils/flatten":391,"./subtractGeom2":270,"./subtractGeom3":271}],270:[function(require,module,exports){
|
|
818
809
|
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;
|
|
819
810
|
|
|
820
|
-
},{"../../geometries/geom3":37,"../../measurements/measureEpsilon":
|
|
821
|
-
const flatten=require("../../utils/flatten"),retessellate=require("
|
|
811
|
+
},{"../../geometries/geom3":37,"../../measurements/measureEpsilon":258,"../../utils/flatten":391,"./fromFakePolygons":260,"./subtractGeom3":271,"./to3DWalls":273}],271:[function(require,module,exports){
|
|
812
|
+
const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),subtractSub=require("./subtractGeom3Sub"),subtract=(...t)=>{let e=(t=flatten(t)).shift();return t.forEach(t=>{e=subtractSub(e,t)}),e=retessellate(e)};module.exports=subtract;
|
|
822
813
|
|
|
823
|
-
},{"../../utils/flatten":
|
|
814
|
+
},{"../../utils/flatten":391,"../modifiers/retessellate":349,"./subtractGeom3Sub":272}],272:[function(require,module,exports){
|
|
824
815
|
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;
|
|
825
816
|
|
|
826
|
-
},{"../../geometries/geom3":37,"./mayOverlap":
|
|
827
|
-
const vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),to3DWall=(e,o,r)=>{const c=[vec3.fromVec2(vec3.create(),r[0],e),vec3.fromVec2(vec3.create(),r[1],e),vec3.fromVec2(vec3.create(),r[1],o),vec3.fromVec2(vec3.create(),r[0],o)];return poly3.
|
|
817
|
+
},{"../../geometries/geom3":37,"./mayOverlap":266,"./trees":277}],273:[function(require,module,exports){
|
|
818
|
+
const vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),to3DWall=(e,o,r)=>{const c=[vec3.fromVec2(vec3.create(),r[0],e),vec3.fromVec2(vec3.create(),r[1],e),vec3.fromVec2(vec3.create(),r[1],o),vec3.fromVec2(vec3.create(),r[0],o)];return poly3.create(c)},to3DWalls=(e,o)=>{const r=geom2.toSides(o).map(o=>to3DWall(e.z0,e.z1,o));return geom3.create(r)};module.exports=to3DWalls;
|
|
828
819
|
|
|
829
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/poly3":
|
|
820
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/poly3":75,"../../maths/vec3":217}],274:[function(require,module,exports){
|
|
830
821
|
const plane=require("../../../maths/plane"),poly3=require("../../../geometries/poly3");class Node{constructor(e){this.plane=null,this.front=null,this.back=null,this.polygontreenodes=[],this.parent=e}invert(){const e=[this];let o;for(let n=0;n<e.length;n++){(o=e[n]).plane&&(o.plane=plane.flip(plane.create(),o.plane)),o.front&&e.push(o.front),o.back&&e.push(o.back);const t=o.front;o.front=o.back,o.back=t}}clipPolygons(e,o){let n,t={node:this,polygontreenodes:e};const l=[];do{if(n=t.node,e=t.polygontreenodes,n.plane){const t=n.plane,s=[],p=[],r=o?s:p,d=e.length;for(let o=0;o<d;o++){const n=e[o];n.isRemoved()||n.splitByPlane(t,r,s,p,s)}n.front&&p.length>0&&l.push({node:n.front,polygontreenodes:p});const h=s.length;if(n.back&&h>0)l.push({node:n.back,polygontreenodes:s});else for(let e=0;e<h;e++)s[e].remove()}t=l.pop()}while(void 0!==t)}clipTo(e,o){let n=this;const t=[];do{n.polygontreenodes.length>0&&e.rootnode.clipPolygons(n.polygontreenodes,o),n.front&&t.push(n.front),n.back&&t.push(n.back),n=t.pop()}while(void 0!==n)}addPolygonTreeNodes(e){let o={node:this,polygontreenodes:e};const n=[];do{const e=o.node,t=o.polygontreenodes;if(0===t.length){o=n.pop();continue}if(!e.plane){let o=0;const n=t[o=Math.floor(t.length/2)].getPolygon();e.plane=poly3.plane(n)}const l=[],s=[],p=t.length;for(let o=0;o<p;++o)t[o].splitByPlane(e.plane,e.polygontreenodes,s,l,s);if(l.length>0){e.front||(e.front=new Node(e)),p===l.length&&0===s.length?e.front.polygontreenodes=l:n.push({node:e.front,polygontreenodes:l})}if(s.length>0){e.back||(e.back=new Node(e)),p===s.length&&0===l.length?e.back.polygontreenodes=s:n.push({node:e.back,polygontreenodes:s})}o=n.pop()}while(void 0!==o)}}module.exports=Node;
|
|
831
822
|
|
|
832
|
-
},{"../../../geometries/poly3":
|
|
823
|
+
},{"../../../geometries/poly3":75,"../../../maths/plane":159}],275:[function(require,module,exports){
|
|
833
824
|
const{EPS:EPS}=require("../../../maths/constants"),vec3=require("../../../maths/vec3"),poly3=require("../../../geometries/poly3"),splitPolygonByPlane=require("./splitPolygonByPlane");class PolygonTreeNode{constructor(e,t){this.parent=e,this.children=[],this.polygon=t,this.removed=!1}addPolygons(e){if(!this.isRootNode())throw new Error("Assertion failed");const t=this;e.forEach(e=>{t.addChild(e)})}remove(){if(!this.removed){this.removed=!0,this.polygon=null;const e=this.parent.children,t=e.indexOf(this);if(t<0)throw new Error("Assertion failed");e.splice(t,1),this.parent.recursivelyInvalidatePolygon()}}isRemoved(){return this.removed}isRootNode(){return!this.parent}invert(){if(!this.isRootNode())throw new Error("Assertion failed");this.invertSub()}getPolygon(){if(!this.polygon)throw new Error("Assertion failed");return this.polygon}getPolygons(e){let t=[this];const o=[t];let n,l,s,i;for(n=0;n<o.length;++n)for(l=0,s=(t=o[n]).length;l<s;l++)(i=t[l]).polygon?e.push(i.polygon):i.children.length>0&&o.push(i.children)}splitByPlane(e,t,o,n,l){if(this.children.length){const s=[this.children];let i,r,h,c,d;for(i=0;i<s.length;i++)for(d=s[i],r=0,h=d.length;r<h;r++)(c=d[r]).children.length>0?s.push(c.children):c._splitByPlane(e,t,o,n,l)}else this._splitByPlane(e,t,o,n,l)}_splitByPlane(e,t,o,n,l){const s=this.polygon;if(s){const i=poly3.measureBoundingSphere(s),r=i[1]+EPS,h=i[0],c=vec3.dot(e,h)-e[3];if(c>r)n.push(this);else if(c<-r)l.push(this);else{const i=splitPolygonByPlane(e,s);switch(i.type){case 0:t.push(this);break;case 1:o.push(this);break;case 2:n.push(this);break;case 3:l.push(this);break;case 4:if(i.front){const e=this.addChild(i.front);n.push(e)}if(i.back){const e=this.addChild(i.back);l.push(e)}}}}}addChild(e){const t=new PolygonTreeNode(this,e);return this.children.push(t),t}invertSub(){let e=[this];const t=[e];let o,n,l,s;for(o=0;o<t.length;o++)for(n=0,l=(e=t[o]).length;n<l;n++)(s=e[n]).polygon&&(s.polygon=poly3.invert(s.polygon)),s.children.length>0&&t.push(s.children)}recursivelyInvalidatePolygon(){this.polygon=null,this.parent&&this.parent.recursivelyInvalidatePolygon()}clear(){let e=[this];const t=[e];for(let o=0;o<t.length;++o){const n=(e=t[o]).length;for(let o=0;o<n;o++){const n=e[o];n.polygon&&(n.polygon=null),n.parent&&(n.parent=null),n.children.length>0&&t.push(n.children),n.children=[]}}}toString(){let e="",t=[this];const o=[t];let n,l,s,i;for(n=0;n<o.length;++n){t=o[n];const r=" ".repeat(n);for(l=0,s=t.length;l<s;l++)e+=`${r}PolygonTreeNode (${(i=t[l]).isRootNode()}): ${i.children.length}`,i.polygon?e+=`\n ${r}polygon: ${i.polygon.vertices}\n`:e+="\n",i.children.length>0&&o.push(i.children)}return e}}module.exports=PolygonTreeNode;
|
|
834
825
|
|
|
835
|
-
},{"../../../geometries/poly3":
|
|
826
|
+
},{"../../../geometries/poly3":75,"../../../maths/constants":90,"../../../maths/vec3":217,"./splitPolygonByPlane":279}],276:[function(require,module,exports){
|
|
836
827
|
const Node=require("./Node"),PolygonTreeNode=require("./PolygonTreeNode");class Tree{constructor(o){this.polygonTree=new PolygonTreeNode,this.rootnode=new Node(null),o&&this.addPolygons(o)}invert(){this.polygonTree.invert(),this.rootnode.invert()}clipTo(o,e=!1){this.rootnode.clipTo(o,e)}allPolygons(){const o=[];return this.polygonTree.getPolygons(o),o}addPolygons(o){const e=new Array(o.length);for(let r=0;r<o.length;r++)e[r]=this.polygonTree.addChild(o[r]);this.rootnode.addPolygonTreeNodes(e)}clear(){this.polygonTree.clear()}toString(){return"Tree: "+this.polygonTree.toString("")}}module.exports=Tree;
|
|
837
828
|
|
|
838
|
-
},{"./Node":
|
|
829
|
+
},{"./Node":274,"./PolygonTreeNode":275}],277:[function(require,module,exports){
|
|
839
830
|
module.exports={Tree:require("./Tree")};
|
|
840
831
|
|
|
841
|
-
},{"./Tree":
|
|
832
|
+
},{"./Tree":276}],278:[function(require,module,exports){
|
|
842
833
|
const vec3=require("../../../maths/vec3"),splitLineSegmentByPlane=(e,t,c)=>{const n=vec3.subtract(vec3.create(),c,t);let s=(e[3]-vec3.dot(e,t))/vec3.dot(e,n);return Number.isNaN(s)&&(s=0),s>1&&(s=1),s<0&&(s=0),vec3.scale(n,n,s),vec3.add(n,t,n),n};module.exports=splitLineSegmentByPlane;
|
|
843
834
|
|
|
844
|
-
},{"../../../maths/vec3":
|
|
835
|
+
},{"../../../maths/vec3":217}],279:[function(require,module,exports){
|
|
845
836
|
const{EPS:EPS}=require("../../../maths/constants"),plane=require("../../../maths/plane"),vec3=require("../../../maths/vec3"),poly3=require("../../../geometries/poly3"),splitLineSegmentByPlane=require("./splitLineSegmentByPlane"),splitPolygonByPlane=(e,t)=>{const l={type:null,front:null,back:null},n=t.vertices,s=n.length,o=poly3.plane(t);if(plane.equals(o,e))l.type=0;else{let t=!1,p=!1;const i=[],c=-EPS;for(let l=0;l<s;l++){const s=vec3.dot(e,n[l])-e[3],o=s<c;i.push(o),s>EPS&&(t=!0),s<c&&(p=!0)}if(t||p)if(p)if(t){l.type=4;const t=[],p=[];let c=i[0];for(let l=0;l<s;l++){const o=n[l];let r=l+1;r>=s&&(r=0);const a=i[r];if(c===a)c?p.push(o):t.push(o);else{const l=n[r],s=splitLineSegmentByPlane(e,o,l);c?(p.push(o),p.push(s),t.push(s)):(t.push(o),t.push(s),p.push(s))}c=a}const r=EPS*EPS;if(p.length>=3){let e=p[p.length-1];for(let t=0;t<p.length;t++){const l=p[t];vec3.squaredDistance(l,e)<r&&(p.splice(t,1),t--),e=l}}if(t.length>=3){let e=t[t.length-1];for(let l=0;l<t.length;l++){const n=t[l];vec3.squaredDistance(n,e)<r&&(t.splice(l,1),l--),e=n}}t.length>=3&&(l.front=poly3.fromPointsAndPlane(t,o)),p.length>=3&&(l.back=poly3.fromPointsAndPlane(p,o))}else l.type=3;else l.type=2;else{const t=vec3.dot(e,o);l.type=t>=0?0:1}}return l};module.exports=splitPolygonByPlane;
|
|
846
837
|
|
|
847
|
-
},{"../../../geometries/poly3":
|
|
838
|
+
},{"../../../geometries/poly3":75,"../../../maths/constants":90,"../../../maths/plane":159,"../../../maths/vec3":217,"./splitLineSegmentByPlane":278}],280:[function(require,module,exports){
|
|
848
839
|
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;
|
|
849
840
|
|
|
850
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../utils/areAllShapesTheSameType":
|
|
841
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../utils/areAllShapesTheSameType":389,"../../utils/flatten":391,"./unionGeom2":281,"./unionGeom3":282}],281:[function(require,module,exports){
|
|
851
842
|
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;
|
|
852
843
|
|
|
853
|
-
},{"../../geometries/geom3":37,"../../measurements/measureEpsilon":
|
|
854
|
-
const flatten=require("../../utils/flatten"),retessellate=require("
|
|
844
|
+
},{"../../geometries/geom3":37,"../../measurements/measureEpsilon":258,"../../utils/flatten":391,"./fromFakePolygons":260,"./to3DWalls":273,"./unionGeom3":282}],282:[function(require,module,exports){
|
|
845
|
+
const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),unionSub=require("./unionGeom3Sub"),union=(...e)=>{let t;for(e=flatten(e),t=1;t<e.length;t+=2)e.push(unionSub(e[t-1],e[t]));let n=e[t-1];return n=retessellate(n)};module.exports=union;
|
|
855
846
|
|
|
856
|
-
},{"../../utils/flatten":
|
|
847
|
+
},{"../../utils/flatten":391,"../modifiers/retessellate":349,"./unionGeom3Sub":283}],283:[function(require,module,exports){
|
|
857
848
|
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;
|
|
858
849
|
|
|
859
|
-
},{"../../geometries/geom3":37,"./mayOverlap":
|
|
850
|
+
},{"../../geometries/geom3":37,"./mayOverlap":266,"./trees":277}],284:[function(require,module,exports){
|
|
860
851
|
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;
|
|
861
852
|
|
|
862
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
853
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../utils/flatten":391,"./expandGeom2":285,"./expandGeom3":286,"./expandPath2":287}],285:[function(require,module,exports){
|
|
863
854
|
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;
|
|
864
855
|
|
|
865
|
-
},{"../../geometries/geom2":22,"./offsetFromPoints":
|
|
856
|
+
},{"../../geometries/geom2":22,"./offsetFromPoints":292}],286:[function(require,module,exports){
|
|
866
857
|
const geom3=require("../../geometries/geom3"),union=require("../booleans/union"),expandShell=require("./expandShell"),expandGeom3=(e,n)=>{const{delta:o,corners:r,segments:t}=Object.assign({},{delta:1,corners:"round",segments:12},e);if("round"!==r)throw new Error('corners must be "round" for 3D geometries');if(0===geom3.toPolygons(n).length)throw new Error("the given geometry cannot be empty");const s=expandShell(e={delta:o,corners:r,segments:t},n);return union(n,s)};module.exports=expandGeom3;
|
|
867
858
|
|
|
868
|
-
},{"../../geometries/geom3":37,"../booleans/union":
|
|
859
|
+
},{"../../geometries/geom3":37,"../booleans/union":280,"./expandShell":288}],287:[function(require,module,exports){
|
|
869
860
|
const area=require("../../maths/utils/area"),vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),offsetFromPoints=require("./offsetFromPoints"),createGeometryFromClosedOffsets=e=>{let{external:t,internal:r}=e;area(t)<0?t=t.reverse():r=r.reverse();const o=path2.fromPoints({closed:!0},t),s=path2.fromPoints({closed:!0},r),n=geom2.toSides(geom2.fromPoints(path2.toPoints(o))),a=geom2.toSides(geom2.fromPoints(path2.toPoints(s)));return n.push(...a),geom2.create(n)},createGeometryFromExpandedOpenPath=(e,t,r,o)=>{const{points:s,external:n,internal:a}=e,c=Math.floor(t/2),m=[],i=[];if("round"===r&&c>0){const e=Math.PI/c,t=s[s.length-1],r=vec2.angle(vec2.subtract(vec2.create(),n[n.length-1],t)),d=s[0],l=vec2.angle(vec2.subtract(vec2.create(),a[0],d));for(let s=1;s<c;s++){let n=r+e*s,a=vec2.fromAngleRadians(vec2.create(),n);vec2.scale(a,a,o),vec2.add(a,a,t),m.push(a),n=l+e*s,a=vec2.fromAngleRadians(vec2.create(),n),vec2.scale(a,a,o),vec2.add(a,a,d),i.push(a)}}const d=[];return d.push(...n,...m,...a.reverse(),...i),geom2.fromPoints(d)},expandPath2=(e,t)=>{e=Object.assign({},{delta:1,corners:"edge",segments:16},e);const{delta:r,corners:o,segments:s}=e;if(r<=0)throw new Error("the given delta must be positive for paths");if("edge"!==o&&"chamfer"!==o&&"round"!==o)throw new Error('corners must be "edge", "chamfer", or "round"');const n=t.isClosed,a=path2.toPoints(t);if(0===a.length)throw new Error("the given geometry cannot be empty");const c={points:a,external:offsetFromPoints({delta:r,corners:o,segments:s,closed:n},a),internal:offsetFromPoints({delta:-r,corners:o,segments:s,closed:n},a)};return t.isClosed?createGeometryFromClosedOffsets(c):createGeometryFromExpandedOpenPath(c,s,o,r)};module.exports=expandPath2;
|
|
870
861
|
|
|
871
|
-
},{"../../geometries/geom2":22,"../../geometries/path2":
|
|
872
|
-
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("../
|
|
862
|
+
},{"../../geometries/geom2":22,"../../geometries/path2":58,"../../maths/utils/area":164,"../../maths/vec2":186,"./offsetFromPoints":292}],288:[function(require,module,exports){
|
|
863
|
+
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("../modifiers/retessellate"),unionGeom3Sub=require("../booleans/unionGeom3Sub"),extrudePolygon=require("./extrudePolygon"),mapPlaneToVertex=(e,t,o)=>{const n=t.toString();if(e.has(n)){e.get(n)[1].push(o)}else{const s=[t,[o]];e.set(n,s)}},mapPlaneToEdge=(e,t,o)=>{const n=t[0].toString(),s=t[1].toString(),r=n<s?`${n},${s}`:`${s},${n}`;if(e.has(r)){e.get(r)[1].push(o)}else{const n=[t,[o]];e.set(r,n)}},addUniqueAngle=(e,t)=>{e.findIndex(e=>e===t)<0&&e.push(t)},expandShell=(e,t)=>{const{delta:o,segments:n}=Object.assign({},{delta:1,segments:12},e);let s=geom3.create();const r=new Map,c=new Map,a=vec3.create(),l=vec3.create();return geom3.toPolygons(t).forEach((e,t)=>{const n=vec3.scale(vec3.create(),poly3.plane(e),2*o),a=poly3.transform(mat4.fromTranslation(mat4.create(),vec3.scale(vec3.create(),n,-.5)),e),l=extrudePolygon(n,a);s=unionGeom3Sub(s,l);const u=e.vertices;for(let t=0;t<u.length;t++){mapPlaneToVertex(r,u[t],poly3.plane(e));const o=(t+1)%u.length,n=[u[t],u[o]];mapPlaneToEdge(c,n,poly3.plane(e))}}),c.forEach(e=>{const t=e[0],r=e[1],c=t[0],u=t[1],i=vec3.subtract(vec3.create(),u,c);vec3.normalize(i,i);const m=r[0],h=vec3.cross(vec3.create(),m,i);let g=[];for(let e=0;e<n;e++)addUniqueAngle(g,e*Math.PI*2/n);for(let e=0,t=r.length;e<t;e++){const t=r[e],o=vec3.dot(h,t),n=vec3.dot(m,t);let s=Math.atan2(o,n);s<0&&(s+=2*Math.PI),addUniqueAngle(g,s),(s=Math.atan2(-o,-n))<0&&(s+=2*Math.PI),addUniqueAngle(g,s)}const p=(g=g.sort(fnNumberSort)).length;let v,d;const f=[],S=[],q=[];for(let e=-1;e<p;e++){const t=g[e<0?e+p:e],n=Math.sin(t),s=Math.cos(t);vec3.scale(a,m,s*o),vec3.scale(l,h,n*o),vec3.add(a,a,l);const r=vec3.add(vec3.create(),c,a),i=vec3.add(vec3.create(),u,a);let P=!1;if(e>=0&&vec3.distance(r,v)<EPS&&(P=!0),!P){if(e>=0){f.push(r),S.push(i);const e=[d,i,r,v],t=poly3.create(e);q.push(t)}v=r,d=i}}S.reverse(),q.push(poly3.create(f)),q.push(poly3.create(S));const P=geom3.create(q);s=unionGeom3Sub(s,P)}),r.forEach(e=>{const t=e[0],r=e[1],c=r[0];let u=null,i=0;for(let e=1;e<r.length;e++){const t=r[e],o=vec3.cross(a,c,t),n=vec3.length(o);n>.05&&n>i&&(i=n,u=t)}u||(u=vec3.orthogonal(a,c));const m=vec3.cross(a,c,u);vec3.normalize(m,m);const h=vec3.cross(l,m,c),g=sphere({center:[t[0],t[1],t[2]],radius:o,segments:n,axes:[c,m,h]});s=unionGeom3Sub(s,g)}),retessellate(s)};module.exports=expandShell;
|
|
873
864
|
|
|
874
|
-
},{"../../geometries/geom3":37,"../../geometries/poly3":
|
|
875
|
-
const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),extrudePolygon=(e,
|
|
865
|
+
},{"../../geometries/geom3":37,"../../geometries/poly3":75,"../../maths/constants":90,"../../maths/mat4":140,"../../maths/vec3":217,"../../primitives/sphere":379,"../../utils/fnNumberSort":392,"../booleans/unionGeom3Sub":283,"../modifiers/retessellate":349,"./extrudePolygon":289}],289:[function(require,module,exports){
|
|
866
|
+
const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),extrudePolygon=(e,r)=>{vec3.dot(poly3.plane(r),e)>0&&(r=poly3.invert(r));const t=[r],o=poly3.transform(mat4.fromTranslation(mat4.create(),e),r),s=r.vertices.length;for(let e=0;e<s;e++){const c=e<s-1?e+1:0,i=poly3.create([r.vertices[e],o.vertices[e],o.vertices[c],r.vertices[c]]);t.push(i)}return t.push(poly3.invert(o)),geom3.create(t)};module.exports=extrudePolygon;
|
|
876
867
|
|
|
877
|
-
},{"../../geometries/geom3":37,"../../geometries/poly3":
|
|
868
|
+
},{"../../geometries/geom3":37,"../../geometries/poly3":75,"../../maths/mat4":140,"../../maths/vec3":217}],290:[function(require,module,exports){
|
|
878
869
|
module.exports={expand:require("./expand"),offset:require("./offset")};
|
|
879
870
|
|
|
880
|
-
},{"./expand":
|
|
871
|
+
},{"./expand":284,"./offset":291}],291:[function(require,module,exports){
|
|
881
872
|
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;
|
|
882
873
|
|
|
883
|
-
},{"../../geometries/geom2":22,"../../geometries/path2":
|
|
874
|
+
},{"../../geometries/geom2":22,"../../geometries/path2":58,"../../utils/flatten":391,"./offsetGeom2":293,"./offsetPath2":294}],292:[function(require,module,exports){
|
|
884
875
|
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,t)=>{let{delta:s,corners:c,closed:n,segments:a}=Object.assign({},{delta:1,corners:"edge",closed:!1,segments:16},e);if(Math.abs(s)<EPS)return t;let r=e.closed?area(t):1;0===r&&(r=1);const o=r>0&&s>=0||r<0&&s<0;s=Math.abs(s);let i=null,l=[];const u=[],v=vec2.create(),f=t.length;for(let e=0;e<f;e++){const c=(e+1)%f,a=t[e],r=t[c];o?vec2.subtract(v,a,r):vec2.subtract(v,r,a),vec2.normal(v,v),vec2.normalize(v,v),vec2.scale(v,v,s);const h=vec2.add(vec2.create(),a,v),d=vec2.add(vec2.create(),r,v),m=[h,d];if(null!=i&&(n||!n&&0!==c)){const e=intersect(i[0],i[1],m[0],m[1]);e?(l.pop(),m[0]=e):u.push({c:a,s0:i,s1:m})}i=[h,d],(0!==c||n)&&(l.push(m[0]),l.push(m[1]))}if(n&&null!=i){const e=l[0],s=l[1],c=intersect(i[0],i[1],e,s);if(c)l[0]=c,l.pop();else{const c=t[0],n=[e,s];u.push({c:c,s0:i,s1:n})}}if("edge"===c){const e=new Map;l.forEach((t,s)=>e.set(t,s));const t=line2.create(),s=line2.create();u.forEach(c=>{line2.fromPoints(t,c.s0[0],c.s0[1]),line2.fromPoints(s,c.s1[0],c.s1[1]);const n=line2.intersectPointOfLines(t,s);if(Number.isFinite(n[0])&&Number.isFinite(n[1])){const t=c.s0[1],s=e.get(t);l[s]=n,l[(s+1)%l.length]=void 0}else{const t=c.s1[0],s=e.get(t);l[s]=void 0}}),l=l.filter(e=>void 0!==e)}if("round"===c){let e=Math.floor(a/4);const t=vec2.create();u.forEach(c=>{let n=vec2.angle(vec2.subtract(t,c.s1[0],c.c));if(n-=vec2.angle(vec2.subtract(t,c.s0[1],c.c)),o&&n<0&&(n+=Math.PI)<0&&(n+=Math.PI),!o&&n>0&&(n-=Math.PI)>0&&(n-=Math.PI),0!==n){const r=n/(e=Math.floor(a*(Math.abs(n)/(2*Math.PI)))),o=vec2.angle(vec2.subtract(t,c.s0[1],c.c)),i=[];for(let t=1;t<e;t++){const e=o+r*t,n=vec2.fromAngleRadians(vec2.create(),e);vec2.scale(n,n,s),vec2.add(n,n,c.c),i.push(n)}if(i.length>0){const e=c.s0[1];let t=l.findIndex(t=>vec2.equals(e,t));t=(t+1)%l.length,l.splice(t,0,...i)}}else{const e=c.s1[0],t=l.findIndex(t=>vec2.equals(e,t));l.splice(t,1)}})}return l};module.exports=offsetFromPoints;
|
|
885
876
|
|
|
886
|
-
},{"../../maths/constants":
|
|
877
|
+
},{"../../maths/constants":90,"../../maths/line2":101,"../../maths/utils/area":164,"../../maths/utils/intersect":167,"../../maths/vec2":186}],293:[function(require,module,exports){
|
|
887
878
|
const geom2=require("../../geometries/geom2"),poly2=require("../../geometries/poly2"),offsetFromPoints=require("./offsetFromPoints"),offsetGeom2=(e,o)=>{const{delta:r,corners:s,segments:t}=Object.assign({},{delta:1,corners:"edge",segments:0},e);if("edge"!==s&&"chamfer"!==s&&"round"!==s)throw new Error('corners must be "edge", "chamfer", or "round"');const n=geom2.toOutlines(o),m=n.map(o=>{const m=n.reduce((e,r)=>e+poly2.arePointsInside(o,poly2.create(r)),0);return offsetFromPoints(e={delta:m%2==0?r:-r,corners:s,closed:!0,segments:t},o)}).reduce((e,o)=>e.concat(geom2.toSides(geom2.fromPoints(o))),[]);return geom2.create(m)};module.exports=offsetGeom2;
|
|
888
879
|
|
|
889
|
-
},{"../../geometries/geom2":22,"../../geometries/poly2":
|
|
880
|
+
},{"../../geometries/geom2":22,"../../geometries/poly2":69,"./offsetFromPoints":292}],294:[function(require,module,exports){
|
|
890
881
|
const path2=require("../../geometries/path2"),offsetFromPoints=require("./offsetFromPoints"),offsetPath2=(e,o)=>{const s={delta:1,corners:"edge",closed:o.isClosed,segments:16},{delta:t,corners:r,closed:n,segments:c}=Object.assign({},s,e);if("edge"!==r&&"chamfer"!==r&&"round"!==r)throw new Error('corners must be "edge", "chamfer", or "round"');const d=offsetFromPoints(e={delta:t,corners:r,closed:n,segments:c},path2.toPoints(o));return path2.fromPoints({closed:n},d)};module.exports=offsetPath2;
|
|
891
882
|
|
|
892
|
-
},{"../../geometries/path2":
|
|
883
|
+
},{"../../geometries/path2":58,"./offsetFromPoints":292}],295:[function(require,module,exports){
|
|
893
884
|
const{area:area}=require("../../../maths/utils"),{toOutlines:toOutlines}=require("../../../geometries/geom2"),{arePointsInside:arePointsInside}=require("../../../geometries/poly2"),assignHoles=e=>{const s=toOutlines(e),o=[],t=[];s.forEach((e,s)=>{const n=area(e);n<0?t.push(s):n>0&&o.push(s)});const n=[],r=[];return o.forEach((e,o)=>{const i=s[e];n[o]=[],t.forEach((e,t)=>{const a=s[e];arePointsInside([a[0]],{vertices:i})&&(n[o].push(e),r[t]||(r[t]=[]),r[t].push(o))})}),t.forEach((e,s)=>{if(r[s]&&r[s].length>1){const o=minIndex(r[s],e=>n[e].length);r[s].forEach((s,t)=>{t!==o&&(n[s]=n[s].filter(s=>s!==e))})}}),n.map((e,t)=>({solid:s[o[t]],holes:e.map(e=>s[e])}))},minIndex=(e,s)=>{let o,t;return e.forEach((e,n)=>{const r=s(e);(void 0===t||r<t)&&(o=n,t=r)}),o};module.exports=assignHoles;
|
|
894
885
|
|
|
895
|
-
},{"../../../geometries/geom2":22,"../../../geometries/poly2":
|
|
886
|
+
},{"../../../geometries/geom2":22,"../../../geometries/poly2":69,"../../../maths/utils":165}],296:[function(require,module,exports){
|
|
896
887
|
const{filterPoints:filterPoints,linkedPolygon:linkedPolygon,locallyInside:locallyInside,splitPolygon:splitPolygon}=require("./linkedPolygon"),{area:area,pointInTriangle:pointInTriangle}=require("./triangle"),eliminateHoles=(e,t,n,l)=>{const i=[];for(let n=0,o=t.length;n<o;n++){const r=t[n]*l,x=n<o-1?t[n+1]*l:e.length,s=linkedPolygon(e,r,x,l,!1);s===s.next&&(s.steiner=!0),i.push(getLeftmost(s))}i.sort((e,t)=>e.x-t.x);for(let e=0;e<i.length;e++)n=eliminateHole(i[e],n),n=filterPoints(n,n.next);return n},eliminateHole=(e,t)=>{const n=findHoleBridge(e,t);if(!n)return t;const l=splitPolygon(n,e),i=filterPoints(n,n.next);return filterPoints(l,l.next),t===n?i:t},findHoleBridge=(e,t)=>{let n=t;const l=e.x,i=e.y;let o,r=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){const e=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=l&&e>r){if(r=e,e===l){if(i===n.y)return n;if(i===n.next.y)return n.next}o=n.x<n.next.x?n:n.next}}n=n.next}while(n!==t);if(!o)return null;if(l===r)return o;const x=o,s=o.x,y=o.y;let a=1/0;n=o;do{if(l>=n.x&&n.x>=s&&l!==n.x&&pointInTriangle(i<y?l:r,i,s,y,i<y?r:l,i,n.x,n.y)){const t=Math.abs(i-n.y)/(l-n.x);locallyInside(n,e)&&(t<a||t===a&&(n.x>o.x||n.x===o.x&§orContainsSector(o,n)))&&(o=n,a=t)}n=n.next}while(n!==x);return o},sectorContainsSector=(e,t)=>area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0,getLeftmost=e=>{let t=e,n=e;do{(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next}while(t!==e);return n};module.exports=eliminateHoles;
|
|
897
888
|
|
|
898
|
-
},{"./linkedPolygon":
|
|
889
|
+
},{"./linkedPolygon":300,"./triangle":302}],297:[function(require,module,exports){
|
|
899
890
|
const eliminateHoles=require("./eliminateHoles"),{removeNode:removeNode,sortLinked:sortLinked}=require("./linkedList"),{cureLocalIntersections:cureLocalIntersections,filterPoints:filterPoints,isValidDiagonal:isValidDiagonal,linkedPolygon:linkedPolygon,splitPolygon:splitPolygon}=require("./linkedPolygon"),{area:area,pointInTriangle:pointInTriangle}=require("./triangle"),triangulate=(e,r,n=2)=>{const t=r&&r.length,i=t?r[0]*n:e.length;let x=linkedPolygon(e,0,i,n,!0);const l=[];if(!x||x.next===x.prev)return l;let o,a,y,s,p;if(t&&(x=eliminateHoles(e,r,x,n)),e.length>80*n){o=y=e[0],a=s=e[1];for(let r=n;r<i;r+=n){const n=e[r],t=e[r+1];n<o&&(o=n),t<a&&(a=t),n>y&&(y=n),t>s&&(s=t)}p=0!==(p=Math.max(y-o,s-a))?1/p:0}return earcutLinked(x,l,n,o,a,p),l},earcutLinked=(e,r,n,t,i,x,l)=>{if(!e)return;!l&&x&&indexCurve(e,t,i,x);let o,a,y=e;for(;e.prev!==e.next;)if(o=e.prev,a=e.next,x?isEarHashed(e,t,i,x):isEar(e))r.push(o.i/n),r.push(e.i/n),r.push(a.i/n),removeNode(e),e=a.next,y=a.next;else if((e=a)===y){l?1===l?(e=cureLocalIntersections(filterPoints(e),r,n),earcutLinked(e,r,n,t,i,x,2)):2===l&&splitEarcut(e,r,n,t,i,x):earcutLinked(filterPoints(e),r,n,t,i,x,1);break}},isEar=e=>{const r=e.prev,n=e,t=e.next;if(area(r,n,t)>=0)return!1;let i=e.next.next;for(;i!==e.prev;){if(pointInTriangle(r.x,r.y,n.x,n.y,t.x,t.y,i.x,i.y)&&area(i.prev,i,i.next)>=0)return!1;i=i.next}return!0},isEarHashed=(e,r,n,t)=>{const i=e.prev,x=e,l=e.next;if(area(i,x,l)>=0)return!1;const o=i.x<x.x?i.x<l.x?i.x:l.x:x.x<l.x?x.x:l.x,a=i.y<x.y?i.y<l.y?i.y:l.y:x.y<l.y?x.y:l.y,y=i.x>x.x?i.x>l.x?i.x:l.x:x.x>l.x?x.x:l.x,s=i.y>x.y?i.y>l.y?i.y:l.y:x.y>l.y?x.y:l.y,p=zOrder(o,a,r,n,t),u=zOrder(y,s,r,n,t);let d=e.prevZ,v=e.nextZ;for(;d&&d.z>=p&&v&&v.z<=u;){if(d!==e.prev&&d!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,d.x,d.y)&&area(d.prev,d,d.next)>=0)return!1;if(d=d.prevZ,v!==e.prev&&v!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,v.x,v.y)&&area(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;d&&d.z>=p;){if(d!==e.prev&&d!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,d.x,d.y)&&area(d.prev,d,d.next)>=0)return!1;d=d.prevZ}for(;v&&v.z<=u;){if(v!==e.prev&&v!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,v.x,v.y)&&area(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0},splitEarcut=(e,r,n,t,i,x)=>{let l=e;do{let e=l.next.next;for(;e!==l.prev;){if(l.i!==e.i&&isValidDiagonal(l,e)){let o=splitPolygon(l,e);return l=filterPoints(l,l.next),o=filterPoints(o,o.next),earcutLinked(l,r,n,t,i,x),void earcutLinked(o,r,n,t,i,x)}e=e.next}l=l.next}while(l!==e)},indexCurve=(e,r,n,t)=>{let i=e;do{null===i.z&&(i.z=zOrder(i.x,i.y,r,n,t)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,sortLinked(i,e=>e.z)},zOrder=(e,r,n,t,i)=>(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))|(r=1431655765&((r=858993459&((r=252645135&((r=16711935&((r=32767*(r-t)*i)|r<<8))|r<<4))|r<<2))|r<<1))<<1;module.exports=triangulate;
|
|
900
891
|
|
|
901
|
-
},{"./eliminateHoles":
|
|
892
|
+
},{"./eliminateHoles":296,"./linkedList":298,"./linkedPolygon":300,"./triangle":302}],298:[function(require,module,exports){
|
|
902
893
|
const sortLinked=require("./linkedListSort");class Node{constructor(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}}const insertNode=(e,t,n,r)=>{const o=new Node(e,t,n);return r?(o.next=r.next,o.prev=r,r.next.prev=o,r.next=o):(o.prev=o,o.next=o),o},removeNode=e=>{e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)};module.exports={Node:Node,insertNode:insertNode,removeNode:removeNode,sortLinked:sortLinked};
|
|
903
894
|
|
|
904
|
-
},{"./linkedListSort":
|
|
895
|
+
},{"./linkedListSort":299}],299:[function(require,module,exports){
|
|
905
896
|
const sortLinked=(e,t)=>{let l,n,o,r,x,Z=1;do{n=e,e=null;let u=null;for(x=0;n;){x++,o=n;let d=0;for(l=0;l<Z&&(d++,o=o.nextZ);l++);let s=Z;for(;d>0||s>0&&o;)0!==d&&(0===s||!o||t(n)<=t(o))?(r=n,n=n.nextZ,d--):(r=o,o=o.nextZ,s--),u?u.nextZ=r:e=r,r.prevZ=u,u=r;n=o}u.nextZ=null,Z*=2}while(x>1);return e};module.exports=sortLinked;
|
|
906
897
|
|
|
907
|
-
},{}],
|
|
898
|
+
},{}],300:[function(require,module,exports){
|
|
908
899
|
const{Node:Node,insertNode:insertNode,removeNode:removeNode}=require("./linkedList"),{area:area}=require("./triangle"),linkedPolygon=(e,n,t,r,i)=>{let o;if(i===signedArea(e,n,t,r)>0)for(let i=n;i<t;i+=r)o=insertNode(i,e[i],e[i+1],o);else for(let i=t-r;i>=n;i-=r)o=insertNode(i,e[i],e[i+1],o);return o&&equals(o,o.next)&&(removeNode(o),o=o.next),o},filterPoints=(e,n)=>{if(!e)return e;n||(n=e);let t,r=e;do{if(t=!1,r.steiner||!equals(r,r.next)&&0!==area(r.prev,r,r.next))r=r.next;else{if(removeNode(r),(r=n=r.prev)===r.next)break;t=!0}}while(t||r!==n);return n},cureLocalIntersections=(e,n,t)=>{let r=e;do{const i=r.prev,o=r.next.next;!equals(i,o)&&intersects(i,r,r.next,o)&&locallyInside(i,o)&&locallyInside(o,i)&&(n.push(i.i/t),n.push(r.i/t),n.push(o.i/t),removeNode(r),removeNode(r.next),r=e=o),r=r.next}while(r!==e);return filterPoints(r)},intersectsPolygon=(e,n)=>{let t=e;do{if(t.i!==e.i&&t.next.i!==e.i&&t.i!==n.i&&t.next.i!==n.i&&intersects(t,t.next,e,n))return!0;t=t.next}while(t!==e);return!1},locallyInside=(e,n)=>area(e.prev,e,e.next)<0?area(e,n,e.next)>=0&&area(e,e.prev,n)>=0:area(e,n,e.prev)<0||area(e,e.next,n)<0,middleInside=(e,n)=>{let t=e,r=!1;const i=(e.x+n.x)/2,o=(e.y+n.y)/2;do{t.y>o!=t.next.y>o&&t.next.y!==t.y&&i<(t.next.x-t.x)*(o-t.y)/(t.next.y-t.y)+t.x&&(r=!r),t=t.next}while(t!==e);return r},splitPolygon=(e,n)=>{const t=new Node(e.i,e.x,e.y),r=new Node(n.i,n.x,n.y),i=e.next,o=n.prev;return e.next=n,n.prev=e,t.next=i,i.prev=t,r.next=t,t.prev=r,o.next=r,r.prev=o,r},isValidDiagonal=(e,n)=>e.next.i!==n.i&&e.prev.i!==n.i&&!intersectsPolygon(e,n)&&(locallyInside(e,n)&&locallyInside(n,e)&&middleInside(e,n)&&(area(e.prev,e,n.prev)||area(e,n.prev,n))||equals(e,n)&&area(e.prev,e,e.next)>0&&area(n.prev,n,n.next)>0),intersects=(e,n,t,r)=>{const i=Math.sign(area(e,n,t)),o=Math.sign(area(e,n,r)),l=Math.sign(area(t,r,e)),a=Math.sign(area(t,r,n));return i!==o&&l!==a||(!(0!==i||!onSegment(e,t,n))||(!(0!==o||!onSegment(e,r,n))||(!(0!==l||!onSegment(t,e,r))||!(0!==a||!onSegment(t,n,r)))))},onSegment=(e,n,t)=>n.x<=Math.max(e.x,t.x)&&n.x>=Math.min(e.x,t.x)&&n.y<=Math.max(e.y,t.y)&&n.y>=Math.min(e.y,t.y),signedArea=(e,n,t,r)=>{let i=0;for(let o=n,l=t-r;o<t;o+=r)i+=(e[l]-e[o])*(e[o+1]+e[l+1]),l=o;return i},equals=(e,n)=>e.x===n.x&&e.y===n.y;module.exports={cureLocalIntersections:cureLocalIntersections,filterPoints:filterPoints,isValidDiagonal:isValidDiagonal,linkedPolygon:linkedPolygon,locallyInside:locallyInside,splitPolygon:splitPolygon};
|
|
909
900
|
|
|
910
|
-
},{"./linkedList":
|
|
901
|
+
},{"./linkedList":298,"./triangle":302}],301:[function(require,module,exports){
|
|
911
902
|
const geom2=require("../../../geometries/geom2"),plane=require("../../../maths/plane"),vec2=require("../../../maths/vec2"),vec3=require("../../../maths/vec3"),calculatePlane=require("../slice/calculatePlane"),assignHoles=require("./assignHoles");class PolygonHierarchy{constructor(e){this.plane=calculatePlane(e);const s=vec3.orthogonal(vec3.create(),this.plane),c=vec3.cross(vec3.create(),this.plane,s);this.v=vec3.normalize(c,c),this.u=vec3.cross(vec3.create(),this.v,this.plane),this.basisMap=new Map;const t=e.edges.map(e=>e.map(e=>this.to2D(e))),a=geom2.create(t);this.roots=assignHoles(a)}to2D(e){const s=vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v));return this.basisMap.set(s,e),s}to3D(e){const s=this.basisMap.get(e);if(s)return s;{console.log("Warning: point not in original slice");const s=vec3.scale(vec3.create(),this.u,e[0]),c=vec3.scale(vec3.create(),this.v,e[1]),t=vec3.scale(vec3.create(),plane,plane[3]),a=vec3.add(s,s,t);return vec3.add(c,c,a)}}}module.exports=PolygonHierarchy;
|
|
912
903
|
|
|
913
|
-
},{"../../../geometries/geom2":22,"../../../maths/plane":
|
|
904
|
+
},{"../../../geometries/geom2":22,"../../../maths/plane":159,"../../../maths/vec2":186,"../../../maths/vec3":217,"../slice/calculatePlane":314,"./assignHoles":295}],302:[function(require,module,exports){
|
|
914
905
|
const pointInTriangle=(n,a,e,r,i,o,t,x)=>(i-t)*(a-x)-(n-t)*(o-x)>=0&&(n-t)*(r-x)-(e-t)*(a-x)>=0&&(e-t)*(o-x)-(i-t)*(r-x)>=0,area=(n,a,e)=>(a.y-n.y)*(e.x-a.x)-(a.x-n.x)*(e.y-a.y);module.exports={area:area,pointInTriangle:pointInTriangle};
|
|
915
906
|
|
|
916
|
-
},{}],
|
|
907
|
+
},{}],303:[function(require,module,exports){
|
|
917
908
|
const mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),repairSlice=require("./slice/repairSlice"),extrudeWalls=require("./extrudeWalls"),defaultCallback=(e,r,l)=>{let t=null;return geom2.isA(l)&&(t=slice.fromSides(geom2.toSides(l))),poly3.isA(l)&&(t=slice.fromPoints(poly3.toPoints(l))),0===e||1===e?slice.transform(mat4.fromTranslation(mat4.create(),[0,0,e]),t):null},extrudeFromSlices=(e,r)=>{const l={numberOfSlices:2,capStart:!0,capEnd:!0,close:!1,repair:!0,callback:defaultCallback},{numberOfSlices:t,capStart:o,capEnd:c,close:s,repair:i,callback:a}=Object.assign({},l,e);if(t<2)throw new Error("numberOfSlices must be 2 or more");i&&repairSlice(r);const n=t-1;let u=null,m=null,f=null,g=[];for(let e=0;e<t;e++){const l=a(e/n,e,r);if(l){if(!slice.isA(l))throw new Error("the callback function must return slice objects");if(0===slice.toEdges(l).length)throw new Error("the callback function must return slices with one or more edges");f&&(g=g.concat(extrudeWalls(f,l))),0===e&&(u=l),e===t-1&&(m=l),f=l}}if(c){const e=slice.toPolygons(m);g=g.concat(e)}if(o){const e=slice.toPolygons(u).map(poly3.invert);g=g.concat(e)}return o||c||s&&!slice.equals(m,u)&&(g=g.concat(extrudeWalls(m,u))),geom3.create(g)};module.exports=extrudeFromSlices;
|
|
918
909
|
|
|
919
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/poly3":
|
|
910
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/poly3":75,"../../maths/mat4":140,"./extrudeWalls":311,"./slice":320,"./slice/repairSlice":322}],304:[function(require,module,exports){
|
|
920
911
|
const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeLinearPath2=require("./extrudeLinearPath2"),extrudeLinear=(e,...t)=>{const{height:r,twistAngle:i,twistSteps:n,repair:a}=Object.assign({},{height:1,twistAngle:0,twistSteps:1,repair:!0},e);if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");e={offset:[0,0,r],twistAngle:i,twistSteps:n,repair:a};const s=t.map(t=>path2.isA(t)?extrudeLinearPath2(e,t):geom2.isA(t)?extrudeLinearGeom2(e,t):t);return 1===s.length?s[0]:s};module.exports=extrudeLinear;
|
|
921
912
|
|
|
922
|
-
},{"../../geometries/geom2":22,"../../geometries/path2":
|
|
913
|
+
},{"../../geometries/geom2":22,"../../geometries/path2":58,"../../utils/flatten":391,"./extrudeLinearGeom2":305,"./extrudeLinearPath2":306}],305:[function(require,module,exports){
|
|
923
914
|
const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeGeom2=(e,t)=>{let{offset:r,twistAngle:s,twistSteps:o,repair:i}=Object.assign({},{offset:[0,0,1],twistAngle:0,twistSteps:12,repair:!0},e);if(o<1)throw new Error("twistSteps must be 1 or more");0===s&&(o=1);const c=vec3.clone(r),m=geom2.toSides(t);if(0===m.length)throw new Error("the given geometry cannot be empty");const a=slice.fromSides(m);c[2]<0&&slice.reverse(a,a);const n=mat4.create();return extrudeFromSlices(e={numberOfSlices:o+1,capStart:!0,capEnd:!0,repair:i,callback:(e,t,r)=>{const i=t/o*s,m=vec3.scale(vec3.create(),c,t/o);return mat4.multiply(n,mat4.fromZRotation(n,i),mat4.fromTranslation(mat4.create(),m)),slice.transform(n,r)}},a)};module.exports=extrudeGeom2;
|
|
924
915
|
|
|
925
|
-
},{"../../geometries/geom2":22,"../../maths/mat4":
|
|
916
|
+
},{"../../geometries/geom2":22,"../../maths/mat4":140,"../../maths/vec3":217,"./extrudeFromSlices":303,"./slice":320}],306:[function(require,module,exports){
|
|
926
917
|
const geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudePath2=(e,r)=>{if(!r.isClosed)throw new Error("extruded path must be closed");const t=path2.toPoints(r),o=geom2.fromPoints(t);return extrudeLinearGeom2(e,o)};module.exports=extrudePath2;
|
|
927
918
|
|
|
928
|
-
},{"../../geometries/geom2":22,"../../geometries/path2":
|
|
919
|
+
},{"../../geometries/geom2":22,"../../geometries/path2":58,"./extrudeLinearGeom2":305}],307:[function(require,module,exports){
|
|
929
920
|
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;
|
|
930
921
|
|
|
931
|
-
},{"../../geometries/geom2":22,"../../geometries/path2":
|
|
922
|
+
},{"../../geometries/geom2":22,"../../geometries/path2":58,"../../utils/flatten":391,"./extrudeRectangularGeom2":308,"./extrudeRectangularPath2":309}],308:[function(require,module,exports){
|
|
932
923
|
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;
|
|
933
924
|
|
|
934
|
-
},{"../../geometries/geom2":22,"../../geometries/path2":
|
|
925
|
+
},{"../../geometries/geom2":22,"../../geometries/path2":58,"../../maths/utils":165,"../expansions/expand":284,"./extrudeLinearGeom2":305}],309:[function(require,module,exports){
|
|
935
926
|
const path2=require("../../geometries/path2"),expand=require("../expansions/expand"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeRectangularPath2=(e,t)=>{const{size:r,height:n}=Object.assign({},{size:1,height:1},e);if(e.delta=r,e.offset=[0,0,n],0===path2.toPoints(t).length)throw new Error("the given geometry cannot be empty");const a=expand(e,t);return extrudeLinearGeom2(e,a)};module.exports=extrudeRectangularPath2;
|
|
936
927
|
|
|
937
|
-
},{"../../geometries/path2":
|
|
938
|
-
const mat4=require("../../maths/mat4"),{mirrorX:mirrorX}=require("../transforms/mirror"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeRotate=(e,t)=>{const r={segments:12,startAngle:0,angle:2*Math.PI,overflow:"cap"};let{segments:a,startAngle:o,angle:s,overflow:m}=Object.assign({},r,e);if(a<3)throw new Error("segments must be greater then 3");o=Math.abs(o)>2*Math.PI?o%(2*Math.PI):o,s=Math.abs(s)>2*Math.PI?s%(2*Math.PI):s;let n=o+s;if((n=Math.abs(n)>2*Math.PI?n%(2*Math.PI):n)<o){const e=o;o=n,n=e}let l=n-o;if(l<=0&&(l=2*Math.PI),Math.abs(l)<2*Math.PI){const e=2*Math.PI/a;a=Math.floor(Math.abs(l)/e),Math.abs(l)>a*e&&a++}let h=geom2.toSides(t);if(0===h.length)throw new Error("the given geometry cannot be empty");const i=h.filter(e=>e[0][0]<0),c=h.filter(e=>e[0][0]>=0);i.length>0&&c.length>0&&"cap"===m&&(i.length>c.length?(h=h.map(e=>{let t=e[0],r=e[1];return[t=[Math.min(t[0],0),t[1]],r=[Math.min(r[0],0),r[1]]]}),t=geom2.reverse(geom2.create(h)),t=mirrorX(t)):c.length>=i.length&&(h=h.map(e=>{let t=e[0],r=e[1];return[t=[Math.max(t[0],0),t[1]],r=[Math.max(r[0],0),r[1]]]}),t=geom2.create(h)));const g=l/a,M=Math.abs(l)<2*Math.PI,u=slice.fromSides(geom2.toSides(t));slice.reverse(u,u);const f=mat4.create();return extrudeFromSlices(e={numberOfSlices:a+1,capStart:M,capEnd:M,close:!M,callback:(e,t,r)=>{
|
|
928
|
+
},{"../../geometries/path2":58,"../expansions/expand":284,"./extrudeLinearGeom2":305}],310:[function(require,module,exports){
|
|
929
|
+
const mat4=require("../../maths/mat4"),{mirrorX:mirrorX}=require("../transforms/mirror"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeRotate=(e,t)=>{const r={segments:12,startAngle:0,angle:2*Math.PI,overflow:"cap"};let{segments:a,startAngle:o,angle:s,overflow:m}=Object.assign({},r,e);if(a<3)throw new Error("segments must be greater then 3");o=Math.abs(o)>2*Math.PI?o%(2*Math.PI):o,s=Math.abs(s)>2*Math.PI?s%(2*Math.PI):s;let n=o+s;if((n=Math.abs(n)>2*Math.PI?n%(2*Math.PI):n)<o){const e=o;o=n,n=e}let l=n-o;if(l<=0&&(l=2*Math.PI),Math.abs(l)<2*Math.PI){const e=2*Math.PI/a;a=Math.floor(Math.abs(l)/e),Math.abs(l)>a*e&&a++}let h=geom2.toSides(t);if(0===h.length)throw new Error("the given geometry cannot be empty");const i=h.filter(e=>e[0][0]<0),c=h.filter(e=>e[0][0]>=0);i.length>0&&c.length>0&&"cap"===m&&(i.length>c.length?(h=h.map(e=>{let t=e[0],r=e[1];return[t=[Math.min(t[0],0),t[1]],r=[Math.min(r[0],0),r[1]]]}),t=geom2.reverse(geom2.create(h)),t=mirrorX(t)):c.length>=i.length&&(h=h.map(e=>{let t=e[0],r=e[1];return[t=[Math.max(t[0],0),t[1]],r=[Math.max(r[0],0),r[1]]]}),t=geom2.create(h)));const g=l/a,M=Math.abs(l)<2*Math.PI,u=slice.fromSides(geom2.toSides(t));slice.reverse(u,u);const f=mat4.create();return extrudeFromSlices(e={numberOfSlices:a+1,capStart:M,capEnd:M,close:!M,callback:(e,t,r)=>{let s=g*t+o;return l===2*Math.PI&&t===a&&(s=o),mat4.multiply(f,mat4.fromZRotation(f,s),mat4.fromXRotation(mat4.create(),Math.PI/2)),slice.transform(f,r)}},u)};module.exports=extrudeRotate;
|
|
939
930
|
|
|
940
|
-
},{"../../geometries/geom2":22,"../../maths/mat4":
|
|
941
|
-
const{EPS:EPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),gcd=(e,t)=>e===t?e:e<t?gcd(t,e):1===t?1:0===t?e:gcd(t,e%t),lcm=(e,t)=>e*t/gcd(e,t),repartitionEdges=(e,t)=>{const r=e/t.length;if(1===r)return t;const s=vec3.fromValues(r,r,r),c=[];return t.forEach(e=>{const t=vec3.subtract(vec3.create(),e[1],e[0]);vec3.divide(t,t,s);let
|
|
931
|
+
},{"../../geometries/geom2":22,"../../maths/mat4":140,"../transforms/mirror":356,"./extrudeFromSlices":303,"./slice":320}],311:[function(require,module,exports){
|
|
932
|
+
const{EPS:EPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),gcd=(e,t)=>e===t?e:e<t?gcd(t,e):1===t?1:0===t?e:gcd(t,e%t),lcm=(e,t)=>e*t/gcd(e,t),repartitionEdges=(e,t)=>{const r=e/t.length;if(1===r)return t;const s=vec3.fromValues(r,r,r),c=[];return t.forEach(e=>{const t=vec3.subtract(vec3.create(),e[1],e[0]);vec3.divide(t,t,s);let l=e[0];for(let e=1;e<=r;++e){const e=vec3.add(vec3.create(),l,t);c.push([l,e]),l=e}}),c},EPSAREA=EPS*EPS/2*Math.sin(Math.PI/3),extrudeWalls=(e,t)=>{let r=slice.toEdges(e),s=slice.toEdges(t);if(r.length!==s.length){const e=lcm(r.length,s.length);e!==r.length&&(r=repartitionEdges(e,r)),e!==s.length&&(s=repartitionEdges(e,s))}const c=[];return r.forEach((e,t)=>{const r=s[t],l=poly3.create([e[0],e[1],r[1]]),o=poly3.measureArea(l);Number.isFinite(o)&&o>EPSAREA&&c.push(l);const n=poly3.create([e[0],r[1],r[0]]),i=poly3.measureArea(n);Number.isFinite(i)&&i>EPSAREA&&c.push(n)}),c};module.exports=extrudeWalls;
|
|
942
933
|
|
|
943
|
-
},{"../../geometries/poly3":
|
|
934
|
+
},{"../../geometries/poly3":75,"../../maths/constants":90,"../../maths/vec3":217,"./slice":320}],312:[function(require,module,exports){
|
|
944
935
|
module.exports={extrudeFromSlices:require("./extrudeFromSlices"),extrudeLinear:require("./extrudeLinear"),extrudeRectangular:require("./extrudeRectangular"),extrudeRotate:require("./extrudeRotate"),project:require("./project"),slice:require("./slice")};
|
|
945
936
|
|
|
946
|
-
},{"./extrudeFromSlices":
|
|
947
|
-
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"),
|
|
937
|
+
},{"./extrudeFromSlices":303,"./extrudeLinear":304,"./extrudeRectangular":307,"./extrudeRotate":310,"./project":313,"./slice":320}],313:[function(require,module,exports){
|
|
938
|
+
const flatten=require("../../utils/flatten"),aboutEqualNormals=require("../../maths/utils/aboutEqualNormals"),plane=require("../../maths/plane"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),measureEpsilon=require("../../measurements/measureEpsilon"),unionGeom2=require("../booleans/unionGeom2"),projectGeom3=(e,o)=>{const r=plane.fromNormalAndPoint(plane.create(),e.axis,e.origin);if(Number.isNaN(r[0])||Number.isNaN(r[1])||Number.isNaN(r[2])||Number.isNaN(r[3]))throw new Error("project: invalid axis or origin");const t=measureEpsilon(o),a=t*t*Math.sqrt(3)/4;if(0===t)return geom2.create();const n=geom3.toPolygons(o);let s=[];for(let e=0;e<n.length;e++){const o=n[e].vertices.map(e=>plane.projectionOfPoint(r,e)),t=poly3.create(o),i=poly3.plane(t);aboutEqualNormals(r,i)&&(poly3.measureArea(t)<a||s.push(t))}if(!aboutEqualNormals(r,[0,0,1])){const e=mat4.fromVectorRotation(mat4.create(),r,[0,0,1]);s=s.map(o=>poly3.transform(e,o))}const i=(s=s.sort((e,o)=>poly3.measureArea(o)-poly3.measureArea(e))).map(e=>geom2.fromPoints(e.vertices));return unionGeom2(i)},project=(e,...o)=>{const{axis:r,origin:t}=Object.assign({},{axis:[0,0,1],origin:[0,0,0]},e);if(0===(o=flatten(o)).length)throw new Error("wrong number of arguments");e={axis:r,origin:t};const a=o.map(o=>geom3.isA(o)?projectGeom3(e,o):o);return 1===a.length?a[0]:a};module.exports=project;
|
|
948
939
|
|
|
949
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/poly3":
|
|
940
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/poly3":75,"../../maths/mat4":140,"../../maths/plane":159,"../../maths/utils/aboutEqualNormals":163,"../../measurements/measureEpsilon":258,"../../utils/flatten":391,"../booleans/unionGeom2":281}],314:[function(require,module,exports){
|
|
950
941
|
const plane=require("../../../maths/plane"),vec3=require("../../../maths/vec3"),calculatePlane=e=>{const c=e.edges;if(c.length<3)throw new Error("slices must have 3 or more edges to calculate a plane");const a=c.reduce((e,c)=>vec3.add(vec3.create(),e,c[0]),vec3.create());let t;vec3.scale(a,a,1/c.length);let l=0;c.forEach(e=>{if(!vec3.equals(e[0],e[1])){const c=vec3.squaredDistance(a,e[0]);c>l&&(t=e,l=c)}});const r=c.find(e=>vec3.equals(e[1],t[0]));return plane.fromPoints(plane.create(),r[0],t[0],t[1])};module.exports=calculatePlane;
|
|
951
942
|
|
|
952
|
-
},{"../../../maths/plane":
|
|
943
|
+
},{"../../../maths/plane":159,"../../../maths/vec3":217}],315:[function(require,module,exports){
|
|
953
944
|
const create=require("./create"),vec3=require("../../../maths/vec3"),clone=(...e)=>{let c,r;return 1===e.length?(c=create(),r=e[0]):(c=e[0],r=e[1]),c.edges=r.edges.map(e=>[vec3.clone(e[0]),vec3.clone(e[1])]),c};module.exports=clone;
|
|
954
945
|
|
|
955
|
-
},{"../../../maths/vec3":
|
|
946
|
+
},{"../../../maths/vec3":217,"./create":316}],316:[function(require,module,exports){
|
|
956
947
|
const create=e=>(e||(e=[]),{edges:e});module.exports=create;
|
|
957
948
|
|
|
958
|
-
},{}],
|
|
949
|
+
},{}],317:[function(require,module,exports){
|
|
959
950
|
const vec3=require("../../../maths/vec3"),equals=(e,s)=>{const r=e.edges,t=s.edges;return r.length===t.length&&r.reduce((e,s,r)=>{const u=t[r],c=vec3.squaredDistance(s[0],u[0]);return e&&c<Number.EPSILON},!0)};module.exports=equals;
|
|
960
951
|
|
|
961
|
-
},{"../../../maths/vec3":
|
|
952
|
+
},{"../../../maths/vec3":217}],318:[function(require,module,exports){
|
|
962
953
|
const vec3=require("../../../maths/vec3"),create=require("./create"),fromPoints=e=>{if(!Array.isArray(e))throw new Error("the given points must be an array");if(e.length<3)throw new Error("the given points must contain THREE or more points");const r=[];let t=e[e.length-1];return e.forEach(e=>{2===e.length&&r.push([vec3.fromVec2(vec3.create(),t),vec3.fromVec2(vec3.create(),e)]),3===e.length&&r.push([t,e]),t=e}),create(r)};module.exports=fromPoints;
|
|
963
954
|
|
|
964
|
-
},{"../../../maths/vec3":
|
|
955
|
+
},{"../../../maths/vec3":217,"./create":316}],319:[function(require,module,exports){
|
|
965
956
|
const vec3=require("../../../maths/vec3"),create=require("./create"),fromSides=e=>{if(!Array.isArray(e))throw new Error("the given sides must be an array");const r=[];return e.forEach(e=>{r.push([vec3.fromVec2(vec3.create(),e[0]),vec3.fromVec2(vec3.create(),e[1])])}),create(r)};module.exports=fromSides;
|
|
966
957
|
|
|
967
|
-
},{"../../../maths/vec3":
|
|
958
|
+
},{"../../../maths/vec3":217,"./create":316}],320:[function(require,module,exports){
|
|
968
959
|
module.exports={calculatePlane:require("./calculatePlane"),clone:require("./clone"),create:require("./create"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromSides:require("./fromSides"),isA:require("./isA"),reverse:require("./reverse"),toEdges:require("./toEdges"),toPolygons:require("./toPolygons"),toString:require("./toString"),transform:require("./transform")};
|
|
969
960
|
|
|
970
|
-
},{"./calculatePlane":
|
|
961
|
+
},{"./calculatePlane":314,"./clone":315,"./create":316,"./equals":317,"./fromPoints":318,"./fromSides":319,"./isA":321,"./reverse":323,"./toEdges":324,"./toPolygons":325,"./toString":326,"./transform":327}],321:[function(require,module,exports){
|
|
971
962
|
const isA=e=>!!(e&&"object"==typeof e&&"edges"in e&&Array.isArray(e.edges));module.exports=isA;
|
|
972
963
|
|
|
973
|
-
},{}],
|
|
964
|
+
},{}],322:[function(require,module,exports){
|
|
974
965
|
const vec3=require("../../../maths/vec3"),repairSlice=e=>{if(!e.edges)return e;const t={},r={};e.edges.forEach(e=>{const c=e[0].toString(),o=e[1].toString();t[c]=e[0],t[o]=e[1],r[c]=(r[c]||0)+1,r[o]=(r[o]||0)-1});const c=Object.keys(r).filter(e=>r[e]<0),o=Object.keys(r).filter(e=>r[e]>0);return c.forEach(r=>{const c=t[r];let i,s=1/0;o.forEach(e=>{const r=t[e],o=Math.hypot(c[0]-r[0],c[1]-r[1]);o<s&&(s=o,i=r)}),console.warn(`repairSlice: repairing vertex gap ${c} to ${i} distance ${s}`),e.edges.forEach(e=>{e[0].toString()===r&&(e[0]=i),e[1].toString()===r&&(e[1]=i)})}),e.edges=e.edges.filter(e=>!vec3.equals(e[0],e[1])),e};module.exports=repairSlice;
|
|
975
966
|
|
|
976
|
-
},{"../../../maths/vec3":
|
|
967
|
+
},{"../../../maths/vec3":217}],323:[function(require,module,exports){
|
|
977
968
|
const create=require("./create"),reverse=(...e)=>{let r,t;return 1===e.length?(r=create(),t=e[0]):(r=e[0],t=e[1]),r.edges=t.edges.map(e=>[e[1],e[0]]),r};module.exports=reverse;
|
|
978
969
|
|
|
979
|
-
},{"./create":
|
|
970
|
+
},{"./create":316}],324:[function(require,module,exports){
|
|
980
971
|
const toEdges=e=>e.edges;module.exports=toEdges;
|
|
981
972
|
|
|
982
|
-
},{}],
|
|
973
|
+
},{}],325:[function(require,module,exports){
|
|
983
974
|
const poly3=require("../../../geometries/poly3"),earcut=require("../earcut"),PolygonHierarchy=require("../earcut/polygonHierarchy"),toPolygons=o=>{const e=new PolygonHierarchy(o),r=[];return e.roots.forEach(({solid:o,holes:t})=>{let l=o.length;const n=[];t.forEach((o,e)=>{n.push(l),l+=o.length});const s=[o,...t].flat(),c=s.flat(),a=o=>e.to3D(s[o]),h=earcut(c,n);for(let o=0;o<h.length;o+=3){const t=h.slice(o,o+3).map(a);r.push(poly3.fromPointsAndPlane(t,e.plane))}}),r};module.exports=toPolygons;
|
|
984
975
|
|
|
985
|
-
},{"../../../geometries/poly3":
|
|
976
|
+
},{"../../../geometries/poly3":75,"../earcut":297,"../earcut/polygonHierarchy":301}],326:[function(require,module,exports){
|
|
986
977
|
const vec3=require("../../../maths/vec3"),edgesToString=e=>e.reduce((e,t)=>e+=`[${vec3.toString(t[0])}, ${vec3.toString(t[1])}], `,""),toString=e=>`[${edgesToString(e.edges)}]`;module.exports=toString;
|
|
987
978
|
|
|
988
|
-
},{"../../../maths/vec3":
|
|
979
|
+
},{"../../../maths/vec3":217}],327:[function(require,module,exports){
|
|
989
980
|
const vec3=require("../../../maths/vec3"),create=require("./create"),transform=(e,r)=>{const t=r.edges.map(r=>[vec3.transform(vec3.create(),r[0],e),vec3.transform(vec3.create(),r[1],e)]);return create(t)};module.exports=transform;
|
|
990
981
|
|
|
991
|
-
},{"../../../maths/vec3":
|
|
982
|
+
},{"../../../maths/vec3":217,"./create":316}],328:[function(require,module,exports){
|
|
992
983
|
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;
|
|
993
984
|
|
|
994
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
985
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../utils/areAllShapesTheSameType":389,"../../utils/flatten":391,"./hullGeom2":330,"./hullGeom3":331,"./hullPath2":332}],329:[function(require,module,exports){
|
|
995
986
|
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;
|
|
996
987
|
|
|
997
|
-
},{"../../utils/flatten":
|
|
998
|
-
const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),hullPoints2=require("./hullPoints2"),hullGeom2=(...e)=>{e=flatten(e);const t=
|
|
988
|
+
},{"../../utils/flatten":391,"../booleans/union":280,"./hull":328}],330:[function(require,module,exports){
|
|
989
|
+
const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),hullPoints2=require("./hullPoints2"),toUniquePoints=require("./toUniquePoints"),hullGeom2=(...e)=>{e=flatten(e);const t=toUniquePoints(e),o=hullPoints2(t);return o.length<3?geom2.create():geom2.fromPoints(o)};module.exports=hullGeom2;
|
|
999
990
|
|
|
1000
|
-
},{"../../geometries/geom2":22,"../../utils/flatten":
|
|
1001
|
-
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=
|
|
991
|
+
},{"../../geometries/geom2":22,"../../utils/flatten":391,"./hullPoints2":333,"./toUniquePoints":343}],331:[function(require,module,exports){
|
|
992
|
+
const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),quickhull=require("./quickhull"),toUniquePoints=require("./toUniquePoints"),hullGeom3=(...e)=>{if(1===(e=flatten(e)).length)return e[0];const t=toUniquePoints(e),o=quickhull(t,{skipTriangulation:!0}).map(e=>{const o=e.map(e=>t[e]);return poly3.create(o)});return geom3.create(o)};module.exports=hullGeom3;
|
|
1002
993
|
|
|
1003
|
-
},{"../../geometries/geom3":37,"../../geometries/poly3":
|
|
1004
|
-
const flatten=require("../../utils/flatten"),path2=require("../../geometries/path2"),hullPoints2=require("./hullPoints2"),hullPath2=(...t)=>{t=flatten(t);const e=
|
|
994
|
+
},{"../../geometries/geom3":37,"../../geometries/poly3":75,"../../utils/flatten":391,"./quickhull":341,"./toUniquePoints":343}],332:[function(require,module,exports){
|
|
995
|
+
const flatten=require("../../utils/flatten"),path2=require("../../geometries/path2"),hullPoints2=require("./hullPoints2"),toUniquePoints=require("./toUniquePoints"),hullPath2=(...t)=>{t=flatten(t);const e=toUniquePoints(t),o=hullPoints2(e);return path2.fromPoints({closed:!0},o)};module.exports=hullPath2;
|
|
1005
996
|
|
|
1006
|
-
},{"../../geometries/path2":
|
|
1007
|
-
const vec2=require("../../maths/vec2"),
|
|
997
|
+
},{"../../geometries/path2":58,"../../utils/flatten":391,"./hullPoints2":333,"./toUniquePoints":343}],333:[function(require,module,exports){
|
|
998
|
+
const vec2=require("../../maths/vec2"),hullPoints2=t=>{let e=vec2.fromValues(1/0,1/0);t.forEach(t=>{(t[1]<e[1]||t[1]===e[1]&&t[0]<e[0])&&(e=t)});const n=[];t.forEach(t=>{const s=fakeAtan2(t[1]-e[1],t[0]-e[0]),o=vec2.squaredDistance(t,e);n.push({point:t,angle:s,distSq:o})}),n.sort((t,e)=>t.angle<e.angle?-1:t.angle>e.angle?1:t.distSq<e.distSq?-1:t.distSq>e.distSq?1:0);const s=[];return n.forEach(t=>{let e=s.length;for(;e>1&&ccw(s[e-2],s[e-1],t.point)<=Number.EPSILON;)s.pop(),e=s.length;s.push(t.point)}),s},ccw=(t,e,n)=>(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0]),fakeAtan2=(t,e)=>0===t&&0===e?-1/0:-e/t;module.exports=hullPoints2;
|
|
1008
999
|
|
|
1009
|
-
},{"../../maths/vec2":
|
|
1000
|
+
},{"../../maths/vec2":186}],334:[function(require,module,exports){
|
|
1010
1001
|
module.exports={hull:require("./hull"),hullChain:require("./hullChain")};
|
|
1011
1002
|
|
|
1012
|
-
},{"./hull":
|
|
1003
|
+
},{"./hull":328,"./hullChain":329}],335:[function(require,module,exports){
|
|
1013
1004
|
const add=require("../../../maths/vec3/add"),copy=require("../../../maths/vec3/copy"),cross=require("../../../maths/vec3/cross"),dot=require("../../../maths/vec3/dot"),length=require("../../../maths/vec3/length"),normalize=require("../../../maths/vec3/normalize"),scale=require("../../../maths/vec3/scale"),subtract=require("../../../maths/vec3/subtract"),HalfEdge=require("./HalfEdge"),VISIBLE=0,NON_CONVEX=1,DELETED=2;class Face{constructor(){this.normal=[],this.centroid=[],this.offset=0,this.outside=null,this.mark=VISIBLE,this.edge=null,this.nVertices=0}getEdge(e){if("number"!=typeof e)throw Error("requires a number");let t=this.edge;for(;e>0;)t=t.next,e-=1;for(;e<0;)t=t.prev,e+=1;return t}computeNormal(){const e=this.edge,t=e.next;let r=t.next;const s=subtract([],t.head().point,e.head().point),o=[],i=[];for(this.nVertices=2,this.normal=[0,0,0];r!==e;)copy(i,s),subtract(s,r.head().point,e.head().point),add(this.normal,this.normal,cross(o,i,s)),r=r.next,this.nVertices+=1;this.area=length(this.normal),this.normal=scale(this.normal,this.normal,1/this.area)}computeNormalMinArea(e){if(this.computeNormal(),this.area<e){let e,t=0,r=this.edge;do{const s=r.lengthSquared();s>t&&(e=r,t=s),r=r.next}while(r!==this.edge);const s=e.tail().point,o=e.head().point,i=subtract([],o,s),n=Math.sqrt(t);scale(i,i,1/n);const a=dot(this.normal,i);scale(i,i,-a),add(this.normal,this.normal,i),normalize(this.normal,this.normal)}}computeCentroid(){this.centroid=[0,0,0];let e=this.edge;do{add(this.centroid,this.centroid,e.head().point),e=e.next}while(e!==this.edge);scale(this.centroid,this.centroid,1/this.nVertices)}computeNormalAndCentroid(e){void 0!==e?this.computeNormalMinArea(e):this.computeNormal(),this.computeCentroid(),this.offset=dot(this.normal,this.centroid)}distanceToPlane(e){return dot(this.normal,e)-this.offset}connectHalfEdges(e,t){let r;if(e.opposite.face===t.opposite.face){const s=t.opposite.face;let o;e===this.edge&&(this.edge=t),3===s.nVertices?(o=t.opposite.prev.opposite,s.mark=DELETED,r=s):(o=t.opposite.next,s.edge===o.prev&&(s.edge=o),o.prev=o.prev.prev,o.prev.next=o),t.prev=e.prev,t.prev.next=t,t.setOpposite(o),s.computeNormalAndCentroid()}else e.next=t,t.prev=e;return r}mergeAdjacentFaces(e,t){const r=e.opposite,s=r.face;t.push(s),s.mark=DELETED;let o,i,n=e.prev,a=e.next,c=r.prev,h=r.next;for(;n.opposite.face===s;)n=n.prev,h=h.next;for(;a.opposite.face===s;)a=a.next,c=c.prev;for(o=h;o!==c.next;o=o.next)o.face=this;return this.edge=a,(i=this.connectHalfEdges(c,a))&&t.push(i),(i=this.connectHalfEdges(n,h))&&t.push(i),this.computeNormalAndCentroid(),t}collectIndices(){const e=[];let t=this.edge;do{e.push(t.head().index),t=t.next}while(t!==this.edge);return e}static createTriangle(e,t,r,s=0){const o=new Face,i=new HalfEdge(e,o),n=new HalfEdge(t,o),a=new HalfEdge(r,o);return i.next=a.prev=n,n.next=i.prev=a,a.next=n.prev=i,o.edge=i,o.computeNormalAndCentroid(s),o}}module.exports={VISIBLE:VISIBLE,NON_CONVEX:1,DELETED:DELETED,Face:Face};
|
|
1014
1005
|
|
|
1015
|
-
},{"../../../maths/vec3/add":
|
|
1006
|
+
},{"../../../maths/vec3/add":204,"../../../maths/vec3/copy":207,"../../../maths/vec3/cross":209,"../../../maths/vec3/dot":212,"../../../maths/vec3/length":218,"../../../maths/vec3/normalize":224,"../../../maths/vec3/scale":229,"../../../maths/vec3/subtract":233,"./HalfEdge":336}],336:[function(require,module,exports){
|
|
1016
1007
|
const distance=require("../../../maths/vec3/distance"),squaredDistance=require("../../../maths/vec3/squaredDistance");class HalfEdge{constructor(t,e){this.vertex=t,this.face=e,this.next=null,this.prev=null,this.opposite=null}head(){return this.vertex}tail(){return this.prev?this.prev.vertex:null}length(){return this.tail()?distance(this.tail().point,this.head().point):-1}lengthSquared(){return this.tail()?squaredDistance(this.tail().point,this.head().point):-1}setOpposite(t){this.opposite=t,t.opposite=this}}module.exports=HalfEdge;
|
|
1017
1008
|
|
|
1018
|
-
},{"../../../maths/vec3/distance":
|
|
1009
|
+
},{"../../../maths/vec3/distance":210,"../../../maths/vec3/squaredDistance":231}],337:[function(require,module,exports){
|
|
1019
1010
|
const dot=require("../../../maths/vec3/dot"),pointLineDistance=require("./point-line-distance"),getPlaneNormal=require("./get-plane-normal"),VertexList=require("./VertexList"),Vertex=require("./Vertex"),{Face:Face,VISIBLE:VISIBLE,NON_CONVEX:NON_CONVEX,DELETED:DELETED}=require("./Face"),MERGE_NON_CONVEX_WRT_LARGER_FACE=1,MERGE_NON_CONVEX=2;class QuickHull{constructor(e){if(!Array.isArray(e))throw TypeError("input is not a valid array");if(e.length<4)throw Error("cannot build a simplex out of <4 points");this.tolerance=-1,this.nFaces=0,this.nPoints=e.length,this.faces=[],this.newFaces=[],this.claimed=new VertexList,this.unclaimed=new VertexList,this.vertices=[];for(let t=0;t<e.length;t+=1)this.vertices.push(new Vertex(e[t],t));this.discardedFaces=[],this.vertexPointIndices=[]}addVertexToFace(e,t){e.face=t,t.outside?this.claimed.insertBefore(t.outside,e):this.claimed.add(e),t.outside=e}removeVertexFromFace(e,t){e===t.outside&&(e.next&&e.next.face===t?t.outside=e.next:t.outside=null),this.claimed.remove(e)}removeAllVerticesFromFace(e){if(e.outside){let t=e.outside;for(;t.next&&t.next.face===e;)t=t.next;return this.claimed.removeChain(e.outside,t),t.next=null,e.outside}}deleteFaceVertices(e,t){const i=this.removeAllVerticesFromFace(e);if(i)if(t){let e;for(let s=i;s;s=e){e=s.next,t.distanceToPlane(s.point)>this.tolerance?this.addVertexToFace(s,t):this.unclaimed.add(s)}}else this.unclaimed.addAll(i)}resolveUnclaimedPoints(e){let t=this.unclaimed.first();for(let i=t;i;i=t){t=i.next;let s,o=this.tolerance;for(let t=0;t<e.length;t+=1){const a=e[t];if(a.mark===VISIBLE){const e=a.distanceToPlane(i.point);if(e>o&&(o=e,s=a),o>1e3*this.tolerance)break}}s&&this.addVertexToFace(i,s)}}computeExtremes(){const e=[],t=[],i=[],s=[];let o,a;for(o=0;o<3;o+=1)i[o]=s[o]=this.vertices[0];for(o=0;o<3;o+=1)e[o]=t[o]=this.vertices[0].point[o];for(o=1;o<this.vertices.length;o+=1){const c=this.vertices[o],n=c.point;for(a=0;a<3;a+=1)n[a]<e[a]&&(e[a]=n[a],i[a]=c);for(a=0;a<3;a+=1)n[a]>t[a]&&(t[a]=n[a],s[a]=c)}return this.tolerance=3*Number.EPSILON*(Math.max(Math.abs(e[0]),Math.abs(t[0]))+Math.max(Math.abs(e[1]),Math.abs(t[1]))+Math.max(Math.abs(e[2]),Math.abs(t[2]))),[i,s]}createInitialSimplex(){const e=this.vertices,[t,i]=this.computeExtremes();let s,o,a,c,n=0,r=0;for(a=0;a<3;a+=1){const e=i[a].point[a]-t[a].point[a];e>n&&(n=e,r=a)}const l=t[r],h=i[r];for(n=0,a=0;a<this.vertices.length;a+=1){const e=this.vertices[a];if(e!==l&&e!==h){const t=pointLineDistance(e.point,l.point,h.point);t>n&&(n=t,s=e)}}const d=getPlaneNormal([],l.point,h.point,s.point),p=dot(l.point,d);for(n=-1,a=0;a<this.vertices.length;a+=1){const e=this.vertices[a];if(e!==l&&e!==h&&e!==s){const t=Math.abs(dot(d,e.point)-p);t>n&&(n=t,o=e)}}const f=[];if(dot(o.point,d)-p<0)for(f.push(Face.createTriangle(l,h,s),Face.createTriangle(o,h,l),Face.createTriangle(o,s,h),Face.createTriangle(o,l,s)),a=0;a<3;a+=1){const e=(a+1)%3;f[a+1].getEdge(2).setOpposite(f[0].getEdge(e)),f[a+1].getEdge(1).setOpposite(f[e+1].getEdge(0))}else for(f.push(Face.createTriangle(l,s,h),Face.createTriangle(o,l,h),Face.createTriangle(o,h,s),Face.createTriangle(o,s,l)),a=0;a<3;a+=1){const e=(a+1)%3;f[a+1].getEdge(2).setOpposite(f[0].getEdge((3-a)%3)),f[a+1].getEdge(0).setOpposite(f[e+1].getEdge(1))}for(a=0;a<4;a+=1)this.faces.push(f[a]);for(a=0;a<e.length;a+=1){const t=e[a];if(t!==l&&t!==h&&t!==s&&t!==o){let e;for(n=this.tolerance,c=0;c<4;c+=1){const i=f[c].distanceToPlane(t.point);i>n&&(n=i,e=f[c])}e&&this.addVertexToFace(t,e)}}}reindexFaceAndVertices(){const e=[];for(let t=0;t<this.faces.length;t+=1){const i=this.faces[t];i.mark===VISIBLE&&e.push(i)}this.faces=e}collectFaces(e){const t=[];for(let i=0;i<this.faces.length;i+=1){if(this.faces[i].mark!==VISIBLE)throw Error("attempt to include a destroyed face in the hull");const s=this.faces[i].collectIndices();if(e)t.push(s);else for(let e=0;e<s.length-2;e+=1)t.push([s[0],s[e+1],s[e+2]])}return t}nextVertexToAdd(){if(!this.claimed.isEmpty()){let e,t,i=0;const s=this.claimed.first().face;for(t=s.outside;t&&t.face===s;t=t.next){const o=s.distanceToPlane(t.point);o>i&&(i=o,e=t)}return e}}computeHorizon(e,t,i,s){let o;this.deleteFaceVertices(i),i.mark=DELETED,o=t?t.next:t=i.getEdge(0);do{const t=o.opposite,i=t.face;i.mark===VISIBLE&&(i.distanceToPlane(e)>this.tolerance?this.computeHorizon(e,t,i,s):s.push(o)),o=o.next}while(o!==t)}addAdjoiningFace(e,t){const i=Face.createTriangle(e,t.tail(),t.head());return this.faces.push(i),i.getEdge(-1).setOpposite(t.opposite),i.getEdge(0)}addNewFaces(e,t){let i,s;this.newFaces=[];for(let o=0;o<t.length;o+=1){const a=t[o],c=this.addAdjoiningFace(e,a);i?c.next.setOpposite(s):i=c,this.newFaces.push(c.face),s=c}i.next.setOpposite(s)}oppositeFaceDistance(e){return e.face.distanceToPlane(e.opposite.face.centroid)}doAdjacentMerge(e,t){let i=e.edge,s=!0,o=0;do{if(o>=e.nVertices)throw Error("merge recursion limit exceeded");const a=i.opposite.face;let c=!1;if(t===MERGE_NON_CONVEX?(this.oppositeFaceDistance(i)>-this.tolerance||this.oppositeFaceDistance(i.opposite)>-this.tolerance)&&(c=!0):e.area>a.area?this.oppositeFaceDistance(i)>-this.tolerance?c=!0:this.oppositeFaceDistance(i.opposite)>-this.tolerance&&(s=!1):this.oppositeFaceDistance(i.opposite)>-this.tolerance?c=!0:this.oppositeFaceDistance(i)>-this.tolerance&&(s=!1),c){const t=e.mergeAdjacentFaces(i,[]);for(let i=0;i<t.length;i+=1)this.deleteFaceVertices(t[i],e);return!0}i=i.next,o+=1}while(i!==e.edge);return s||(e.mark=NON_CONVEX),!1}addVertexToHull(e){const t=[];this.unclaimed.clear(),this.removeVertexFromFace(e,e.face),this.computeHorizon(e.point,null,e.face,t),this.addNewFaces(e,t);for(let e=0;e<this.newFaces.length;e+=1){const t=this.newFaces[e];if(t.mark===VISIBLE)for(;this.doAdjacentMerge(t,MERGE_NON_CONVEX_WRT_LARGER_FACE););}for(let e=0;e<this.newFaces.length;e+=1){const t=this.newFaces[e];if(t.mark===NON_CONVEX)for(t.mark=VISIBLE;this.doAdjacentMerge(t,MERGE_NON_CONVEX););}this.resolveUnclaimedPoints(this.newFaces)}build(){let e;for(this.createInitialSimplex();e=this.nextVertexToAdd();)this.addVertexToHull(e);this.reindexFaceAndVertices()}}module.exports=QuickHull;
|
|
1020
1011
|
|
|
1021
|
-
},{"../../../maths/vec3/dot":
|
|
1012
|
+
},{"../../../maths/vec3/dot":212,"./Face":335,"./Vertex":338,"./VertexList":339,"./get-plane-normal":340,"./point-line-distance":342}],338:[function(require,module,exports){
|
|
1022
1013
|
class Vertex{constructor(t,e){this.point=t,this.index=e,this.next=null,this.prev=null,this.face=null}}module.exports=Vertex;
|
|
1023
1014
|
|
|
1024
|
-
},{}],
|
|
1015
|
+
},{}],339:[function(require,module,exports){
|
|
1025
1016
|
class VertexList{constructor(){this.head=null,this.tail=null}clear(){this.head=this.tail=null}insertBefore(e,t){t.prev=e.prev,t.next=e,t.prev?t.prev.next=t:this.head=t,e.prev=t}insertAfter(e,t){t.prev=e,t.next=e.next,t.next?t.next.prev=t:this.tail=t,e.next=t}add(e){this.head?this.tail.next=e:this.head=e,e.prev=this.tail,e.next=null,this.tail=e}addAll(e){for(this.head?this.tail.next=e:this.head=e,e.prev=this.tail;e.next;)e=e.next;this.tail=e}remove(e){e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev}removeChain(e,t){e.prev?e.prev.next=t.next:this.head=t.next,t.next?t.next.prev=e.prev:this.tail=e.prev}first(){return this.head}isEmpty(){return!this.head}}module.exports=VertexList;
|
|
1026
1017
|
|
|
1027
|
-
},{}],
|
|
1018
|
+
},{}],340:[function(require,module,exports){
|
|
1028
1019
|
const cross=require("../../../maths/vec3/cross"),normalize=require("../../../maths/vec3/normalize"),subtract=require("../../../maths/vec3/subtract"),planeNormal=(r,e,s,t)=>{const a=[0,0,0];return subtract(r,e,s),subtract(a,s,t),cross(r,r,a),normalize(r,r)};module.exports=planeNormal;
|
|
1029
1020
|
|
|
1030
|
-
},{"../../../maths/vec3/cross":
|
|
1021
|
+
},{"../../../maths/vec3/cross":209,"../../../maths/vec3/normalize":224,"../../../maths/vec3/subtract":233}],341:[function(require,module,exports){
|
|
1031
1022
|
const QuickHull=require("./QuickHull"),runner=(u,l={})=>{const e=new QuickHull(u);return e.build(),e.collectFaces(l.skipTriangulation)};module.exports=runner;
|
|
1032
1023
|
|
|
1033
|
-
},{"./QuickHull":
|
|
1024
|
+
},{"./QuickHull":337}],342:[function(require,module,exports){
|
|
1034
1025
|
const cross=require("../../../maths/vec3/cross"),subtract=require("../../../maths/vec3/subtract"),squaredLength=require("../../../maths/vec3/squaredLength"),distanceSquared=(e,t,r)=>{const s=[],a=[];subtract(s,r,t),subtract(a,e,t);const n=squaredLength(cross([],a,s)),c=squaredLength(s);if(0===c)throw Error("a and b are the same point");return n/c},pointLineDistance=(e,t,r)=>Math.sqrt(distanceSquared(e,t,r));module.exports=pointLineDistance;
|
|
1035
1026
|
|
|
1036
|
-
},{"../../../maths/vec3/cross":
|
|
1037
|
-
const
|
|
1027
|
+
},{"../../../maths/vec3/cross":209,"../../../maths/vec3/squaredLength":232,"../../../maths/vec3/subtract":233}],343:[function(require,module,exports){
|
|
1028
|
+
const geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),toUniquePoints=o=>{const e=new Set,t=[],r=o=>{const r=o.toString();e.has(r)||(t.push(o),e.add(r))};return o.forEach(o=>{geom2.isA(o)?geom2.toPoints(o).forEach(r):geom3.isA(o)?geom3.toPoints(o).forEach(o=>o.forEach(r)):path2.isA(o)&&path2.toPoints(o).forEach(r)}),t};module.exports=toUniquePoints;
|
|
1038
1029
|
|
|
1039
|
-
},{"../../geometries/
|
|
1040
|
-
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"),
|
|
1030
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58}],344:[function(require,module,exports){
|
|
1031
|
+
const flatten=require("../../utils/flatten"),measureEpsilon=require("../../measurements/measureEpsilon"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),snapPolygons=require("./snapPolygons"),mergePolygons=require("./mergePolygons"),insertTjunctions=require("./insertTjunctions"),triangulatePolygons=require("./triangulatePolygons"),generalizePath2=(e,r)=>r,generalizeGeom2=(e,r)=>r,generalizeGeom3=(e,r)=>{const{snap:n,simplify:o,triangulate:t}=Object.assign({},{snap:!1,simplify:!1,triangulate:!1},e),i=measureEpsilon(r);let s=geom3.toPolygons(r);n&&(s=snapPolygons(i,s)),o&&(s=mergePolygons(i,s)),t&&(s=insertTjunctions(s),s=triangulatePolygons(i,s));const g=Object.assign({},r);return g.polygons=s,g},generalize=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const n=r.map(r=>{if(path2.isA(r))return generalizePath2(0,r);if(geom2.isA(r))return generalizeGeom2(0,r);if(geom3.isA(r))return generalizeGeom3(e,r);throw new Error("invalid geometry")});return 1===n.length?n[0]:n};module.exports=generalize;
|
|
1041
1032
|
|
|
1042
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
1033
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../measurements/measureEpsilon":258,"../../utils/flatten":391,"./insertTjunctions":346,"./mergePolygons":347,"./snapPolygons":351,"./triangulatePolygons":352}],345:[function(require,module,exports){
|
|
1043
1034
|
module.exports={generalize:require("./generalize"),snap:require("./snap")};
|
|
1044
1035
|
|
|
1045
|
-
},{"./generalize":
|
|
1046
|
-
const constants=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),assert=!1,getTag=e=>`${e}`,addSide=(e,t,n,s,r
|
|
1036
|
+
},{"./generalize":344,"./snap":350}],346:[function(require,module,exports){
|
|
1037
|
+
const constants=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),assert=!1,getTag=e=>`${e}`,addSide=(e,t,n,s,c,r)=>{const l=getTag(s),o=getTag(c);const i=`${l}/${o}`,g=`${o}/${l}`;if(e.has(g))return deleteSide(e,t,n,c,s,null),null;const a={vertex0:s,vertex1:c,polygonindex:r};return e.has(i)?e.get(i).push(a):e.set(i,[a]),l in t?t[l].push(i):t[l]=[i],o in n?n[o].push(i):n[o]=[i],i},deleteSide=(e,t,n,s,c,r)=>{const l=getTag(s),o=getTag(c),i=`${l}/${o}`;let g=-1;const a=e.get(i);for(let e=0;e<a.length;e++){const t=a[e];let n=getTag(t.vertex0);if(n===l&&((n=getTag(t.vertex1))===o&&(null===r||t.polygonindex===r))){g=e;break}}a.splice(g,1),0===a.length&&e.delete(i),g=t[l].indexOf(i),t[l].splice(g,1),0===t[l].length&&delete t[l],g=n[o].indexOf(i),n[o].splice(g,1),0===n[o].length&&delete n[o]},insertTjunctions=e=>{const t=new Map;for(let n=0;n<e.length;n++){const s=e[n],c=s.vertices.length;if(c>=3){let e=s.vertices[0],r=getTag(e);for(let l=0;l<c;l++){let o=l+1;o===c&&(o=0);const i=s.vertices[o],g=getTag(i),a=`${r}/${g}`,v=`${g}/${r}`;if(t.has(v)){const e=t.get(v);e.splice(-1,1),0===e.length&&t.delete(v)}else{const s={vertex0:e,vertex1:i,polygonindex:n};t.has(a)?t.get(a).push(s):t.set(a,[s])}e=i,r=g}}else console.warn("warning: invalid polygon found during insertTjunctions")}if(t.size>0){const n={},s={},c={};for(const[e,r]of t)c[e]=!0,r.forEach(t=>{const c=getTag(t.vertex0),r=getTag(t.vertex1);c in n?n[c].push(e):n[c]=[e],r in s?s[r].push(e):s[r]=[e]});const r=e.slice(0);for(;0!==t.size;){for(const e of t.keys())c[e]=!0;let e=!1;for(;;){const l=Object.keys(c);if(0===l.length)break;const o=l[0];let i=!0;if(t.has(o)){const l=t.get(o);0;const g=l[0];for(let l=0;l<2;l++){const o=0===l?g.vertex0:g.vertex1,a=0===l?g.vertex1:g.vertex0,v=getTag(o),d=getTag(a);let f=[];0===l?v in s&&(f=s[v]):v in n&&(f=n[v]);for(let g=0;g<f.length;g++){const v=f[g],u=t.get(v)[0],x=0===l?u.vertex0:u.vertex1,h=0===l?u.vertex1:u.vertex0,p=getTag(x);getTag(h);if(p===d){deleteSide(t,n,s,o,a,null),deleteSide(t,n,s,a,o,null),i=!1,l=2,e=!0;break}{const g=o,v=a,d=x,f=vec3.subtract(vec3.create(),d,g),h=vec3.dot(vec3.subtract(vec3.create(),v,g),f)/vec3.dot(f,f);if(h>0&&h<1){const o=vec3.scale(vec3.create(),f,h);if(vec3.add(o,o,g),vec3.squaredDistance(o,v)<constants.EPS*constants.EPS){const o=u.polygonindex,g=r[o],v=getTag(u.vertex1);let d=-1;for(let e=0;e<g.vertices.length;e++)if(getTag(g.vertices[e])===v){d=e;break}0;const f=g.vertices.slice(0);f.splice(d,0,a);const x=poly3.create(f);r[o]=x,deleteSide(t,n,s,u.vertex0,u.vertex1,o);const h=addSide(t,n,s,u.vertex0,a,o),p=addSide(t,n,s,a,u.vertex1,o);null!==h&&(c[h]=!0),null!==p&&(c[p]=!0),i=!1,l=2,e=!0;break}}}}}}i&&delete c[o]}if(!e)break}e=r}return t.clear(),e};module.exports=insertTjunctions;
|
|
1038
|
+
|
|
1039
|
+
},{"../../geometries/poly3":75,"../../maths/constants":90,"../../maths/vec3":217}],347:[function(require,module,exports){
|
|
1040
|
+
const aboutEqualNormals=require("../../maths/utils/aboutEqualNormals"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),createEdges=e=>{const n=poly3.toPoints(e),t=[];for(let e=0;e<n.length;e++){const l=(e+1)%n.length,r={v1:n[e],v2:n[l]};t.push(r)}for(let e=0;e<t.length;e++){const l=(e+1)%n.length;t[e].next=t[l],t[l].prev=t[e]}return t},insertEdge=(e,n)=>{const t=`${n.v1}:${n.v2}`;e.set(t,n)},deleteEdge=(e,n)=>{const t=`${n.v1}:${n.v2}`;e.delete(t)},findOppositeEdge=(e,n)=>{const t=`${n.v2}:${n.v1}`;return e.get(t)},calculateAnglesBetween=(e,n,t)=>{let l=e.prev.v1,r=e.prev.v2,o=n.next.v2;const v=calculateAngle(l,r,o,t);return l=n.prev.v1,r=n.prev.v2,o=e.next.v2,[v,calculateAngle(l,r,o,t)]},v1=vec3.create(),v2=vec3.create(),calculateAngle=(e,n,t,l)=>{const r=vec3.subtract(v1,n,e),o=vec3.subtract(v2,t,n);return vec3.cross(r,r,o),vec3.dot(r,l)},createPolygonAnd=e=>{let n;const t=[];for(;e.next;){const n=e.next;t.push(e.v1),e.v1=null,e.v2=null,e.next=null,e.prev=null,e=n}return t.length>0&&(n=poly3.create(t)),n},mergeCoplanarPolygons=e=>{if(e.length<2)return e;const n=e[0].plane,t=e.slice(),l=new Map;for(;t.length>0;){const e=t.shift(),r=createEdges(e);for(let e=0;e<r.length;e++){const t=r[e],o=findOppositeEdge(l,t);if(o){const e=calculateAnglesBetween(t,o,n);if(e[0]>=0&&e[1]>=0){const n=o.next,r=t.next;t.prev.next=o.next,t.next.prev=o.prev,o.prev.next=t.next,o.next.prev=t.prev,t.v1=null,t.v2=null,t.next=null,t.prev=null,deleteEdge(l,o),o.v1=null,o.v2=null,o.next=null,o.prev=null;const v=(e,n,t)=>{const l={v1:t.v1,v2:n.v2,next:n.next,prev:t.prev};t.prev.next=l,n.next.prev=l,deleteEdge(e,n),n.v1=null,n.v2=null,n.next=null,n.prev=null,deleteEdge(e,t),t.v1=null,t.v2=null,t.next=null,t.prev=null};0===e[0]&&v(l,n,n.prev),0===e[1]&&v(l,r,r.prev)}}else t.next&&insertEdge(l,t)}}const r=[];return l.forEach(e=>{const n=createPolygonAnd(e);n&&r.push(n)}),l.clear(),r},coplanar=(e,n)=>Math.abs(e[3]-n[3])<1.5e-7&&aboutEqualNormals(e,n),mergePolygons=(e,n)=>{const t=[];n.forEach(e=>{const n=t.find(n=>coplanar(n[0],poly3.plane(e)));if(n){n[1].push(e)}else t.push([poly3.plane(e),[e]])});let l=[];return t.forEach(e=>{const n=e[1],t=mergeCoplanarPolygons(n);l=l.concat(t)}),l};module.exports=mergePolygons;
|
|
1047
1041
|
|
|
1048
|
-
},{"../../geometries/poly3":
|
|
1049
|
-
const
|
|
1042
|
+
},{"../../geometries/poly3":75,"../../maths/utils/aboutEqualNormals":163,"../../maths/vec3":217}],348:[function(require,module,exports){
|
|
1043
|
+
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=10/EPS;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;
|
|
1050
1044
|
|
|
1051
|
-
},{"../../geometries/poly3":
|
|
1052
|
-
const
|
|
1045
|
+
},{"../../geometries/poly3":75,"../../maths/OrthoNormalBasis":89,"../../maths/constants":90,"../../maths/line2":101,"../../maths/utils/interpolateBetween2DPointsForY":166,"../../maths/vec2":186,"../../utils":393}],349:[function(require,module,exports){
|
|
1046
|
+
const geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),aboutEqualNormals=require("../../maths/utils/aboutEqualNormals"),reTesselateCoplanarPolygons=require("./reTesselateCoplanarPolygons"),coplanar=(e,o)=>Math.abs(e[3]-o[3])<1.5e-7&&aboutEqualNormals(e,o),retessellate=e=>{if(e.isRetesselated)return e;const o=geom3.toPolygons(e),s=[];o.forEach(e=>{const o=s.find(o=>coplanar(o[0],poly3.plane(e)));if(o){o[1].push(e)}else s.push([poly3.plane(e),[e]])});let a=[];s.forEach(e=>{const o=e[1],s=reTesselateCoplanarPolygons(o);a=a.concat(s)});const l=geom3.create(a);return l.isRetesselated=!0,l};module.exports=retessellate;
|
|
1053
1047
|
|
|
1054
|
-
},{"./
|
|
1048
|
+
},{"../../geometries/geom3":37,"../../geometries/poly3":75,"../../maths/utils/aboutEqualNormals":163,"./reTesselateCoplanarPolygons":348}],350:[function(require,module,exports){
|
|
1055
1049
|
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;
|
|
1056
1050
|
|
|
1057
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
1051
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../maths/vec2":186,"../../measurements/measureEpsilon":258,"../../utils/flatten":391,"./snapPolygons":351}],351:[function(require,module,exports){
|
|
1058
1052
|
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;
|
|
1059
1053
|
|
|
1060
|
-
},{"../../geometries/poly3":
|
|
1061
|
-
const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),triangulatePolygon=(o,
|
|
1054
|
+
},{"../../geometries/poly3":75,"../../maths/vec3":217}],352:[function(require,module,exports){
|
|
1055
|
+
const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),triangulatePolygon=(e,o,r)=>{const t=o.vertices.length;if(t>3){if(t>4){const c=[0,0,0];o.vertices.forEach(e=>vec3.add(c,c,e)),vec3.snap(c,vec3.divide(c,c,[t,t,t]),e);for(let e=0;e<t;e++){const s=poly3.create([c,o.vertices[e],o.vertices[(e+1)%t]]);o.color&&(s.color=o.color),r.push(s)}return}const c=poly3.create([o.vertices[0],o.vertices[1],o.vertices[2]]),s=poly3.create([o.vertices[0],o.vertices[2],o.vertices[3]]);return o.color&&(c.color=o.color,s.color=o.color),void r.push(c,s)}r.push(o)},triangulatePolygons=(e,o)=>{const r=[];return o.forEach(o=>{triangulatePolygon(e,o,r)}),r};module.exports=triangulatePolygons;
|
|
1062
1056
|
|
|
1063
|
-
},{"../../geometries/poly3":
|
|
1057
|
+
},{"../../geometries/poly3":75,"../../maths/vec3":217}],353:[function(require,module,exports){
|
|
1064
1058
|
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;
|
|
1065
1059
|
|
|
1066
|
-
},{"../../measurements/measureAggregateBoundingBox":
|
|
1060
|
+
},{"../../measurements/measureAggregateBoundingBox":249,"../../utils/flatten":391,"../../utils/padArrayToLength":395,"./translate":360}],354:[function(require,module,exports){
|
|
1067
1061
|
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};
|
|
1068
1062
|
|
|
1069
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
1063
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../measurements/measureBoundingBox":253,"../../utils/flatten":391,"./translate":360}],355:[function(require,module,exports){
|
|
1070
1064
|
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};
|
|
1071
1065
|
|
|
1072
|
-
},{"./align":
|
|
1066
|
+
},{"./align":353,"./center":354,"./mirror":356,"./rotate":357,"./scale":358,"./transform":359,"./translate":360}],356:[function(require,module,exports){
|
|
1073
1067
|
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};
|
|
1074
1068
|
|
|
1075
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
1069
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../maths/mat4":140,"../../maths/plane":159,"../../utils/flatten":391}],357:[function(require,module,exports){
|
|
1076
1070
|
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};
|
|
1077
1071
|
|
|
1078
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
1072
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../maths/mat4":140,"../../utils/flatten":391}],358:[function(require,module,exports){
|
|
1079
1073
|
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};
|
|
1080
1074
|
|
|
1081
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
1075
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../maths/mat4":140,"../../utils/flatten":391}],359:[function(require,module,exports){
|
|
1082
1076
|
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;
|
|
1083
1077
|
|
|
1084
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
1078
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../utils/flatten":391}],360:[function(require,module,exports){
|
|
1085
1079
|
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};
|
|
1086
1080
|
|
|
1087
|
-
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":
|
|
1081
|
+
},{"../../geometries/geom2":22,"../../geometries/geom3":37,"../../geometries/path2":58,"../../maths/mat4":140,"../../utils/flatten":391}],361:[function(require,module,exports){
|
|
1088
1082
|
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({closed:!1},u)};module.exports=arc;
|
|
1089
1083
|
|
|
1090
|
-
},{"../geometries/path2":
|
|
1084
|
+
},{"../geometries/path2":58,"../maths/constants":90,"../maths/vec2":186,"./commonChecks":363}],362:[function(require,module,exports){
|
|
1091
1085
|
const ellipse=require("./ellipse"),{isGT:isGT}=require("./commonChecks"),circle=e=>{const r={center:[0,0],radius:1,startAngle:0,endAngle:2*Math.PI,segments:32};let{center:s,radius:t,startAngle:n,endAngle:i,segments:l}=Object.assign({},r,e);if(!isGT(t,0))throw new Error("radius must be greater than zero");return ellipse({center:s,radius:t=[t,t],startAngle:n,endAngle:i,segments:l})};module.exports=circle;
|
|
1092
1086
|
|
|
1093
|
-
},{"./commonChecks":
|
|
1087
|
+
},{"./commonChecks":363,"./ellipse":368}],363:[function(require,module,exports){
|
|
1094
1088
|
const isNumberArray=(i,r)=>!!(Array.isArray(i)&&i.length>=r)&&i.every(i=>Number.isFinite(i)),isGT=(i,r)=>Number.isFinite(i)&&i>r,isGTE=(i,r)=>Number.isFinite(i)&&i>=r;module.exports={isNumberArray:isNumberArray,isGT:isGT,isGTE:isGTE};
|
|
1095
1089
|
|
|
1096
|
-
},{}],
|
|
1090
|
+
},{}],364:[function(require,module,exports){
|
|
1097
1091
|
const cuboid=require("./cuboid"),{isGT:isGT}=require("./commonChecks"),cube=e=>{let{center:r,size:i}=Object.assign({},{center:[0,0,0],size:2},e);if(!isGT(i,0))throw new Error("size must be greater than zero");return cuboid({center:r,size:i=[i,i,i]})};module.exports=cube;
|
|
1098
1092
|
|
|
1099
|
-
},{"./commonChecks":
|
|
1100
|
-
const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),cuboid=e=>{const{center:r,size:o}=Object.assign({},{center:[0,0,0],size:[2,2,2]},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(o,3))throw new Error("size must be an array of width, depth and height values");if(!o.every(e=>e>0))throw new Error("size values must be greater than zero");return geom3.create([[[0,4,6,2],[-1,0,0]],[[1,3,7,5],[1,0,0]],[[0,1,5,4],[0,-1,0]],[[2,6,7,3],[0,1,0]],[[0,2,3,1],[0,0,-1]],[[4,5,7,6],[0,0,1]]].map(e=>{const t=e[0].map(e=>{return[r[0]+o[0]/2*(2*!!(1&e)-1),r[1]+o[1]/2*(2*!!(2&e)-1),r[2]+o[2]/2*(2*!!(4&e)-1)]});return poly3.
|
|
1093
|
+
},{"./commonChecks":363,"./cuboid":365}],365:[function(require,module,exports){
|
|
1094
|
+
const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),cuboid=e=>{const{center:r,size:o}=Object.assign({},{center:[0,0,0],size:[2,2,2]},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(o,3))throw new Error("size must be an array of width, depth and height values");if(!o.every(e=>e>0))throw new Error("size values must be greater than zero");return geom3.create([[[0,4,6,2],[-1,0,0]],[[1,3,7,5],[1,0,0]],[[0,1,5,4],[0,-1,0]],[[2,6,7,3],[0,1,0]],[[0,2,3,1],[0,0,-1]],[[4,5,7,6],[0,0,1]]].map(e=>{const t=e[0].map(e=>{return[r[0]+o[0]/2*(2*!!(1&e)-1),r[1]+o[1]/2*(2*!!(2&e)-1),r[2]+o[2]/2*(2*!!(4&e)-1)]});return poly3.create(t)}))};module.exports=cuboid;
|
|
1101
1095
|
|
|
1102
|
-
},{"../geometries/geom3":37,"../geometries/poly3":
|
|
1096
|
+
},{"../geometries/geom3":37,"../geometries/poly3":75,"./commonChecks":363}],366:[function(require,module,exports){
|
|
1103
1097
|
const cylinderElliptic=require("./cylinderElliptic"),{isGT:isGT}=require("./commonChecks"),cylinder=e=>{const{center:i,height:r,radius:t,segments:s}=Object.assign({},{center:[0,0,0],height:2,radius:1,segments:32},e);if(!isGT(t,0))throw new Error("radius must be greater than zero");return cylinderElliptic({center:i,height:r,startRadius:[t,t],endRadius:[t,t],segments:s})};module.exports=cylinder;
|
|
1104
1098
|
|
|
1105
|
-
},{"./commonChecks":
|
|
1106
|
-
const{EPS:EPS}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cylinderElliptic=e=>{const r={center:[0,0,0],height:2,startRadius:[1,1],startAngle:0,endRadius:[1,1],endAngle:2*Math.PI,segments:32};let{center:t,height:s,startRadius:a,startAngle:
|
|
1099
|
+
},{"./commonChecks":363,"./cylinderElliptic":367}],367:[function(require,module,exports){
|
|
1100
|
+
const{EPS:EPS}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cylinderElliptic=e=>{const r={center:[0,0,0],height:2,startRadius:[1,1],startAngle:0,endRadius:[1,1],endAngle:2*Math.PI,segments:32};let{center:t,height:s,startRadius:a,startAngle:i,endRadius:o,endAngle:n,segments:u}=Object.assign({},r,e);if(!isNumberArray(t,3))throw new Error("center must be an array of X, Y and Z values");if(!isGT(s,0))throw new Error("height must be greater then zero");if(!isNumberArray(a,2))throw new Error("startRadius must be an array of X and Y values");if(!a.every(e=>e>=0))throw new Error("startRadius values must be positive");if(!isNumberArray(o,2))throw new Error("endRadius must be an array of X and Y values");if(!o.every(e=>e>=0))throw new Error("endRadius values must be positive");if(o.every(e=>0===e)&&a.every(e=>0===e))throw new Error("at least one radius must be positive");if(!isGTE(i,0))throw new Error("startAngle must be positive");if(!isGTE(n,0))throw new Error("endAngle must be positive");if(!isGTE(u,4))throw new Error("segments must be four or more");i%=2*Math.PI,n%=2*Math.PI;let c=2*Math.PI;i<n&&(c=n-i),i>n&&(c=n+(2*Math.PI-i));const h=Math.min(a[0],a[1],o[0],o[1]),l=Math.acos((h*h+h*h-EPS*EPS)/(2*h*h));if(c<l)throw new Error("startAngle and endAngle do not define a significant rotation");const m=Math.floor(u*(c/(2*Math.PI))),d=vec3.fromValues(0,0,-s/2),v=vec3.fromValues(0,0,s/2),f=vec3.subtract(vec3.create(),v,d),g=vec3.fromValues(1,0,0),p=vec3.fromValues(0,1,0),w=vec3.create(),E=vec3.create(),y=vec3.create(),b=(e,r,t)=>{const s=r*c+i;return vec3.scale(w,g,t[0]*cos(s)),vec3.scale(E,p,t[1]*sin(s)),vec3.add(w,w,E),vec3.scale(y,f,e),vec3.add(y,y,d),vec3.add(vec3.create(),w,y)},A=(...e)=>{const r=e.map(e=>vec3.add(vec3.create(),e,t));return poly3.create(r)},P=[];for(let e=0;e<m;e++){const r=e/m,t=(e+1)/m;o[0]===a[0]&&o[1]===a[1]?(P.push(A(d,b(0,t,o),b(0,r,o))),P.push(A(b(0,t,o),b(1,t,o),b(1,r,o),b(0,r,o))),P.push(A(v,b(1,r,o),b(1,t,o)))):(a[0]>0&&a[1]>0&&P.push(A(d,b(0,t,a),b(0,r,a))),(a[0]>0||a[1]>0)&&P.push(A(b(0,r,a),b(0,t,a),b(1,r,o))),o[0]>0&&o[1]>0&&P.push(A(v,b(1,r,o),b(1,t,o))),(o[0]>0||o[1]>0)&&P.push(A(b(1,r,o),b(0,t,a),b(1,t,o))))}return c<2*Math.PI&&(P.push(A(d,b(0,0,a),v)),P.push(A(b(0,0,a),b(1,0,o),v)),P.push(A(d,v,b(0,1,a))),P.push(A(b(0,1,a),v,b(1,1,o)))),geom3.create(P)};module.exports=cylinderElliptic;
|
|
1107
1101
|
|
|
1108
|
-
},{"../geometries/geom3":37,"../geometries/poly3":
|
|
1102
|
+
},{"../geometries/geom3":37,"../geometries/poly3":75,"../maths/constants":90,"../maths/vec3":217,"../utils/trigonometry":398,"./commonChecks":363}],368:[function(require,module,exports){
|
|
1109
1103
|
const{EPS:EPS}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{sin:sin,cos:cos}=require("../utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),ellipse=e=>{const r={center:[0,0],radius:[1,1],startAngle:0,endAngle:2*Math.PI,segments:32};let{center:t,radius:s,startAngle:n,endAngle:o,segments:a}=Object.assign({},r,e);if(!isNumberArray(t,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(s,2))throw new Error("radius must be an array of X and Y values");if(!s.every(e=>e>0))throw new Error("radius values must be greater than zero");if(!isGTE(n,0))throw new Error("startAngle must be positive");if(!isGTE(o,0))throw new Error("endAngle must be positive");if(!isGTE(a,3))throw new Error("segments must be three or more");n%=2*Math.PI,o%=2*Math.PI;let i=2*Math.PI;n<o&&(i=o-n),n>o&&(i=o+(2*Math.PI-n));const u=Math.min(s[0],s[1]);if(i<Math.acos((u*u+u*u-EPS*EPS)/(2*u*u)))throw new Error("startAngle and endAngle do not define a significant rotation");a=Math.floor(a*(i/(2*Math.PI)));const m=vec2.clone(t),h=i/a,c=[];a=i<2*Math.PI?a+1:a;for(let e=0;e<a;e++){const r=h*e+n,t=vec2.fromValues(s[0]*cos(r),s[1]*sin(r));vec2.add(t,m,t),c.push(t)}return i<2*Math.PI&&c.push(m),geom2.fromPoints(c)};module.exports=ellipse;
|
|
1110
1104
|
|
|
1111
|
-
},{"../geometries/geom2":22,"../maths/constants":
|
|
1112
|
-
const vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),ellipsoid=e=>{const{center:c,radius:r,segments:a,axes:s}=Object.assign({},{center:[0,0,0],radius:[1,1,1],segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(r,3))throw new Error("radius must be an array of X, Y and Z values");if(!r.every(e=>e>0))throw new Error("radius values must be greater than zero");if(!isGTE(a,4))throw new Error("segments must be four or more");const t=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[0]),r[0]),v=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[1]),r[1]),o=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[2]),r[2]),l=Math.round(a/4);let
|
|
1105
|
+
},{"../geometries/geom2":22,"../maths/constants":90,"../maths/vec2":186,"../utils/trigonometry":398,"./commonChecks":363}],369:[function(require,module,exports){
|
|
1106
|
+
const vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),ellipsoid=e=>{const{center:c,radius:r,segments:a,axes:s}=Object.assign({},{center:[0,0,0],radius:[1,1,1],segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(r,3))throw new Error("radius must be an array of X, Y and Z values");if(!r.every(e=>e>0))throw new Error("radius values must be greater than zero");if(!isGTE(a,4))throw new Error("segments must be four or more");const t=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[0]),r[0]),v=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[1]),r[1]),o=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),s[2]),r[2]),l=Math.round(a/4);let u;const i=[],d=vec3.create(),n=vec3.create();for(let e=0;e<=a;e++){const r=2*Math.PI*e/a,s=vec3.add(vec3.create(),vec3.scale(d,t,cos(r)),vec3.scale(n,v,sin(r)));if(e>0){let e,r;for(let a=0;a<=l;a++){const t=.5*Math.PI*a/l,v=cos(t),m=sin(t);if(a>0){let t,h=[];t=vec3.subtract(vec3.create(),vec3.scale(d,u,e),vec3.scale(n,o,r)),h.push(vec3.add(t,t,c)),t=vec3.subtract(vec3.create(),vec3.scale(d,s,e),vec3.scale(n,o,r)),h.push(vec3.add(t,t,c)),a<l&&(t=vec3.subtract(vec3.create(),vec3.scale(d,s,v),vec3.scale(n,o,m)),h.push(vec3.add(t,t,c))),t=vec3.subtract(vec3.create(),vec3.scale(d,u,v),vec3.scale(n,o,m)),h.push(vec3.add(t,t,c)),i.push(poly3.create(h)),h=[],t=vec3.add(vec3.create(),vec3.scale(d,u,e),vec3.scale(n,o,r)),h.push(vec3.add(vec3.create(),c,t)),t=vec3.add(t,vec3.scale(d,s,e),vec3.scale(n,o,r)),h.push(vec3.add(vec3.create(),c,t)),a<l&&(t=vec3.add(t,vec3.scale(d,s,v),vec3.scale(n,o,m)),h.push(vec3.add(vec3.create(),c,t))),t=vec3.add(t,vec3.scale(d,u,v),vec3.scale(n,o,m)),h.push(vec3.add(vec3.create(),c,t)),h.reverse(),i.push(poly3.create(h))}e=v,r=m}}u=s}return geom3.create(i)};module.exports=ellipsoid;
|
|
1113
1107
|
|
|
1114
|
-
},{"../geometries/geom3":37,"../geometries/poly3":
|
|
1108
|
+
},{"../geometries/geom3":37,"../geometries/poly3":75,"../maths/vec3":217,"../utils/trigonometry":398,"./commonChecks":363}],370:[function(require,module,exports){
|
|
1115
1109
|
const mat4=require("../maths/mat4"),geom3=require("../geometries/geom3"),polyhedron=require("./polyhedron"),{isGT:isGT,isGTE:isGTE}=require("./commonChecks"),geodesicSphere=e=>{let{radius:t,frequency:r}=Object.assign({},{radius:1,frequency:6},e);if(!isGT(t,0))throw new Error("radius must be greater than zero");if(!isGTE(r,6))throw new Error("frequency must be six or more");r=Math.floor(r/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,t,r)=>{const o=e[0],s=e[1],n=e[2];let c=r;const a=[],f=[];for(let e=0;e<t;e++)for(let r=0;r<t-e;r++){const l=e/t,h=(e+1)/t,u=r/(t-e),m=(r+1)/(t-e),p=t-e-1?r/(t-e-1):1,g=[];g[0]=i(i(o,s,u),n,l),g[1]=i(i(o,s,m),n,l),g[2]=i(i(o,s,p),n,h);for(let e=0;e<3;e++){const t=Math.hypot(g[e][0],g[e][1],g[e][2]);for(let r=0;r<3;r++)g[e][r]/=t}if(a.push(g[0],g[1],g[2]),f.push([c,c+1,c+2]),c+=3,r<t-e-1){const u=t-e-1?(r+1)/(t-e-1):1;g[0]=i(i(o,s,m),n,l),g[1]=i(i(o,s,u),n,h),g[2]=i(i(o,s,p),n,h);for(let e=0;e<3;e++){const t=Math.hypot(g[e][0],g[e][1],g[e][2]);for(let r=0;r<3;r++)g[e][r]/=t}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,t,r)=>{const o=1-r,s=[];for(let n=0;n<3;n++)s[n]=e[n]*o+t[n]*r;return s};let c=[],a=[],f=0;for(let e=0;e<s.length;e++){const t=n([o[s[e][0]],o[s[e][1]],o[s[e][2]]],r,f);c=c.concat(t.points),a=a.concat(t.triangles),f=t.offset}let l=polyhedron({points:c,faces:a,orientation:"inward"});return 1!==t&&(l=geom3.transform(mat4.fromScaling(mat4.create(),[t,t,t]),l)),l};module.exports=geodesicSphere;
|
|
1116
1110
|
|
|
1117
|
-
},{"../geometries/geom3":37,"../maths/mat4":
|
|
1111
|
+
},{"../geometries/geom3":37,"../maths/mat4":140,"./commonChecks":363,"./polyhedron":374}],371:[function(require,module,exports){
|
|
1118
1112
|
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")};
|
|
1119
1113
|
|
|
1120
|
-
},{"./arc":
|
|
1114
|
+
},{"./arc":361,"./circle":362,"./cube":364,"./cuboid":365,"./cylinder":366,"./cylinderElliptic":367,"./ellipse":368,"./ellipsoid":369,"./geodesicSphere":370,"./line":372,"./polygon":373,"./polyhedron":374,"./rectangle":375,"./roundedCuboid":376,"./roundedCylinder":377,"./roundedRectangle":378,"./sphere":379,"./square":380,"./star":381,"./torus":382,"./triangle":383}],372:[function(require,module,exports){
|
|
1121
1115
|
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;
|
|
1122
1116
|
|
|
1123
|
-
},{"../geometries/path2":
|
|
1117
|
+
},{"../geometries/path2":58}],373:[function(require,module,exports){
|
|
1124
1118
|
const geom2=require("../geometries/geom2"),polygon=r=>{const{points:o,paths:t}=Object.assign({},{points:[],paths:[]},r);if(!Array.isArray(o)||!Array.isArray(t))throw new Error("points and paths must be arrays");let a=o;Array.isArray(o[0])&&(Array.isArray(o[0][0])||(a=[o])),a.forEach((r,o)=>{if(!Array.isArray(r))throw new Error("list of points "+o+" must be an array");if(r.length<3)throw new Error("list of points "+o+" must contain three or more points");r.forEach((r,t)=>{if(!Array.isArray(r))throw new Error("list of points "+o+", point "+t+" must be an array");if(r.length<2)throw new Error("list of points "+o+", point "+t+" must contain by X and Y values")})});let s=t;if(0===t.length){let r=0;s=a.map(o=>o.map(o=>r++))}const e=[];a.forEach(r=>r.forEach(r=>e.push(r)));let n=[];return s.forEach(r=>{const o=r.map(r=>e[r]),t=geom2.fromPoints(o);n=n.concat(geom2.toSides(t))}),geom2.create(n)};module.exports=polygon;
|
|
1125
1119
|
|
|
1126
|
-
},{"../geometries/geom2":22}],
|
|
1127
|
-
const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),polyhedron=r=>{const e={points:[],faces:[],colors:void 0,orientation:"outward"},{points:o,faces:a,colors:t,orientation:n}=Object.assign({},e,r);if(!Array.isArray(o)||!Array.isArray(a))throw new Error("points and faces must be arrays");if(o.length<3)throw new Error("three or more points are required");if(a.length<1)throw new Error("one or more faces are required");if(t){if(!Array.isArray(t))throw new Error("colors must be an array");if(t.length!==a.length)throw new Error("faces and colors must have the same length")}o.forEach((r,e)=>{if(!isNumberArray(r,3))throw new Error(`point ${e} must be an array of X, Y, Z values`)}),a.forEach((r,e)=>{if(r.length<3)throw new Error(`face ${e} must contain 3 or more indexes`);if(!isNumberArray(r,r.length))throw new Error(`face ${e} must be an array of numbers`)}),"outward"!==n&&a.forEach(r=>r.reverse());const s=a.map((r,e)=>{const a=poly3.
|
|
1120
|
+
},{"../geometries/geom2":22}],374:[function(require,module,exports){
|
|
1121
|
+
const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),polyhedron=r=>{const e={points:[],faces:[],colors:void 0,orientation:"outward"},{points:o,faces:a,colors:t,orientation:n}=Object.assign({},e,r);if(!Array.isArray(o)||!Array.isArray(a))throw new Error("points and faces must be arrays");if(o.length<3)throw new Error("three or more points are required");if(a.length<1)throw new Error("one or more faces are required");if(t){if(!Array.isArray(t))throw new Error("colors must be an array");if(t.length!==a.length)throw new Error("faces and colors must have the same length")}o.forEach((r,e)=>{if(!isNumberArray(r,3))throw new Error(`point ${e} must be an array of X, Y, Z values`)}),a.forEach((r,e)=>{if(r.length<3)throw new Error(`face ${e} must contain 3 or more indexes`);if(!isNumberArray(r,r.length))throw new Error(`face ${e} must be an array of numbers`)}),"outward"!==n&&a.forEach(r=>r.reverse());const s=a.map((r,e)=>{const a=poly3.create(r.map(r=>o[r]));return t&&t[e]&&(a.color=t[e]),a});return geom3.create(s)};module.exports=polyhedron;
|
|
1128
1122
|
|
|
1129
|
-
},{"../geometries/geom3":37,"../geometries/poly3":
|
|
1123
|
+
},{"../geometries/geom3":37,"../geometries/poly3":75,"./commonChecks":363}],375:[function(require,module,exports){
|
|
1130
1124
|
const vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),rectangle=e=>{const{center:r,size:t}=Object.assign({},{center:[0,0],size:[2,2]},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("size must be an array of X and Y values");if(!t.every(e=>e>0))throw new Error("size values must be greater than zero");const a=[t[0]/2,t[1]/2],c=[a[0],-a[1]],s=[vec2.subtract(vec2.create(),r,a),vec2.add(vec2.create(),r,c),vec2.add(vec2.create(),r,a),vec2.subtract(vec2.create(),r,c)];return geom2.fromPoints(s)};module.exports=rectangle;
|
|
1131
1125
|
|
|
1132
|
-
},{"../geometries/geom2":22,"../maths/vec2":
|
|
1133
|
-
const{EPS:EPS}=require("../maths/constants"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),createCorners=(e,r,t,s,o
|
|
1126
|
+
},{"../geometries/geom2":22,"../maths/vec2":186,"./commonChecks":363}],376:[function(require,module,exports){
|
|
1127
|
+
const{EPS:EPS}=require("../maths/constants"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),createCorners=(e,r,t,s,c,o)=>{const a=Math.PI/2*c/s,n=Math.cos(a),h=Math.sin(a),u=s-c;let i=t*n,l=r[2]-(t-t*h);o||(l=t-t*h-r[2]),i=i>EPS?i:0;const d=vec3.add(vec3.create(),e,[r[0]-t,r[1]-t,l]),v=vec3.add(vec3.create(),e,[t-r[0],r[1]-t,l]),m=vec3.add(vec3.create(),e,[t-r[0],t-r[1],l]),p=vec3.add(vec3.create(),e,[r[0]-t,t-r[1],l]),f=[],g=[],E=[],y=[];for(let e=0;e<=u;e++){const r=u>0?Math.PI/2*e/u:0,t=vec2.fromAngleRadians(vec2.create(),r);vec2.scale(t,t,i);const s=vec3.fromVec2(vec3.create(),t);f.push(vec3.add(vec3.create(),d,s)),vec3.rotateZ(s,s,[0,0,0],Math.PI/2),g.push(vec3.add(vec3.create(),v,s)),vec3.rotateZ(s,s,[0,0,0],Math.PI/2),E.push(vec3.add(vec3.create(),m,s)),vec3.rotateZ(s,s,[0,0,0],Math.PI/2),y.push(vec3.add(vec3.create(),p,s))}return o?[f,g,E,y]:(f.reverse(),g.reverse(),E.reverse(),y.reverse(),[y,E,g,f])},stitchCorners=(e,r)=>{const t=[];for(let s=0;s<e.length;s++){const c=e[s],o=r[s];for(let e=0;e<c.length-1;e++)t.push(poly3.create([c[e],c[e+1],o[e]])),e<o.length-1&&t.push(poly3.create([o[e],c[e+1],o[e+1]]))}return t},stitchWalls=(e,r)=>{const t=[];for(let s=0;s<e.length;s++){let c=e[s],o=r[s];const a=c[c.length-1],n=o[o.length-1],h=(s+1)%e.length;c=e[h],o=r[h];const u=c[0],i=o[0];t.push(poly3.create([a,u,i,n]))}return t},stitchSides=(e,r)=>{e=(e=[e[3],e[2],e[1],e[0]]).map(e=>e.slice().reverse());const t=[];e.forEach(e=>{e.forEach(e=>t.push(e))});const s=[];r.forEach(e=>{e.forEach(e=>s.push(e))});const c=[];for(let e=0;e<s.length;e++){const r=(e+1)%s.length;c.push(poly3.create([t[e],t[r],s[r],s[e]]))}return c},roundedCuboid=e=>{let{center:r,size:t,roundRadius:s,segments:c}=Object.assign({},{center:[0,0,0],size:[2,2,2],roundRadius:.2,segments:32},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(t,3))throw new Error("size must be an array of X, Y and Z values");if(!t.every(e=>e>0))throw new Error("size values must be greater than zero");if(!isGT(s,0))throw new Error("roundRadius must be greater than zero");if(!isGTE(c,4))throw new Error("segments must be four or more");if(s>(t=t.map(e=>e/2))[0]-EPS||s>t[1]-EPS||s>t[2]-EPS)throw new Error("roundRadius must be smaller then the radius of all dimensions");c=Math.floor(c/4);let o=null,a=null,n=[];for(let e=0;e<=c;e++){const h=createCorners(r,t,s,c,e,!0),u=createCorners(r,t,s,c,e,!1);if(0===e&&(n=n.concat(stitchSides(u,h))),o&&(n=n.concat(stitchCorners(o,h),stitchWalls(o,h))),a&&(n=n.concat(stitchCorners(a,u),stitchWalls(a,u))),e===c){let e=h.map(e=>e[0]);n.push(poly3.create(e)),e=u.map(e=>e[0]),n.push(poly3.create(e))}o=h,a=u}return geom3.create(n)};module.exports=roundedCuboid;
|
|
1134
1128
|
|
|
1135
|
-
},{"../geometries/geom3":37,"../geometries/poly3":
|
|
1136
|
-
const{EPS:EPS}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),roundedCylinder=e=>{const{center:c,height:r,radius:s,roundRadius:a,segments:t}=Object.assign({},{center:[0,0,0],height:2,radius:1,roundRadius:.2,segments:32},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isGT(r,0))throw new Error("height must be greater then zero");if(!isGT(s,0))throw new Error("radius must be greater then zero");if(!isGT(a,0))throw new Error("roundRadius must be greater then zero");if(a>s-EPS)throw new Error("roundRadius must be smaller then the radius");if(!isGTE(t,4))throw new Error("segments must be four or more");const v=[0,0,-r/2],o=[0,0,r/2],u=vec3.subtract(vec3.create(),o,v);if(2*a>vec3.length(u)-EPS)throw new Error("height must be larger than twice roundRadius");let d;d=Math.abs(u[0])>Math.abs(u[1])?vec3.fromValues(0,1,0):vec3.fromValues(1,0,0);const i=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),u),a),n=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),i,d)),s),h=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),n,i)),s);vec3.add(v,v,i),vec3.subtract(o,o,i);const l=Math.floor(.25*t),m=e=>{const r=e.map(e=>vec3.add(e,e,c));return poly3.
|
|
1129
|
+
},{"../geometries/geom3":37,"../geometries/poly3":75,"../maths/constants":90,"../maths/vec2":186,"../maths/vec3":217,"./commonChecks":363}],377:[function(require,module,exports){
|
|
1130
|
+
const{EPS:EPS}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),roundedCylinder=e=>{const{center:c,height:r,radius:s,roundRadius:a,segments:t}=Object.assign({},{center:[0,0,0],height:2,radius:1,roundRadius:.2,segments:32},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isGT(r,0))throw new Error("height must be greater then zero");if(!isGT(s,0))throw new Error("radius must be greater then zero");if(!isGT(a,0))throw new Error("roundRadius must be greater then zero");if(a>s-EPS)throw new Error("roundRadius must be smaller then the radius");if(!isGTE(t,4))throw new Error("segments must be four or more");const v=[0,0,-r/2],o=[0,0,r/2],u=vec3.subtract(vec3.create(),o,v);if(2*a>vec3.length(u)-EPS)throw new Error("height must be larger than twice roundRadius");let d;d=Math.abs(u[0])>Math.abs(u[1])?vec3.fromValues(0,1,0):vec3.fromValues(1,0,0);const i=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),u),a),n=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),i,d)),s),h=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),n,i)),s);vec3.add(v,v,i),vec3.subtract(o,o,i);const l=Math.floor(.25*t),m=e=>{const r=e.map(e=>vec3.add(e,e,c));return poly3.create(r)},p=[],b=vec3.create(),g=vec3.create();let f;for(let e=0;e<=t;e++){const c=2*Math.PI*e/t,r=vec3.add(vec3.create(),vec3.scale(b,n,cos(c)),vec3.scale(g,h,sin(c)));if(e>0){let e,c,s=[];s.push(vec3.add(vec3.create(),v,r)),s.push(vec3.add(vec3.create(),v,f)),s.push(vec3.add(vec3.create(),o,f)),s.push(vec3.add(vec3.create(),o,r)),p.push(m(s));for(let a=0;a<=l;a++){const t=.5*Math.PI*a/l,u=cos(t),d=sin(t);if(a>0){let t;s=[],t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,f,e),vec3.scale(g,i,c))),s.push(t),t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,r,e),vec3.scale(g,i,c))),s.push(t),a<l&&(t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,r,u),vec3.scale(g,i,d))),s.push(t)),t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,f,u),vec3.scale(g,i,d))),s.push(t),p.push(m(s)),s=[],t=vec3.add(vec3.create(),vec3.scale(b,f,e),vec3.scale(g,i,c)),vec3.add(t,t,o),s.push(t),t=vec3.add(vec3.create(),vec3.scale(b,r,e),vec3.scale(g,i,c)),vec3.add(t,t,o),s.push(t),a<l&&(t=vec3.add(vec3.create(),vec3.scale(b,r,u),vec3.scale(g,i,d)),vec3.add(t,t,o),s.push(t)),t=vec3.add(vec3.create(),vec3.scale(b,f,u),vec3.scale(g,i,d)),vec3.add(t,t,o),s.push(t),s.reverse(),p.push(m(s))}e=u,c=d}}f=r}return geom3.create(p)};module.exports=roundedCylinder;
|
|
1137
1131
|
|
|
1138
|
-
},{"../geometries/geom3":37,"../geometries/poly3":
|
|
1132
|
+
},{"../geometries/geom3":37,"../geometries/poly3":75,"../maths/constants":90,"../maths/vec3":217,"../utils/trigonometry":398,"./commonChecks":363}],378:[function(require,module,exports){
|
|
1139
1133
|
const{EPS:EPS}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),roundedRectangle=e=>{let{center:r,size:a,roundRadius:t,segments:s}=Object.assign({},{center:[0,0],size:[2,2],roundRadius:.2,segments:32},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(a,2))throw new Error("size must be an array of X and Y values");if(!a.every(e=>e>0))throw new Error("size values must be greater than zero");if(!isGT(t,0))throw new Error("roundRadius must be greater than zero");if(!isGTE(s,4))throw new Error("segments must be four or more");if(t>(a=a.map(e=>e/2))[0]-EPS||t>a[1]-EPS)throw new Error("roundRadius must be smaller then the radius of all dimensions");const c=Math.floor(s/4),o=vec2.add(vec2.create(),r,[a[0]-t,a[1]-t]),n=vec2.add(vec2.create(),r,[t-a[0],a[1]-t]),i=vec2.add(vec2.create(),r,[t-a[0],t-a[1]]),u=vec2.add(vec2.create(),r,[a[0]-t,t-a[1]]),d=[],v=[],m=[],h=[];for(let e=0;e<=c;e++){const r=Math.PI/2*e/c,a=vec2.fromAngleRadians(vec2.create(),r);vec2.scale(a,a,t),d.push(vec2.add(vec2.create(),o,a)),vec2.rotate(a,a,vec2.create(),Math.PI/2),v.push(vec2.add(vec2.create(),n,a)),vec2.rotate(a,a,vec2.create(),Math.PI/2),m.push(vec2.add(vec2.create(),i,a)),vec2.rotate(a,a,vec2.create(),Math.PI/2),h.push(vec2.add(vec2.create(),u,a))}return geom2.fromPoints(d.concat(v,m,h))};module.exports=roundedRectangle;
|
|
1140
1134
|
|
|
1141
|
-
},{"../geometries/geom2":22,"../maths/constants":
|
|
1135
|
+
},{"../geometries/geom2":22,"../maths/constants":90,"../maths/vec2":186,"./commonChecks":363}],379:[function(require,module,exports){
|
|
1142
1136
|
const ellipsoid=require("./ellipsoid"),{isGT:isGT}=require("./commonChecks"),sphere=e=>{let{center:s,radius:r,segments:i,axes:t}=Object.assign({},{center:[0,0,0],radius:1,segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isGT(r,0))throw new Error("radius must be greater than zero");return ellipsoid({center:s,radius:r=[r,r,r],segments:i,axes:t})};module.exports=sphere;
|
|
1143
1137
|
|
|
1144
|
-
},{"./commonChecks":
|
|
1138
|
+
},{"./commonChecks":363,"./ellipsoid":369}],380:[function(require,module,exports){
|
|
1145
1139
|
const rectangle=require("./rectangle"),{isGT:isGT}=require("./commonChecks"),square=e=>{let{center:r,size:s}=Object.assign({},{center:[0,0],size:2},e);if(!isGT(s,0))throw new Error("size must be greater than zero");return rectangle({center:r,size:s=[s,s]})};module.exports=square;
|
|
1146
1140
|
|
|
1147
|
-
},{"./commonChecks":
|
|
1141
|
+
},{"./commonChecks":363,"./rectangle":375}],381:[function(require,module,exports){
|
|
1148
1142
|
const vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),getRadiusRatio=(e,r)=>e>0&&r>1&&r<e/2?Math.cos(Math.PI*r/e)/Math.cos(Math.PI*(r-1)/e):0,getPoints=(e,r,t,s)=>{const o=2*Math.PI/e,i=[];for(let a=0;a<e;a++){const e=vec2.fromAngleRadians(vec2.create(),o*a+t);vec2.scale(e,e,r),vec2.add(e,s,e),i.push(e)}return i},star=e=>{let{center:r,vertices:t,outerRadius:s,innerRadius:o,density:i,startAngle:a}=Object.assign({},{center:[0,0],vertices:5,outerRadius:1,innerRadius:0,density:2,startAngle:0},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isGTE(t,2))throw new Error("vertices must be two or more");if(!isGT(s,0))throw new Error("outerRadius must be greater than zero");if(!isGTE(o,0))throw new Error("innerRadius must be greater than zero");if(!isGTE(a,0))throw new Error("startAngle must be greater than zero");if(t=Math.floor(t),i=Math.floor(i),a%=2*Math.PI,0===o){if(!isGTE(i,2))throw new Error("density must be two or more");o=s*getRadiusRatio(t,i)}const n=vec2.clone(r),u=getPoints(t,s,a,n),c=getPoints(t,o,a+Math.PI/t,n),h=[];for(let e=0;e<t;e++)h.push(u[e]),h.push(c[e]);return geom2.fromPoints(h)};module.exports=star;
|
|
1149
1143
|
|
|
1150
|
-
},{"../geometries/geom2":22,"../maths/vec2":
|
|
1144
|
+
},{"../geometries/geom2":22,"../maths/vec2":186,"./commonChecks":363}],382:[function(require,module,exports){
|
|
1151
1145
|
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;
|
|
1152
1146
|
|
|
1153
|
-
},{"../operations/extrusions/extrudeRotate":
|
|
1154
|
-
const
|
|
1147
|
+
},{"../operations/extrusions/extrudeRotate":310,"../operations/transforms/rotate":357,"../operations/transforms/translate":360,"./circle":362,"./commonChecks":363}],383:[function(require,module,exports){
|
|
1148
|
+
const{NEPS:NEPS}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),solveAngleFromSSS=(e,r,t)=>Math.acos((e*e+r*r-t*t)/(2*e*r)),solveSideFromSAS=(e,r,t)=>r>NEPS?Math.sqrt(e*e+t*t-2*e*t*Math.cos(r)):Math.sqrt((e-t)*(e-t)+e*t*r*r*(1-r*r/12)),solveAAA=e=>{if(Math.abs(e[0]+e[1]+e[2]-Math.PI)>NEPS)throw new Error("AAA triangles require angles that sum to PI");const r=e[0],t=e[1],s=Math.PI-r-t,a=1/Math.sin(s)*Math.sin(r),n=1/Math.sin(s)*Math.sin(t);return createTriangle(r,t,s,a,n,1)},solveAAS=e=>{const r=e[0],t=e[1],s=Math.PI+NEPS-r-t;if(s<NEPS)throw new Error("AAS triangles require angles that sum to PI");const a=e[2],n=a/Math.sin(r)*Math.sin(t),o=a/Math.sin(r)*Math.sin(s);return createTriangle(r,t,s,a,n,o)},solveASA=e=>{const r=e[0],t=e[2],s=Math.PI+NEPS-r-t;if(s<NEPS)throw new Error("ASA triangles require angles that sum to PI");const a=e[1],n=a/Math.sin(s)*Math.sin(r),o=a/Math.sin(s)*Math.sin(t);return createTriangle(r,t,s,n,o,a)},solveSAS=e=>{const r=e[0],t=e[1],s=e[2],a=solveSideFromSAS(r,t,s),n=solveAngleFromSSS(a,r,s),o=Math.PI-n-t;return createTriangle(n,t,o,s,a,r)},solveSSA=e=>{const r=e[0],t=e[1],s=e[2],a=Math.asin(t*Math.sin(s)/r),n=Math.PI-a-s,o=r/Math.sin(s)*Math.sin(n);return createTriangle(a,n,s,t,o,r)},solveSSS=e=>{const r=e[1],t=e[2],s=e[0];if(r+t<=s||t+s<=r||s+r<=t)throw new Error("SSS triangle is incorrect, as the longest side is longer than the sum of the other sides");const a=solveAngleFromSSS(t,s,r),n=solveAngleFromSSS(s,r,t),o=Math.PI-a-n;return createTriangle(a,n,o,r,t,s)},createTriangle=(e,r,t,s,a,n)=>{const o=vec2.fromValues(0,0),i=vec2.fromValues(n,0),S=vec2.fromValues(s,0);return vec2.add(S,vec2.rotate(S,S,[0,0],Math.PI-r),i),geom2.fromPoints([o,i,S])},triangle=e=>{let{type:r,values:t}=Object.assign({},{type:"SSS",values:[1,1,1]},e);if("string"!=typeof r)throw new Error("triangle type must be a string");if("A"!==(r=r.toUpperCase())[0]&&"S"!==r[0]||"A"!==r[1]&&"S"!==r[1]||"A"!==r[2]&&"S"!==r[2])throw new Error("triangle type must contain three letters; A or S");if(!isNumberArray(t,3))throw new Error("triangle values must contain three values");if(!t.every(e=>e>0))throw new Error("triangle values must be greater than zero");switch(r){case"AAA":return solveAAA(t);case"AAS":return solveAAS(t);case"ASA":return solveASA(t);case"SAS":return solveSAS(t);case"SSA":return solveSSA(t);case"SSS":return solveSSS(t);default:throw new Error("invalid triangle type, try again")}};module.exports=triangle;
|
|
1155
1149
|
|
|
1156
|
-
},{"../geometries/geom2":22,"../maths/vec2":
|
|
1150
|
+
},{"../geometries/geom2":22,"../maths/constants":90,"../maths/vec2":186,"./commonChecks":363}],384:[function(require,module,exports){
|
|
1157
1151
|
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]};
|
|
1158
1152
|
|
|
1159
|
-
},{}],
|
|
1153
|
+
},{}],385:[function(require,module,exports){
|
|
1160
1154
|
module.exports={vectorChar:require("./vectorChar"),vectorText:require("./vectorText")};
|
|
1161
1155
|
|
|
1162
|
-
},{"./vectorChar":
|
|
1156
|
+
},{"./vectorChar":386,"./vectorText":388}],386:[function(require,module,exports){
|
|
1163
1157
|
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;
|
|
1164
1158
|
|
|
1165
|
-
},{"./vectorParams":
|
|
1159
|
+
},{"./vectorParams":387}],387:[function(require,module,exports){
|
|
1166
1160
|
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;
|
|
1167
1161
|
|
|
1168
|
-
},{"./fonts/single-line/hershey/simplex.js":
|
|
1162
|
+
},{"./fonts/single-line/hershey/simplex.js":384}],388:[function(require,module,exports){
|
|
1169
1163
|
const vectorChar=require("./vectorChar"),vectorParams=require("./vectorParams"),translateLine=(t,e)=>{const{x:n,y:s}=Object.assign({x:0,y:0},t||{}),r=e.segments;let h=null,a=null;for(let t=0,e=r.length;t<e;t++)for(let e=0,o=(h=r[t]).length;e<o;e++)a=h[e],h[e]=[a[0]+n,a[1]+s];return e},vectorText=(t,e)=>{const{xOffset:n,yOffset:s,input:r,font:h,height:a,align:o,extrudeOffset:i,lineSpacing:c,letterSpacing:g}=vectorParams(t,e);let l,f,m,x,u,d,[v,w]=[n,s],O={width:0,segments:[]};const p=[];let y=[],C=0;const L=v,P=()=>{p.push(O),C=Math.max(C,O.width),O={width:0,segments:[]}};for(l=0,f=r.length;l<f;l++)m=r[l],x=vectorChar({xOffset:v,yOffset:w,font:h,height:a,extrudeOffset:i},m),"\n"!==m?(u=x.width*g,O.width+=u,v+=u," "!==m&&(O.segments=O.segments.concat(x.segments))):(v=L,w-=x.height*c,P());for(O.segments.length&&P(),l=0,f=p.length;l<f;l++)O=p[l],C>O.width&&(d=C-O.width,"right"===o?O=translateLine({x:d},O):"center"===o&&(O=translateLine({x:d/2},O))),y=y.concat(O.segments);return y};module.exports=vectorText;
|
|
1170
1164
|
|
|
1171
|
-
},{"./vectorChar":
|
|
1165
|
+
},{"./vectorChar":386,"./vectorParams":387}],389:[function(require,module,exports){
|
|
1172
1166
|
const geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),areAllShapesTheSameType=e=>{let r;for(const o of e){let e=0;if(geom2.isA(o)&&(e=1),geom3.isA(o)&&(e=2),path2.isA(o)&&(e=3),r&&e!==r)return!1;r=e}return!0};module.exports=areAllShapesTheSameType;
|
|
1173
1167
|
|
|
1174
|
-
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":
|
|
1168
|
+
},{"../geometries/geom2":22,"../geometries/geom3":37,"../geometries/path2":58}],390:[function(require,module,exports){
|
|
1175
1169
|
const degToRad=d=>.017453292519943295*d;module.exports=degToRad;
|
|
1176
1170
|
|
|
1177
|
-
},{}],
|
|
1171
|
+
},{}],391:[function(require,module,exports){
|
|
1178
1172
|
const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten;
|
|
1179
1173
|
|
|
1180
|
-
},{}],
|
|
1174
|
+
},{}],392:[function(require,module,exports){
|
|
1181
1175
|
const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort;
|
|
1182
1176
|
|
|
1183
|
-
},{}],
|
|
1177
|
+
},{}],393:[function(require,module,exports){
|
|
1184
1178
|
module.exports={areAllShapesTheSameType:require("./areAllShapesTheSameType"),cos:require("./trigonometry").cos,degToRad:require("./degToRad"),flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),insertSorted:require("./insertSorted"),radiusToSegments:require("./radiusToSegments"),radToDeg:require("./radToDeg"),sin:require("./trigonometry").sin};
|
|
1185
1179
|
|
|
1186
|
-
},{"./areAllShapesTheSameType":
|
|
1180
|
+
},{"./areAllShapesTheSameType":389,"./degToRad":390,"./flatten":391,"./fnNumberSort":392,"./insertSorted":394,"./radToDeg":396,"./radiusToSegments":397,"./trigonometry":398}],394:[function(require,module,exports){
|
|
1187
1181
|
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;
|
|
1188
1182
|
|
|
1189
|
-
},{}],
|
|
1183
|
+
},{}],395:[function(require,module,exports){
|
|
1190
1184
|
const padArrayToLength=(r,e,o)=>{for(r=r.slice();r.length<o;)r.push(e);return r};module.exports=padArrayToLength;
|
|
1191
1185
|
|
|
1192
|
-
},{}],
|
|
1186
|
+
},{}],396:[function(require,module,exports){
|
|
1193
1187
|
const radToDeg=o=>57.29577951308232*o;module.exports=radToDeg;
|
|
1194
1188
|
|
|
1195
|
-
},{}],
|
|
1189
|
+
},{}],397:[function(require,module,exports){
|
|
1196
1190
|
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;
|
|
1197
1191
|
|
|
1198
|
-
},{}],
|
|
1199
|
-
const
|
|
1192
|
+
},{}],398:[function(require,module,exports){
|
|
1193
|
+
const{NEPS:NEPS}=require("../maths/constants"),rezero=s=>Math.abs(s)<NEPS?0:s,sin=s=>rezero(Math.sin(s)),cos=s=>rezero(Math.cos(s));module.exports={sin:sin,cos:cos};
|
|
1200
1194
|
|
|
1201
|
-
},{}]},{},[
|
|
1195
|
+
},{"../maths/constants":90}]},{},[88])(88)
|
|
1202
1196
|
});
|