shop-components 0.4.8 → 0.4.9
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.
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ColorRepresentation, Object3D, Vector3,
|
|
1
|
+
import { Camera, ColorRepresentation, Object3D, Ray, Vector3, Intersection } from "three";
|
|
2
2
|
export interface LaserEmitter2DParams {
|
|
3
3
|
initialAngle?: number;
|
|
4
4
|
fov?: number;
|
|
@@ -7,42 +7,76 @@ export interface LaserEmitter2DParams {
|
|
|
7
7
|
color?: ColorRepresentation;
|
|
8
8
|
lineWidth?: number;
|
|
9
9
|
plane?: 'xy' | 'xz' | 'yz';
|
|
10
|
-
|
|
11
|
-
glowIntensity?: number;
|
|
12
|
-
fadeTime?: number;
|
|
10
|
+
clockwise?: boolean;
|
|
13
11
|
trailSegments?: number;
|
|
12
|
+
collisionTargets?: Object3D[];
|
|
13
|
+
camera?: Camera;
|
|
14
|
+
}
|
|
15
|
+
export interface LaserHitInfo {
|
|
16
|
+
hit: boolean;
|
|
17
|
+
point?: Vector3;
|
|
18
|
+
distance?: number;
|
|
19
|
+
object?: Object3D;
|
|
20
|
+
intersection?: Intersection;
|
|
14
21
|
}
|
|
15
22
|
export declare class LaserEmitter2D extends Object3D {
|
|
16
23
|
private params;
|
|
17
|
-
private laserLine;
|
|
18
|
-
private laserMaterial;
|
|
19
|
-
private laserGeometry;
|
|
20
24
|
private glowLine;
|
|
21
25
|
private glowMaterial;
|
|
22
26
|
private trailLines;
|
|
23
27
|
private trailGeometry;
|
|
24
28
|
private trailMaterial;
|
|
25
|
-
private
|
|
29
|
+
private sweepMesh;
|
|
30
|
+
private sweepGeometry;
|
|
31
|
+
private sweepMaterial;
|
|
32
|
+
private sweepBorder;
|
|
33
|
+
private sweepBorderGeometry;
|
|
34
|
+
private sweepBorderMaterial;
|
|
35
|
+
private sweepBorderGlow;
|
|
36
|
+
private sweepBorderGlowMaterial;
|
|
37
|
+
private sweepBorderPositions;
|
|
38
|
+
private sweepBorderPulseSpeed;
|
|
26
39
|
private currentTime;
|
|
27
40
|
private currentAngleOffset;
|
|
28
|
-
private scanDirection;
|
|
29
41
|
private _color;
|
|
42
|
+
private raycaster;
|
|
43
|
+
private collisionTargets;
|
|
44
|
+
private _camera;
|
|
45
|
+
private _currentHitInfo;
|
|
46
|
+
private segmentDistances;
|
|
47
|
+
private lastCollisionUpdateTime;
|
|
48
|
+
private collisionUpdateInterval;
|
|
49
|
+
private collisionCache;
|
|
50
|
+
private anglePrecision;
|
|
51
|
+
private cacheValid;
|
|
30
52
|
constructor(options?: LaserEmitter2DParams);
|
|
31
|
-
private
|
|
53
|
+
private createSweepMesh;
|
|
54
|
+
private updateSweepBorderGlowStyle;
|
|
55
|
+
private updateSweepMeshPositions;
|
|
56
|
+
private getDirectionFromAngle;
|
|
32
57
|
private getEndPointFromAngle;
|
|
58
|
+
private checkCollision;
|
|
33
59
|
private getSegmentIndex;
|
|
60
|
+
private getAngleFromOffset;
|
|
61
|
+
clearCache(): void;
|
|
34
62
|
private getAngleFromSegment;
|
|
35
63
|
private initTrailPositions;
|
|
64
|
+
private updateTrailPositions;
|
|
36
65
|
private updateLaserPosition;
|
|
37
|
-
private
|
|
66
|
+
private updateSweepRange;
|
|
38
67
|
update(deltaTime: number): void;
|
|
39
68
|
reset(): void;
|
|
40
69
|
setColor(color: ColorRepresentation): void;
|
|
41
70
|
setDistance(distance: number): void;
|
|
42
71
|
setFov(fov: number): void;
|
|
43
72
|
setRotationSpeed(speed: number): void;
|
|
44
|
-
setFadeTime(time: number): void;
|
|
45
73
|
setInitialAngle(angle: number): void;
|
|
74
|
+
setCollisionTargets(targets: Object3D[]): void;
|
|
75
|
+
addCollisionTarget(target: Object3D): void;
|
|
76
|
+
removeCollisionTarget(target: Object3D): void;
|
|
77
|
+
clearCollisionTargets(): void;
|
|
78
|
+
getHitInfo(): LaserHitInfo;
|
|
79
|
+
setCamera(camera: Camera): void;
|
|
46
80
|
getCurrentDirection(): Vector3;
|
|
47
81
|
getRay(): Ray;
|
|
48
82
|
getEndPoint(): Vector3;
|
package/dist/shop-components.cjs
CHANGED
|
@@ -3924,7 +3924,7 @@ vec3 texelOld = texture2D(previousShadowMap, vUv).rgb;
|
|
|
3924
3924
|
// Combine
|
|
3925
3925
|
gl_FragColor = vec4(uColor, alpha * fade * uOpacity);
|
|
3926
3926
|
}
|
|
3927
|
-
`});super(s,a),this.position.z=-.02}}const Sc="https://cdn2.seer-group.com/libs/hdr/aristea_wreck_512.hdr",Mc="https://cdn2.seer-group.com/libs/hdr/lightroom_14b_512.hdr",Cc="https://cdn2.seer-group.com/libs/fonts.type.json",Rc=new hn.Font(Cc);class as{constructor(e){var t;this._props=e,this.name="",this._defaults={color:""},this.color="",this.name=this._props.name,this.color=this._defaults.color="#"+((t=e.target.color)==null?void 0:t.getHexString())}change(e){var t;this.color=e,(t=this._props.target.color)==null||t.set(e)}reset(){this.change(this._defaults.color)}}var Jr=(n=>(n[n.DEFAULT=0]="DEFAULT",n[n.CAN_INSTALL=1]="CAN_INSTALL",n))(Jr||{});const vr=.15;f.Object3D.DEFAULT_UP.set(0,0,1);let ot,ci=0,ls=0;const Ic=()=>{ot=void 0,ci=0,ls=0},Dc=new f.MeshBasicMaterial({colorWrite:!1});class Lc{constructor(e){this.props=e,this.stats=new Pt,this.scene=new f.Scene,this.overlayScene=new f.Scene,this.renderer=new f.WebGLRenderer({antialias:!0,alpha:!0,logarithmicDepthBuffer:!0,powerPreference:"high-performance",preserveDrawingBuffer:!0}),this.css2dRenderer=new ve.CSS2DRenderer,this.mousePos=new f.Vector2,this.mouseCoord=new f.Vector2,this.offset=new f.Vector2,this.size=new f.Vector2,this.amr=new Gr({showSizeBox:!0,showController:!0}),this._selectedForOutline=[],this._clock=new f.Clock(!0),this._uiHiddenTime=this._clock.getElapsedTime(),this.camera=new f.PerspectiveCamera(39.6,window.innerWidth/window.innerHeight,.1,1e4),this.d=2,this.orthographicCamera=new f.OrthographicCamera(-this.d*(window.innerWidth/window.innerHeight),this.d*(window.innerWidth/window.innerHeight),this.d,-this.d,.1,1e3),this._axisMoving=!1,this._container=new f.Group,this._raycaster=new f.Raycaster,this._selected=[],this._pointerDownTimeout=0,this._dragging=!1,this.maxSample=1024*2,this.sampleCount=0,this._usePathTracing=!1,this._fpsCache=[],this._fpsCacheMax=20,this._emitter=new mt,this.sound=new Na,this._rafId=null,this._destroyed=!1,this._ground=new f.Mesh(new f.PlaneGeometry(100,100),new f.MeshPhysicalMaterial({color:new f.Color("#eee"),metalness:.4,roughness:.1,clearcoat:1,clearcoatRoughness:.1})),this._sciFiGrid=new Tc(18,40),this._amrRender=new f.WebGLRenderTarget(1024,1024,{format:f.RGBAFormat,type:f.UnsignedByteType,colorSpace:f.SRGBColorSpace,samples:8}),this._lastTarget=new f.Vector3,this._shadowMode=!1,this.addEventListener=this._emitter.on.bind(this._emitter),this.removeEventListener=this._emitter.on.bind(this._emitter),this._showSlots=!0,this._showSize=!0,this._showControls=!0,this._drag=c=>{this._dragging=!0,this._pointermove(c)},this._dragend=c=>{this._dragging=!1},this._pointermove=c=>{if(this._pointerDownTimeout)return clearTimeout(this._pointerDownTimeout),this._pointerDownTimeout=0;let{top:u,left:d}=this.renderer.domElement.getBoundingClientRect();this.offset.set(d,u),this.mousePos.set(c.clientX-d,c.clientY-u),this.mouseCoord.set((c.clientX-d)/this.size.x*2-1,-((c.clientY-u)/this.size.y)*2+1),this._raycaster.setFromCamera(this.mouseCoord,this.camera)},this._pointerdown=c=>{const u=()=>{this.amr.slots.forEach(r=>r.selected=!1);const p=this._raycaster.intersectObjects(this.amr.slots,!1)[0];p&&this.amr.slots.forEach(r=>{r.traverse(l=>{l==p.object||(r.deviceSelected=!1)})}),this._pointerDownTimeout=0};this._pointerDownTimeout=window.setTimeout(u,200)},this._detectTrackpad=()=>{ot||typeof ot<"u"||(ci===0&&(ls=performance.now()),ci++,performance.now()-ls>66&&(ci>5?ot=!0:ot=!1,ot?this.controls.zoomSpeed=.2:this.controls.zoomSpeed=1,setTimeout(Ic,2e3)))},this.debounceForkHeightChange=Qa(()=>{var c;(c=this._progressShadow)==null||c.recalculate()},300),this.focusObjects=(c,u)=>{var X;if(!c.length){this.fit();return}this.scene.updateMatrixWorld(!0),this._focusRestoreView=void 0,(X=this._fitAnimation)==null||X.stop();const d=new f.Box3,p=new f.Box3,r=new f.Vector3,l=new f.Vector3,h=new f.Vector3,g=new f.Vector3,_=U=>{U.geometry&&(U.geometry.boundingBox||U.geometry.computeBoundingBox(),p.copy(U.geometry.boundingBox).applyMatrix4(U.matrixWorld),p.isEmpty()||d.union(p))},m=U=>{var bs,As;const G=U.geometry,ne=(bs=G==null?void 0:G.attributes)==null?void 0:bs.position;if(!ne){_(U);return}const te=((As=G.morphAttributes)==null?void 0:As.position)||[],ws=U.morphTargetInfluences||[],en=te.length>0&&ws.length>0;for(let Se=0;Se<ne.count;Se++){if(r.set(ne.getX(Se),ne.getY(Se),ne.getZ(Se)),en){l.set(0,0,0);let yi=0;for(let Ge=0;Ge<te.length;Ge++){const Ot=ws[Ge]||0;Ot&&(yi+=Ot,h.set(te[Ge].getX(Se),te[Ge].getY(Se),te[Ge].getZ(Se)),G.morphTargetsRelative,l.addScaledVector(h,Ot))}G.morphTargetsRelative?r.add(l):yi>0&&(r.multiplyScalar(1-yi),r.add(l))}g.copy(r).applyMatrix4(U.matrixWorld),d.expandByPoint(g)}};if(c.forEach(U=>{U.traverse(G=>{if(G.visible){if(G instanceof f.Mesh){m(G);return}(G.isPoint||G.isLine)&&_(G)}})}),d.isEmpty())return;const v=new f.Vector3;d.getCenter(v);const y=new f.Vector3;d.getSize(y);const x=v.clone();this._lastTarget.copy(x);let w;u?w=u.clone().normalize().negate():w=this.camera.position.clone().sub(this.controls.target).normalize();const b=y.clone().multiplyScalar(.5),A=[new f.Vector3(b.x,b.y,b.z),new f.Vector3(b.x,b.y,-b.z),new f.Vector3(b.x,-b.y,b.z),new f.Vector3(b.x,-b.y,-b.z),new f.Vector3(-b.x,b.y,b.z),new f.Vector3(-b.x,b.y,-b.z),new f.Vector3(-b.x,-b.y,b.z),new f.Vector3(-b.x,-b.y,-b.z)],S=new f.Vector3(0,1,0);Math.abs(w.dot(S))>.99&&S.set(0,0,1);const C=new f.Vector3().crossVectors(w,S).normalize(),M=new f.Vector3().crossVectors(C,w).normalize();let I=0;A.forEach(U=>{const G=U.dot(C),ne=U.dot(M),te=Math.sqrt(G*G+ne*ne);I=Math.max(I,te)}),I=I/2+.4;const D=this.camera.fov*Math.PI/180,T=2*Math.atan(Math.tan(D/2)*this.camera.aspect),R=I/Math.tan(T/2),L=I/Math.tan(D/2),F=Math.max(R,L),E=v.clone().add(w.multiplyScalar(F)),z=this.camera.position.clone(),N=this.controls.target.clone();let j=500;const Z=z.distanceTo(E)+N.distanceTo(x);Z>.001&&(j=Math.min(1e3,Math.max(450,Z*45))),this._animateCamera(z,E,N,x,j)},this.focusSlots=c=>{var M,I;if(this.amr.slots.forEach(D=>{D.focused=!1,D.hide()}),!c.length)if(this._lastTarget.set(0,0,this._lastTarget.z),this.amr.slots.forEach(D=>{D.show()}),this.shadowMode=!1,this._focusRestoreView){const D=this._focusRestoreView;this._focusRestoreView=void 0;const T=this.camera.position.clone(),R=this.controls.target.clone(),L=D.position.clone(),F=D.target.clone();let E=500;const z=T.distanceTo(L)+R.distanceTo(F);z>.001&&(E=Math.min(1e3,Math.max(450,z*45))),this._animateCamera(T,L,R,F,E,()=>{this.camera.up.copy(D.up)});return}else{this.fit();return}(M=this._fitAnimation)!=null&&M.isPlaying()||this.shadowMode||(this._focusRestoreView={position:this.camera.position.clone(),target:new f.Vector3(0,0,this.controls.target.z),up:this.camera.up.clone()}),(I=this._fitAnimation)==null||I.stop(),this.shadowMode=!0;const u=c.flatMap(D=>{if(D.show(),D.focused=!0,!D.parent)return[];const T=new f.Vector3;return D.parent.getWorldPosition(T),[T]});if(!u.length)return;const d=u.reduce((D,T)=>D.add(T),new f.Vector3).multiplyScalar(1/u.length),p=this.controls.target.clone(),r=this.camera.position.clone().sub(p).normalize();let l=0;for(const D of u){const T=D.clone().sub(d),R=T.dot(r),L=Math.sqrt(Math.max(0,T.lengthSq()-R*R));L>l&&(l=L)}l=l+.4;const h=this.camera.fov*Math.PI/180,g=2*Math.atan(Math.tan(h/2)*this.camera.aspect),_=l/Math.tan(g/2),m=l/Math.tan(h/2),v=Math.max(_,m),y=d.clone(),x=d.clone().add(r.clone().multiplyScalar(v<1?1:v)),w=this.camera.position.clone(),b=p.clone(),A={t:0};let S=500;const C=w.distanceTo(x)+b.distanceTo(y);C>.001&&(S=Math.min(1e3,Math.max(450,C*45))),this._lastTarget=y.clone(),this._fitAnimation=new hi(A).to({t:1},S).easing(Fe.Easing.Quadratic.InOut).onStart(()=>{this.controls.enabled=!1}).onUpdate(()=>{const D=A.t;this.camera.position.lerpVectors(w,x,D),this.controls.target.lerpVectors(b,y,D)}).onComplete(()=>{this.controls.enabled=!0}).start()},this.fit=()=>{this._focusRestoreView=void 0,new f.Box3().setFromObject(this._container);const u=this.amr.sizeBox.size.getSize(new f.Vector3),d=u.clone().multiplyScalar(.5),p=new f.Vector3(0,0,d.z);this._lastTarget.copy(p);let r=d.clone().sub(p);r.lengthSq()<1e-6&&(r=new f.Vector3(1,0,0));const l=r.clone().normalize(),h=u.clone().multiplyScalar(.5),g=[new f.Vector3(h.x,h.y,h.z),new f.Vector3(h.x,h.y,-h.z),new f.Vector3(h.x,-h.y,h.z),new f.Vector3(h.x,-h.y,-h.z),new f.Vector3(-h.x,h.y,h.z),new f.Vector3(-h.x,h.y,-h.z),new f.Vector3(-h.x,-h.y,h.z),new f.Vector3(-h.x,-h.y,-h.z)];let _=0;for(const T of g){const R=T.dot(l),L=Math.sqrt(Math.max(0,T.lengthSq()-R*R));L>_&&(_=L)}_=_*1.05;const m=this.camera.fov*Math.PI/180,v=2*Math.atan(Math.tan(m/2)*this.camera.aspect),y=_/Math.tan(v/2),x=_/Math.tan(m/2),w=Math.max(y,x),b=d.clone();let A=u.z/3;u.z<u.x&&u.z<u.y&&(A=u.x*.8),u.z>u.x&&u.z>u.y&&(A=0),b.z+=A;const S=r.clone().normalize().multiplyScalar(w<1?1:w).add(b);Math.max(u.x*2,5);const C=this.camera.position.clone(),M=this.controls.target.clone();let I=600;const D=C.distanceTo(S)+M.distanceTo(p);D>.001&&(I=Math.min(800,Math.max(650,D*45))),this._animateCamera(C,S,M,p,I,()=>{this.shadowMode||(this._progressShadow.visible=!0,this._progressShadow.isFinished||this._progressShadow.recalculate())}),this.controls.minDistance=Math.max(.2,Math.min(w*.25,w-.1)),this.controls.maxDistance=w*4},this.resize=()=>{var p,r;const c=this.renderer.domElement.parentElement;if(!c)return;c.style.display="flex",this.renderer.domElement.style.width="100%",this.renderer.domElement.style.height="100%",this.renderer.domElement.style.flexGrow="1";const u=c.clientWidth,d=c.clientHeight;this.size.set(u,d),this.camera.aspect=u/d,this.camera.updateProjectionMatrix(),this._amrRender.setSize(u,d),this._updateCamera(),this.css2dRenderer.setSize(u,d),this.renderer.getPixelRatio(),(p=this.pathTracer)==null||p.updateCamera(),this.sampleCount=0,this.renderer.setSize(u,d),(r=this._jumpFlood)==null||r.setSize(u,d)},this.ticker=c=>{if(!this._destroyed){if(this.stats.begin(),this.renderer.domElement.dispatchEvent(new CustomEvent("ticker",{detail:c})),this._rafId=requestAnimationFrame(this.ticker),this.renderer.clear(),this.usePathTracing){this.hideAmrUI(),this.sampleCount<this.maxSample?this.sampleCount++:this.pathTracer.pausePathTracing=!0,this.pathTracer.renderSample();const u=this.renderer.autoClear;this.renderer.autoClear=!1,this.scene.overrideMaterial=Dc,this.renderer.clearDepth(),this.renderer.render(this.scene,this.mainCamera),this.scene.overrideMaterial=null,this.renderer.render(this.overlayScene,this.mainCamera),this.renderer.autoClear=u}else{this._clock.getElapsedTime()-this._uiHiddenTime>.15?this.showControls&&this.amr.controllers.forEach(p=>p.show()):this.amr.controllers.forEach(p=>p.hide());const d=this.stats.fps();if(this.usePathTracing||(this._fpsCache.length>this._fpsCacheMax&&this._fpsCache.shift(),this._fpsCache.push(d)),this.amr.slots.forEach(p=>{this._dragging?p.getCanInstall()&&p.render(this):p.render(this)}),Fe.update(),this.controls.update(),this._progressShadow.update(this.mainCamera),this.css2dRenderer.render(this.scene,this.mainCamera),this.updatePosition(),this.scene.overrideMaterial=null,this.renderer.render(this.scene,this.mainCamera),this._jumpFlood&&this._selectedForOutline.length>0){const p=this.scene.background;this.scene.background=null,this._jumpFlood.render(this._selectedForOutline),this.scene.background=p}}this.stats.end()}},this.stats.showPanel(0),this.hideState(),e.fov&&(this.camera.fov=e.fov,this.camera.updateProjectionMatrix()),kr(He,this.renderer),this._ground.visible=!1,this.controls=new un.OrbitControls(this.camera,this.renderer.domElement),this.controls.enablePan=!0,this.controls.rotateSpeed=this.props.isMobile?.6:.5,this.controls.dampingFactor=vr,this.controls.enableDamping=!0,this.controls.maxDistance=10,this.controls.minDistance=1,this.controls.zoomSpeed=this.props.isMobile?.3:Vr()?.2:1,this._cameraPositionUI=new yc(this.controls),this.renderer.setPixelRatio(window.devicePixelRatio||1),this.renderer.autoClear=!0,this.renderer.toneMapping=f.ACESFilmicToneMapping,this.renderer.toneMappingExposure=1.4,this.renderer.outputColorSpace=f.SRGBColorSpace,this.renderer.localClippingEnabled=!0,this.renderer.shadowMap.enabled=!0,this.css2dRenderer.domElement.style.pointerEvents="none",this.css2dRenderer.domElement.style.position="absolute",this.css2dRenderer.domElement.style.top="0px",this.camera.position.set(10,-10,5),this.camera.lookAt(new f.Vector3);const{tiles:t}=qa();this.pathTracer=new na(this.renderer),this.pathTracer.filterGlossyFactor=.6;let i=window.devicePixelRatio;i<2&&(i=2),this.pathTracer.renderScale=this.props.isMobile?1:i,this.pathTracer.bounces=this.props.isMobile?8:10,this.pathTracer.transmissiveBounces=this.props.isMobile?1:3,this.pathTracer.tiles.set(t,t),this.pathTracer.fadeDuration=0;const s=new pc(e.workerUrl),a=typeof navigator<"u"?navigator.hardwareConcurrency:4;s.maxWorkerCount=a,this.pathTracer.setBVHWorker(s),this.orthographicCamera.left=-20,this.orthographicCamera.right=20,this.orthographicCamera.top=-20,this.orthographicCamera.bottom=20,this._lastTarget=this.controls.target.clone();const o=()=>{let c=this._lastTarget.x,u=this._lastTarget.y;this.controls.target.x=c,this.controls.target.y=u};this.controls.addEventListener("change",()=>{var c;this.sampleCount=0,o(),this._uiHiddenTime=this._clock.getElapsedTime(),this.orthographicCamera.position.copy(this.camera.position),this.orthographicCamera.lookAt(this.controls.target),this.usePathTracing&&(this.pathTracer.pausePathTracing=!1,(c=this.pathTracer)==null||c.updateCamera()),this._updateCamera(),!(Math.abs(this.camera.position.x)<.001||Math.abs(this.camera.position.y)<.001)&&(this._axisMoving||(this.mainCamera=this.camera,this.usePathTracing&&this.generateBVH().then()))}),this._mainCamera=this.camera,this._progressShadow=new gc(this.renderer,this.scene,{size:8,lightCount:e.isMobile?6:12,frames:e.isMobile?80:120,lightRadius:8,ambientWeight:.8}),this._progressShadow.lightOrigin.position.set(3,2.5,6),this._progressShadow.visible=!1,this._container.add(this.amr),this.scene.add(this._container),this.ticker(),this._loadEnv(),this._initEvents(),this.scene.add(this._cameraPositionUI),this._ground.rotateX(-Math.PI/2),this.scene.add(this._ground),this._jumpFlood=new Ac(this.renderer,this.scene,this.camera,{thickness:4,color:"#fff"}),(typeof e.useAxisBall!="boolean"||e.useAxisBall)&&(this._controlsGizmo=new mc(this.controls,{size:160,padding:12,offset:e.axisBallOffset||new f.Vector2(10,10),fontSize:17,bubbleSizePrimary:18,bubbleSizeSecondary:14}),this._controlsGizmo.addListener("axis-select-start",()=>{this._axisMoving=!0,this.mainCamera=this.orthographicCamera,this.usePathTracing&&this.generateBVH().then()}),this._controlsGizmo.addListener("axis-select-end",()=>{this._axisMoving=!1}))}get usePathTracing(){return this._usePathTracing}_clearAmrContent(){const e=this.renderer.getRenderTarget();this.renderer.setRenderTarget(this._amrRender),this.renderer.setClearColor(0,0),this.renderer.clear(!0,!0,!0),this.renderer.setRenderTarget(e)}get shadowMode(){return this._shadowMode}set shadowMode(e){e?(this._progressShadow.visible=!1,this.amr.bodyOpacity=.2):(this._progressShadow.visible=!0,this.amr.bodyOpacity=1,this._progressShadow.isFinished||this._progressShadow.recalculate().then()),this._shadowMode=e}set usePathTracing(e){this._clearAmrContent(),e?(this.renderer.toneMappingExposure=1.8,this.overlayScene.add(this._progressShadow.shadowCatcherMesh),this.amr&&(this.amr.bodyOpacity=1),this.hideAmrUI(),this.pathTracer.renderToCanvas=!0,this.scene.background=null,this._ptEnvMap?(this.scene.environment=this._ptEnvMap,this.pathTracer.updateEnvironment()):new Ss.HDRLoader().load(Mc,t=>{t.mapping=f.EquirectangularReflectionMapping,this._ptEnvMap=t,this.usePathTracing&&(this.scene.environment=t,this.pathTracer.updateEnvironment())})):(this.renderer.toneMappingExposure=1.4,this.scene.add(this._progressShadow.shadowCatcherMesh),this.pathTracer.renderToCanvas=!1,this.amr.logos.forEach(t=>{var i;(i=t.parent)==null||i.add(t.target)}),this.showAmrUI(),this.amr&&this.amr.opacityCache!==void 0?(this.amr.bodyOpacity=this.amr.opacityCache,this.amr.opacityCache=void 0):this.amr&&(this.amr.bodyOpacity=1),this.pathTracer.reset(),this._ground.visible=!1,this._envMap&&(this.scene.background=this._envMap,this.scene.environment=this._envMap)),this._usePathTracing=e,this.controls.dampingFactor=e?1:vr,this.sampleCount=0}get fpsAverage(){return zr(this._fpsCache)}get mainCamera(){return this._mainCamera}set mainCamera(e){this._mainCamera=e,e instanceof f.OrthographicCamera?this.scene.background=null:this.scene.background=this.scene.environment}showState(){this.stats.dom.style.display="block"}hideState(){this.stats.dom.style.display="none"}hideAmrUI(e=!0,t=!0){this.shadowMode||this.amr.slots.forEach(i=>i.hide()),this.amr.sizeBox.hide(e),this.amr.controllers.forEach(i=>i.hide()),t&&this.amr.goods.forEach(i=>i.hide())}showAmrUI(e=!0){this.showSlots&&this.amr.slots.forEach(t=>t.show()),this.showSize&&this.amr.sizeBox.show(e),this.showControls&&this.amr.controllers.forEach(t=>t.show()),this.amr.goods.forEach(t=>t.show())}get showSlots(){return this._showSlots}set showSlots(e){this._showSlots=e,this.amr.slots.forEach(t=>e?t.show():t.hide())}get showSize(){return this._showSize}set showSize(e){this._showSize=e,e?this.amr.sizeBox.show(!0):this.amr.sizeBox.hide(!0)}get showControls(){return this._showControls}set showControls(e){this._showControls=e,this.amr.controllers.forEach(t=>e?t.show():t.hide())}_updateCamera(){const e=this.mainCamera.position.distanceTo(this.controls.target),t=2*Math.tan(this.camera.fov*.5*Math.PI/180)*e,i=this.size.x/this.size.y;this.orthographicCamera.left=-t*i/2,this.orthographicCamera.right=t*i/2,this.orthographicCamera.top=t/2,this.orthographicCamera.bottom=-t/2,this.orthographicCamera.updateProjectionMatrix()}_loadEnv(){new Ss.HDRLoader().load(Sc,t=>{t.mapping=f.EquirectangularReflectionMapping,this._envMap=t,this._usePathTracing||(this.scene.background=t,this.scene.backgroundBlurriness=1,this.scene.backgroundIntensity=1,this.scene.backgroundRotation=new f.Euler(Math.PI/2,0,Math.PI*.98*.8),this.scene.environment=t,this.overlayScene.environment=t,this.scene.environmentRotation=this.scene.backgroundRotation,this.overlayScene.environmentRotation=this.scene.environmentRotation,this.scene.environmentIntensity=1.4,this.overlayScene.environmentIntensity=this.scene.environmentIntensity),this.pathTracer.updateEnvironment()},()=>{},()=>{})}_initEvents(){window.addEventListener("drag",this._drag),window.addEventListener("dragend",this._dragend),document.addEventListener("wheel",this._detectTrackpad),window.addEventListener("pointermove",this._pointermove),this.renderer.domElement.addEventListener("pointerdown",this._pointerdown);const e=this.scene.children.find(t=>t.type==="Mesh");e&&this.select(e)}switchCamera(){this.mainCamera=this.mainCamera===this.camera?this.orthographicCamera:this.camera}toCameraTop(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(0,e+this.controls.target.y,0))}toCameraRight(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(0,this.controls.target.y,e))}toCameraFace(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(e,this.controls.target.y,0))}async generateBVH(){this.pathTracer.pausePathTracing=!1,this.amr.slots.forEach(e=>e.hide()),this.amr&&(this.amr.opacityCache=this.amr.bodyOpacity,this.amr.bodyOpacity=1,this.overlayScene.clear(),this.amr.logos.forEach(e=>{const t=new f.Group;e.target.updateMatrixWorld(!0),t.applyMatrix4(e.target.matrixWorld),t.add(e.target),this.overlayScene.add(t)})),this.usePathTracing=!0,this.pathTracer.setScene(this.scene,this.mainCamera)}async download(e=!1){if(e&&!this.usePathTracing){const t=this._amrRender.width,i=this._amrRender.height,s=new Uint8Array(t*i*4);this.renderer.setRenderTarget(this._amrRender),this.renderer.readRenderTargetPixels(this._amrRender,0,0,t,i,s),this.renderer.setRenderTarget(null);const a=document.createElement("canvas");a.width=t,a.height=i;const o=a.getContext("2d"),c=new ImageData(t,i);for(let u=0;u<i;u++)for(let d=0;d<t;d++){const p=((i-u-1)*t+d)*4,r=(u*t+d)*4;c.data[r]=s[p],c.data[r+1]=s[p+1],c.data[r+2]=s[p+2],c.data[r+3]=s[p+3]}return o.putImageData(c,0,0),a.toDataURL("image/png")}else return new Promise((t,i)=>{this._uiHiddenTime=this._clock.getElapsedTime(),this.hideAmrUI();const s=this.scene.background;this.scene.background=null,setTimeout(()=>{const a=this.renderer.domElement.toDataURL("image/png");return this.scene.background=s,t(a)},this.fpsAverage)})}async captureTriViews(e){var o;const t=(e==null?void 0:e.subject)??this._container;(o=this._progressShadow)==null||o.visible;const i=this.scene.background,s=this.showSize;return new $r({renderer:this.renderer,scene:this.scene,overlayScene:this.overlayScene,subject:t,onBeforeCapture:()=>{this.scene.background=null,this.hideAmrUI(),this.showSize=!1,this.usePathTracing&&(this.usePathTracing=!1),this._progressShadow.visible=!1},onAfterCapture:()=>{this.scene.background=i,this.showAmrUI(),this.showSize=s,this._progressShadow.visible=!0}}).capture(e)}clearAMR(){Ae(this.overlayScene),this.amr.clean(),this.usePathTracing=!1}async exportAMR(){const e=this._container.clone(!0);return e.traverse(t=>{t.dispose&&(t.dispose(),t.removeFromParent())}),await Wr.parseAsync(e,{onlyVisible:!0,binary:!0})}async addAMR(e,t=""){this.amr.init(this),await this.amr.load(e,t),this.amr.addEventListener("fork-height-change",this.debounceForkHeightChange),this.amr.addEventListener("shape-key-changed",(i,s)=>{this.pathTracer.reset(),this.sampleCount=0,this.pathTracer.setScene(this.scene,this.camera),this.overlayScene.traverse(a=>{if(!Object.keys(a.morphTargetDictionary||{}).includes(i))return;let o=s;a.userData[`origin_${i}`]&&(o-=a.userData[`origin_${i}`]);const c=a.morphTargetDictionary[i];a.morphTargetInfluences&&(a.morphTargetInfluences[c]=o),a instanceof f.Mesh&&a.geometry.translate(0,0,1e-5)}),["width","length","liftLength","liftWidth","liftOuterWidth"].includes(i)&&(this._progressShadow.clear(),this._progressShadow.recalculate())})}_animateCamera(e,t,i,s,a,o){var u;const c={t:0};(u=this._fitAnimation)==null||u.stop(),this._fitAnimation=new hi(c).to({t:1},a).easing(Fe.Easing.Quadratic.InOut).onStart(()=>{this.controls.enabled=!1}).onUpdate(()=>{const d=c.t;this.controls.target.lerpVectors(i,s,d);const p=s.clone(),r=e.clone().sub(p),l=t.clone().sub(p),h=r.length(),g=l.length(),_=h+(g-h)*d;let m;if(h>.001&&g>.001){const v=r.clone().normalize(),y=l.clone().normalize(),x=v.angleTo(y);if(x>.001){const w=new f.Vector3().crossVectors(v,y);if(w.lengthSq()>.001){w.normalize();const b=new f.Quaternion().setFromAxisAngle(w,x*d),A=v.clone().applyQuaternion(b);m=p.clone().add(A.multiplyScalar(_))}else m=p.clone().add(v.multiplyScalar(_))}else m=p.clone().add(v.multiplyScalar(_))}else m=e.clone().lerp(t,d);this.camera.position.copy(m),this.camera.lookAt(this.controls.target)}).onComplete(()=>{this.controls.enabled=!0,o==null||o()}).start()}select(e){typeof e=="string"||(Array.isArray(e)?this._selectedForOutline=[...e]:this._selectedForOutline=[e])}appendTo(e){e.append(this.renderer.domElement),e.append(this.stats.dom),e.append(this.css2dRenderer.domElement),this.props.isMobile&&(e.classList.add("is-mobile"),e.style.cssText=`
|
|
3927
|
+
`});super(s,a),this.position.z=-.02}}const Sc="https://cdn2.seer-group.com/libs/hdr/aristea_wreck_512.hdr",Mc="https://cdn2.seer-group.com/libs/hdr/lightroom_14b_512.hdr",Cc="https://cdn2.seer-group.com/libs/fonts.type.json",Rc=new hn.Font(Cc);class as{constructor(e){var t;this._props=e,this.name="",this._defaults={color:""},this.color="",this.name=this._props.name,this.color=this._defaults.color="#"+((t=e.target.color)==null?void 0:t.getHexString())}change(e){var t;this.color=e,(t=this._props.target.color)==null||t.set(e)}reset(){this.change(this._defaults.color)}}var Jr=(n=>(n[n.DEFAULT=0]="DEFAULT",n[n.CAN_INSTALL=1]="CAN_INSTALL",n))(Jr||{});const vr=.15;f.Object3D.DEFAULT_UP.set(0,0,1);let ot,ci=0,ls=0;const Ic=()=>{ot=void 0,ci=0,ls=0},Dc=new f.MeshBasicMaterial({colorWrite:!1});class Lc{constructor(e){this.props=e,this.stats=new Pt,this.scene=new f.Scene,this.overlayScene=new f.Scene,this.renderer=new f.WebGLRenderer({antialias:!0,alpha:!0,logarithmicDepthBuffer:!0,powerPreference:"high-performance",preserveDrawingBuffer:!0}),this.css2dRenderer=new ve.CSS2DRenderer,this.mousePos=new f.Vector2,this.mouseCoord=new f.Vector2,this.offset=new f.Vector2,this.size=new f.Vector2,this.amr=new Gr({showSizeBox:!0,showController:!0}),this._selectedForOutline=[],this._clock=new f.Clock(!0),this._uiHiddenTime=this._clock.getElapsedTime(),this.camera=new f.PerspectiveCamera(39.6,window.innerWidth/window.innerHeight,.1,1e4),this.d=2,this.orthographicCamera=new f.OrthographicCamera(-this.d*(window.innerWidth/window.innerHeight),this.d*(window.innerWidth/window.innerHeight),this.d,-this.d,.1,1e3),this._axisMoving=!1,this._container=new f.Group,this._raycaster=new f.Raycaster,this._selected=[],this._pointerDownTimeout=0,this._dragging=!1,this.maxSample=1024*2,this.sampleCount=0,this._usePathTracing=!1,this._fpsCache=[],this._fpsCacheMax=20,this._emitter=new mt,this.sound=new Na,this._rafId=null,this._destroyed=!1,this._ground=new f.Mesh(new f.PlaneGeometry(100,100),new f.MeshPhysicalMaterial({color:new f.Color("#eee"),metalness:.4,roughness:.1,clearcoat:1,clearcoatRoughness:.1})),this._sciFiGrid=new Tc(18,40),this._amrRender=new f.WebGLRenderTarget(1024,1024,{format:f.RGBAFormat,type:f.UnsignedByteType,colorSpace:f.SRGBColorSpace,samples:8}),this._lastTarget=new f.Vector3,this._shadowMode=!1,this.addEventListener=this._emitter.on.bind(this._emitter),this.removeEventListener=this._emitter.on.bind(this._emitter),this._showSlots=!0,this._showSize=!0,this._showControls=!0,this._drag=c=>{this._dragging=!0,this._pointermove(c)},this._dragend=c=>{this._dragging=!1},this._pointermove=c=>{if(this._pointerDownTimeout)return clearTimeout(this._pointerDownTimeout),this._pointerDownTimeout=0;let{top:u,left:d}=this.renderer.domElement.getBoundingClientRect();this.offset.set(d,u),this.mousePos.set(c.clientX-d,c.clientY-u),this.mouseCoord.set((c.clientX-d)/this.size.x*2-1,-((c.clientY-u)/this.size.y)*2+1),this._raycaster.setFromCamera(this.mouseCoord,this.camera)},this._pointerdown=c=>{const u=()=>{this.amr.slots.forEach(r=>r.selected=!1);const p=this._raycaster.intersectObjects(this.amr.slots,!1)[0];p&&this.amr.slots.forEach(r=>{r.traverse(l=>{l==p.object||(r.deviceSelected=!1)})}),this._pointerDownTimeout=0};this._pointerDownTimeout=window.setTimeout(u,200)},this._detectTrackpad=()=>{ot||typeof ot<"u"||(ci===0&&(ls=performance.now()),ci++,performance.now()-ls>66&&(ci>5?ot=!0:ot=!1,ot?this.controls.zoomSpeed=.2:this.controls.zoomSpeed=1,setTimeout(Ic,2e3)))},this.debounceForkHeightChange=Qa(()=>{var c;(c=this._progressShadow)==null||c.recalculate()},300),this.focusObjects=(c,u)=>{var X;if(!c.length){this.fit();return}this.scene.updateMatrixWorld(!0),this._focusRestoreView=void 0,(X=this._fitAnimation)==null||X.stop();const d=new f.Box3,p=new f.Box3,r=new f.Vector3,l=new f.Vector3,h=new f.Vector3,g=new f.Vector3,_=U=>{U.geometry&&(U.geometry.boundingBox||U.geometry.computeBoundingBox(),p.copy(U.geometry.boundingBox).applyMatrix4(U.matrixWorld),p.isEmpty()||d.union(p))},m=U=>{var bs,As;const G=U.geometry,ne=(bs=G==null?void 0:G.attributes)==null?void 0:bs.position;if(!ne){_(U);return}const te=((As=G.morphAttributes)==null?void 0:As.position)||[],ws=U.morphTargetInfluences||[],en=te.length>0&&ws.length>0;for(let Se=0;Se<ne.count;Se++){if(r.set(ne.getX(Se),ne.getY(Se),ne.getZ(Se)),en){l.set(0,0,0);let yi=0;for(let Ge=0;Ge<te.length;Ge++){const Ot=ws[Ge]||0;Ot&&(yi+=Ot,h.set(te[Ge].getX(Se),te[Ge].getY(Se),te[Ge].getZ(Se)),G.morphTargetsRelative,l.addScaledVector(h,Ot))}G.morphTargetsRelative?r.add(l):yi>0&&(r.multiplyScalar(1-yi),r.add(l))}g.copy(r).applyMatrix4(U.matrixWorld),d.expandByPoint(g)}};if(c.forEach(U=>{U.traverse(G=>{if(G.visible){if(G instanceof f.Mesh){m(G);return}(G.isPoint||G.isLine)&&_(G)}})}),d.isEmpty())return;const v=new f.Vector3;d.getCenter(v);const y=new f.Vector3;d.getSize(y);const x=v.clone();this._lastTarget.copy(x);let w;u?w=u.clone().normalize().negate():w=this.camera.position.clone().sub(this.controls.target).normalize();const b=y.clone().multiplyScalar(.5),A=[new f.Vector3(b.x,b.y,b.z),new f.Vector3(b.x,b.y,-b.z),new f.Vector3(b.x,-b.y,b.z),new f.Vector3(b.x,-b.y,-b.z),new f.Vector3(-b.x,b.y,b.z),new f.Vector3(-b.x,b.y,-b.z),new f.Vector3(-b.x,-b.y,b.z),new f.Vector3(-b.x,-b.y,-b.z)],S=new f.Vector3(0,1,0);Math.abs(w.dot(S))>.99&&S.set(0,0,1);const C=new f.Vector3().crossVectors(w,S).normalize(),M=new f.Vector3().crossVectors(C,w).normalize();let I=0;A.forEach(U=>{const G=U.dot(C),ne=U.dot(M),te=Math.sqrt(G*G+ne*ne);I=Math.max(I,te)}),I=I/2+.4;const D=this.camera.fov*Math.PI/180,T=2*Math.atan(Math.tan(D/2)*this.camera.aspect),R=I/Math.tan(T/2),L=I/Math.tan(D/2),F=Math.max(R,L),E=v.clone().add(w.multiplyScalar(F)),z=this.camera.position.clone(),N=this.controls.target.clone();let j=500;const Z=z.distanceTo(E)+N.distanceTo(x);Z>.001&&(j=Math.min(1e3,Math.max(450,Z*45))),this._animateCamera(z,E,N,x,j)},this.focusSlots=c=>{var M,I;if(this.amr.slots.forEach(D=>{D.focused=!1,D.hide()}),!c.length)if(this._lastTarget.set(0,0,this._lastTarget.z),this.amr.slots.forEach(D=>{D.show()}),this.shadowMode=!1,this._focusRestoreView){const D=this._focusRestoreView;this._focusRestoreView=void 0;const T=this.camera.position.clone(),R=this.controls.target.clone(),L=D.position.clone(),F=D.target.clone();let E=500;const z=T.distanceTo(L)+R.distanceTo(F);z>.001&&(E=Math.min(1e3,Math.max(450,z*45))),this._animateCamera(T,L,R,F,E,()=>{this.camera.up.copy(D.up)});return}else{this.fit();return}(M=this._fitAnimation)!=null&&M.isPlaying()||this.shadowMode||(this._focusRestoreView={position:this.camera.position.clone(),target:new f.Vector3(0,0,this.controls.target.z),up:this.camera.up.clone()}),(I=this._fitAnimation)==null||I.stop(),this.shadowMode=!0;const u=c.flatMap(D=>{if(D.show(),D.focused=!0,!D.parent)return[];const T=new f.Vector3;return D.parent.getWorldPosition(T),[T]});if(!u.length)return;const d=u.reduce((D,T)=>D.add(T),new f.Vector3).multiplyScalar(1/u.length),p=this.controls.target.clone(),r=this.camera.position.clone().sub(p).normalize();let l=0;for(const D of u){const T=D.clone().sub(d),R=T.dot(r),L=Math.sqrt(Math.max(0,T.lengthSq()-R*R));L>l&&(l=L)}l=l+.4;const h=this.camera.fov*Math.PI/180,g=2*Math.atan(Math.tan(h/2)*this.camera.aspect),_=l/Math.tan(g/2),m=l/Math.tan(h/2),v=Math.max(_,m),y=d.clone(),x=d.clone().add(r.clone().multiplyScalar(v<1?1:v)),w=this.camera.position.clone(),b=p.clone(),A={t:0};let S=500;const C=w.distanceTo(x)+b.distanceTo(y);C>.001&&(S=Math.min(1e3,Math.max(450,C*45))),this._lastTarget=y.clone(),this._fitAnimation=new hi(A).to({t:1},S).easing(Fe.Easing.Quadratic.InOut).onStart(()=>{this.controls.enabled=!1}).onUpdate(()=>{const D=A.t;this.camera.position.lerpVectors(w,x,D),this.controls.target.lerpVectors(b,y,D)}).onComplete(()=>{this.controls.enabled=!0}).start()},this.fit=()=>{this._focusRestoreView=void 0,new f.Box3().setFromObject(this._container);const u=this.amr.sizeBox.size.getSize(new f.Vector3),d=u.clone().multiplyScalar(.5),p=new f.Vector3(0,0,d.z);this._lastTarget.copy(p);let r=d.clone().sub(p);r.lengthSq()<1e-6&&(r=new f.Vector3(1,0,0));const l=r.clone().normalize(),h=u.clone().multiplyScalar(.5),g=[new f.Vector3(h.x,h.y,h.z),new f.Vector3(h.x,h.y,-h.z),new f.Vector3(h.x,-h.y,h.z),new f.Vector3(h.x,-h.y,-h.z),new f.Vector3(-h.x,h.y,h.z),new f.Vector3(-h.x,h.y,-h.z),new f.Vector3(-h.x,-h.y,h.z),new f.Vector3(-h.x,-h.y,-h.z)];let _=0;for(const T of g){const R=T.dot(l),L=Math.sqrt(Math.max(0,T.lengthSq()-R*R));L>_&&(_=L)}_=_*1.05;const m=this.camera.fov*Math.PI/180,v=2*Math.atan(Math.tan(m/2)*this.camera.aspect),y=_/Math.tan(v/2),x=_/Math.tan(m/2),w=Math.max(y,x),b=d.clone();let A=u.z/3;u.z<u.x&&u.z<u.y&&(A=u.x*.8),u.z>u.x&&u.z>u.y&&(A=0),b.z+=A;const S=r.clone().normalize().multiplyScalar(w<1?1:w).add(b);Math.max(u.x*2,5);const C=this.camera.position.clone(),M=this.controls.target.clone();let I=600;const D=C.distanceTo(S)+M.distanceTo(p);D>.001&&(I=Math.min(800,Math.max(650,D*45))),this._animateCamera(C,S,M,p,I,()=>{this.shadowMode||(this._progressShadow.visible=!0,this._progressShadow.isFinished||this._progressShadow.recalculate())}),this.controls.minDistance=Math.max(.2,Math.min(w*.25,w-.1)),this.controls.maxDistance=w*4},this.resize=()=>{var p,r;const c=this.renderer.domElement.parentElement;if(!c)return;c.style.display="flex",this.renderer.domElement.style.width="100%",this.renderer.domElement.style.height="100%",this.renderer.domElement.style.flexGrow="1";const u=c.clientWidth,d=c.clientHeight;this.size.set(u,d),this.camera.aspect=u/d,this.camera.updateProjectionMatrix(),this._amrRender.setSize(u,d),this._updateCamera(),this.css2dRenderer.setSize(u,d),this.renderer.getPixelRatio(),(p=this.pathTracer)==null||p.updateCamera(),this.sampleCount=0,this.renderer.setSize(u,d),(r=this._jumpFlood)==null||r.setSize(u,d)},this.ticker=c=>{if(!this._destroyed){if(this.stats.begin(),this.renderer.domElement.dispatchEvent(new CustomEvent("ticker",{detail:c})),this._rafId=requestAnimationFrame(this.ticker),this.renderer.clear(),this.usePathTracing){this.hideAmrUI(),this.sampleCount<this.maxSample?this.sampleCount++:this.pathTracer.pausePathTracing=!0,this.pathTracer.renderSample();const u=this.renderer.autoClear;this.renderer.autoClear=!1,this.scene.overrideMaterial=Dc,this.renderer.clearDepth(),this.renderer.render(this.scene,this.mainCamera),this.scene.overrideMaterial=null,this.renderer.render(this.overlayScene,this.mainCamera),this.renderer.autoClear=u}else{this._clock.getElapsedTime()-this._uiHiddenTime>.15?this.showControls&&this.amr.controllers.forEach(p=>p.show()):this.amr.controllers.forEach(p=>p.hide());const d=this.stats.fps();if(this.usePathTracing||(this._fpsCache.length>this._fpsCacheMax&&this._fpsCache.shift(),this._fpsCache.push(d)),this.amr.slots.forEach(p=>{this._dragging?p.getCanInstall()&&p.render(this):p.render(this)}),Fe.update(),this.controls.update(),this._progressShadow.update(this.mainCamera),this.css2dRenderer.render(this.scene,this.mainCamera),this.updatePosition(),this.scene.overrideMaterial=null,this.renderer.render(this.scene,this.mainCamera),this._jumpFlood&&this._selectedForOutline.length>0){const p=this.scene.background;this.scene.background=null,this._jumpFlood.render(this._selectedForOutline),this.scene.background=p}}this.stats.end()}},this.stats.showPanel(0),this.hideState(),e.fov&&(this.camera.fov=e.fov,this.camera.updateProjectionMatrix()),kr(He,this.renderer),this._ground.visible=!1,this.controls=new un.OrbitControls(this.camera,this.renderer.domElement),this.controls.enablePan=!0,this.controls.rotateSpeed=this.props.isMobile?.6:.5,this.controls.dampingFactor=vr,this.controls.enableDamping=!0,this.controls.maxDistance=10,this.controls.minDistance=1,this.controls.zoomSpeed=this.props.isMobile?.3:Vr()?.2:1,this._cameraPositionUI=new yc(this.controls),this.renderer.setPixelRatio(window.devicePixelRatio||1),this.renderer.autoClear=!0,this.renderer.toneMapping=f.ACESFilmicToneMapping,this.renderer.toneMappingExposure=1.4,this.renderer.outputColorSpace=f.SRGBColorSpace,this.renderer.localClippingEnabled=!0,this.renderer.shadowMap.enabled=!0,this.css2dRenderer.domElement.style.pointerEvents="none",this.css2dRenderer.domElement.style.position="absolute",this.css2dRenderer.domElement.style.top="0px",this.camera.position.set(10,-10,5),this.camera.lookAt(new f.Vector3);const{tiles:t}=qa();this.pathTracer=new na(this.renderer),this.pathTracer.multipleImportanceSampling=!0,this.pathTracer.filterGlossyFactor=.6;let i=window.devicePixelRatio;i<2&&(i=2),this.pathTracer.renderScale=this.props.isMobile?1:i,this.pathTracer.bounces=this.props.isMobile?8:10,this.pathTracer.transmissiveBounces=this.props.isMobile?1:3,this.pathTracer.tiles.set(t,t),this.pathTracer.minSamples=10,this.pathTracer.dynamicLowRes=!0,this.pathTracer.lowResScale=.5,this.pathTracer.fadeDuration=0;const s=new pc(e.workerUrl),a=typeof navigator<"u"?navigator.hardwareConcurrency:4;s.maxWorkerCount=a,this.pathTracer.setBVHWorker(s),this.orthographicCamera.left=-20,this.orthographicCamera.right=20,this.orthographicCamera.top=-20,this.orthographicCamera.bottom=20,this._lastTarget=this.controls.target.clone();const o=()=>{let c=this._lastTarget.x,u=this._lastTarget.y;this.controls.target.x=c,this.controls.target.y=u};this.controls.addEventListener("change",()=>{var c;this.sampleCount=0,o(),this._uiHiddenTime=this._clock.getElapsedTime(),this.orthographicCamera.position.copy(this.camera.position),this.orthographicCamera.lookAt(this.controls.target),this.usePathTracing&&(this.pathTracer.pausePathTracing=!1,(c=this.pathTracer)==null||c.updateCamera()),this._updateCamera(),!(Math.abs(this.camera.position.x)<.001||Math.abs(this.camera.position.y)<.001)&&(this._axisMoving||(this.mainCamera=this.camera,this.usePathTracing&&this.generateBVH().then()))}),this._mainCamera=this.camera,this._progressShadow=new gc(this.renderer,this.scene,{size:8,lightCount:e.isMobile?6:12,frames:e.isMobile?80:120,lightRadius:8,ambientWeight:.8}),this._progressShadow.lightOrigin.position.set(3,2.5,6),this._progressShadow.visible=!1,this._container.add(this.amr),this.scene.add(this._container),this.ticker(),this._loadEnv(),this._initEvents(),this.scene.add(this._cameraPositionUI),this._ground.rotateX(-Math.PI/2),this.scene.add(this._ground),this._jumpFlood=new Ac(this.renderer,this.scene,this.camera,{thickness:4,color:"#fff"}),(typeof e.useAxisBall!="boolean"||e.useAxisBall)&&(this._controlsGizmo=new mc(this.controls,{size:160,padding:12,offset:e.axisBallOffset||new f.Vector2(10,10),fontSize:17,bubbleSizePrimary:18,bubbleSizeSecondary:14}),this._controlsGizmo.addListener("axis-select-start",()=>{this._axisMoving=!0,this.mainCamera=this.orthographicCamera,this.usePathTracing&&this.generateBVH().then()}),this._controlsGizmo.addListener("axis-select-end",()=>{this._axisMoving=!1}))}get usePathTracing(){return this._usePathTracing}_clearAmrContent(){const e=this.renderer.getRenderTarget();this.renderer.setRenderTarget(this._amrRender),this.renderer.setClearColor(0,0),this.renderer.clear(!0,!0,!0),this.renderer.setRenderTarget(e)}get shadowMode(){return this._shadowMode}set shadowMode(e){e?(this._progressShadow.visible=!1,this.amr.bodyOpacity=.2):(this._progressShadow.visible=!0,this.amr.bodyOpacity=1,this._progressShadow.isFinished||this._progressShadow.recalculate().then()),this._shadowMode=e}set usePathTracing(e){this._clearAmrContent(),e?(this.renderer.toneMappingExposure=1.8,this.overlayScene.add(this._progressShadow.shadowCatcherMesh),this.amr&&(this.amr.bodyOpacity=1),this.hideAmrUI(),this.pathTracer.renderToCanvas=!0,this.scene.background=null,this._ptEnvMap?(this.scene.environment=this._ptEnvMap,this.pathTracer.updateEnvironment()):new Ss.HDRLoader().load(Mc,t=>{t.mapping=f.EquirectangularReflectionMapping,this._ptEnvMap=t,this.usePathTracing&&(this.scene.environment=t,this.pathTracer.updateEnvironment())})):(this.renderer.toneMappingExposure=1.4,this.scene.add(this._progressShadow.shadowCatcherMesh),this.pathTracer.renderToCanvas=!1,this.amr.logos.forEach(t=>{var i;(i=t.parent)==null||i.add(t.target)}),this.showAmrUI(),this.amr&&this.amr.opacityCache!==void 0?(this.amr.bodyOpacity=this.amr.opacityCache,this.amr.opacityCache=void 0):this.amr&&(this.amr.bodyOpacity=1),this.pathTracer.reset(),this._ground.visible=!1,this._envMap&&(this.scene.background=this._envMap,this.scene.environment=this._envMap)),this._usePathTracing=e,this.controls.dampingFactor=e?1:vr,this.sampleCount=0}get fpsAverage(){return zr(this._fpsCache)}get mainCamera(){return this._mainCamera}set mainCamera(e){this._mainCamera=e,e instanceof f.OrthographicCamera?this.scene.background=null:this.scene.background=this.scene.environment}showState(){this.stats.dom.style.display="block"}hideState(){this.stats.dom.style.display="none"}hideAmrUI(e=!0,t=!0){this.shadowMode||this.amr.slots.forEach(i=>i.hide()),this.amr.sizeBox.hide(e),this.amr.controllers.forEach(i=>i.hide()),t&&this.amr.goods.forEach(i=>i.hide())}showAmrUI(e=!0){this.showSlots&&this.amr.slots.forEach(t=>t.show()),this.showSize&&this.amr.sizeBox.show(e),this.showControls&&this.amr.controllers.forEach(t=>t.show()),this.amr.goods.forEach(t=>t.show())}get showSlots(){return this._showSlots}set showSlots(e){this._showSlots=e,this.amr.slots.forEach(t=>e?t.show():t.hide())}get showSize(){return this._showSize}set showSize(e){this._showSize=e,e?this.amr.sizeBox.show(!0):this.amr.sizeBox.hide(!0)}get showControls(){return this._showControls}set showControls(e){this._showControls=e,this.amr.controllers.forEach(t=>e?t.show():t.hide())}_updateCamera(){const e=this.mainCamera.position.distanceTo(this.controls.target),t=2*Math.tan(this.camera.fov*.5*Math.PI/180)*e,i=this.size.x/this.size.y;this.orthographicCamera.left=-t*i/2,this.orthographicCamera.right=t*i/2,this.orthographicCamera.top=t/2,this.orthographicCamera.bottom=-t/2,this.orthographicCamera.updateProjectionMatrix()}_loadEnv(){new Ss.HDRLoader().load(Sc,t=>{t.mapping=f.EquirectangularReflectionMapping,this._envMap=t,this._usePathTracing||(this.scene.background=t,this.scene.backgroundBlurriness=1,this.scene.backgroundIntensity=1,this.scene.backgroundRotation=new f.Euler(Math.PI/2,0,Math.PI*.98*.8),this.scene.environment=t,this.overlayScene.environment=t,this.scene.environmentRotation=this.scene.backgroundRotation,this.overlayScene.environmentRotation=this.scene.environmentRotation,this.scene.environmentIntensity=1.4,this.overlayScene.environmentIntensity=this.scene.environmentIntensity),this.pathTracer.updateEnvironment()},()=>{},()=>{})}_initEvents(){window.addEventListener("drag",this._drag),window.addEventListener("dragend",this._dragend),document.addEventListener("wheel",this._detectTrackpad),window.addEventListener("pointermove",this._pointermove),this.renderer.domElement.addEventListener("pointerdown",this._pointerdown);const e=this.scene.children.find(t=>t.type==="Mesh");e&&this.select(e)}switchCamera(){this.mainCamera=this.mainCamera===this.camera?this.orthographicCamera:this.camera}toCameraTop(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(0,e+this.controls.target.y,0))}toCameraRight(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(0,this.controls.target.y,e))}toCameraFace(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(e,this.controls.target.y,0))}async generateBVH(){this.pathTracer.pausePathTracing=!1,this.amr.slots.forEach(e=>e.hide()),this.amr&&(this.amr.opacityCache=this.amr.bodyOpacity,this.amr.bodyOpacity=1,this.overlayScene.clear(),this.amr.logos.forEach(e=>{const t=new f.Group;e.target.updateMatrixWorld(!0),t.applyMatrix4(e.target.matrixWorld),t.add(e.target),this.overlayScene.add(t)})),this.usePathTracing=!0,this.pathTracer.setScene(this.scene,this.mainCamera)}async download(e=!1){if(e&&!this.usePathTracing){const t=this._amrRender.width,i=this._amrRender.height,s=new Uint8Array(t*i*4);this.renderer.setRenderTarget(this._amrRender),this.renderer.readRenderTargetPixels(this._amrRender,0,0,t,i,s),this.renderer.setRenderTarget(null);const a=document.createElement("canvas");a.width=t,a.height=i;const o=a.getContext("2d"),c=new ImageData(t,i);for(let u=0;u<i;u++)for(let d=0;d<t;d++){const p=((i-u-1)*t+d)*4,r=(u*t+d)*4;c.data[r]=s[p],c.data[r+1]=s[p+1],c.data[r+2]=s[p+2],c.data[r+3]=s[p+3]}return o.putImageData(c,0,0),a.toDataURL("image/png")}else return new Promise((t,i)=>{this._uiHiddenTime=this._clock.getElapsedTime(),this.hideAmrUI();const s=this.scene.background;this.scene.background=null,setTimeout(()=>{const a=this.renderer.domElement.toDataURL("image/png");return this.scene.background=s,t(a)},this.fpsAverage)})}async captureTriViews(e){var o;const t=(e==null?void 0:e.subject)??this._container;(o=this._progressShadow)==null||o.visible;const i=this.scene.background,s=this.showSize;return new $r({renderer:this.renderer,scene:this.scene,overlayScene:this.overlayScene,subject:t,onBeforeCapture:()=>{this.scene.background=null,this.hideAmrUI(),this.showSize=!1,this.usePathTracing&&(this.usePathTracing=!1),this._progressShadow.visible=!1},onAfterCapture:()=>{this.scene.background=i,this.showAmrUI(),this.showSize=s,this._progressShadow.visible=!0}}).capture(e)}clearAMR(){Ae(this.overlayScene),this.amr.clean(),this.usePathTracing=!1}async exportAMR(){const e=this._container.clone(!0);return e.traverse(t=>{t.dispose&&(t.dispose(),t.removeFromParent())}),await Wr.parseAsync(e,{onlyVisible:!0,binary:!0})}async addAMR(e,t=""){this.amr.init(this),await this.amr.load(e,t),this.amr.addEventListener("fork-height-change",this.debounceForkHeightChange),this.amr.addEventListener("shape-key-changed",(i,s)=>{this.pathTracer.reset(),this.sampleCount=0,this.pathTracer.setScene(this.scene,this.camera),this.overlayScene.traverse(a=>{if(!Object.keys(a.morphTargetDictionary||{}).includes(i))return;let o=s;a.userData[`origin_${i}`]&&(o-=a.userData[`origin_${i}`]);const c=a.morphTargetDictionary[i];a.morphTargetInfluences&&(a.morphTargetInfluences[c]=o),a instanceof f.Mesh&&a.geometry.translate(0,0,1e-5)}),["width","length","liftLength","liftWidth","liftOuterWidth"].includes(i)&&(this._progressShadow.clear(),this._progressShadow.recalculate())})}_animateCamera(e,t,i,s,a,o){var u;const c={t:0};(u=this._fitAnimation)==null||u.stop(),this._fitAnimation=new hi(c).to({t:1},a).easing(Fe.Easing.Quadratic.InOut).onStart(()=>{this.controls.enabled=!1}).onUpdate(()=>{const d=c.t;this.controls.target.lerpVectors(i,s,d);const p=s.clone(),r=e.clone().sub(p),l=t.clone().sub(p),h=r.length(),g=l.length(),_=h+(g-h)*d;let m;if(h>.001&&g>.001){const v=r.clone().normalize(),y=l.clone().normalize(),x=v.angleTo(y);if(x>.001){const w=new f.Vector3().crossVectors(v,y);if(w.lengthSq()>.001){w.normalize();const b=new f.Quaternion().setFromAxisAngle(w,x*d),A=v.clone().applyQuaternion(b);m=p.clone().add(A.multiplyScalar(_))}else m=p.clone().add(v.multiplyScalar(_))}else m=p.clone().add(v.multiplyScalar(_))}else m=e.clone().lerp(t,d);this.camera.position.copy(m),this.camera.lookAt(this.controls.target)}).onComplete(()=>{this.controls.enabled=!0,o==null||o()}).start()}select(e){typeof e=="string"||(Array.isArray(e)?this._selectedForOutline=[...e]:this._selectedForOutline=[e])}appendTo(e){e.append(this.renderer.domElement),e.append(this.stats.dom),e.append(this.css2dRenderer.domElement),this.props.isMobile&&(e.classList.add("is-mobile"),e.style.cssText=`
|
|
3928
3928
|
-webkit-user-select: none;
|
|
3929
3929
|
user-select: none;
|
|
3930
3930
|
touch-action: none;
|
package/dist/shop-components.mjs
CHANGED
|
@@ -13364,9 +13364,9 @@ class Lh {
|
|
|
13364
13364
|
}
|
|
13365
13365
|
}, this.stats.showPanel(0), this.hideState(), e.fov && (this.camera.fov = e.fov, this.camera.updateProjectionMatrix()), Rn(Ft, this.renderer), this._ground.visible = !1, this.controls = new yo(this.camera, this.renderer.domElement), this.controls.enablePan = !0, this.controls.rotateSpeed = this.props.isMobile ? 0.6 : 0.5, this.controls.dampingFactor = an, this.controls.enableDamping = !0, this.controls.maxDistance = 10, this.controls.minDistance = 1, this.controls.zoomSpeed = this.props.isMobile ? 0.3 : ec() ? 0.2 : 1, this._cameraPositionUI = new Eu(this.controls), this.renderer.setPixelRatio(window.devicePixelRatio || 1), this.renderer.autoClear = !0, this.renderer.toneMapping = vo, this.renderer.toneMappingExposure = 1.4, this.renderer.outputColorSpace = Bi, this.renderer.localClippingEnabled = !0, this.renderer.shadowMap.enabled = !0, this.css2dRenderer.domElement.style.pointerEvents = "none", this.css2dRenderer.domElement.style.position = "absolute", this.css2dRenderer.domElement.style.top = "0px", this.camera.position.set(10, -10, 5), this.camera.lookAt(new b());
|
|
13366
13366
|
const { tiles: t } = rc();
|
|
13367
|
-
this.pathTracer = new _l(this.renderer), this.pathTracer.filterGlossyFactor = 0.6;
|
|
13367
|
+
this.pathTracer = new _l(this.renderer), this.pathTracer.multipleImportanceSampling = !0, this.pathTracer.filterGlossyFactor = 0.6;
|
|
13368
13368
|
let i = window.devicePixelRatio;
|
|
13369
|
-
i < 2 && (i = 2), this.pathTracer.renderScale = this.props.isMobile ? 1 : i, this.pathTracer.bounces = this.props.isMobile ? 8 : 10, this.pathTracer.transmissiveBounces = this.props.isMobile ? 1 : 3, this.pathTracer.tiles.set(t, t), this.pathTracer.fadeDuration = 0;
|
|
13369
|
+
i < 2 && (i = 2), this.pathTracer.renderScale = this.props.isMobile ? 1 : i, this.pathTracer.bounces = this.props.isMobile ? 8 : 10, this.pathTracer.transmissiveBounces = this.props.isMobile ? 1 : 3, this.pathTracer.tiles.set(t, t), this.pathTracer.minSamples = 10, this.pathTracer.dynamicLowRes = !0, this.pathTracer.lowResScale = 0.5, this.pathTracer.fadeDuration = 0;
|
|
13370
13370
|
const s = new Cu(e.workerUrl), a = typeof navigator < "u" ? navigator.hardwareConcurrency : 4;
|
|
13371
13371
|
s.maxWorkerCount = a, this.pathTracer.setBVHWorker(s), this.orthographicCamera.left = -20, this.orthographicCamera.right = 20, this.orthographicCamera.top = -20, this.orthographicCamera.bottom = 20, this._lastTarget = this.controls.target.clone();
|
|
13372
13372
|
const n = () => {
|