three-live 1.2.1 → 1.2.2
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/README.md +6 -1
- package/dist/index.d.ts +65 -2
- package/dist/three-author-engine.js +66 -41
- package/dist/three-author.cjs +63 -39
- package/dist/three-author.d.ts +65 -2
- package/dist/three-author.js +63 -39
- package/dist/three-convert.cjs +61 -37
- package/dist/three-convert.d.ts +65 -2
- package/dist/three-convert.js +61 -37
- package/dist/three-live-animation.cjs +7 -7
- package/dist/three-live-animation.d.ts +65 -2
- package/dist/three-live-animation.js +7 -7
- package/dist/three-live-animation.min.js +7 -7
- package/dist/three-live-cad.cjs +18 -0
- package/dist/{three-live-extras.d.ts → three-live-cad.d.ts} +65 -2
- package/dist/three-live-cad.js +18 -0
- package/dist/three-live-cad.min.js +18 -0
- package/dist/three-live-element.cjs +29 -5
- package/dist/three-live-element.d.ts +65 -2
- package/dist/three-live-element.js +29 -5
- package/dist/three-live-full.cjs +159 -56
- package/dist/three-live-full.js +159 -56
- package/dist/three-live-full.min.js +159 -56
- package/dist/three-live-studio.cjs +120 -0
- package/dist/three-live-studio.d.ts +509 -0
- package/dist/three-live-studio.js +120 -0
- package/dist/three-live-studio.min.js +120 -0
- package/dist/three-live-viewer.cjs +29 -5
- package/dist/three-live-viewer.d.ts +65 -2
- package/dist/three-live-viewer.js +29 -5
- package/dist/three-live-viewer.min.js +29 -5
- package/dist/three-live.cjs +66 -42
- package/dist/three-live.js +66 -42
- package/dist/three-live.min.js +66 -42
- package/dist/three-view.cjs +29 -5
- package/dist/three-view.d.ts +65 -2
- package/dist/three-view.js +29 -5
- package/dist/three-xr.cjs +65 -41
- package/dist/three-xr.d.ts +65 -2
- package/dist/three-xr.js +65 -41
- package/package.json +10 -5
- package/dist/three-live-extras.cjs +0 -42
- package/dist/three-live-extras.js +0 -42
- package/dist/three-live-extras.min.js +0 -42
|
@@ -48,6 +48,29 @@ import type {
|
|
|
48
48
|
} from './xr-live/src/xr-live-element';
|
|
49
49
|
|
|
50
50
|
export * from './three-live/src/core';
|
|
51
|
+
export {
|
|
52
|
+
cadPlugin,
|
|
53
|
+
installCadExtension,
|
|
54
|
+
MAX_BSP_DEPTH,
|
|
55
|
+
MAX_CSG_TRIANGLES,
|
|
56
|
+
MAX_TEXT_GEOMETRY_CHARS,
|
|
57
|
+
type ExtrudeGeometryOptions,
|
|
58
|
+
type TextGeometryOptions,
|
|
59
|
+
} from './three-live/src/plugins/cad';
|
|
60
|
+
export {
|
|
61
|
+
ikPlugin,
|
|
62
|
+
IKSolver,
|
|
63
|
+
quatFromUnitVectors,
|
|
64
|
+
solveFABRIK,
|
|
65
|
+
solveTwoBoneIK,
|
|
66
|
+
type FABRIKSolution,
|
|
67
|
+
type IKQuat,
|
|
68
|
+
type TwoBoneIKSolution,
|
|
69
|
+
} from './three-live/src/plugins/ik';
|
|
70
|
+
export {
|
|
71
|
+
extractNodeInstancing,
|
|
72
|
+
instancingPlugin,
|
|
73
|
+
} from './three-live/src/plugins/instancing';
|
|
51
74
|
export {
|
|
52
75
|
getInteractivityVM,
|
|
53
76
|
interactivityPlugin,
|
|
@@ -63,6 +86,30 @@ export {
|
|
|
63
86
|
type InteractivityValueSocket,
|
|
64
87
|
type InteractivityVariableDef,
|
|
65
88
|
} from './three-live/src/plugins/interactivity';
|
|
89
|
+
export {
|
|
90
|
+
applyMeshoptFilter,
|
|
91
|
+
decodeMeshoptBuffer,
|
|
92
|
+
decodeMeshoptGLB,
|
|
93
|
+
encodeMeshoptBuffer,
|
|
94
|
+
meshoptDecoder,
|
|
95
|
+
meshoptPlugin,
|
|
96
|
+
type MeshoptFilter,
|
|
97
|
+
type MeshoptMode,
|
|
98
|
+
} from './three-live/src/plugins/meshopt';
|
|
99
|
+
export {
|
|
100
|
+
computeOutlineClipOffset,
|
|
101
|
+
evaluateKawaseBloom,
|
|
102
|
+
parseHexRgb,
|
|
103
|
+
postprocessingPlugin,
|
|
104
|
+
resolveViewerBloom,
|
|
105
|
+
} from './three-live/src/plugins/postprocessing';
|
|
106
|
+
export {
|
|
107
|
+
extractMaterialVariants,
|
|
108
|
+
extractPrimitiveVariantMappings,
|
|
109
|
+
selectMaterialVariant,
|
|
110
|
+
variantsPlugin,
|
|
111
|
+
type VariantMapping,
|
|
112
|
+
} from './three-live/src/plugins/variants';
|
|
66
113
|
export {
|
|
67
114
|
ThreeLiveElement,
|
|
68
115
|
type ARLaunchOptions,
|
|
@@ -80,7 +127,7 @@ export {
|
|
|
80
127
|
type XRProfile,
|
|
81
128
|
type XRSimulatorRoom,
|
|
82
129
|
} from './xr-live/src/xr-live-element';
|
|
83
|
-
/** Optional spatial plugins (`xr-live/
|
|
130
|
+
/** Optional spatial plugins (`xr-live/spatial`, `xr-live-spatial.min.js`). */
|
|
84
131
|
export * from './xr-live/src/plugins/index';
|
|
85
132
|
|
|
86
133
|
/**
|
|
@@ -119,7 +166,7 @@ export interface ThreeLiveAttributes {
|
|
|
119
166
|
'shadow-intensity'?: number | string;
|
|
120
167
|
/** Radial Gaussian blur falloff of contact shadow (0.0 to 1.0). */
|
|
121
168
|
'shadow-softness'?: number | string;
|
|
122
|
-
/** Tone mapping mode ("neutral", "reinhard", "none"). */
|
|
169
|
+
/** Tone mapping mode ("neutral", "aces", "agx", "reinhard", "none"). */
|
|
123
170
|
'tone-mapping'?: string;
|
|
124
171
|
/** Enable or disable interactive camera orbit/pan/zoom controls (default: true). */
|
|
125
172
|
'camera-controls'?: boolean | string;
|
|
@@ -127,6 +174,8 @@ export interface ThreeLiveAttributes {
|
|
|
127
174
|
'autoplay'?: boolean | string;
|
|
128
175
|
/** Name of specific glTF animation clip to play. */
|
|
129
176
|
'animation-name'?: string;
|
|
177
|
+
/** Name of the active KHR_materials_variants material variant. */
|
|
178
|
+
'variant-name'?: string;
|
|
130
179
|
/** Automatically rotate scene around the Y-axis when user is idle. */
|
|
131
180
|
'auto-rotate'?: boolean | string;
|
|
132
181
|
/** Delay in milliseconds before auto-rotation resumes after user interaction (default: 3000). */
|
|
@@ -162,6 +211,7 @@ export interface ThreeLiveAttributes {
|
|
|
162
211
|
onerror?: (e: CustomEvent<{error: any}>) => void;
|
|
163
212
|
onmeshclick?: (e: CustomEvent<HitDetail>) => void;
|
|
164
213
|
'oncamera-change'?: (e: CustomEvent<CameraDetail>) => void;
|
|
214
|
+
'onvariant-applied'?: (e: CustomEvent<{variantName: string | null}>) => void;
|
|
165
215
|
'onar-status'?: (
|
|
166
216
|
e: CustomEvent<{
|
|
167
217
|
status: 'session-started' | 'not-presenting' | 'failed';
|
|
@@ -248,6 +298,8 @@ export interface XRLiveAttributes extends ThreeLiveAttributes {
|
|
|
248
298
|
'peer-name'?: string;
|
|
249
299
|
/** Local avatar visor & laser color (`#rrggbb`) in `shared-room`. */
|
|
250
300
|
'peer-color'?: string;
|
|
301
|
+
/** Opt-in WebRTC spatial voice chat signaling and HRTF distance attenuation in `shared-room`. */
|
|
302
|
+
'shared-room-voice'?: boolean | string;
|
|
251
303
|
/** xr-live-sim: character camera mode, or `none` to disable the character. */
|
|
252
304
|
'character-controller'?:
|
|
253
305
|
| 'third-person'
|
|
@@ -363,6 +415,17 @@ export interface XRLiveAttributes extends ThreeLiveAttributes {
|
|
|
363
415
|
onpeergrabconflict?: (
|
|
364
416
|
e: CustomEvent<{peerId: string; nodeId: string}>,
|
|
365
417
|
) => void;
|
|
418
|
+
onpeerrtcsignal?: (
|
|
419
|
+
e: CustomEvent<{
|
|
420
|
+
peerId: string;
|
|
421
|
+
targetPeerId: string;
|
|
422
|
+
signalType: 'offer' | 'answer' | 'ice';
|
|
423
|
+
sdp: string | null;
|
|
424
|
+
candidate: string | null;
|
|
425
|
+
sdpMid: string | null;
|
|
426
|
+
sdpMLineIndex: number | null;
|
|
427
|
+
}>,
|
|
428
|
+
) => void;
|
|
366
429
|
/** xr-live-sim events. */
|
|
367
430
|
oncharacterjump?: (
|
|
368
431
|
e: CustomEvent<{nodeId: string; position: [number, number, number]}>,
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
var pe="__THREE_LIVE_REGISTRY__";function le(){let C=typeof globalThis<"u"?globalThis:{};if(!C[pe]){let L={plugins:[],decoders:new Map};try{Object.defineProperty(C,pe,{value:L,writable:!1,configurable:!1,enumerable:!1})}catch{C[pe]=L}}return C[pe]}var dn=le().plugins;function Ke(C){let L=le();L.workerExtensionInstallers||(L.workerExtensionInstallers=[]),L.workerExtensionInstallers.includes(C)||L.workerExtensionInstallers.push(C)}function Je(C){let L=le().plugins;L.some(D=>D.name===C.name)||L.push(C),C.onRegister?.()}var xn=8192,pn=512,gn=128;function we(C,L){if(!C||!C.BufferGeometry)return null;let D=C.Vector2,Me=C.Vector3,nn=C.Quaternion,ge=C.Matrix4,tn=C.Color,_=C.BufferAttribute,ee=C.BufferGeometry,sn=C.Material,Ge=C.MeshStandardMaterial,he=C.Mesh,ce=8192,me=512,Ce=128;class ye{constructor(e){this.currentPoint=new D(0,0),this.segments=[],Array.isArray(e)&&e.length>0&&this.fromPoints(e)}fromPoints(e){if(!e.length)return this;this.moveTo(e[0].x,e[0].y);for(let n=1;n<e.length;n++)this.lineTo(e[n].x,e[n].y);return this}moveTo(e,n){let t=Number(e)||0,o=Number(n)||0;return this.currentPoint.set(t,o),this.segments.push({type:"move",pts:[t,o]}),this}lineTo(e,n){let t=Number(e)||0,o=Number(n)||0;return this.segments.length===0&&this.segments.push({type:"move",pts:[this.currentPoint.x,this.currentPoint.y]}),this.currentPoint.set(t,o),this.segments.push({type:"line",pts:[t,o]}),this}quadraticCurveTo(e,n,t,o){let c=this.currentPoint.x,r=this.currentPoint.y,i=Number(e)||0,h=Number(n)||0,a=Number(t)||0,m=Number(o)||0;return this.segments.length===0&&this.segments.push({type:"move",pts:[c,r]}),this.currentPoint.set(a,m),this.segments.push({type:"quad",pts:[c,r,i,h,a,m]}),this}bezierCurveTo(e,n,t,o,c,r){let i=this.currentPoint.x,h=this.currentPoint.y,a=Number(e)||0,m=Number(n)||0,u=Number(t)||0,l=Number(o)||0,f=Number(c)||0,y=Number(r)||0;return this.segments.length===0&&this.segments.push({type:"move",pts:[i,h]}),this.currentPoint.set(f,y),this.segments.push({type:"cubic",pts:[i,h,a,m,u,l,f,y]}),this}absarc(e,n,t,o,c,r=!1){return this.absellipse(e,n,t,t,o,c,r,0)}arc(e,n,t,o,c,r=!1){return this.absarc(this.currentPoint.x+(Number(e)||0),this.currentPoint.y+(Number(n)||0),t,o,c,r)}absellipse(e,n,t,o,c,r,i=!1,h=0){let a=Number(e)||0,m=Number(n)||0,u=Math.max(0,Number(t)||0),l=Math.max(0,Number(o)||0),f=Number(c)||0,y=Number(r)||0,b=i?1:0,x=Number(h)||0;this.segments.push({type:"arc",pts:[a,m,u,l,f,y,b,x]});let p=Math.cos(x),v=Math.sin(x),S=u*Math.cos(y),d=l*Math.sin(y);return this.currentPoint.set(a+S*p-d*v,m+S*v+d*p),this}ellipse(e,n,t,o,c,r,i=!1,h=0){return this.absellipse(this.currentPoint.x+(Number(e)||0),this.currentPoint.y+(Number(n)||0),t,o,c,r,i,h)}closePath(){if(this.segments.length>0){let e=this.segments[0],n=0,t=0;if(e.type==="arc"){let o=e.pts[0],c=e.pts[1],r=e.pts[2],i=e.pts[3],h=e.pts[4],a=e.pts[7],m=Math.cos(a),u=Math.sin(a),l=r*Math.cos(h),f=i*Math.sin(h);n=o+l*m-f*u,t=c+l*u+f*m}else n=e.pts[0],t=e.pts[1];Math.hypot(this.currentPoint.x-n,this.currentPoint.y-t)>1e-6&&this.lineTo(n,t)}return this}getPoints(e=12){let n=Math.max(1,Math.min(128,Math.floor(Number(e)||12))),t=[],o=(c,r)=>{if(t.length>0){let i=t[t.length-1];if(Math.hypot(i.x-c,i.y-r)<1e-6)return}t.push(new D(c,r))};for(let c of this.segments){let r=c.pts;if(c.type==="move"||c.type==="line")o(r[0],r[1]);else if(c.type==="quad"){let i=r[0],h=r[1],a=r[2],m=r[3],u=r[4],l=r[5];o(i,h);for(let f=1;f<=n;f++){let y=f/n,b=1-y;o(b*b*i+2*b*y*a+y*y*u,b*b*h+2*b*y*m+y*y*l)}}else if(c.type==="cubic"){let i=r[0],h=r[1],a=r[2],m=r[3],u=r[4],l=r[5],f=r[6],y=r[7];o(i,h);for(let b=1;b<=n;b++){let x=b/n,p=1-x,v=p*p,S=x*x;o(v*p*i+3*v*x*a+3*p*S*u+S*x*f,v*p*h+3*v*x*m+3*p*S*l+S*x*y)}}else if(c.type==="arc"){let i=r[0],h=r[1],a=r[2],m=r[3],u=r[4],l=r[5],f=r[6]!==0,y=r[7],b=Math.PI*2,x=l-u,p=Math.abs(x)<1e-9;for(;x<0;)x+=b;for(;x>b;)x-=b;x<1e-9&&(x=p?0:b),f&&!p&&(x=x===b?-b:x-b);let v=Math.cos(y),S=Math.sin(y),d=Math.max(2,n);for(let k=0;k<=d;k++){let T=k/d,z=u+T*x,G=a*Math.cos(z),M=m*Math.sin(z);o(i+G*v-M*S,h+G*S+M*v)}}}if(t.length>2){let c=t[0],r=t[t.length-1];Math.hypot(c.x-r.x,c.y-r.y)<1e-6&&t.pop()}return t}getSpacedPoints(e=12){return this.getPoints(e)}}class ae extends ye{constructor(e){super(e),this.holes=[]}extractPoints(e=12){return{shape:this.getPoints(e),holes:this.holes.map(n=>n.getPoints(e))}}}function fe(s){let e=0,n=s.length;for(let t=0,o=n-1;t<n;o=t++)e+=s[o].x*s[t].y-s[t].x*s[o].y;return e*.5}function on(s,e,n,t,o,c,r,i){let h=r-n,a=i-t,m=o-n,u=c-t,l=s-n,f=e-t,y=h*h+a*a,b=h*m+a*u,x=h*l+a*f,p=m*m+u*u,v=m*l+u*f,S=y*p-b*b;if(Math.abs(S)<1e-12)return!1;let d=1/S,k=(p*x-b*v)*d,T=(y*v-b*x)*d;return k>=-1e-7&&T>=-1e-7&&k+T<=1+1e-7}function ke(s,e){let n=s.slice();fe(n)<0&&n.reverse();let t=n.map(r=>new D(r.x,r.y)),o=n.map((r,i)=>i),c=[];for(let r of e){if(!r||r.length<3)continue;let i=r.slice();fe(i)>0&&i.reverse();let h=[],a=-1/0,m=0;for(let u=0;u<i.length;u++){let l=i[u],f=t.length;t.push(new D(l.x,l.y)),h.push(f),l.x>a&&(a=l.x,m=u)}c.push({pts:i,indices:h,maxX:a,maxIdx:m})}c.sort((r,i)=>i.maxX-r.maxX);for(let r of c){let i=r.pts[r.maxIdx].x,h=r.pts[r.maxIdx].y,a=0,m=1/0;for(let l=0;l<o.length;l++){let f=t[o[l]],y=Math.hypot(f.x-i,f.y-h)+(f.x>=i?0:1e3);y<m&&(m=y,a=l)}let u=[];for(let l=0;l<=a;l++)u.push(o[l]);for(let l=0;l<=r.indices.length;l++){let f=r.indices[(r.maxIdx+l)%r.indices.length];u.push(f)}for(let l=a;l<o.length;l++)u.push(o[l]);o=u}return{merged:o.map(r=>t[r]),mergedIndices:o,allVertices:t}}function Te(s,e){let n=[],t=s.slice();if(t.length<3)return n;let o=t.length*t.length+64,c=0;for(;t.length>2&&o-- >0;){let r=t.length,i=t[(c+r-1)%r],h=t[c%r],a=t[(c+1)%r],m=e[i],u=e[h],l=e[a];if((u.x-m.x)*(l.y-m.y)-(u.y-m.y)*(l.x-m.x)>1e-9){let y=!0;for(let b=0;b<r;b++){let x=t[b];if(x===i||x===h||x===a)continue;let p=e[x];if(!(Math.hypot(p.x-m.x,p.y-m.y)<1e-6||Math.hypot(p.x-u.x,p.y-u.y)<1e-6||Math.hypot(p.x-l.x,p.y-l.y)<1e-6)&&on(p.x,p.y,m.x,m.y,u.x,u.y,l.x,l.y)){y=!1;break}}if(y){n.push([i,h,a]),t.splice(c%r,1),c=0;continue}}c++,c>=r*2&&(n.push([i,h,a]),t.splice(c%r,1),c=0)}return n}class rn extends ee{constructor(e=new ae,n=12){super();let t=Array.isArray(e)?e:[e],o=[],c=[],r=[],i=[];for(let h of t){if(!(h instanceof ye))continue;let a=h instanceof ae?h.extractPoints(n):{shape:h.getPoints(n),holes:[]};if(a.shape.length<3)continue;let{mergedIndices:m,allVertices:u}=ke(a.shape,a.holes),l=Te(m,u),f=o.length/3,y=1/0,b=1/0,x=-1/0,p=-1/0;for(let d of u)d.x<y&&(y=d.x),d.y<b&&(b=d.y),d.x>x&&(x=d.x),d.y>p&&(p=d.y);let v=Math.max(1e-6,x-y),S=Math.max(1e-6,p-b);for(let d of u)o.push(d.x,d.y,0),c.push(0,0,1),r.push((d.x-y)/v,(d.y-b)/S);for(let[d,k,T]of l)i.push(f+d,f+k,f+T)}this.setAttribute("position",new _(new Float32Array(o),3)),this.setAttribute("normal",new _(new Float32Array(c),3)),this.setAttribute("uv",new _(new Float32Array(r),2)),this.setIndex(i)}}function cn(s){let e=s.length,n=[];for(let t=0;t<e;t++){let o=s[(t+e-1)%e],c=s[t],r=s[(t+1)%e],i=c.x-o.x,h=c.y-o.y,a=Math.hypot(i,h)||1;i/=a,h/=a;let m=r.x-c.x,u=r.y-c.y,l=Math.hypot(m,u)||1;m/=l,u/=l;let f=h,y=-i,b=u,x=-m,p=f+b,v=y+x,S=Math.hypot(p,v);if(S>1e-6){p/=S,v/=S;let d=Math.max(.35,p*f+v*y);n.push(new D(p/d,v/d))}else n.push(new D(f,y))}return n}class an extends ee{constructor(e=new ae,n={}){super();let t=Array.isArray(e)?e:[e],o=Math.max(1,Math.min(64,Math.floor(Number(n.curveSegments??12)))),c=Number.isFinite(Number(n.depth??n.amount))?Number(n.depth??n.amount):1,r=Math.max(1,Math.min(32,Math.floor(Number(n.steps??1)))),i=!!(n.bevelEnabled??!1),h=i?Math.max(0,Number(n.bevelThickness??.06)):0,a=i?Math.max(0,Number(n.bevelSize??h*.8)):0,m=i?Number(n.bevelOffset??0):0,u=i?Math.max(1,Math.min(8,Math.floor(Number(n.bevelSegments??2)))):0,l=[],f=[],y=[],b=[];for(let x of t){if(!(x instanceof ye))continue;let p=x instanceof ae?x.extractPoints(o):{shape:x.getPoints(o),holes:[]};if(p.shape.length<3)continue;let v=p.shape.slice();fe(v)<0&&v.reverse();let S=[];for(let g of p.holes){if(g.length<3)continue;let P=g.slice();fe(P)>0&&P.reverse(),S.push(P)}let{mergedIndices:d,allVertices:k}=ke(v,S),T=Te(d,k),z=[v,...S],G=[];for(let g of z){let P=cn(g);for(let w of P)G.push(w)}let M=1/0,V=1/0,X=-1/0,F=-1/0;for(let g of k)g.x<M&&(M=g.x),g.y<V&&(V=g.y),g.x>X&&(X=g.x),g.y>F&&(F=g.y);let N=Math.max(1e-6,X-M),B=Math.max(1e-6,F-V),ne=-h,te=c+h,W=l.length/3;for(let g=0;g<k.length;g++){let P=k[g],w=G[g]??new D(0,0),R=P.x+w.x*m,E=P.y+w.y*m;l.push(R,E,ne),f.push(0,0,-1),y.push((R-M)/N,(E-V)/B)}for(let[g,P,w]of T)b.push(W+g,W+w,W+P);let j=l.length/3;for(let g=0;g<k.length;g++){let P=k[g],w=G[g]??new D(0,0),R=P.x+w.x*m,E=P.y+w.y*m;l.push(R,E,te),f.push(0,0,1),y.push((R-M)/N,(E-V)/B)}for(let[g,P,w]of T)b.push(j+g,j+P,j+w);let I=[];if(i&&u>0)for(let g=0;g<u;g++){let w=g/u*Math.PI/2;I.push({z:-h*Math.cos(w),expand:m+a*Math.sin(w)})}for(let g=0;g<=r;g++){let P=g/r;I.push({z:P*c,expand:m+a})}if(i&&u>0)for(let g=1;g<=u;g++){let w=g/u*Math.PI/2;I.push({z:c+h*Math.sin(w),expand:m+a*Math.cos(w)})}let O=0;for(let g of z){let P=g.length;for(let w=0;w<I.length-1;w++){let R=I[w],E=I[w+1];for(let A=0;A<P;A++){let Y=(A+1)%P,H=g[A],U=g[Y],$=G[O+A],Q=G[O+Y],Z=H.x+$.x*R.expand,K=H.y+$.y*R.expand,J=U.x+Q.x*R.expand,q=U.y+Q.y*R.expand,fn=U.x+Q.x*E.expand,bn=U.y+Q.y*E.expand,Fe=H.x+$.x*E.expand,Be=H.y+$.y*E.expand,Oe=J-Z,Ye=q-K,qe=0,We=Fe-Z,je=Be-K,He=E.z-R.z,se=Ye*He-qe*je,oe=qe*We-Oe*He,re=Oe*je-Ye*We,Pe=Math.hypot(se,oe,re)||1;se/=Pe,oe/=Pe,re/=Pe;let ie=l.length/3;l.push(Z,K,R.z,J,q,R.z,fn,bn,E.z,Fe,Be,E.z),f.push(se,oe,re,se,oe,re,se,oe,re,se,oe,re);let Ue=A/P,$e=(A+1)/P,Qe=w/(I.length-1),Ze=(w+1)/(I.length-1);y.push(Ue,Qe,$e,Qe,$e,Ze,Ue,Ze),b.push(ie,ie+1,ie+2,ie,ie+2,ie+3)}}O+=P}}this.setAttribute("position",new _(new Float32Array(l),3)),this.setAttribute("normal",new _(new Float32Array(f),3)),this.setAttribute("uv",new _(new Float32Array(y),2)),this.setIndex(b)}}function Le(s){return{x:s.x,y:s.y,z:s.z,nx:s.nx,ny:s.ny,nz:s.nz,u:s.u,v:s.v}}function un(s){return{x:s.x,y:s.y,z:s.z,nx:-s.nx,ny:-s.ny,nz:-s.nz,u:s.u,v:s.v}}function ln(s,e,n){let t=s.nx+(e.nx-s.nx)*n,o=s.ny+(e.ny-s.ny)*n,c=s.nz+(e.nz-s.nz)*n,r=Math.hypot(t,o,c)||1;return{x:s.x+(e.x-s.x)*n,y:s.y+(e.y-s.y)*n,z:s.z+(e.z-s.z)*n,nx:t/r,ny:o/r,nz:c/r,u:s.u+(e.u-s.u)*n,v:s.v+(e.v-s.v)*n}}function de(s){if(s.length<3)return null;let e=s[0],n=s[1],t=s[2],o=n.x-e.x,c=n.y-e.y,r=n.z-e.z,i=t.x-e.x,h=t.y-e.y,a=t.z-e.z,m=c*a-r*h,u=r*i-o*a,l=o*h-c*i,f=Math.hypot(m,u,l);if(f<1e-9)return null;m/=f,u/=f,l/=f;let y=m*e.x+u*e.y+l*e.z;return{vertices:s,nx:m,ny:u,nz:l,w:y}}function hn(s){s.vertices.reverse();for(let e=0;e<s.vertices.length;e++)s.vertices[e]=un(s.vertices[e]);s.nx=-s.nx,s.ny=-s.ny,s.nz=-s.nz,s.w=-s.w}let Re=1e-5,Ee=0,ve=1,be=2,ze=3;function Ve(s,e,n,t,o,c,r,i,h){let a=0,m=[];for(let u=0;u<o.vertices.length;u++){let l=o.vertices[u],f=s*l.x+e*l.y+n*l.z-t,y=f<-Re?be:f>Re?ve:Ee;a|=y,m.push(y)}switch(a){case Ee:{s*o.nx+e*o.ny+n*o.nz>0?c.push(o):r.push(o);break}case ve:i.push(o);break;case be:h.push(o);break;case ze:{let u=[],l=[],f=o.vertices.length;for(let y=0;y<f;y++){let b=(y+1)%f,x=m[y],p=m[b],v=o.vertices[y],S=o.vertices[b];if(x!==be&&u.push(v),x!==ve&&l.push(x!==be?Le(v):v),(x|p)===ze){let d=S.x-v.x,k=S.y-v.y,T=S.z-v.z,z=s*d+e*k+n*T,G=Math.abs(z)>1e-12?(t-(s*v.x+e*v.y+n*v.z))/z:.5,M=ln(v,S,Math.max(0,Math.min(1,G)));u.push(M),l.push(Le(M))}}if(u.length>=3){let y=de(u);y&&i.push(y)}if(l.length>=3){let y=de(l);y&&h.push(y)}break}default:break}}class ue{constructor(e,n=0){this.nx=0,this.ny=0,this.nz=0,this.w=0,this.hasPlane=!1,this.polygons=[],this.front=null,this.back=null,e&&e.length>0&&this.build(e,n)}invert(){for(let n=0;n<this.polygons.length;n++)hn(this.polygons[n]);this.nx=-this.nx,this.ny=-this.ny,this.nz=-this.nz,this.w=-this.w,this.front&&this.front.invert(),this.back&&this.back.invert();let e=this.front;this.front=this.back,this.back=e}clipPolygons(e,n=0){if(!this.hasPlane||e.length===0||n>=me)return e.slice();let t=[],o=[];for(let c=0;c<e.length;c++)Ve(this.nx,this.ny,this.nz,this.w,e[c],t,o,t,o);return this.front&&t.length>0&&(t=this.front.clipPolygons(t,n+1)),this.back?o=o.length>0?this.back.clipPolygons(o,n+1):[]:o=[],t.concat(o)}clipTo(e,n=0){this.polygons.length>0&&(this.polygons=e.clipPolygons(this.polygons,0)),n<me&&(this.front&&this.front.clipTo(e,n+1),this.back&&this.back.clipTo(e,n+1))}allPolygons(e=[]){for(let n=0;n<this.polygons.length;n++)e.push(this.polygons[n]);return this.front&&this.front.allPolygons(e),this.back&&this.back.allPolygons(e),e}build(e,n=0){if(!e.length)return;if(!this.hasPlane){let c=e[0];this.nx=c.nx,this.ny=c.ny,this.nz=c.nz,this.w=c.w,this.hasPlane=!0}if(n>=me){for(let c=0;c<e.length;c++)this.polygons.push(e[c]);return}let t=[],o=[];for(let c=0;c<e.length;c++)Ve(this.nx,this.ny,this.nz,this.w,e[c],this.polygons,this.polygons,t,o);t.length>0&&(this.front||(this.front=new ue),this.front.build(t,n+1)),o.length>0&&(this.back||(this.back=new ue),this.back.build(o,n+1))}}function Ie(s,e){let n=s.attributes.position;if(!n||n.count===0)return[];let t=s.attributes.normal,o=s.attributes.uv,c=s.index?s.index.array:null,r=Math.floor(c?c.length/3:n.count/3);if(r>ce)throw new RangeError(`SecurityError: CSG input triangle count (${r}) exceeds MAX_CSG_TRIANGLES (${ce})`);let i=e?e.elements:null,h=i?i[0]*(i[5]*i[10]-i[9]*i[6])-i[4]*(i[1]*i[10]-i[9]*i[2])+i[8]*(i[1]*i[6]-i[5]*i[2])<0:!1,a=u=>{let l=n.getX(u),f=n.getY(u),y=n.getZ(u),b=t?t.getX(u):0,x=t?t.getY(u):0,p=t?t.getZ(u):1;if(i){let d=i[0]*l+i[4]*f+i[8]*y+i[12],k=i[1]*l+i[5]*f+i[9]*y+i[13],T=i[2]*l+i[6]*f+i[10]*y+i[14];l=d,f=k,y=T;let z=i[0]*b+i[4]*x+i[8]*p,G=i[1]*b+i[5]*x+i[9]*p,M=i[2]*b+i[6]*x+i[10]*p,V=Math.hypot(z,G,M)||1;b=z/V,x=G/V,p=M/V}let v=o?o.getX(u):0,S=o?o.getY(u):0;return{x:l,y:f,z:y,nx:b,ny:x,nz:p,u:v,v:S}},m=[];for(let u=0;u<r;u++){let l=c?c[u*3]:u*3,f=c?c[u*3+1]:u*3+1,y=c?c[u*3+2]:u*3+2,b=de(h?[a(l),a(y),a(f)]:[a(l),a(f),a(y)]);b&&m.push(b)}return m}function mn(s){let e=[],n=[],t=[],o=[];for(let r of s){let i=r.vertices;if(i.length<3)continue;let h=e.length/3;for(let a of i)e.push(a.x,a.y,a.z),n.push(r.nx,r.ny,r.nz),t.push(a.u,a.v);for(let a=1;a<i.length-1;a++)o.push(h,h+a,h+a+1)}let c=new ee;return c.setAttribute("position",new _(new Float32Array(e),3)),c.setAttribute("normal",new _(new Float32Array(n),3)),c.setAttribute("uv",new _(new Float32Array(t),2)),c.setIndex(o),c}function yn(s,e,n){if(s.length+e.length>ce)throw new RangeError(`SecurityError: Combined CSG triangle count (${s.length+e.length}) exceeds MAX_CSG_TRIANGLES (${ce})`);if(s.length===0)return n==="union"?e:[];if(e.length===0)return n==="intersect"?[]:s;let t=new ue(s),o=new ue(e);return n==="union"?(t.clipTo(o),o.clipTo(t),o.invert(),o.clipTo(t),o.invert(),t.build(o.allPolygons()),t.allPolygons()):n==="subtract"?(t.invert(),t.clipTo(o),o.clipTo(t),o.invert(),o.clipTo(t),o.invert(),t.build(o.allPolygons()),t.invert(),t.allPolygons()):(t.invert(),o.clipTo(t),o.invert(),t.clipTo(o),o.clipTo(t),t.build(o.allPolygons()),t.invert(),t.allPolygons())}function Ae(s,e,n,t=null,o=null){let c=Ie(s,t),r=Ie(e,o);return mn(yn(c,r,n))}function Se(s,e,n){let t=s instanceof he||!!s?.isMesh,o=e instanceof he||!!e?.isMesh,c=t?s.geometry:s,r=o?e.geometry:e,i=null;if(o)if(e.updateMatrix(),t){s.updateMatrix();let u=new ge().makeScale(1/(s.scale.x||1),1/(s.scale.y||1),1/(s.scale.z||1)),l=Math.hypot(s.quaternion.x,s.quaternion.y,s.quaternion.z,s.quaternion.w)||1,f=new ge().compose(new Me(0,0,0),new nn(-s.quaternion.x/l,-s.quaternion.y/l,-s.quaternion.z/l,s.quaternion.w/l),new Me(1,1,1)),y=new ge().makeTranslation(-s.position.x,-s.position.y,-s.position.z);i=u.multiply(f).multiply(y).multiply(e.matrix)}else i=e.matrix;let h=Ae(c,r,n,null,i),a=t?s.material:new Ge,m=new he(h,a);return t&&(m.position.copy(s.position),m.quaternion.copy(s.quaternion),m.scale.copy(s.scale),m.name=s.name),m}let xe={toGeometry:Ae,subtract(s,e){return Se(s,e,"subtract")},union(s,e){return Se(s,e,"union")},intersect(s,e){return Se(s,e,"intersect")}},Ne={0:[[[.15,0],[.85,0],[.85,1],[.15,1],[.15,0]]],1:[[[.3,.8],[.5,1],[.5,0]],[[.2,0],[.8,0]]],2:[[[.15,.8],[.3,1],[.7,1],[.85,.8],[.85,.55],[.15,0],[.85,0]]],3:[[[.15,.85],[.3,1],[.75,1],[.85,.75],[.5,.5],[.85,.25],[.75,0],[.3,0],[.15,.15]]],4:[[[.7,0],[.7,1],[.15,.35],[.9,.35]]],5:[[[.85,1],[.2,1],[.15,.55],[.75,.55],[.85,.3],[.75,0],[.2,0]]],6:[[[.8,.9],[.5,1],[.15,.7],[.15,.15],[.5,0],[.85,.2],[.85,.45],[.5,.55],[.15,.45]]],7:[[[.15,1],[.85,1],[.35,0]]],8:[[[.2,.5],[.15,.75],[.3,1],[.7,1],[.85,.75],[.8,.5],[.2,.5],[.15,.2],[.3,0],[.7,0],[.85,.2],[.8,.5]]],9:[[[.85,.55],[.5,.45],[.15,.55],[.15,.85],[.5,1],[.85,.85],[.85,.2],[.5,0],[.2,.1]]],A:[[[.1,0],[.5,1],[.9,0]],[[.25,.35],[.75,.35]]],B:[[[.15,0],[.15,1],[.7,1],[.85,.75],[.7,.5],[.15,.5]],[[.7,.5],[.85,.25],[.7,0],[.15,0]]],C:[[[.85,.8],[.65,1],[.3,1],[.15,.75],[.15,.25],[.3,0],[.65,0],[.85,.2]]],D:[[[.15,0],[.15,1],[.65,1],[.85,.75],[.85,.25],[.65,0],[.15,0]]],E:[[[.85,1],[.15,1],[.15,0],[.85,0]],[[.15,.5],[.7,.5]]],F:[[[.85,1],[.15,1],[.15,0]],[[.15,.5],[.7,.5]]],G:[[[.85,.8],[.65,1],[.3,1],[.15,.75],[.15,.25],[.3,0],[.85,0],[.85,.45],[.55,.45]]],H:[[[.15,0],[.15,1]],[[.85,0],[.85,1]],[[.15,.5],[.85,.5]]],I:[[[.25,1],[.75,1]],[[.5,1],[.5,0]],[[.25,0],[.75,0]]],J:[[[.8,1],[.8,.25],[.6,0],[.3,0],[.15,.25]]],K:[[[.15,0],[.15,1]],[[.85,1],[.15,.45],[.85,0]]],L:[[[.15,1],[.15,0],[.85,0]]],M:[[[.1,0],[.1,1],[.5,.35],[.9,1],[.9,0]]],N:[[[.15,0],[.15,1],[.85,0],[.85,1]]],O:[[[.3,0],[.7,0],[.85,.25],[.85,.75],[.7,1],[.3,1],[.15,.75],[.15,.25],[.3,0]]],P:[[[.15,0],[.15,1],[.7,1],[.85,.75],[.7,.5],[.15,.5]]],Q:[[[.3,0],[.7,0],[.85,.25],[.85,.75],[.7,1],[.3,1],[.15,.75],[.15,.25],[.3,0]],[[.55,.3],[.9,-.05]]],R:[[[.15,0],[.15,1],[.7,1],[.85,.75],[.7,.5],[.15,.5]],[[.55,.5],[.85,0]]],S:[[[.85,.85],[.65,1],[.3,1],[.15,.75],[.85,.25],[.7,0],[.3,0],[.15,.15]]],T:[[[.1,1],[.9,1]],[[.5,1],[.5,0]]],U:[[[.15,1],[.15,.25],[.35,0],[.65,0],[.85,.25],[.85,1]]],V:[[[.1,1],[.5,0],[.9,1]]],W:[[[.05,1],[.25,0],[.5,.65],[.75,0],[.95,1]]],X:[[[.15,1],[.85,0]],[[.85,1],[.15,0]]],Y:[[[.15,1],[.5,.5],[.85,1]],[[.5,.5],[.5,0]]],Z:[[[.15,1],[.85,1],[.15,0],[.85,0]]],".":[[[.45,0],[.55,0],[.55,.12],[.45,.12],[.45,0]]],",":[[[.5,.15],[.4,-.1]]],":":[[[.45,.1],[.55,.1]],[[.45,.7],[.55,.7]]],"-":[[[.2,.5],[.8,.5]]],"+":[[[.2,.5],[.8,.5]],[[.5,.2],[.5,.8]]],"=":[[[.2,.35],[.8,.35]],[[.2,.65],[.8,.65]]],"/":[[[.2,0],[.8,1]]],"!":[[[.5,1],[.5,.28]],[[.5,.1],[.5,0]]],"?":[[[.2,.8],[.35,1],[.7,1],[.85,.75],[.5,.45],[.5,.28]],[[.5,.1],[.5,0]]],"(":[[[.65,1],[.35,.65],[.35,.35],[.65,0]]],")":[[[.35,1],[.65,.65],[.65,.35],[.35,0]]],"%":[[[.2,0],[.8,1]],[[.2,.8],[.35,.8],[.35,.95],[.2,.95],[.2,.8]],[[.65,.05],[.8,.05],[.8,.2],[.65,.2],[.65,.05]]],"#":[[[.32,0],[.32,1]],[[.68,0],[.68,1]],[[.12,.35],[.88,.35]],[[.12,.65],[.88,.65]]],$:[[[.8,.8],[.6,.92],[.3,.92],[.18,.72],[.82,.28],[.7,.08],[.4,.08],[.2,.2]],[[.5,1],[.5,0]]],_:[[[.1,0],[.9,0]]],"[":[[[.65,1],[.3,1],[.3,0],[.65,0]]],"]":[[[.35,1],[.7,1],[.7,0],[.35,0]]],"<":[[[.75,.85],[.25,.5],[.75,.15]]],">":[[[.25,.85],[.75,.5],[.25,.15]]],"*":[[[.5,.2],[.5,.8]],[[.2,.35],[.8,.65]],[[.2,.65],[.8,.35]]],"\\":[[[.2,1],[.8,0]]]};class _e extends ee{constructor(e="",n={}){super();let t=String(e??"").slice(0,Ce),o=Math.max(.005,Math.min(100,Number(n.size??.2))),c=!!(n.bevelEnabled??!1),r=c?Math.max(0,Math.min(2,Number(n.bevelThickness??o*.04))):0,i=c?Math.max(0,Math.min(2,Number(n.bevelSize??o*.03))):0,h=Math.max(.001,Math.min(20,Number(n.depth??n.height??o*.2)))+r*2,a=o*.085+i,m=o*.68,u=o*.82,l=[],f=[],y=[],b=[],x=(S,d,k,T,z,G,M)=>{let V=k-S,X=T-d,F=Math.hypot(V,X),N=1,B=0;F>1e-6&&(N=V/F,B=X/F);let ne=-B*z,te=N*z,W=N*z*.6,j=B*z*.6,I=S-W+ne,O=d-j+te,g=S-W-ne,P=d-j-te,w=k+W-ne,R=T+j-te,E=k+W+ne,A=T+j+te,Y=(H,U,$,Q,Z,K,J)=>{let q=l.length/3;l.push(H[0],H[1],H[2],U[0],U[1],U[2],$[0],$[1],$[2],Q[0],Q[1],Q[2]),f.push(Z,K,J,Z,K,J,Z,K,J,Z,K,J),y.push(0,0,1,0,1,1,0,1),b.push(q,q+1,q+2,q,q+2,q+3)};Y([I,O,M],[g,P,M],[w,R,M],[E,A,M],0,0,1),Y([g,P,G],[I,O,G],[E,A,G],[w,R,G],0,0,-1),Y([I,O,G],[g,P,G],[g,P,M],[I,O,M],-N,-B,0),Y([w,R,G],[E,A,G],[E,A,M],[w,R,M],N,B,0),Y([g,P,G],[w,R,G],[w,R,M],[g,P,M],-B,N,0),Y([E,A,G],[I,O,G],[I,O,M],[E,A,M],B,-N,0)},p=0,v=0;for(let S=0;S<t.length;S++){let d=t[S];if(d===`
|
|
18
|
+
`){p=0,v-=o*1.35;continue}if(d===" "){p+=u*.75;continue}let k=d.toUpperCase(),T=d!==k&&d>="a"&&d<="z",z=Ne[k]??Ne["?"],G=T?o*.76:o,M=T?m*.88:m;for(let V of z)for(let X=0;X<V.length-1;X++){let F=V[X],N=V[X+1];x(p+F[0]*M,v+F[1]*G,p+N[0]*M,v+N[1]*G,a,-h*.5,h*.5)}p+=T?u*.88:u}this.setAttribute("position",new _(new Float32Array(l),3)),this.setAttribute("normal",new _(new Float32Array(f),3)),this.setAttribute("uv",new _(new Float32Array(y),2)),this.setIndex(b),n.center!==!1?this.center():this.computeBoundingBox()}}function Xe(s){if(!s)return;let e=s,n=s.userData?.xr?.text;if(n!=null&&n!==!1){let o=e.geometry?.attributes?.position;if(!o||o.count===0){let c="",r=.08,i=.015,h;if(typeof n=="string"||typeof n=="number")c=String(n);else if(typeof n=="object"){let a=n;c=String(a.text??a.value??""),a.size!==void 0&&(r=Number(a.size)||.08),(a.depth!==void 0||a.height!==void 0)&&(i=Number(a.depth??a.height)||r*.2),(typeof a.color=="string"||typeof a.color=="number")&&(h=a.color)}c.trim().length>0&&(e.geometry=new _e(c,{size:r,depth:i}),e.material instanceof sn?h!==void 0&&s.userData._autoTextColorApplied!==!0&&(e.material.color=new tn(h),s.userData._autoTextColorApplied=!0):e.material=new Ge({color:h??16317180}))}}let t=s.userData?.csg;if(t&&typeof t=="object"&&s.userData._csgApplied!==!0&&e.geometry instanceof ee&&e.geometry.attributes.position?.count>0){s.userData._csgApplied=!0;let o=Array.isArray(t)?t:[t];for(let c of o){if(!c||typeof c!="object")continue;let r=c,i=String(r.op??r.operation??"subtract"),h=i==="union"||i==="intersect"?i:"subtract",a=r.target??r.mesh??r.geometry;if(a instanceof he||a instanceof ee){let m=h==="union"?xe.union(e,a):h==="intersect"?xe.intersect(e,a):xe.subtract(e,a);e.geometry=m.geometry}}}}let De={Path:ye,Shape:ae,ShapeGeometry:rn,ExtrudeGeometry:an,TextGeometry:_e,CSG:xe,MAX_CSG_TRIANGLES:ce,MAX_BSP_DEPTH:me,MAX_TEXT_GEOMETRY_CHARS:Ce,materializeDeclarativeGeometry:Xe};return L&&typeof L=="object"&&(L.authorNamespace||(L.authorNamespace={}),Object.assign(L.authorNamespace,De),L.materializeDeclarativeGeometry=Xe),De}var en={name:"cad",onRegister(){Ke(we);let C=le(),L=C.threeNamespace??(typeof globalThis<"u"?globalThis.THREE:void 0);L&&we(L,C)}};Je(en);export{pn as MAX_BSP_DEPTH,xn as MAX_CSG_TRIANGLES,gn as MAX_TEXT_GEOMETRY_CHARS,en as cadPlugin,we as installCadExtension};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Google LLC
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
"use strict";var ThreeLiveCAD=(()=>{var Ce=Object.defineProperty;var vn=Object.getOwnPropertyDescriptor;var Sn=Object.getOwnPropertyNames;var Pn=Object.prototype.hasOwnProperty;var wn=(P,G)=>{for(var I in G)Ce(P,I,{get:G[I],enumerable:!0})},Mn=(P,G,I,ae)=>{if(G&&typeof G=="object"||typeof G=="function")for(let J of Sn(G))!Pn.call(P,J)&&J!==I&&Ce(P,J,{get:()=>G[J],enumerable:!(ae=vn(G,J))||ae.enumerable});return P};var Gn=P=>Mn(Ce({},"__esModule",{value:!0}),P);var Cn={};wn(Cn,{MAX_BSP_DEPTH:()=>on,MAX_CSG_TRIANGLES:()=>sn,MAX_TEXT_GEOMETRY_CHARS:()=>rn,cadPlugin:()=>ke,installCadExtension:()=>ve});var de="__THREE_LIVE_REGISTRY__";function me(){let P=typeof globalThis<"u"?globalThis:{};if(!P[de]){let G={plugins:[],decoders:new Map};try{Object.defineProperty(P,de,{value:G,writable:!1,configurable:!1,enumerable:!1})}catch{P[de]=G}}return P[de]}var Tn=me().plugins;function nn(P){let G=me();G.workerExtensionInstallers||(G.workerExtensionInstallers=[]),G.workerExtensionInstallers.includes(P)||G.workerExtensionInstallers.push(P)}function tn(P){let G=me().plugins;G.some(I=>I.name===P.name)||G.push(P),P.onRegister?.()}var sn=8192,on=512,rn=128;function ve(P,G){if(!P||!P.BufferGeometry)return null;let I=P.Vector2,ae=P.Vector3,J=P.Quaternion,Se=P.Matrix4,cn=P.Color,X=P.BufferAttribute,ne=P.BufferGeometry,an=P.Material,Te=P.MeshStandardMaterial,ye=P.Mesh,ue=8192,fe=512,Le=128;class be{constructor(e){this.currentPoint=new I(0,0),this.segments=[],Array.isArray(e)&&e.length>0&&this.fromPoints(e)}fromPoints(e){if(!e.length)return this;this.moveTo(e[0].x,e[0].y);for(let n=1;n<e.length;n++)this.lineTo(e[n].x,e[n].y);return this}moveTo(e,n){let t=Number(e)||0,o=Number(n)||0;return this.currentPoint.set(t,o),this.segments.push({type:"move",pts:[t,o]}),this}lineTo(e,n){let t=Number(e)||0,o=Number(n)||0;return this.segments.length===0&&this.segments.push({type:"move",pts:[this.currentPoint.x,this.currentPoint.y]}),this.currentPoint.set(t,o),this.segments.push({type:"line",pts:[t,o]}),this}quadraticCurveTo(e,n,t,o){let c=this.currentPoint.x,r=this.currentPoint.y,i=Number(e)||0,h=Number(n)||0,a=Number(t)||0,m=Number(o)||0;return this.segments.length===0&&this.segments.push({type:"move",pts:[c,r]}),this.currentPoint.set(a,m),this.segments.push({type:"quad",pts:[c,r,i,h,a,m]}),this}bezierCurveTo(e,n,t,o,c,r){let i=this.currentPoint.x,h=this.currentPoint.y,a=Number(e)||0,m=Number(n)||0,u=Number(t)||0,l=Number(o)||0,f=Number(c)||0,y=Number(r)||0;return this.segments.length===0&&this.segments.push({type:"move",pts:[i,h]}),this.currentPoint.set(f,y),this.segments.push({type:"cubic",pts:[i,h,a,m,u,l,f,y]}),this}absarc(e,n,t,o,c,r=!1){return this.absellipse(e,n,t,t,o,c,r,0)}arc(e,n,t,o,c,r=!1){return this.absarc(this.currentPoint.x+(Number(e)||0),this.currentPoint.y+(Number(n)||0),t,o,c,r)}absellipse(e,n,t,o,c,r,i=!1,h=0){let a=Number(e)||0,m=Number(n)||0,u=Math.max(0,Number(t)||0),l=Math.max(0,Number(o)||0),f=Number(c)||0,y=Number(r)||0,b=i?1:0,x=Number(h)||0;this.segments.push({type:"arc",pts:[a,m,u,l,f,y,b,x]});let p=Math.cos(x),v=Math.sin(x),S=u*Math.cos(y),d=l*Math.sin(y);return this.currentPoint.set(a+S*p-d*v,m+S*v+d*p),this}ellipse(e,n,t,o,c,r,i=!1,h=0){return this.absellipse(this.currentPoint.x+(Number(e)||0),this.currentPoint.y+(Number(n)||0),t,o,c,r,i,h)}closePath(){if(this.segments.length>0){let e=this.segments[0],n=0,t=0;if(e.type==="arc"){let o=e.pts[0],c=e.pts[1],r=e.pts[2],i=e.pts[3],h=e.pts[4],a=e.pts[7],m=Math.cos(a),u=Math.sin(a),l=r*Math.cos(h),f=i*Math.sin(h);n=o+l*m-f*u,t=c+l*u+f*m}else n=e.pts[0],t=e.pts[1];Math.hypot(this.currentPoint.x-n,this.currentPoint.y-t)>1e-6&&this.lineTo(n,t)}return this}getPoints(e=12){let n=Math.max(1,Math.min(128,Math.floor(Number(e)||12))),t=[],o=(c,r)=>{if(t.length>0){let i=t[t.length-1];if(Math.hypot(i.x-c,i.y-r)<1e-6)return}t.push(new I(c,r))};for(let c of this.segments){let r=c.pts;if(c.type==="move"||c.type==="line")o(r[0],r[1]);else if(c.type==="quad"){let i=r[0],h=r[1],a=r[2],m=r[3],u=r[4],l=r[5];o(i,h);for(let f=1;f<=n;f++){let y=f/n,b=1-y;o(b*b*i+2*b*y*a+y*y*u,b*b*h+2*b*y*m+y*y*l)}}else if(c.type==="cubic"){let i=r[0],h=r[1],a=r[2],m=r[3],u=r[4],l=r[5],f=r[6],y=r[7];o(i,h);for(let b=1;b<=n;b++){let x=b/n,p=1-x,v=p*p,S=x*x;o(v*p*i+3*v*x*a+3*p*S*u+S*x*f,v*p*h+3*v*x*m+3*p*S*l+S*x*y)}}else if(c.type==="arc"){let i=r[0],h=r[1],a=r[2],m=r[3],u=r[4],l=r[5],f=r[6]!==0,y=r[7],b=Math.PI*2,x=l-u,p=Math.abs(x)<1e-9;for(;x<0;)x+=b;for(;x>b;)x-=b;x<1e-9&&(x=p?0:b),f&&!p&&(x=x===b?-b:x-b);let v=Math.cos(y),S=Math.sin(y),d=Math.max(2,n);for(let T=0;T<=d;T++){let L=T/d,z=u+L*x,k=a*Math.cos(z),C=m*Math.sin(z);o(i+k*v-C*S,h+k*S+C*v)}}}if(t.length>2){let c=t[0],r=t[t.length-1];Math.hypot(c.x-r.x,c.y-r.y)<1e-6&&t.pop()}return t}getSpacedPoints(e=12){return this.getPoints(e)}}class le extends be{constructor(e){super(e),this.holes=[]}extractPoints(e=12){return{shape:this.getPoints(e),holes:this.holes.map(n=>n.getPoints(e))}}}function xe(s){let e=0,n=s.length;for(let t=0,o=n-1;t<n;o=t++)e+=s[o].x*s[t].y-s[t].x*s[o].y;return e*.5}function un(s,e,n,t,o,c,r,i){let h=r-n,a=i-t,m=o-n,u=c-t,l=s-n,f=e-t,y=h*h+a*a,b=h*m+a*u,x=h*l+a*f,p=m*m+u*u,v=m*l+u*f,S=y*p-b*b;if(Math.abs(S)<1e-12)return!1;let d=1/S,T=(p*x-b*v)*d,L=(y*v-b*x)*d;return T>=-1e-7&&L>=-1e-7&&T+L<=1+1e-7}function Re(s,e){let n=s.slice();xe(n)<0&&n.reverse();let t=n.map(r=>new I(r.x,r.y)),o=n.map((r,i)=>i),c=[];for(let r of e){if(!r||r.length<3)continue;let i=r.slice();xe(i)>0&&i.reverse();let h=[],a=-1/0,m=0;for(let u=0;u<i.length;u++){let l=i[u],f=t.length;t.push(new I(l.x,l.y)),h.push(f),l.x>a&&(a=l.x,m=u)}c.push({pts:i,indices:h,maxX:a,maxIdx:m})}c.sort((r,i)=>i.maxX-r.maxX);for(let r of c){let i=r.pts[r.maxIdx].x,h=r.pts[r.maxIdx].y,a=0,m=1/0;for(let l=0;l<o.length;l++){let f=t[o[l]],y=Math.hypot(f.x-i,f.y-h)+(f.x>=i?0:1e3);y<m&&(m=y,a=l)}let u=[];for(let l=0;l<=a;l++)u.push(o[l]);for(let l=0;l<=r.indices.length;l++){let f=r.indices[(r.maxIdx+l)%r.indices.length];u.push(f)}for(let l=a;l<o.length;l++)u.push(o[l]);o=u}return{merged:o.map(r=>t[r]),mergedIndices:o,allVertices:t}}function Ee(s,e){let n=[],t=s.slice();if(t.length<3)return n;let o=t.length*t.length+64,c=0;for(;t.length>2&&o-- >0;){let r=t.length,i=t[(c+r-1)%r],h=t[c%r],a=t[(c+1)%r],m=e[i],u=e[h],l=e[a];if((u.x-m.x)*(l.y-m.y)-(u.y-m.y)*(l.x-m.x)>1e-9){let y=!0;for(let b=0;b<r;b++){let x=t[b];if(x===i||x===h||x===a)continue;let p=e[x];if(!(Math.hypot(p.x-m.x,p.y-m.y)<1e-6||Math.hypot(p.x-u.x,p.y-u.y)<1e-6||Math.hypot(p.x-l.x,p.y-l.y)<1e-6)&&un(p.x,p.y,m.x,m.y,u.x,u.y,l.x,l.y)){y=!1;break}}if(y){n.push([i,h,a]),t.splice(c%r,1),c=0;continue}}c++,c>=r*2&&(n.push([i,h,a]),t.splice(c%r,1),c=0)}return n}class ln extends ne{constructor(e=new le,n=12){super();let t=Array.isArray(e)?e:[e],o=[],c=[],r=[],i=[];for(let h of t){if(!(h instanceof be))continue;let a=h instanceof le?h.extractPoints(n):{shape:h.getPoints(n),holes:[]};if(a.shape.length<3)continue;let{mergedIndices:m,allVertices:u}=Re(a.shape,a.holes),l=Ee(m,u),f=o.length/3,y=1/0,b=1/0,x=-1/0,p=-1/0;for(let d of u)d.x<y&&(y=d.x),d.y<b&&(b=d.y),d.x>x&&(x=d.x),d.y>p&&(p=d.y);let v=Math.max(1e-6,x-y),S=Math.max(1e-6,p-b);for(let d of u)o.push(d.x,d.y,0),c.push(0,0,1),r.push((d.x-y)/v,(d.y-b)/S);for(let[d,T,L]of l)i.push(f+d,f+T,f+L)}this.setAttribute("position",new X(new Float32Array(o),3)),this.setAttribute("normal",new X(new Float32Array(c),3)),this.setAttribute("uv",new X(new Float32Array(r),2)),this.setIndex(i)}}function hn(s){let e=s.length,n=[];for(let t=0;t<e;t++){let o=s[(t+e-1)%e],c=s[t],r=s[(t+1)%e],i=c.x-o.x,h=c.y-o.y,a=Math.hypot(i,h)||1;i/=a,h/=a;let m=r.x-c.x,u=r.y-c.y,l=Math.hypot(m,u)||1;m/=l,u/=l;let f=h,y=-i,b=u,x=-m,p=f+b,v=y+x,S=Math.hypot(p,v);if(S>1e-6){p/=S,v/=S;let d=Math.max(.35,p*f+v*y);n.push(new I(p/d,v/d))}else n.push(new I(f,y))}return n}class mn extends ne{constructor(e=new le,n={}){super();let t=Array.isArray(e)?e:[e],o=Math.max(1,Math.min(64,Math.floor(Number(n.curveSegments??12)))),c=Number.isFinite(Number(n.depth??n.amount))?Number(n.depth??n.amount):1,r=Math.max(1,Math.min(32,Math.floor(Number(n.steps??1)))),i=!!(n.bevelEnabled??!1),h=i?Math.max(0,Number(n.bevelThickness??.06)):0,a=i?Math.max(0,Number(n.bevelSize??h*.8)):0,m=i?Number(n.bevelOffset??0):0,u=i?Math.max(1,Math.min(8,Math.floor(Number(n.bevelSegments??2)))):0,l=[],f=[],y=[],b=[];for(let x of t){if(!(x instanceof be))continue;let p=x instanceof le?x.extractPoints(o):{shape:x.getPoints(o),holes:[]};if(p.shape.length<3)continue;let v=p.shape.slice();xe(v)<0&&v.reverse();let S=[];for(let g of p.holes){if(g.length<3)continue;let w=g.slice();xe(w)>0&&w.reverse(),S.push(w)}let{mergedIndices:d,allVertices:T}=Re(v,S),L=Ee(d,T),z=[v,...S],k=[];for(let g of z){let w=hn(g);for(let M of w)k.push(M)}let C=1/0,V=1/0,D=-1/0,F=-1/0;for(let g of T)g.x<C&&(C=g.x),g.y<V&&(V=g.y),g.x>D&&(D=g.x),g.y>F&&(F=g.y);let _=Math.max(1e-6,D-C),B=Math.max(1e-6,F-V),te=-h,se=c+h,W=l.length/3;for(let g=0;g<T.length;g++){let w=T[g],M=k[g]??new I(0,0),R=w.x+M.x*m,E=w.y+M.y*m;l.push(R,E,te),f.push(0,0,-1),y.push((R-C)/_,(E-V)/B)}for(let[g,w,M]of L)b.push(W+g,W+M,W+w);let j=l.length/3;for(let g=0;g<T.length;g++){let w=T[g],M=k[g]??new I(0,0),R=w.x+M.x*m,E=w.y+M.y*m;l.push(R,E,se),f.push(0,0,1),y.push((R-C)/_,(E-V)/B)}for(let[g,w,M]of L)b.push(j+g,j+w,j+M);let A=[];if(i&&u>0)for(let g=0;g<u;g++){let M=g/u*Math.PI/2;A.push({z:-h*Math.cos(M),expand:m+a*Math.sin(M)})}for(let g=0;g<=r;g++){let w=g/r;A.push({z:w*c,expand:m+a})}if(i&&u>0)for(let g=1;g<=u;g++){let M=g/u*Math.PI/2;A.push({z:c+h*Math.sin(M),expand:m+a*Math.cos(M)})}let O=0;for(let g of z){let w=g.length;for(let M=0;M<A.length-1;M++){let R=A[M],E=A[M+1];for(let N=0;N<w;N++){let Y=(N+1)%w,H=g[N],U=g[Y],$=k[O+N],Q=k[O+Y],Z=H.x+$.x*R.expand,K=H.y+$.y*R.expand,ee=U.x+Q.x*R.expand,q=U.y+Q.y*R.expand,gn=U.x+Q.x*E.expand,dn=U.y+Q.y*E.expand,Ye=H.x+$.x*E.expand,qe=H.y+$.y*E.expand,We=ee-Z,je=q-K,He=0,Ue=Ye-Z,$e=qe-K,Qe=E.z-R.z,oe=je*Qe-He*$e,re=He*Ue-We*Qe,ie=We*$e-je*Ue,Ge=Math.hypot(oe,re,ie)||1;oe/=Ge,re/=Ge,ie/=Ge;let ce=l.length/3;l.push(Z,K,R.z,ee,q,R.z,gn,dn,E.z,Ye,qe,E.z),f.push(oe,re,ie,oe,re,ie,oe,re,ie,oe,re,ie);let Ze=N/w,Ke=(N+1)/w,Je=M/(A.length-1),en=(M+1)/(A.length-1);y.push(Ze,Je,Ke,Je,Ke,en,Ze,en),b.push(ce,ce+1,ce+2,ce,ce+2,ce+3)}}O+=w}}this.setAttribute("position",new X(new Float32Array(l),3)),this.setAttribute("normal",new X(new Float32Array(f),3)),this.setAttribute("uv",new X(new Float32Array(y),2)),this.setIndex(b)}}function ze(s){return{x:s.x,y:s.y,z:s.z,nx:s.nx,ny:s.ny,nz:s.nz,u:s.u,v:s.v}}function yn(s){return{x:s.x,y:s.y,z:s.z,nx:-s.nx,ny:-s.ny,nz:-s.nz,u:s.u,v:s.v}}function fn(s,e,n){let t=s.nx+(e.nx-s.nx)*n,o=s.ny+(e.ny-s.ny)*n,c=s.nz+(e.nz-s.nz)*n,r=Math.hypot(t,o,c)||1;return{x:s.x+(e.x-s.x)*n,y:s.y+(e.y-s.y)*n,z:s.z+(e.z-s.z)*n,nx:t/r,ny:o/r,nz:c/r,u:s.u+(e.u-s.u)*n,v:s.v+(e.v-s.v)*n}}function Pe(s){if(s.length<3)return null;let e=s[0],n=s[1],t=s[2],o=n.x-e.x,c=n.y-e.y,r=n.z-e.z,i=t.x-e.x,h=t.y-e.y,a=t.z-e.z,m=c*a-r*h,u=r*i-o*a,l=o*h-c*i,f=Math.hypot(m,u,l);if(f<1e-9)return null;m/=f,u/=f,l/=f;let y=m*e.x+u*e.y+l*e.z;return{vertices:s,nx:m,ny:u,nz:l,w:y}}function bn(s){s.vertices.reverse();for(let e=0;e<s.vertices.length;e++)s.vertices[e]=yn(s.vertices[e]);s.nx=-s.nx,s.ny=-s.ny,s.nz=-s.nz,s.w=-s.w}let Ve=1e-5,Ie=0,we=1,pe=2,Ae=3;function Ne(s,e,n,t,o,c,r,i,h){let a=0,m=[];for(let u=0;u<o.vertices.length;u++){let l=o.vertices[u],f=s*l.x+e*l.y+n*l.z-t,y=f<-Ve?pe:f>Ve?we:Ie;a|=y,m.push(y)}switch(a){case Ie:{s*o.nx+e*o.ny+n*o.nz>0?c.push(o):r.push(o);break}case we:i.push(o);break;case pe:h.push(o);break;case Ae:{let u=[],l=[],f=o.vertices.length;for(let y=0;y<f;y++){let b=(y+1)%f,x=m[y],p=m[b],v=o.vertices[y],S=o.vertices[b];if(x!==pe&&u.push(v),x!==we&&l.push(x!==pe?ze(v):v),(x|p)===Ae){let d=S.x-v.x,T=S.y-v.y,L=S.z-v.z,z=s*d+e*T+n*L,k=Math.abs(z)>1e-12?(t-(s*v.x+e*v.y+n*v.z))/z:.5,C=fn(v,S,Math.max(0,Math.min(1,k)));u.push(C),l.push(ze(C))}}if(u.length>=3){let y=Pe(u);y&&i.push(y)}if(l.length>=3){let y=Pe(l);y&&h.push(y)}break}default:break}}class he{constructor(e,n=0){this.nx=0,this.ny=0,this.nz=0,this.w=0,this.hasPlane=!1,this.polygons=[],this.front=null,this.back=null,e&&e.length>0&&this.build(e,n)}invert(){for(let n=0;n<this.polygons.length;n++)bn(this.polygons[n]);this.nx=-this.nx,this.ny=-this.ny,this.nz=-this.nz,this.w=-this.w,this.front&&this.front.invert(),this.back&&this.back.invert();let e=this.front;this.front=this.back,this.back=e}clipPolygons(e,n=0){if(!this.hasPlane||e.length===0||n>=fe)return e.slice();let t=[],o=[];for(let c=0;c<e.length;c++)Ne(this.nx,this.ny,this.nz,this.w,e[c],t,o,t,o);return this.front&&t.length>0&&(t=this.front.clipPolygons(t,n+1)),this.back?o=o.length>0?this.back.clipPolygons(o,n+1):[]:o=[],t.concat(o)}clipTo(e,n=0){this.polygons.length>0&&(this.polygons=e.clipPolygons(this.polygons,0)),n<fe&&(this.front&&this.front.clipTo(e,n+1),this.back&&this.back.clipTo(e,n+1))}allPolygons(e=[]){for(let n=0;n<this.polygons.length;n++)e.push(this.polygons[n]);return this.front&&this.front.allPolygons(e),this.back&&this.back.allPolygons(e),e}build(e,n=0){if(!e.length)return;if(!this.hasPlane){let c=e[0];this.nx=c.nx,this.ny=c.ny,this.nz=c.nz,this.w=c.w,this.hasPlane=!0}if(n>=fe){for(let c=0;c<e.length;c++)this.polygons.push(e[c]);return}let t=[],o=[];for(let c=0;c<e.length;c++)Ne(this.nx,this.ny,this.nz,this.w,e[c],this.polygons,this.polygons,t,o);t.length>0&&(this.front||(this.front=new he),this.front.build(t,n+1)),o.length>0&&(this.back||(this.back=new he),this.back.build(o,n+1))}}function _e(s,e){let n=s.attributes.position;if(!n||n.count===0)return[];let t=s.attributes.normal,o=s.attributes.uv,c=s.index?s.index.array:null,r=Math.floor(c?c.length/3:n.count/3);if(r>ue)throw new RangeError(`SecurityError: CSG input triangle count (${r}) exceeds MAX_CSG_TRIANGLES (${ue})`);let i=e?e.elements:null,h=i?i[0]*(i[5]*i[10]-i[9]*i[6])-i[4]*(i[1]*i[10]-i[9]*i[2])+i[8]*(i[1]*i[6]-i[5]*i[2])<0:!1,a=u=>{let l=n.getX(u),f=n.getY(u),y=n.getZ(u),b=t?t.getX(u):0,x=t?t.getY(u):0,p=t?t.getZ(u):1;if(i){let d=i[0]*l+i[4]*f+i[8]*y+i[12],T=i[1]*l+i[5]*f+i[9]*y+i[13],L=i[2]*l+i[6]*f+i[10]*y+i[14];l=d,f=T,y=L;let z=i[0]*b+i[4]*x+i[8]*p,k=i[1]*b+i[5]*x+i[9]*p,C=i[2]*b+i[6]*x+i[10]*p,V=Math.hypot(z,k,C)||1;b=z/V,x=k/V,p=C/V}let v=o?o.getX(u):0,S=o?o.getY(u):0;return{x:l,y:f,z:y,nx:b,ny:x,nz:p,u:v,v:S}},m=[];for(let u=0;u<r;u++){let l=c?c[u*3]:u*3,f=c?c[u*3+1]:u*3+1,y=c?c[u*3+2]:u*3+2,b=Pe(h?[a(l),a(y),a(f)]:[a(l),a(f),a(y)]);b&&m.push(b)}return m}function xn(s){let e=[],n=[],t=[],o=[];for(let r of s){let i=r.vertices;if(i.length<3)continue;let h=e.length/3;for(let a of i)e.push(a.x,a.y,a.z),n.push(r.nx,r.ny,r.nz),t.push(a.u,a.v);for(let a=1;a<i.length-1;a++)o.push(h,h+a,h+a+1)}let c=new ne;return c.setAttribute("position",new X(new Float32Array(e),3)),c.setAttribute("normal",new X(new Float32Array(n),3)),c.setAttribute("uv",new X(new Float32Array(t),2)),c.setIndex(o),c}function pn(s,e,n){if(s.length+e.length>ue)throw new RangeError(`SecurityError: Combined CSG triangle count (${s.length+e.length}) exceeds MAX_CSG_TRIANGLES (${ue})`);if(s.length===0)return n==="union"?e:[];if(e.length===0)return n==="intersect"?[]:s;let t=new he(s),o=new he(e);return n==="union"?(t.clipTo(o),o.clipTo(t),o.invert(),o.clipTo(t),o.invert(),t.build(o.allPolygons()),t.allPolygons()):n==="subtract"?(t.invert(),t.clipTo(o),o.clipTo(t),o.invert(),o.clipTo(t),o.invert(),t.build(o.allPolygons()),t.invert(),t.allPolygons()):(t.invert(),o.clipTo(t),o.invert(),t.clipTo(o),o.clipTo(t),t.build(o.allPolygons()),t.invert(),t.allPolygons())}function Xe(s,e,n,t=null,o=null){let c=_e(s,t),r=_e(e,o);return xn(pn(c,r,n))}function Me(s,e,n){let t=s instanceof ye||!!s?.isMesh,o=e instanceof ye||!!e?.isMesh,c=t?s.geometry:s,r=o?e.geometry:e,i=null;if(o)if(e.updateMatrix(),t){s.updateMatrix();let u=new Se().makeScale(1/(s.scale.x||1),1/(s.scale.y||1),1/(s.scale.z||1)),l=Math.hypot(s.quaternion.x,s.quaternion.y,s.quaternion.z,s.quaternion.w)||1,f=new Se().compose(new ae(0,0,0),new J(-s.quaternion.x/l,-s.quaternion.y/l,-s.quaternion.z/l,s.quaternion.w/l),new ae(1,1,1)),y=new Se().makeTranslation(-s.position.x,-s.position.y,-s.position.z);i=u.multiply(f).multiply(y).multiply(e.matrix)}else i=e.matrix;let h=Xe(c,r,n,null,i),a=t?s.material:new Te,m=new ye(h,a);return t&&(m.position.copy(s.position),m.quaternion.copy(s.quaternion),m.scale.copy(s.scale),m.name=s.name),m}let ge={toGeometry:Xe,subtract(s,e){return Me(s,e,"subtract")},union(s,e){return Me(s,e,"union")},intersect(s,e){return Me(s,e,"intersect")}},De={0:[[[.15,0],[.85,0],[.85,1],[.15,1],[.15,0]]],1:[[[.3,.8],[.5,1],[.5,0]],[[.2,0],[.8,0]]],2:[[[.15,.8],[.3,1],[.7,1],[.85,.8],[.85,.55],[.15,0],[.85,0]]],3:[[[.15,.85],[.3,1],[.75,1],[.85,.75],[.5,.5],[.85,.25],[.75,0],[.3,0],[.15,.15]]],4:[[[.7,0],[.7,1],[.15,.35],[.9,.35]]],5:[[[.85,1],[.2,1],[.15,.55],[.75,.55],[.85,.3],[.75,0],[.2,0]]],6:[[[.8,.9],[.5,1],[.15,.7],[.15,.15],[.5,0],[.85,.2],[.85,.45],[.5,.55],[.15,.45]]],7:[[[.15,1],[.85,1],[.35,0]]],8:[[[.2,.5],[.15,.75],[.3,1],[.7,1],[.85,.75],[.8,.5],[.2,.5],[.15,.2],[.3,0],[.7,0],[.85,.2],[.8,.5]]],9:[[[.85,.55],[.5,.45],[.15,.55],[.15,.85],[.5,1],[.85,.85],[.85,.2],[.5,0],[.2,.1]]],A:[[[.1,0],[.5,1],[.9,0]],[[.25,.35],[.75,.35]]],B:[[[.15,0],[.15,1],[.7,1],[.85,.75],[.7,.5],[.15,.5]],[[.7,.5],[.85,.25],[.7,0],[.15,0]]],C:[[[.85,.8],[.65,1],[.3,1],[.15,.75],[.15,.25],[.3,0],[.65,0],[.85,.2]]],D:[[[.15,0],[.15,1],[.65,1],[.85,.75],[.85,.25],[.65,0],[.15,0]]],E:[[[.85,1],[.15,1],[.15,0],[.85,0]],[[.15,.5],[.7,.5]]],F:[[[.85,1],[.15,1],[.15,0]],[[.15,.5],[.7,.5]]],G:[[[.85,.8],[.65,1],[.3,1],[.15,.75],[.15,.25],[.3,0],[.85,0],[.85,.45],[.55,.45]]],H:[[[.15,0],[.15,1]],[[.85,0],[.85,1]],[[.15,.5],[.85,.5]]],I:[[[.25,1],[.75,1]],[[.5,1],[.5,0]],[[.25,0],[.75,0]]],J:[[[.8,1],[.8,.25],[.6,0],[.3,0],[.15,.25]]],K:[[[.15,0],[.15,1]],[[.85,1],[.15,.45],[.85,0]]],L:[[[.15,1],[.15,0],[.85,0]]],M:[[[.1,0],[.1,1],[.5,.35],[.9,1],[.9,0]]],N:[[[.15,0],[.15,1],[.85,0],[.85,1]]],O:[[[.3,0],[.7,0],[.85,.25],[.85,.75],[.7,1],[.3,1],[.15,.75],[.15,.25],[.3,0]]],P:[[[.15,0],[.15,1],[.7,1],[.85,.75],[.7,.5],[.15,.5]]],Q:[[[.3,0],[.7,0],[.85,.25],[.85,.75],[.7,1],[.3,1],[.15,.75],[.15,.25],[.3,0]],[[.55,.3],[.9,-.05]]],R:[[[.15,0],[.15,1],[.7,1],[.85,.75],[.7,.5],[.15,.5]],[[.55,.5],[.85,0]]],S:[[[.85,.85],[.65,1],[.3,1],[.15,.75],[.85,.25],[.7,0],[.3,0],[.15,.15]]],T:[[[.1,1],[.9,1]],[[.5,1],[.5,0]]],U:[[[.15,1],[.15,.25],[.35,0],[.65,0],[.85,.25],[.85,1]]],V:[[[.1,1],[.5,0],[.9,1]]],W:[[[.05,1],[.25,0],[.5,.65],[.75,0],[.95,1]]],X:[[[.15,1],[.85,0]],[[.85,1],[.15,0]]],Y:[[[.15,1],[.5,.5],[.85,1]],[[.5,.5],[.5,0]]],Z:[[[.15,1],[.85,1],[.15,0],[.85,0]]],".":[[[.45,0],[.55,0],[.55,.12],[.45,.12],[.45,0]]],",":[[[.5,.15],[.4,-.1]]],":":[[[.45,.1],[.55,.1]],[[.45,.7],[.55,.7]]],"-":[[[.2,.5],[.8,.5]]],"+":[[[.2,.5],[.8,.5]],[[.5,.2],[.5,.8]]],"=":[[[.2,.35],[.8,.35]],[[.2,.65],[.8,.65]]],"/":[[[.2,0],[.8,1]]],"!":[[[.5,1],[.5,.28]],[[.5,.1],[.5,0]]],"?":[[[.2,.8],[.35,1],[.7,1],[.85,.75],[.5,.45],[.5,.28]],[[.5,.1],[.5,0]]],"(":[[[.65,1],[.35,.65],[.35,.35],[.65,0]]],")":[[[.35,1],[.65,.65],[.65,.35],[.35,0]]],"%":[[[.2,0],[.8,1]],[[.2,.8],[.35,.8],[.35,.95],[.2,.95],[.2,.8]],[[.65,.05],[.8,.05],[.8,.2],[.65,.2],[.65,.05]]],"#":[[[.32,0],[.32,1]],[[.68,0],[.68,1]],[[.12,.35],[.88,.35]],[[.12,.65],[.88,.65]]],$:[[[.8,.8],[.6,.92],[.3,.92],[.18,.72],[.82,.28],[.7,.08],[.4,.08],[.2,.2]],[[.5,1],[.5,0]]],_:[[[.1,0],[.9,0]]],"[":[[[.65,1],[.3,1],[.3,0],[.65,0]]],"]":[[[.35,1],[.7,1],[.7,0],[.35,0]]],"<":[[[.75,.85],[.25,.5],[.75,.15]]],">":[[[.25,.85],[.75,.5],[.25,.15]]],"*":[[[.5,.2],[.5,.8]],[[.2,.35],[.8,.65]],[[.2,.65],[.8,.35]]],"\\":[[[.2,1],[.8,0]]]};class Fe extends ne{constructor(e="",n={}){super();let t=String(e??"").slice(0,Le),o=Math.max(.005,Math.min(100,Number(n.size??.2))),c=!!(n.bevelEnabled??!1),r=c?Math.max(0,Math.min(2,Number(n.bevelThickness??o*.04))):0,i=c?Math.max(0,Math.min(2,Number(n.bevelSize??o*.03))):0,h=Math.max(.001,Math.min(20,Number(n.depth??n.height??o*.2)))+r*2,a=o*.085+i,m=o*.68,u=o*.82,l=[],f=[],y=[],b=[],x=(S,d,T,L,z,k,C)=>{let V=T-S,D=L-d,F=Math.hypot(V,D),_=1,B=0;F>1e-6&&(_=V/F,B=D/F);let te=-B*z,se=_*z,W=_*z*.6,j=B*z*.6,A=S-W+te,O=d-j+se,g=S-W-te,w=d-j-se,M=T+W-te,R=L+j-se,E=T+W+te,N=L+j+se,Y=(H,U,$,Q,Z,K,ee)=>{let q=l.length/3;l.push(H[0],H[1],H[2],U[0],U[1],U[2],$[0],$[1],$[2],Q[0],Q[1],Q[2]),f.push(Z,K,ee,Z,K,ee,Z,K,ee,Z,K,ee),y.push(0,0,1,0,1,1,0,1),b.push(q,q+1,q+2,q,q+2,q+3)};Y([A,O,C],[g,w,C],[M,R,C],[E,N,C],0,0,1),Y([g,w,k],[A,O,k],[E,N,k],[M,R,k],0,0,-1),Y([A,O,k],[g,w,k],[g,w,C],[A,O,C],-_,-B,0),Y([M,R,k],[E,N,k],[E,N,C],[M,R,C],_,B,0),Y([g,w,k],[M,R,k],[M,R,C],[g,w,C],-B,_,0),Y([E,N,k],[A,O,k],[A,O,C],[E,N,C],B,-_,0)},p=0,v=0;for(let S=0;S<t.length;S++){let d=t[S];if(d===`
|
|
18
|
+
`){p=0,v-=o*1.35;continue}if(d===" "){p+=u*.75;continue}let T=d.toUpperCase(),L=d!==T&&d>="a"&&d<="z",z=De[T]??De["?"],k=L?o*.76:o,C=L?m*.88:m;for(let V of z)for(let D=0;D<V.length-1;D++){let F=V[D],_=V[D+1];x(p+F[0]*C,v+F[1]*k,p+_[0]*C,v+_[1]*k,a,-h*.5,h*.5)}p+=L?u*.88:u}this.setAttribute("position",new X(new Float32Array(l),3)),this.setAttribute("normal",new X(new Float32Array(f),3)),this.setAttribute("uv",new X(new Float32Array(y),2)),this.setIndex(b),n.center!==!1?this.center():this.computeBoundingBox()}}function Be(s){if(!s)return;let e=s,n=s.userData?.xr?.text;if(n!=null&&n!==!1){let o=e.geometry?.attributes?.position;if(!o||o.count===0){let c="",r=.08,i=.015,h;if(typeof n=="string"||typeof n=="number")c=String(n);else if(typeof n=="object"){let a=n;c=String(a.text??a.value??""),a.size!==void 0&&(r=Number(a.size)||.08),(a.depth!==void 0||a.height!==void 0)&&(i=Number(a.depth??a.height)||r*.2),(typeof a.color=="string"||typeof a.color=="number")&&(h=a.color)}c.trim().length>0&&(e.geometry=new Fe(c,{size:r,depth:i}),e.material instanceof an?h!==void 0&&s.userData._autoTextColorApplied!==!0&&(e.material.color=new cn(h),s.userData._autoTextColorApplied=!0):e.material=new Te({color:h??16317180}))}}let t=s.userData?.csg;if(t&&typeof t=="object"&&s.userData._csgApplied!==!0&&e.geometry instanceof ne&&e.geometry.attributes.position?.count>0){s.userData._csgApplied=!0;let o=Array.isArray(t)?t:[t];for(let c of o){if(!c||typeof c!="object")continue;let r=c,i=String(r.op??r.operation??"subtract"),h=i==="union"||i==="intersect"?i:"subtract",a=r.target??r.mesh??r.geometry;if(a instanceof ye||a instanceof ne){let m=h==="union"?ge.union(e,a):h==="intersect"?ge.intersect(e,a):ge.subtract(e,a);e.geometry=m.geometry}}}}let Oe={Path:be,Shape:le,ShapeGeometry:ln,ExtrudeGeometry:mn,TextGeometry:Fe,CSG:ge,MAX_CSG_TRIANGLES:ue,MAX_BSP_DEPTH:fe,MAX_TEXT_GEOMETRY_CHARS:Le,materializeDeclarativeGeometry:Be};return G&&typeof G=="object"&&(G.authorNamespace||(G.authorNamespace={}),Object.assign(G.authorNamespace,Oe),G.materializeDeclarativeGeometry=Be),Oe}var ke={name:"cad",onRegister(){nn(ve);let P=me(),G=P.threeNamespace??(typeof globalThis<"u"?globalThis.THREE:void 0);G&&ve(G,P)}};tn(ke);return Gn(Cn);})();
|