t2-mapper/docs/assets/Html-B0dPxgI2.js
2026-03-17 17:04:34 -07:00

38 lines
No EOL
7.5 KiB
JavaScript

import{r as e}from"./chunk-DECur_0Z.js";import{r as t}from"./jsx-runtime-BpGWiA-R.js";import{i as n,o as r}from"./react-three-fiber.esm-BccVk4IG.js";import{Ht as i,Vt as a,mt as o,pt as s}from"./three.module-BRbuBcDx.js";import{t as c}from"./extends-Cu_B6L18.js";import{V as l}from"./index-KOH_0HDb.js";var u=e(t()),d=e(l()),f=new i,p=new i,m=new i,h=new a;function ee(e,t,n){let r=f.setFromMatrixPosition(e.matrixWorld);r.project(t);let i=n.width/2,a=n.height/2;return[r.x*i+i,-(r.y*a)+a]}function te(e,t){let n=f.setFromMatrixPosition(e.matrixWorld),r=p.setFromMatrixPosition(t.matrixWorld),i=n.sub(r),a=t.getWorldDirection(m);return i.angleTo(a)>Math.PI/2}function g(e,t,n,r){let i=f.setFromMatrixPosition(e.matrixWorld),a=i.clone();a.project(t),h.set(a.x,a.y),n.setFromCamera(h,t);let o=n.intersectObjects(r,!0);if(o.length){let e=o[0].distance;return i.distanceTo(n.ray.origin)<e}return!0}function _(e,t){if(t instanceof s)return t.zoom;if(t instanceof o){let n=f.setFromMatrixPosition(e.matrixWorld),r=p.setFromMatrixPosition(t.matrixWorld),i=t.fov*Math.PI/180,a=n.distanceTo(r);return 1/(2*Math.tan(i/2)*a)}else return 1}function v(e,t,n){if(t instanceof o||t instanceof s){let r=f.setFromMatrixPosition(e.matrixWorld),i=p.setFromMatrixPosition(t.matrixWorld),a=r.distanceTo(i),o=(n[1]-n[0])/(t.far-t.near),s=n[1]-o*t.far;return Math.round(o*a+s)}}var y=e=>Math.abs(e)<1e-10?0:e;function b(e,t,n=``){let r=`matrix3d(`;for(let n=0;n!==16;n++)r+=y(t[n]*e.elements[n])+(n===15?`)`:`,`);return n+r}var x=(e=>t=>b(t,e))([1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1]),S=(e=>(t,n)=>b(t,e(n),`translate(-50%,-50%)`))(e=>[1/e,1/e,1/e,1,-1/e,-1/e,-1/e,-1,1/e,1/e,1/e,1,1,1,1,1]);function ne(e){return e&&typeof e==`object`&&`current`in e}var C=u.forwardRef(({children:e,eps:t=.001,style:a,className:o,prepend:s,center:l,fullscreen:f,portal:p,distanceFactor:m,sprite:h=!1,transform:b=!1,occlude:C,onOcclude:w,castShadow:re,receiveShadow:ie,material:ae,geometry:T,zIndexRange:E=[16777271,0],calculatePosition:D=ee,as:O=`div`,wrapperClass:k,pointerEvents:A=`auto`,...j},M)=>{let{gl:N,camera:P,scene:F,size:I,raycaster:L,events:R,viewport:z}=r(),[B]=u.useState(()=>document.createElement(O)),V=u.useRef(null),H=u.useRef(null),U=u.useRef(0),W=u.useRef([0,0]),G=u.useRef(null),K=u.useRef(null),q=p?.current||R.connected||N.domElement.parentNode,J=u.useRef(null),Y=u.useRef(!1),X=u.useMemo(()=>C&&C!==`blending`||Array.isArray(C)&&C.length&&ne(C[0]),[C]);u.useLayoutEffect(()=>{let e=N.domElement;C&&C===`blending`?(e.style.zIndex=`${Math.floor(E[0]/2)}`,e.style.position=`absolute`,e.style.pointerEvents=`none`):(e.style.zIndex=null,e.style.position=null,e.style.pointerEvents=null)},[C]),u.useLayoutEffect(()=>{if(H.current){let e=V.current=d.createRoot(B);if(F.updateMatrixWorld(),b)B.style.cssText=`position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;else{let e=D(H.current,P,I);B.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return q&&(s?q.prepend(B):q.appendChild(B)),()=>{q&&q.removeChild(B),e.unmount()}}},[q,b]),u.useLayoutEffect(()=>{k&&(B.className=k)},[k]);let Z=u.useMemo(()=>b?{position:`absolute`,top:0,left:0,width:I.width,height:I.height,transformStyle:`preserve-3d`,pointerEvents:`none`}:{position:`absolute`,transform:l?`translate3d(-50%,-50%,0)`:`none`,...f&&{top:-I.height/2,left:-I.width/2,width:I.width,height:I.height},...a},[a,l,f,I,b]),oe=u.useMemo(()=>({position:`absolute`,pointerEvents:A}),[A]);u.useLayoutEffect(()=>{if(Y.current=!1,b){var t;(t=V.current)==null||t.render(u.createElement(`div`,{ref:G,style:Z},u.createElement(`div`,{ref:K,style:oe},u.createElement(`div`,{ref:M,className:o,style:a,children:e}))))}else{var n;(n=V.current)==null||n.render(u.createElement(`div`,{ref:M,style:Z,className:o,children:e}))}});let Q=u.useRef(!0);n(e=>{if(H.current){P.updateMatrixWorld(),H.current.updateWorldMatrix(!0,!1);let e=b?W.current:D(H.current,P,I);if(b||Math.abs(U.current-P.zoom)>t||Math.abs(W.current[0]-e[0])>t||Math.abs(W.current[1]-e[1])>t){let t=te(H.current,P),n=!1;X&&(Array.isArray(C)?n=C.map(e=>e.current):C!==`blending`&&(n=[F]));let r=Q.current;n?Q.current=g(H.current,P,L,n)&&!t:Q.current=!t,r!==Q.current&&(w?w(!Q.current):B.style.display=Q.current?`block`:`none`);let i=Math.floor(E[0]/2),a=C?X?[E[0],i]:[i-1,0]:E;if(B.style.zIndex=`${v(H.current,P,a)}`,b){let[e,t]=[I.width/2,I.height/2],n=P.projectionMatrix.elements[5]*t,{isOrthographicCamera:r,top:i,left:a,bottom:o,right:s}=P,c=x(P.matrixWorldInverse),l=r?`scale(${n})translate(${y(-(s+a)/2)}px,${y((i+o)/2)}px)`:`translateZ(${n}px)`,u=H.current.matrixWorld;h&&(u=P.matrixWorldInverse.clone().transpose().copyPosition(u).scale(H.current.scale),u.elements[3]=u.elements[7]=u.elements[11]=0,u.elements[15]=1),B.style.width=I.width+`px`,B.style.height=I.height+`px`,B.style.perspective=r?``:`${n}px`,G.current&&K.current&&(G.current.style.transform=`${l}${c}translate(${e}px,${t}px)`,K.current.style.transform=S(u,1/((m||10)/400)))}else{let t=m===void 0?1:_(H.current,P)*m;B.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}W.current=e,U.current=P.zoom}}if(!X&&J.current&&!Y.current)if(b){if(G.current){let e=G.current.children[0];if(e!=null&&e.clientWidth&&e!=null&&e.clientHeight){let{isOrthographicCamera:t}=P;if(t||T)j.scale&&(Array.isArray(j.scale)?j.scale instanceof i?J.current.scale.copy(j.scale.clone().divideScalar(1)):J.current.scale.set(1/j.scale[0],1/j.scale[1],1/j.scale[2]):J.current.scale.setScalar(1/j.scale));else{let t=(m||10)/400,n=e.clientWidth*t,r=e.clientHeight*t;J.current.scale.set(n,r,1)}Y.current=!0}}}else{let t=B.children[0];if(t!=null&&t.clientWidth&&t!=null&&t.clientHeight){let e=1/z.factor,n=t.clientWidth*e,r=t.clientHeight*e;J.current.scale.set(n,r,1),Y.current=!0}J.current.lookAt(e.camera.position)}});let $=u.useMemo(()=>({vertexShader:b?void 0:`
/*
This shader is from the THREE's SpriteMaterial.
We need to turn the backing plane into a Sprite
(make it always face the camera) if "transfrom"
is false.
*/
#include <common>
void main() {
vec2 center = vec2(0., 1.);
float rotation = 0.0;
// This is somewhat arbitrary, but it seems to work well
// Need to figure out how to derive this dynamically if it even matters
float size = 0.03;
vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );
vec2 scale;
scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );
bool isPerspective = isPerspectiveMatrix( projectionMatrix );
if ( isPerspective ) scale *= - mvPosition.z;
vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;
vec2 rotatedPosition;
rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;
rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;
mvPosition.xy += rotatedPosition;
gl_Position = projectionMatrix * mvPosition;
}
`,fragmentShader:`
void main() {
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
}
`}),[b]);return u.createElement(`group`,c({},j,{ref:H}),C&&!X&&u.createElement(`mesh`,{castShadow:re,receiveShadow:ie,ref:J},T||u.createElement(`planeGeometry`,null),ae||u.createElement(`shaderMaterial`,{side:2,vertexShader:$.vertexShader,fragmentShader:$.fragmentShader})))});export{C as t};